1成都信息工程学院数字电路综合设计报告课程名称:乐曲演奏电路综合设计系部:信息安全工程学院专业班级:信对121学生姓名:罗星学号:2012123015指导教师:邓娜曾祥萍龚一光报告成绩:2一.设计要求....................................................................................................................................3二.系统概述及工作原理................................................................................................................32.1系统概述............................................................................................................................32.2工作原理............................................................................................................................32.2.1乐曲发声原理........................................................................................................32.2.2硬件电路发声原理................................................................................................4三.设计的具体实现........................................................................................................................43.1单元电路设计与分析........................................................................................................53.1.1十分频器................................................................................................................53.1.2数控分频器............................................................................................................63.1.3分频预置数器........................................................................................................73.1.4lpm_connter的设置............................................................................................93.2音乐演奏电路的总体工作原理,时钟和音乐节拍的控制关系..................................113.2.1总体工作原理......................................................................................................113.2.2时钟和音乐节拍的控制关系..............................................................................113.3调试及运行......................................................................................................................113.3.1运行结果..............................................................................................................113.3.2扩展为其他音乐的方法......................................................................................11四.心得体会及建议.....................................................................................................................123基于FPGA的音乐演奏电路设计一.设计要求1.设计一个乐曲硬件演奏电路,通过数字逻辑电路控制蜂鸣器演奏指定的乐曲;2.使用数字电路实验板上的FPGA器件(EP1C3T144C8)作为硬件电路平台,使用板载的交流蜂鸣器作为发声元件;3.在QuartusII环境下,将各单元电路按各自对应关系相互连接,构成乐曲硬件演奏电路,进行编译及仿真;4.将设计下载到实验板上验证乐曲演奏的效果。二.系统概述及工作原理2.1系统概述该系统主要由十分频器,数控分频器,分频预置数器,计数器等构成。整体电路框图如图一:图12.2工作原理2.2.1乐曲发声原理1.乐曲中的每一音符对应着一个特定的频率,要想FPGA发出不同音符的音调,4实际上只要控制它输出相应音符的频率即可。2.乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在喇叭上连续地发出各个音符的音调。3.组成乐曲的每个音符持续的时间是乐曲能够连续演奏所需要的另一个基本要素。4.音律与频率对照表如图2:图22.2.2硬件电路发声原理声音的频谱范围约在几十到几kHz,若能利用程序来控制FPGA芯片某个引脚按照一定的顺序输出一定频率的矩形波,接上喇叭就能发出相应频率的声音。模型如图3:10分频器数控分频器二分频器(50%占空比)分频数预置器计数器10MHz1MHz时钟(2Hz)清零晶体振荡器扬声器图3三.设计的具体实现53.1单元电路设计与分析3.1.1十分频器用VHDL语言设计10分频器,代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFreqISPORT(Clk_10M:INSTD_LOGIC;clk_1MHz:OUTSTD_LOGIC);ENDFreq;ARCHITECTUREBehvOFFreqISBEGINDivideCLK:PROCESS(Clk_10M)VARIABLECount:INTEGERRANGE0TO9;BEGINIFClk_10M'EVENTANDClk_10M='1'THENIFCount10THENclk_1MHz='0';Count:=Count+1;ELSEclk_1MHz='1';Count:=0;ENDIF;ENDIF;ENDPROCESSDivideCLK;ENDBehv;编译成功之后,生成逻辑器件:图463.1.2数控分频器产生各音符所需的频率可用数控分频器实现,将较高频率的信号输入数控分频器,数控分频器在与相应音符对应的分频预置数的控制下,就可产生所对应音符的信号频率。若基准频率采用1MHz,则使用11位数控分频器即可满足要求。输出信号的频率与分频预置数的关系如下:其中fm为音阶对应的频率,x为产生该频率在数控分频器里对应的预置数。用VHDL语言设计数控分频器,代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDigFreqISPORT(Clk_1MHZ:INSTD_LOGIC;Tone:INSTD_LOGIC_VECTOR(10DOWNTO0);Spks:bufferSTD_LOGIC);ENDDigFreq;ARCHITECTUREBehvOFDigFreqISBEGINGenSpks:PROCESS(Clk_1MHz,Tone)VARIABLESetCount:STD_LOGIC_VECTOR(10DOWNTO0);BEGINIFClk_1MHz'EVENTANDClk_1MHZ='1'THENIFSetCount=16#7FF#THENSetCount:=Tone;Spks='1';ELSESetCount:=SetCount+1;Spks='0';ENDIF;ENDIF;ENDPROCESSGenSpks;ENDBehv;编译成功后。生成逻辑器件:61020472mxf7图53.1.3分频预置数器分频预置数器:是乐曲简谱码对应的分频预置数查表电路,它提供了每个音符所对应的分频预置数。预置数如下图:图6代码实现如下:libraryieee;useieee.std_logic_1164.all;entitylx015isport(index:instd_logic_VECTOR(0to5);Tone:outINTEGERRANGE0TO2047);endentitylx015;architectureartoflx015isbeginPROCESS(index)begincaseindexiswhen000000=Tone=1091;when000001=Tone=1091;when000010=Tone=1195;when000011=Tone=1195;8when000100=Tone=1288;when000101=Tone=1288;when000110=Tone=1091;when000111=Tone=1091;when001000=Tone=1091;when001001=Tone=1091;when001010=Tone=1195;when001011=Tone=1195;when001100=Tone=1288;when001101=Tone=1288;when001110=Tone=1091;when001111=Tone=1091;when010000=Tone=1288;when010001=Tone=1288;when010010=Tone=1331;when010011=Tone=1331;when010100=Tone=1409;when010101=Tone=1409;when010110=Tone=1409;when010111=Tone=1409;when011000=Tone=1288;when011001=Tone=1288;when011010=Tone=1331;when011011=Tone=1331;when011100=Tone=1409;when011101=Tone=1409;when011110=Tone=1409;when011111=