梁祝乐曲_乐曲硬件演奏电路的VHDL设计_eda课程设计.docx
《梁祝乐曲_乐曲硬件演奏电路的VHDL设计_eda课程设计.docx》由会员分享,可在线阅读,更多相关《梁祝乐曲_乐曲硬件演奏电路的VHDL设计_eda课程设计.docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、设计题目:乐曲硬件奏演电路的VHDL设计二、设计目标:了解一般乐曲演奏电路设计设计方法,学习 VHDL 语言,生疏 EDA 设计软件QuartusII 和 MAX+plus,加强独立完成电子设计的力量。(1) 能够播放“梁祝”乐曲。(2) 能够通过 LED 显示音阶。3选作具有“播放/停顿”功能,并在此根底上实现“按键演奏”的电子琴功能。主芯片型号为 FLEX10K10LC84-4三、试验电路的工作原理(:演奏电路规律图)组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能够连续演奏所需的两个根本要素,设计演奏电路的关键就是获得这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所
2、期望乐曲的演奏效果。演奏电路规律图有三局部:音乐节拍和音调发生器、简谱码对应的分频预置数查表电路、数控分频与演奏发生器。演奏电路规律图:四、设计内容:1. 完成程序的编辑工作。2. 将音乐数据制作成LMP_ROM 文件.3. 将程序加载到MAX+plus中进展编译、仿真,并保存仿真结果。4. 到试验室进展下载验证。引脚进展锁定,然后下载到试验芯片中观看试验结果。五、仿真结果:1. 音乐节拍和音调发生器NoteTabs.VHDnotetabs 模块中设置了一个 8 位二进制计数器计数最大值 138,作为音符数据 ROM 的地址发生器。这个计数器的计数频率选为 4Hz,即每一个计数值的停留时间为
3、0.25 秒,恰为当全音符设为 1 秒时,四四拍的 4 分音符持续时间。随着 notetabs 模块中的计数器按 4Hz 的时钟速率作为加法计数时,即随地址值递增时,音符数据 ROM 中的音符数据将从 ROM 中通过 ToneIndex3.0端口输向ToneTaba 模块,“梁祝”乐曲就开头连续自然的演奏起来了。Notetabs 模块仿真图:2. 简谱码对应的分频预置数查表电路ToneTaba.VHD音符的持续时间需依据乐曲的速度及每个音符的节拍数来确定, tonetaba 模块的功能首先是为 speakera 供给打算所发音符的预置数,而此数在 speakera 输入口停留的时间即为此音符的
4、节拍值。Tonetaba 模块是乐曲简码对应的分频预置数查表电路。其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共13 个,每一音符的停留时间由音乐节拍和音调发生器模块 NoteTabs 的 clk 的输入频率打算。这 13 个值的输出由对应于 ToneTaba 的 4 位输入值 Index3.0确定,而 Index3.0最多有 16 种可选值。输向 ToneTaba 中 Index3.0的值ToneIndex3.0的输出值与持续时间有模块 notetabs 打算。Tonetaba 仿真图:4. 数控分频与演奏发生器Speakera.VHD音符的频率可由次模块获得,这是一个数控分频器,由其
5、 clk 端输入一个具有较高频率的信号,通过 speakera 分频后由 spkout 输出,由于直接从数控分频器中出来的输出信号是脉冲较窄的脉冲信号,为了有助于驱动扬声器,需另加一个D 触发器以均衡其占空比,但这时的频率是原来的 1/2。Speakera 对 clk 输入信号的分频的预置数 Tone10.0与 spkout 的输出频率就有了对应关系。Sperkera 模块仿真图:5. 梁祝music.vhd音( 乐数据):将数据保存为.mif 格式然后制作成 LMP_ROM 文件。六、试验结果:程序下验载证是否通过试验成功!将设计出的演奏电路的程序经过编译Compiler后,选择 FLEX1
6、0K 系列中EPF10K10LC84-4 作为目标器件Assign/Device,并进展管脚锁定Floorplan Editor。器件编程(Programmer),将编译生成的*.sof 文件下载到目标芯片。观看到数码管 5 显示出演奏时的音乐简谱,发光二极管 D5 指示音调凹凸,同时试验箱自带蜂鸣器Speaker奏出“梁祝”那凄美动人的旋律,试验成功。七、总结:本次乐曲硬件演奏电路的 VHDL 设计主要承受数控分频原理来实现,在本次EDA 课程设计中,我与其他同学相互沟通,相互学习,提高了用 VHDL 语言编程的技能及进一步加强了 MAX+plus对这种 EDA 流行软件的应用,通过这次设计
7、, 我们温故了已学的理论学问和实践操作技能,同时也学习了更多的的学问和技能,为以后进一步的学习和工作打下了坚实的根底。本设计得到的电路可以作为一个乐曲演奏模块,假设要演奏出另外一首曲子,只需将该曲子消灭的简谱分频预置数写入 ToneTaba.VHD,再将该曲子的节拍表制作成 ROM 文件输入到 NoteTabs.VHD 中,编译后,编程下载即可。具体代码:library ieee;use ieee.std_logic_1164.all; entity songer is port(clk4MHz:in std_logic;clk4Hz:in std_logic; clk:in std_logi
8、c;sel:out std_logic_vector(2 downto 0); sm:out std_logic_vector(6 downto 0); spk:out std_logic);end;architecture one of songer is component notetabs port(clk:in std_logic;toneindex:out integer range 0 to 15); end component;component tonetabaport(index:in integer range 0 to 15;low:out std_logic_vecto
9、r(3 downto 0); mid:out std_logic_vector(3 downto 0); high:out std_logic_vector(3 downto 0); tone:out integer range 0 to 16#1FFF#);end component; component speakera port(clk:in std_logic;tone:in integer range 0 to 16#1FFF#; spks:out std_logic);end component;signal tone:integer range 0 to 16#1FFF#; si
10、gnal toneindex:integer range 0 to 15; signal q_s:std_logic_vector(3 downto 0); signal tmp:integer range 0 to 2;signal low1,mid1,high1:std_logic_vector(3 downto 0); beginu1:notetabs port map(clk=clk4Hz,toneindex=toneindex); u2:tonetaba portmap(index=toneindex,tone=tone,low=low1,mid=mid1,high=high1);
11、u3:speakera port map(clk=clk4MHz,tone=tone,spks=spk); process(clk)beginif (clk”event and clk=”1”)thentmp=tmp+1;end if ;end process; process(tmp) beginif tmp=0 then q_s=low1; sel=“001“;elsif tmp=1 then q_s=mid1; sel=“010“;elsif tmp=2 then q_s=high1; selsmsmsmsmsmsmsmsmsmsmsm=“0000000“; end case;end p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 梁祝 乐曲 硬件 演奏 电路 VHDL 设计 _eda 课程设计
限制150内