已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
黑龙江信息技术职业学院电子工程系. 乐曲硬件演奏电路的VHDL设计 姓名:张哲铭班级:12微电子 一、设计题目:乐曲硬件演奏电路的VHDL设计二、设计目标:了解一般乐曲演奏电路设计设计方法,学习VHDL语言,熟悉EDA设计软件QuartusII和MAX+plus,加强独立完成电子设计的能力。 (1)能够播放“梁祝”乐曲。(2)能够通过LED显示音阶。(3)(选作)具有“播放/停止”功能,并在此基础上实现“按键演奏”的电子琴功能。主芯片型号为FLEX10K10LC84-4三、实验电路的工作原理:(演奏电路逻辑图)组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能够连续演奏所需的两个基本要素,设计演奏电路的关键就是获得这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。演奏电路逻辑图有三部分:音乐节拍和音调发生器、简谱码对应的分频预置数查表电路、数控分频与演奏发生器。演奏电路逻辑图:四、设计内容:1.完成程序的编辑工作。2.将音乐数据制作成LMP_ROM文件.3.将程序加载到MAX+plus中进行编译、仿真,并保存仿真结果。4.到实验室进行下载验证。引脚进行锁定,然后下载到实验芯片中观察实验结果。五、仿真结果:1.音乐节拍和音调发生器(NoteTabs.VHD)notetabs模块中设置了一个8位二进制计数器(计数最大值138),作为音符数据ROM的地址发生器。这个计数器的计数频率选为4Hz,即每一个计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。随着notetabs模块中的计数器按4Hz的时钟速率作为加法计数时,即随地址值递增时,音符数据ROM中的音符数据将从ROM中通过ToneIndex3.0端口输向ToneTaba模块,“梁祝”乐曲就开始连续自然的演奏起来了。Notetabs模块仿真图:2.简谱码对应的分频预置数查表电路(ToneTaba.VHD)音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,tonetaba模块的功能首先是为speakera提供决定所发音符的预置数,而此数在speakera输入口停留的时间即为此音符的节拍值。Tonetaba模块是乐曲简码对应的分频预置数查表电路。其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs的clk的输入频率决定。这13个值的输出由对应于ToneTaba的4位输入值Index3.0确定,而Index3.0最多有16种可选值。输向ToneTaba中Index3.0的值ToneIndex3.0的输出值与持续时间有模块notetabs决定。Tonetaba仿真图:4.数控分频与演奏发生器(Speakera.VHD)音符的频率可由次模块获得,这是一个数控分频器,由其clk端输入一个具有较高频率的信号,通过speakera分频后由spkout输出,由于直接从数控分频器中出来的输出信号是脉冲较窄的脉冲信号,为了有助于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率是原来的1/2。Speakera对clk输入信号的分频的预置数Tone10.0与spkout的输出频率就有了对应关系。Sperkera模块仿真图:5.梁祝music.vhd(音乐数据):将数据保存为.mif格式然后制作成LMP_ROM文件。六、实验结果:(程序下载验证是否通过)试验成功!将设计出的演奏电路的程序经过编译(Compiler)后,选择FLEX10K系列中EPF10K10LC84-4作为目标器件(Assign/Device),并进行管脚锁定(Floorplan Editor)。器件编程(Programmer),将编译生成的*.sof文件下载到目标芯片。观察到数码管5显示出演奏时的音乐简谱,发光二极管D5指示音调高低,同时实验箱自带蜂鸣器(Speaker)奏出“梁祝”那凄美动人的旋律,实验成功。七、总结:本次乐曲硬件演奏电路的VHDL设计主要采用数控分频原理来实现,在本次EDA课程设计中,我与其他同学相互交流,相互学习,提高了用VHDL语言编程的技能及进一步加强了MAX+plus对这种EDA流行软件的应用,通过这次设计,我们温故了已学的理论知识和实践操作技能,同时也学习了更多的新的知识和技能,为以后进一步的学习和工作打下了坚实的基础。本设计得到的电路可以作为一个乐曲演奏模块,如果要演奏出另外一首曲子,只需将该曲子出现的简谱分频预置数写入ToneTaba.VHD,再将该曲子的节拍表制作成ROM文件输入到NoteTabs.VHD中,编译后,编程下载即可。具体代码:library ieee;use ieee.std_logic_1164.all;entity songer isport(clk4MHz:in std_logic; clk4Hz:in std_logic; clk:in std_logic; 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 iscomponent notetabsport(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_vector(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 speakeraport(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#;signal 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 port map(index=toneindex,tone=tone,low=low1,mid=mid1,high=high1);u3:speakera port map(clk=clk4MHz,tone=tone,spks=spk); process(clk) begin if (clkevent and clk=1)then tmp=tmp+1;end if ; end process;process(tmp)begin if 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 process;end;音乐节拍和音调发生器(NoteTabs.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY NoteTabs ISPORT (clk:IN STD_LOGIC; ToneIndex : OUT integer range 0 to 15);END;ARCHITECTURE one OF NoteTabs ISSIGNAL Counter :integer range 0 to 138;BEGINCNT8 :PROCESS(clk)BEGIN IF Counter=138 THEN Counter = 0; ELSIF clkEVENT AND clk = 1 THEN Counter toneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindexnull; end case;end process;END;简谱码对应的分频预置数查表电路(ToneTaba.VHD)library ieee; use ieee.std_logic_1164.all;entity tonetaba isport( index:in integer range 0 to 15; low:out std_logic_vector(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;architecture one of tonetaba isbegin search:process(index) begin case index is when 0=tone=8191;low=0000;mid=0000;hightone=2124;low=0011;mid=0000;hightone=3089;low=0101;mid=0000;hightone=3646;low=0110;mid=0000;hightone=4141;low=0111;mid=0000;hightone=4369;low=0000;mid=0001;hightone=4786;low=0000;mid=0010;hightone=5157;low=0000;mid=0011;hightone=5640;low=0000;mid=0101;hightone=5918;low=0000;mid=0110;hightone=6280;low=0000;mid=0000;highnull; end case;end process;end;数控分频与演奏发生器(Speakera.VHD)library ieee;use ieee.std_logic_1164.all;entity speakera isPORT (clk : IN STD_LOGIC; Tone : IN integer range 0 to 16#1FFF#; SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speakera ISSIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : integer range 0 to 15 ; BEGIN PreCLK 13 THEN PreCLK = 1; Count4 := 0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨科护理中的团队协作与沟通技巧
- 分级护理人文关怀实践
- 大肠癌患者运动康复护理
- 文科生国企职业发展指南
- 【高三下】哈三中2026年高三学年第四次模拟考试语文试卷+详解
- 景泰蓝制作工岗位协同应用考核试卷含答案
- 白酒酵母工岗中品质考核试卷含答案
- 送配电线路架设工风险识别竞赛考核试卷含答案
- 信息通信网络运行管理员班组评比考核试卷含答案
- 紫胶热滤工安全文化测试考核试卷含答案
- 2026届浙江省普通高等学校招生全国统一考试仿真历史试题(含答案)
- 安徽省A10联盟2026届高三5月最后一卷历史试卷(含答案及解析)
- 智慧护理:护理创新的实践探索
- 2025-2030年老年交友相亲行业深度调研及发展战略咨询报告
- 2026年上海市春考语文试卷及答案
- 山东省青岛市2026年中考英语试题
- 2026年普通动物学通关试题库及参考答案详解【达标题】
- 2026年及未来5年市场数据中国妥尔油脂肪酸行业市场竞争格局及发展趋势预测报告
- 20kV及以下配电网工程预算定额(2022版)全5册excel版
- 《智慧旅游运营实务》 课件全套 模块1-6 智慧旅游发展认知 - 智慧旅游规划指引
- 2026年十五五时期东北全面振兴取得新突破战略规划深度解读
评论
0/150
提交评论