1、 一、设计题目:乐曲硬件演奏电路的一、设计题目:乐曲硬件演奏电路的VHDLVHDL设计设计 二、设计目标:二、设计目标: 了解一般乐曲演奏电路设计设计方法,学习 VHDL 语言,熟悉 EDA 设计软件 QuartusII 和 MAX+plus,加强独立完成电子设计的能力。 (1)能够播放“梁祝”乐曲。 (2)能够通过 LED 显示音阶。 (3)(选作)具有“播放/停止”功能,并在此基础上实现“按键演奏”的电子 琴功能。 主芯片型号为 FLEX10K10LC84-4 三、实验电路的工作原理:三、实验电路的工作原理:( (演奏电路逻辑图演奏电路逻辑图) ) 组成乐曲的每个音符的发音频率值及其持续的
2、时间是乐曲能够连续演奏 所需的两个基本要素, 设计演奏电路的关键就是获得这两个要素所对应的数值以 及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。 演奏电路逻辑图有三部分:音乐节拍和音调发生器、简谱码对应的分频预置数查 表电路、数控分频与演奏发生器。 演奏电路逻辑图: 四、设计内容:四、设计内容: 1.完成程序的编辑工作。 2.将音乐数据制作成 LMP_ROM 文件. 3.将程序加载到 MAX+plus中进行编译、仿真,并保存仿真结果。 4.到实验室进行下载验证。引脚进行锁定,然后下载到实验芯片中观察实验结果。 五、仿真结果:五、仿真结果: 1.1.音乐节拍和音调发生音乐节拍和音调发
3、生器(器(NoteTabs.VHDNoteTabs.VHD) notetabs 模块中设置了一个 8 位二进制计数器(计数最大值 138),作为音 符数据 ROM 的地址发生器。这个计数器的计数频率选为 4Hz,即每一个计数值的 停留时间为 0.25 秒,恰为当全音符设为 1 秒时,四四拍的 4 分音符持续时间。 随着 notetabs 模块中的计数器按 4Hz 的时钟速率作为加法计数时,即随地址值 递增时,音符数据 ROM 中的音符数据将从 ROM 中通过 ToneIndex30端口输向 ToneTaba 模块,“梁祝”乐曲就开始连续自然的演奏起来了。 Notetabs 模块仿真图: 2.2
4、.简谱码对应的分频预置数查表电路(简谱码对应的分频预置数查表电路(ToneTaba.VHDToneTaba.VHD) 音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,tonetaba 模块的功能首先是为 speakera 提供决定所发音符的预置数,而此数在 speakera 输入口停留的时间即为此音符的节拍值。Tonetaba 模块是乐曲简码对应的分频 预置数查表电路。其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共 13 个,每一音符的停留时间由音乐节拍和音调发生器模块 NoteTabs 的 clk 的输 入频率决定。这 13 个值的输出由对应于 ToneTaba 的 4 位输入
5、值 Index30确 定,而 Index30最多有 16 种可选值。输向 ToneTaba 中 Index30的值 ToneIndex30的输出值与持续时间有模块 notetabs 决定。 Tonetaba 仿真图: 4.4.数控分频与演奏发生器(数控分频与演奏发生器(Speakera.VHDSpeakera.VHD) 音符的频率可由次模块获得,这是一个数控分频器,由其 clk 端输入一个具有较 高频率的信号,通过 speakera 分频后由 spkout 输出,由于直接从数控分频器中 出来的输出信号是脉冲较窄的脉冲信号,为了有助于驱动扬声器,需另加一个 D 触发器以均衡其占空比,但这时的频率
6、是原来的 1/2。Speakera 对 clk 输入信号 的分频的预置数 Tone100与 spkout 的输出频率就有了对应关系。 Sperkera 模块仿真图: 5.5.梁祝梁祝music.vhd(music.vhd(音乐数据音乐数据):): 将数据保存为.mif 格式然后制作成 LMP_ROM 文件。 六、实验结果:(程序下载验证是否通过)六、实验结果:(程序下载验证是否通过) 试验成功! 将设计出的演奏电路的程序经过编译(Compiler)后,选择 FLEX10K 系列中 EPF10K10LC84-4 作为目标器件(Assign/Device),并进行管脚锁定(Floorplan Editor)。器件编程(Programmer),将编译生成的*.sof 文件下载到目标芯片。 观察到数码管 5 显示出演奏时的音乐简谱,发光二极管 D5 指示音调高低,同时 实验箱自带蜂鸣器(Speaker)奏出“梁祝”那凄美动人的旋律,实验成功。 七、总结:七、总结: 本次乐曲硬件演奏电路的 VHDL 设计主要采用数控分频原理来实现,在本次 EDA 课程