EDA课程设计方案_第1页
EDA课程设计方案_第2页
EDA课程设计方案_第3页
EDA课程设计方案_第4页
EDA课程设计方案_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1江西理工高校应用科学学院SOPC/EDA综合课程设计报告设计题目:硬件乐曲自动演奏电路设计设计者:余海光学号:32班级:自动化082指导老师:王忠锋完成时间:2010年01月19日设计报告综合测试总评格式(10)内容(40)图表(10)答辩(20)平常(20)WIDTH=5;DEPTH=512;ADDRESS_RADIX=UNS;DATA_RADIX=UNS;CONTENTBEGIN [0。。2]:10; 3:11; [4。.5]:12; 6:8; 7:9; [8。.10]:10; 11:11; [12。.13]:12; 14:9; 15:10; [16。。18]:11; 19:10; [20。。21]:8; 22:11; 23:10; [24.。25]:11; 26:6; 27:8; [28..29]:9; 30:8; 31:9; [32。。34]:10; 35:11; [36。。37]:12; 38:13; 39:14; [40.。41]:15; 42:10; 43:11; [44。.45]:12; 46:9; 47:10; 48:11; 49:10; 50:11; [51.。53]:15; 54:9; 55:10; 56:11; 57:10; 58:11; [59.。61]:16; 62:15; 63:14; [64。.66]:15; 67:16; 68:17; 69:16; 70:15; 71:14; [72.。75]:15; 76:14; [77。。78]:12; 79:8; [80。。83]:13; 84:12; [85。。86]:8; 87:10; [88。.90]:9; 91:10; 92:11; 93:12; 94:15; 95:14; [96.。98]:15; 99:16; 100:17; 101:16; 102:15; 103:14; [104.。107]:15; 108:14; [109..110]:12; 111:8; [112.。115]:13; [116.。117]:12; 118:15; 119:14; [120。。127]:15; [128。.130]:10; 131:9; [132。.133]:10; [134。。135]:0; 136:10; 137:12; 138:10; 139:9; [140.。143]:10; [144.。146]:8; 147:9; 148:10; 149:12; [150.。151]:10; [152.。154]:9; 155:8; [156。。159]:9; [160。。162]:10; 163:12; 164:13; [165。。167]:12; 168:13; [169。。170]:12; 171:10; [172。.174]:12; 175:5; [176..177]:10; [178。。179]:9; [180..181]:12; 182:10; [183。。186]:9; 187:8; [188..191]:9; [192..194]:10; 195:9; [196.。200]:10; 201:12; 202:10; 203:9; [204。。207]:10; [208。。210]:8; 211:9; 212:10; 213:12; [214..215]:10; [216。。218]:9; 219:8; [220..223]:9; [224。。226]:10; 227:12; 228:13; [229。.231]:12; 232:13; [233..234]:12; 235:10; [236。。239]:12; 240:0; 241:10; 242:9; 243:10; [244..245]:12; 246:10; [247.。248]:9; [249.。253]:8; [254。.255]:0;MIF文件内容如下:——2、音符掌握输出模块NOTETABS:该模块利用已定制完成的music。mif文件,通过给出LPM_ROM的数据地址,使LPM_ROM输出对应的音符,再送入音符译码电路,最终演奏出编好的音乐。NOTETABS的模块图形如下:VHDL语句描述如下:libraryieee;useieee.std_logic_1164.all;useieee。std_logic_unsigned。all;entitynotetabsis port(clk:instd_logic; rst:instd_logic; choose:instd_logic_vector(1downto0); toneindex:outstd_logic_vector(4downto0)); end;architectureoneofnotetabsiscomponentmusic port(address:instd_logic_vector(8downto0); inclock:instd_logic; q:outstd_logic_vector(4downto0)); endcomponent; signalcounter:std_logic_vector(8downto0); signaltmp:std_logic_vector(8downto0); signalrset:std_logic; begin choosemusic:process(choose(0),choose(1),clk)—选歌信号检测进程: variablea:std_logic_vector(1downto0); variableb:std_logic_vector(1downto0); variablec:std_logic_vector(1downto0); begin ifclk’eventandclk='1’then b:=a; a:=choose; c:=b—a; endif; ifc=”00”thenrset<='0'; elserset<='1’; endif; endprocess; cnt8:process(clk,counter,rset,rst,choose,tmp)—ROM地址掌握输出进程 begin ifrst=’1'thentmp〈="000000000"; elsifrset='1’thentmp〈=”000000000”; elsiftmp=127thentmp<=”000000000"; elsif(clk’eventandclk='1’)thentmp<=tmp+1; endif; casechooseis when”00”=>counter<=tmp; when”01”=>counter<=tmp+128; whenothers=>counter〈=”000000000”; endcase; endprocess; u1:musicportmap(address=〉counter,q=>toneindex,inclock=>clk); end;该模块时序仿真图如下:时序仿真说明:TMPLOOK对应模块中的RSET信号,每当CHOOSE的信号发生转变,即选歌里,即将TMP置零,并通过CASE语句将歌曲音符的地址输出给其他模块。RST为手动信号,为仿真便利,此处不使用MIF文件的数据,而用ADDRESS表示ROM的地址信号.依据时序图可看出,当CHOOSE发生变化时,ADDRESS也相应的转变,即完成在同一ROM内存放多首歌曲并通过手动按键的方式进行选歌。-—3、音符译码电路TONETABATONETABA的模块图形如下:该模块将NOTETABS输出的音符译成输出电路的数控分频所需要预置数,并将对应的简谱数码用数码管显示出来,同时依据输出的音符,推断其高、中、低特性,并通过三个LED灯显示出来。其所输出的预置数由最后一级的数控频器所决定,参考值如下表:音阶频率频率设定数预置数音阶频率频率设定数预置数低74152891101101001011中35543193110001111001低63702745101010111000中24933082110000001001低53292576101000010000中14402960101110001111低42932390100101010101高716613795111011010010低32772291100011110010高614793758111010101101低22462063100000001111高513183717111010000100低1220182311100011111高411743670111001010110中78303494110110100101高311083645111000111100中67403420110101011100高29873589111000000101中56593337110100001001高18803528110111000111中458732441100101011000音04095111111111111其计算公式如下:由于所设计的数控分频计采纳12MHZ作为时钟源,并通过一次12分频给出频率为1MHZ的脉冲溢出信号,再对该1MHZ的溢出信号进行12位2进制码的带预置数进行计数,并给出一个频率随预置数变化的脉冲信号.由于该脉冲信号不具有驱动蜂鸣器的能力,故对此脉冲信号进行2分频以推动蜂鸣器发声,故最终输出信号的频率与预置数的关系如下:其中为音阶对应的频率。模块VHDL语句描述如下:libraryieee;useieee。std_logic_1164。all;entitytonetabais port(index:instd_logic_vector(4downto0); code:outstd_logic_vector(3downto0); high0:outstd_logic_vector(2downto0); tone:outstd_logic_vector(11downto0)); end;architectureoneoftonetabaisbeginsearch:process(index)begin caseindexis when”00000”=〉tone<=”111111111111";code<=”0000";high0〈="000”;——0/4095 when”00001"=〉tone<="011100011111”;code<="0001";high0〈="001";—-L1/1823 when"00010"=>tone<="100000001111”;code<="0010";high0〈=”001”;——L2/2063 when"00011"=〉tone〈=”100011110010”;code〈=”0011";high0〈="001”;——L3/2291 when"00100”=>tone<=”100101010101";code〈="0100";high0<=”001";—-L4/2390 when”00101”=>tone<=”101000010000";code<=”0101”;high0<="001”;--L5/2576 when”00110”=〉tone〈=”101010111000";code<="0110”;high0〈=”001”;-—L6/2745 when"00111”=〉tone〈="101101001011";code<=”0111”;high0<=”001”;——L7/2891 when"01000”=>tone<="101110001111”;code<=”0001";high0〈=”010”;—-M1/2960 when"01001"=〉tone<=”110000001001”;code〈="0010";high0〈=”010”;--M2/3082 when”01010"=〉tone〈="110001111001”;code<="0011”;high0〈="010”;—-M3/3193 when"01011”=〉tone〈="110010101100";code〈="0100”;high0〈="010”;——M4/3244 when"01100"=〉tone<=”110100001001";code<="0101”;high0<=”010";——M5/3337 when"01101"=>tone〈=”110101011100”;code〈="0110";high0<="010";-—M6/3420 when”01110”=>tone〈=”110110100101";code〈=”0111";high0〈=”010";-—M7/3494 when”01111"=>tone〈=”110111000111”;code<=”0001”;high0〈="100”;—-H1/3528 when"10000"=>tone<=”111000000101";code<="0010”;high0〈="100";——H2/3589 when"10001”=〉tone<="111000111100";code<="0011”;high0<=”100”;—-H3/3645 when”10010"=>tone〈=”111001010110";code〈="0100”;high0〈="100”;--H4/3670 when”10011"=>tone〈=”111010000100";code<=”0101”;high0〈="100";--H5/3717 when"10100”=>tone〈=”111010101101”;code<=”0110”;high0<=”100”;-—H6/3758 when"10101”=〉tone<="111011010010";code〈="0111”;high0〈="100";--H7/3795 whenothers=>null; endcase; endprocess; end;-—4、数控分频器计输出模块SPEAKERA:该模块主体为一个12位的可预置数计数器。可由第六次实验的数控分频计修改得来.其通过NOTETABS得到预置数,并对些进行计数.当计满时便给出一个溢出信号.再对此溢出信号进行二分频得到能驱动蜂鸣器且频率符合C大调的21个音阶的频率.由此发出不同信号。SPEAKERA的模块图形如下:其VHDL语言描述如下:libraryieee;useieee。std_logic_1164。all;useieee。std_logic_unsigned。all;entityspeakeraisport(clk:instd_logic; tone:instd_logic_vector(11downto0); spks:outstd_logic);end;architectureoneofspeakerais signalpreclk,fullspks:std_logic;begindivideclk:process(clk)—对12MHZ时钟源进行12分频,输出1MHZ的脉冲信号。 variablecount4:std_logic_vector(3downto0);beginpreclk〈='0’;ifcount4>11thenpreclk<='1’;count4:="0000”;elsifclk'eventandclk=’1'thencount4:=count4+1;endif;endprocess;genspks:process(preclk,tone)-12位预置数数控分频器 variablecount11:std_logic_vector(11downto0);begin ifpreclk'eventandpreclk='1’then ifcount11=”111111111111”thencount11:=tone;fullspks〈=’1'; elsecount11:=count11+1;fullspks<='0';endif; endif;endprocess;delayspks:process(fullspks)—2分频,蜂鸣器推动电路. variablecount2:std_logic; begin iffullspks’eventandfullspks=’1’thencount2:=notcount2; ifcount2=’1'thenspks〈='1'; elsespks〈='0’;endif; endif; endprocess;end;时序仿真图如下:因TONE为12位,时序仿真是会由于计数次数过多而次导致仿真长时间不能完成。故为便于时序仿真,VHDL语言描述中仅将TONE[11DOWNTO0]修改为[3DOWNTO0],其仿真结果本质全都.由时序仿真可见,依据预置数的不同,其输出的频率也有规律性的变化。——5、顶层设计VHDL描述songer模块:在设计好各个子模块后,即可开头设计顶层文件。其只需要定义好输入的CHOOSE信号,推动蜂鸣器的CLK12MHZ信号及掌握节拍速度的CLK8HZ的信号,及显示的高、中、低的三个LED灯信号输出,驱动蜂鸣器的SPKOUT以及数码管简谱显示信号即可。其VHDL语言如下:libraryieee;useieee。std_logic_1164.all;entitysongeris port(clk12mhz:instd_logic; rst:instd_logic; choose:instd_logic_vector(1downto0); clk8hz:instd_logic; code1:outstd_logic_vector(3downto0); high1:outstd_logic_vector(2downto0); spkout:outstd_logic);end;architectureoneofsongeriscomponentnotetabs port(clk:instd_logic; rst:instd_logic; choose:instd_logic_vector(1downto0); toneindex:outstd_logic_vector(4downto0));endcomponent;componenttonetabaport(index:instd_logic_vector(4downto0); code:outstd_logic_vector(3downto0); high0:outstd_logic_vector(2downto0); tone:outstd_logic_vector(11downto0));endcomponent;componentspeakeraport(clk:instd_logic; tone:instd_logic_vector(11downto0); spks:outstd_logic);endcomponent;signaltone:std_logic_vector(11downto0);signaltoneindex:std_logic_vector(4downto0);beginu1:notetabsportmap(clk=〉clk8hz,toneindex=>toneindex,rst=>rst,choose=>choose);u2:tonetabaportmap(index=>toneindex,tone=〉tone,code=>code1,high0=>high1);u3:speakeraportmap(clk=〉clk12mhz,tone=〉tone,spks=>spkout);end;由于时序仿真时,受12位预置数及一般计算机性能的限制,仿真时间极长,因将预置数模块修改为4位,其他部分对应修改,但数值仅做参考,实际结果请参考本程序的硬件仿真结果.其仿真结果如下:五、管脚锁定:为实现所设计的功能,管脚锁定时,选用实验箱的模式5。模式如下锁定管脚如下:六、硬件仿真结果:下载完成后,蜂鸣器即发出声音,演奏出第一首乐曲。当按下键2与键1进行选择时,可选择00:《挥着翅膀的女孩》,01:《菊花台》.当按下键8时,即从当前选择歌曲重新演奏。演奏过程中,数码管会按音符不同显示所演奏

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论