《EDA实验报告5_乐曲硬件演奏电路设计.docx》由会员分享,可在线阅读,更多相关《EDA实验报告5_乐曲硬件演奏电路设计.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、EDA 技术与应用试验报告姓名学号专业年级电子信息工程试验题 乐曲硬件演奏电路设计目试验目 1. 学习利用数控分频器设计硬件乐曲演奏电路的2. 把握模块化和层次化的设计方法以及音符编码的设计思想试验原理1. 确定频率的矩形波通过扬声器可以发出相应频率的声音,乐曲是由一系列的音符组成的。所以,假设我们通过把握每个音符的发音频率值及其持续的时间,就可以以纯硬件的手段,利用这些数值来实现所期望演奏的乐曲。2. 该硬件演奏电路由三个模块构成音符数据 ROM 的地址发生器模块 NoteTabs.vhdl内置 8 位二进制计数器,作为ROM 的地址发生器,计数频率4Hz,即每一计数值的停留时间为 0.25
2、s,恰为全音符设为 1s 时,四四拍的 4 音符持续时间。随着 NoteTabs 中的计数器按 4Hz 的时钟速率作加法计数即地址值递增时,ROM 中的音符数据将通过 ToneIndex3.0输向 ToneTaba 模块, 乐曲即开头演奏起来。乐曲简谱码对应的分频预置数查表电路模块 ToneTaba.vhdl ToneTaba 为 Speakera 供给打算所发音符的分频预置数,此数在Speakera 输入口停留的时间即为此音符的节拍值。输入 Index3.0可确定乐曲全部音符所对应的分频预置数13 个每一音符的停留时间由NoteTabs 模块的 clk 打算4Hz。打算每一个音符音调的数控分
3、频器模块 Speakera.vhdl输入端 clk 输入一较高频率12MHz的信号,经 Speakera 分频,再经 2 分频以展宽脉冲后,由 SpkOut 输出。11 位预置数 Tone10.0打算由 clk 输入信号的分频比,SpkOut 输出的频率打算每一音符的音调。1. 定制存放 LPM-ROM 模块 Music,在连续地址上存放乐曲的音符数据,2. 用 vhdl 文本输入法和元件例化语句完成 NoteTabs.vhdl 的设计,该模块包含音符数据 ROM 模块 Music.vhdl试验内 3. 完成 ToneTaba.vhdl 的设计,此模块给数控分频模块供给每个音符所对容应的分频预
4、置数,即计数初值4. 完成 Speakera.vhdl 的设计,该模块是一个初值可变的加法计数器。该计数器的模为 2047,当计数器记满时,计数器产生一个溢出信号 FULL, 此溢出信号就是用作发音的频率信号5. 用 vhdl 文本输入法和元件例化语句完成硬件演奏电路顶层文件play_song.vhdl 的设计,编译、仿真,选用杭州康芯电子生产的 GW48 系列 EDA 试验箱和 Altera 公司生产的 FPGA 芯片 Cyclone 的 EP1C6Q240C8,引脚锁定,下载到 FPGA 上进展硬件测试1. 定制 ROM 模块,生成 Music.vhdl 地址文件,以存储乐曲演奏数据试验步
5、骤2. 输入 NoteTabs.vhdl,编译、仿真,给出时序波形3. 输入 ToneTaba.vhdl,编译、仿真,给出时序波形4. 输入 Speakera.vhdl,编译、仿真,给出时序波形5. 建立硬件演奏电路顶层文件 play_song.vhdl,将以上 4 个 vhdl 文件拷贝进顶层文件所在名目,用元件例化语句和层次化设计方法,完成乐曲硬件演奏电路的设计,编译、仿真,给出时序波形,引脚锁定并下载进FPGA 进展硬件测试vhdl 文本输入法时序仿真波形1. 由音符数据地址发生模块的仿真波形 NoteTabs.sim 可知,随 NoteTabs 中的计数器按输入时钟 clk 作加法计数
6、,即随 ROM 地址值的递增,ROM 中的音符数据将从 ToneIndex3.0中输出。试验结 2. 由分频预置数查表电路模块的仿真波形 ToneTaba.sim 可知,由果及分 Index3.0译码输出分频预置数,并通过 Tone10.0输出给析 Speakera 模块。与演奏发音相对应的简谱码由CODE 通过数码管输出显示,HIGH1 显示高八度音。3. 由数控分频器模块的仿真波形 Speakera.sim 可知,由 Tone10.0输入的分频预置数将 clk 输入的一较高频率12MHz的时钟信号进展分频,得到不同频率的输出 FullSpkS,由于 FullSpkS 直接由数控分频器输出,
7、是脉冲极窄的脉冲式信号,经内部增加一个 D 触发器后,可以得到展宽脉冲后的 SpkS。4. 由乐曲硬件演奏顶层文件的仿真波形 play_song.sim 可知,SpkOut 是经SpkS 的最终的输出,打算所发出的每一音符的音调。音符不同,SpkOut的脉宽也不同,通过扬声器发出的声音也不同,因而可以演奏音乐,得到预期的效果。5. 乐曲演奏时,简谱码可以在数码管上同步显示出来,同时 HIGH1 对应的LED 灯随凹凸音的不同,亮灭状况也不同,试验结果符合预期。试验过程中所遇到的问题及相应的解决方法1. 刚开头试验用的是 KHF-4 型的试验箱,需要将晶振频率为 22.1184Hz 的时钟信号进
8、展分频,以得到 NoteTabs 模块和 Speakera 模块所需的4Hz 和 12MHz 的输入时钟,并将简谱码通过译码输出到数码管上显示。然而在试验箱测试后却得不到预期的结果,HIGH1 所对应的 LED 灯恒亮, 蜂鸣器发出持续的高音。检查Speakera 的时序仿真波形,输出SpkOut 是持续的低电平,而不是脉宽不一的方波。2. 屡次尝试没有结果后,打算换杭州康芯电子生产的 GW48 系列EDA 试验箱,该试验箱有 8 个译码输出显示的数码管,和可选的多个时钟输入端,这样可以省去译码和分频电路。引脚锁定,硬件下载测试后, 蜂鸣器可以正常放出预置的乐曲。3. 之后对 Speakera
9、 模块的仿真文件反复揣摩,屡次转变输入的频率,并设定不同的分频预置数,最终可以看到 SpkOut 输出脉宽不一的方波信号,对于顶层文件用一样的方法,亦可以得到预期的输出。4. 个人认为,之前在 KHF-4 型试验箱测试的时候,应当是分频模块的问题。经 22.1184MHz 分频输出的频率不满足该硬件演奏电路所需要的时钟输入。NoteTabs 模块的输入时钟 clk_8Hz(实为 4Hz)打算了每一音符在Speakera 输入端停留的时间,而 Speakera 的输入时钟 clk_12MHz 打算了每一音符的音调。假设时钟偏差过大,将会导致时许错乱,如音符在 Speakera 输入端停留的时间过
10、长或过短,数控分频输出的脉冲过宽或者过窄,这都直接影响音乐的正常播放。5. 在梁祝乐曲演奏成功后,换了一首歌 you_and_me,但问题也接踵而至。首先在定制 LPM_ROM 模块时,得到的.bsf 元件输入端口跟定制梁祝乐曲 ROM 时的端口不全都了,在 NoteTabs 模块中用了元件例化语句,因此编译不成功。重命名端口后,再次编译,问题解决。其次,在 mif 文件 you_and_me.mif 中,depth = 280,而梁祝的为 256,即每一字节的宽度为8bit,结果编译报错。于是我把you_and_me 的 mif 文件的地址音符数据去掉后面一局部,使得 depth = 256。虽然一首歌不再完整,但在定制 LPM_ROM 的时候不必增加额外的地址开销,同时省去了大幅度修改 vhdl 代码的工作。1. 顶层文件 play_song.vhdl附录原理图或VHDL代码2. 数控分频器 Speakera.vhdl3. 音符地址发生器 NoteTabs.vhdl4. 分频预置数模块 ToneTaba.vhdl5. 乐曲演奏数据 you_and_me.mif