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