您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > “两只老虎”EDA课程设计(详细)
课程设计课程设计名称:专业班级学生姓名:学号:指导教师:课程设计时间:1设计任务及要求设计任务:乐曲自动播放器。自行选择一首自己喜爱的经典乐曲,用FPGA设计实现一个该曲目的自动演奏电路。要求:(1)根据设计题目要求编写相应程序代码(2)对编写的VHDL程序代码进行编译和仿真(3)利用实验箱完成硬件验证(4)总结设计内容,完成课程设计说明书与利用微处理器,以纯硬件完成乐曲演奏电路的逻辑要复杂得多。本实验设计项目作为“两只老虎”乐曲演奏电路的实现,组成每个乐曲的每个音符的发音频率值及持续的时间是乐曲能连续演奏所需要的两个基本要素。(1)音乐硬件演奏电路基本原理硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。(2)音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本设计中选取1MHz的基准频率。数控分频器采用12位二进制计数器,乐曲中的休止符,只要将分频系数设为0,即初始值=4095,此时扬声器不会发声。根据分频系数,可计算数控分频器得到的初始值。初始值的计算公式如下:由于所设计的数控分频计采用12MHZ作为时钟源,并通过一次12分频给出频率为1MHZ的脉冲溢出信号,再对该1MHZ的溢出信号进行12位2进制码的带预置数进行计数,并给出一个频率随预置数变化的脉冲信号。由于该脉冲信号不具有驱动蜂鸣器的能力,故对此脉冲信号进行2分频以推动蜂鸣器发声,故最终输出信号的频率与预置数的关系如下:其中mf为音阶对应的频率。表1简谱中的音名与频率的关系音名频率/Hz音名频率/Hz音名频率/Hz低音1261.63中音1532.25高音11046.50低音2293.67中音2587.33高音21174.66低音3329.63中音3659.25高音31318.51低音4349.23中音4698.46高音41396.92低音5391.99中音5783.99高音51567.98低音6440中音6880高音61760低音7493.88中音7987.76高音71975.52表2各音阶频率对应的分频值音名分频系数初始值音名分频系数初始值音名分频系数初始值低音17644547中音138224369高音119116280低音268101381中音234054786高音212706921低音360672124中音330345157高音315176674低音457272464中音428645327高音414326759低音551023089中音525515640高音512566935低音645453646中音622735918高音611377054低音740504141中音720256166高音710137178(3)乐曲节奏的控制一般乐曲最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要输出4Hz的1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低,由于最后的蜂鸣器前需加一个二分频的程序,因此计数器的时钟信号应为4Hz的2倍,即8Hz。(4)乐谱的发生本设计将乐谱中的音符数据存储在LPM-ROM中,若某音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,该音符就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。(5)选择模块选择模块将用一个4位数的控制信号控制乐谱模块数据的选择性,用vhdl语言描述。2设计原理及总体框图(1)音符的发音频率设定及实现音符的频率可由一个数控分频器SPEAKERA获得,由其CLK端输入一个有较高频率的信号,通过SPEAKERA分频后由SPKOUT输出。由于直接从数控分频器中出来的输出信号是脉宽极窄的,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2.SPEAKERA对clk输入信号的分频比由11位预置数Tone[10..0]决定。SPKOUT的输出频率就有了对应关系。例如,在TONETABA模块中若取Tone[10..0]=1036,将对应法音符为“3”音的信号频率。(2)音符的持续时间音符的持续时间需根据乐曲的速度及每个一怒的节拍数来确定,图中模块TONETABA的功能首先是为SPEAKERA提供决定所发音符的分频预置数,而此数在SPEAKER输入口停留的时间即为次音符的节拍值。模块TONETABA是乐曲简谱码对应的分频预置数查表电路,其中设置“两只老虎”乐曲全部音符所对应的分频预置数,共11个,每一音符的停留时间由音乐节拍和音调发生器模块NOTETABS的clk输入频率决定,这11个值的输出由对应于TONETABA中Index[3..0]的值ToneIndex[3..0]的输出值与持续时间由模块NOTETABS决定。在NOTETABS中设置了一个8位二进制计数器(计数最大值为138),这个计数器的技术频率选为4Hz,即每一个计数值停留时间为0.25S,恰为当全音符设为1s时,四四拍的4分音符持续时间。例如,NOTETABS在以下的VHDL逻辑描述中,“两只老虎”乐曲的第一个音符为“5”,此音在逻辑中停留了1个时钟节拍,即0.25S时间,相应地,所对应的“”音符分频预置值为在SPEAKERA的输入端开始连续自然地演奏起来了。设计的总体框图如下:3程序设计VHDL程序如下:(1)SONGER.VHD是设计电路的顶层设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSongerISPORT(CLK12MHZ:INSTD_LOGIC;CLK8HZ:INSTD_LOGIC;CODE1:OUTINTEGERRANGE0TO15;HIGH1:OUTSTD_LOGIC;SPKOUT:OUTSTD_LOGIC);END;ARCHITECTUREoneOFSongerISCOMPONENTNoteTabsPORT(clk:INSTD_LOGIC;ToneIndex:OUTINTEGERRANGE0TO15);ENDCOMPONENT;COMPONENTToneTabaPORT(Index:ININTEGERRANGE0TO15;CODE:OUTINTEGERRANGE0TO15;HIGH:OUTSTD_LOGIC;Tone:OUTINTEGERRANGE0TO16#7FF#);ENDCOMPONENT;COMPONENTSpeakeraPORT(clk:INSTD_LOGIC;Tone:ININTEGERRANGE0TO16#7FF#;SpkS:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTone:INTEGERRANGE0TO16#7FF#;SIGNALToneIndex:INTEGERRANGE0TO15;BEGINu1:NoteTabsPORTMAP(clk=clk8HZ,ToneIndex=ToneIndex);u2:ToneTabaPORTMAP(Index=ToneIndex,Tone=Tone,CODE=CODE1,HIGH=HIGH1);u3:SpeakeraPORTMAP(clk=CLK12MHZ,Tone=Tone,SpkS=SPKOUT);END;(2)TONETABA.VHD是乐曲简谱码对应的分频预置数查表电路。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYToneTabaISPORT(Index:ININTEGERRANGE0TO15;CODE:OUTINTEGERRANGE0TO15;HIGH:OUTSTD_LOGIC;Tone:OUTINTEGERRANGE0TO16#7FF#);END;ARCHITECTUREoneOFToneTabaISBEGINSearch:PROCESS(Index)BEGINCASEIndexISWHEN0=Tone=2047;CODE=0;HIGH='0';WHEN1=Tone=773;CODE=1;HIGH='0';WHEN2=Tone=912;CODE=2;HIGH='0';WHEN3=Tone=1036;CODE=3;HIGH='0';WHEN4=Tone=1110;CODE=4;HIGH='0';WHEN5=Tone=1197;CODE=5;HIGH='0';WHEN6=Tone=1290;CODE=6;HIGH='0';WHEN7=Tone=1372;CODE=1;HIGH='1';WHEN8=Tone=1410;CODE=2;HIGH='1';WHEN9=Tone=1480;CODE=3;HIGH='1';WHEN10=Tone=1542;CODE=4;HIGH='1';WHENOTHERS=NULL;ENDCASE;ENDPROCESS;END;(3)SPEAKERA.VHD是设计电路的数控分频器:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSpeakeraISPORT(clk:INSTD_LOGIC;Tone:ININTEGERRANGE0TO16#7FF#;SpkS:OUTSTD_LOGIC);END;ARCHITECTUREoneOFSpeakeraISSIGNALPreCLK:STD_LOGIC;SIGNALFullSpkS:STD_LOGIC;BEGINDivideCLK:PROCESS(clk)VARIABLECount4:INTEGERRANGE0TO15;BEGINPreCLK='0';IFCount411THENPreCLK='1';Count4:=0;ELSIFclk'EVENTANDclk='1'THENCount4:=Count4+1;ENDIF;ENDPROCESS;GENSpkS:PROCESS(PreCLK,Tone)VARIABLECount11:INTEGERRANGE0TO16#7FF#;BEGINIFPreCLK'EVENTANDPreCLK='1'THENIFCount11=16#7FF#THENCount11:=Tone;FullSpkS='1';ELSECount11:=Count11+1;FullSpkS='0';ENDIF;ENDIF;ENDPROCESS;DelaySpkS:PROCESS(FullSpkS)VARIABLECount2:STD_LOGIC;BEGINIFFullSpkS'EVENTANDFullSPKS='1'THENCount2:=NOTCount2;IFCount2='1'THENSpkS='1';ELSESpkS='0';ENDIF;ENDIF;ENDPROCESS;END;(4)NOTETABS模块决定音乐的输出值与持续时间:LIBRARY
本文标题:“两只老虎”EDA课程设计(详细)
链接地址:https://www.777doc.com/doc-6431749 .html