1、 EDA 课程设计课程设计 题目:题目:乐曲硬件演奏电路的 VHDL 设计 一、一、 设计题目:设计题目: 乐曲硬件演奏电路的 VHDL 设计 二、二、 设计目标:设计目标: 1)能够播放“梁祝”乐曲。 2)能够通过 LED 显示音阶。 3)具有“播放/停止”功能,并在此基础上实现“按键演奏” 的电子琴功能。 三、三、 设计原理:设计原理: 1. 音乐基础知识 一段简单乐谱由音调和节拍组成,音调表示一个音符唱多高的频率, 节拍表示一个音符唱多长的时间。音符的节拍我们可以举例来说明。 在一张乐谱中, 我们经常会看到这样的表达式, 如 1=C 4 4 、 1=G4 3 等等。以4 3 为例加以说明
2、,它表示乐谱中以四分音符为节拍,每一小 结有三拍。比如: 图 1 其中 1 、2 为一拍,3、4、5 为一拍,6 为一拍共三拍。1 、 2 的时长为四分音符的一半,即为八分音符长,3、4 的时长为八 分音符的一半, 即为十六分音符长, 5 的时长为四分音符的一半, 即为八分音符长,6 的时长为四分音符长。那么一拍到底该唱多 长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为 400500ms 。我们以一拍的时长为 400ms 为例,则当以四分音 符为节拍时,四分音符的时长就为 400ms,八分音符的时长就为 200ms,十六分音符的时长就为 100ms。 2. 原理图框图: 图 2.框图
3、3. 原理图说明 音乐播放原理说明 音符的频率由数控分频器模块 Speakera 产生。ToneTaba 模 块从 NoteTabs 模块中输入的音符数据, 将对应的分频预置数据 传送给 Speakera 模块, 并将音符数据送到 LED 模块显示音阶。 NoteTabs 模块中包含有一个音符数据 ROM,里面存有歌曲 “梁祝”的全部音调,在此模块中设置了一个 8 位二进制计数 器,作为音符数据 ROM 的地址发生器。这个计数器的计数频 率为 4Hz, 即每一个数值的停留时间为 0.25 秒。 例如: “梁祝” 乐曲的第一个音符为 “3” , 此音在逻辑中停留了 4 个时钟节拍, 即 1 秒钟
4、时间,所对应的“3”音符分频预置数为 1036,在 Speakera 的输入端停留了 1 秒。随着 NoTabs 中计数器按 4Hz 的时钟速率作加法计数时,随着地址的递增,音符数据 ROM 中的音符数据将从ROM中通过输出端口输入到ToneTaba模块, “梁祝”歌曲就开始连续自然地演奏起来。 键盘演奏原理说明 在模块 ToneTaba 中设置有八个键盘输入端口,分别对应基音 “1” 、 “2” 、 “3” 、 “4” 、 “5” 、 “6” 、 “7”和高音“1”八种音调。 当其中某个按键按下时,ToneTaba 模块就将对应音符的分频预置 数送到数控分频模块 Speakera 模块产生相
5、应音调,同送将音符送 到 LED 显示模块显示音节。 四、四、 设计内容设计内容 1) 取音调节拍模块 NoteTabs 图 5:NoteTabs 实体图 模块实体由时钟输入信号 clk、 实现暂停与播放功能的使能 输入信号 en 和音符输出端 toneindex 组成。时钟输入端 clk 接 入 4Hz 信号,即 0.25 秒作为“梁祝”乐曲的基本时钟节拍。 NoteTabs 模块设置有个计数器, 作为地址计数器, 用于从模块 内部的 music_rom 中取音符数据。 NoteTabs 模块仿真图如下: 图 4 2) 音频预置数及演奏按键模块 ToneTaba 图 5:ToneTaba 实
6、体图 该模块的实体组成端口由音符数据输入端 index、音乐演奏或 音 乐播 放选 择输 入端 口 yanzhou_en、 八个 按键输 入端 口 key_1key_8、 及音阶数据输出端口 code、 音符分频数据输出端口 tone 组成。 当端口 yanzhou_en 置1时,进行按键音乐演奏功能,即将 对应按键的的音阶的分频数据送至模块 Speakera 产生音调;当端 口为0时,进行音乐播放功能,即将 NoteTabs 模块输入的音 符数据送至模块 Speakera 产生音调。 ToneTaba 模块仿真图如下: 图 6 3) 数控分频模块 Speakera 图 7:Speakera 模块实体图 该模块由时钟输入信号端 clk、分频数据输入端 tone 以及 音调频率输出端spks 组成。 其 clk端输入较高的频率 (12MHz) , 通过 Speakera 分频后由 spks 输出。 模块仿真图如下: 图 8 4) 软件流程图如下: 图 9 五、五、 仿真结果仿真结果 1. 原理图设计: 图 10 2. 仿真结果图 仿真图 1:音乐播放 图 11 仿真图