您好,欢迎访问三七文档
西南科技大学实验报告课程名称:基于FPGA的现代数字系统设计实验名称:硬件电子琴电路设计姓名:学号:班级:通信1301指导教师:刘桂华西南科技大学信息工程学院制2硬件电子琴电路设计实验原理一、实验目的:学习利用数控分频器设计硬件电子琴实验。二、原理说明:主系统由3个模块组成,例1是顶层设计文件,其内部有三个功能模块(如图1所示):Speakera.v(例4)和ToneTaba.v(例3),NoteTabs.v(例2)。模块ToneTaba是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的显示数码,如‘5’,并由High输出指示音阶高8度显示。模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speakera由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。增加一个NoteTabs模块用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在NoteTabs模块放置一个乐曲曲谱真值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。图1硬件电子琴电路结构二、实验步骤1、构建一个工程名为songer的工程2、分别输入ToneTaba.v、Speakera.v、的VerilogHDL文本,进行综合和功能仿真,理解、验证模块功能。3(1)创建音节发生器ToneTaba.v模块moduleToneTaba(Index,Code,High,Tone);input[3:0]Index;output[3:0]Code;outputHigh;output[10:0]Tone;reg[3:0]Code;regHigh;reg[10:0]Tone;always@(Index)begincase(Index)4'b0000:beginTone=11'b11111111111;Code=4'b0000;High=1'b0;end//20474'b0001:beginTone=11'b01100000101;Code=4'b0001;High=1'b0;end//7734'b0010:beginTone=11'b01110010000;Code=4'b0010;High=1'b0;end//9124'b0011:beginTone=11'b10000001100;Code=4'b0011;High=1'b0;end//10364'b0101:begin4Tone=11'b10010101101;Code=4'b0101;High=1'b0;end//11974'b0110:beginTone=11'b10100001010;Code=4'b0110;High=1'b0;end//12904'b0111:beginTone=11'b10101011100;Code=4'b0111;High=1'b0;end//1372;4'b1000:beginTone=11'b10110000010;Code=4'b0001;High=1'b1;end//1410;4'b1001:beginTone=11'b10111001000;Code=4'b0010;High=1'b1;end//1480;4'b1010:beginTone=11'b11000000110;Code=4'b0011;High=1'b1;end//1542;4'b1100:beginTone=11'b11001010110;Code=4'b0101;High=1'b1;end//1622;4'b1101:beginTone=11'b11010000100;Code=4'b0110;High=1'b1;end//1668;4'b1111:beginTone=11'b11011000000;Code=4'b0001;High=1'b1;end//1728;default:beginTone=11'b11111111111;Code=4'b0000;High=1'b0;end//2047endcaseendendmodule5对该模块进行综合,然后创建激励文件TestFixture如下:得到波形图如图所示:(2)创建一个数控分频器Speakera.v模块6moduleSpeakera(Clk,Tone,SpkS);inputClk;input[10:0]Tone;outputSpkS;regPreClk;regFullSpkS;reg[3:0]Count4;reg[10:0]Count11;regCount2;regSpkS;always@(posedgeClk)beginif(Count411)beginPreClk=1'b1;Count4=1;endelsebeginPreClk=1'b0;Count4=Count4+1'b1;endend7always@(posedgePreClk)beginif(Count11=11'h7FF)beginCount11=Tone;FullSpkS=1'b1;endelsebeginCount11=Count11+1'b1;FullSpkS=0;endendalways@(posedgeFullSpkS)beginCount2=~Count2;if(Count2==1'b1)SpkS=1'b1;elseSpkS=1'b0;endendmodule然后进行综合。3、输入50MHZ到12.5MHZ和50MHZ到4HZ的分频模块(1)div_50_12M.v模块modulediv_50_12M(clk_50M,clk_12M,reset);8inputclk_50M;inputreset;outputclk_12M;reg[23:0]counter;regclk_12M;always@(posedgeclk_50Mornegedgereset)if(!reset)counter=24'b00;elseif(counter==3)//3counter=24'b0;elsecounter=counter+1'b1;always@(posedgeclk_50Mornegedgereset)if(!reset)clk_12M=1'b0;elsebeginif(counter==24'd3)9clk_12M=1'b1;elseclk_12M=1'b0;endendmodule对其进行综合,并创建激励文件进行仿真:仿真得到的波形(2)系统需要4HZ频率读ROM,于是用50MHZ,分频得到4HZ频率。modulediv_50_4HZ(clk_50M,clk_4HZ,reset);10inputclk_50M;inputreset;outputclk_4HZ;reg[23:0]counter;regclk_4HZ;always@(posedgeclk_50Mornegedgereset)if(!reset)counter=24'b00;elseif(counter==12499999)//3counter=24'b0;elsecounter=counter+1'b1;always@(posedgeclk_50Mornegedgereset)if(!reset)clk_4HZ=1'b0;elsebeginif(counter==24'd12_499_999)11clk_4HZ=1'b1;elseclk_4HZ=1'b0;endendmodule对其进行综合。4、输入Notetabs.v模块,调用ROM的IPcore实现对《梁祝》音乐的存储。(1)IP核的创建【ProjcetNavigator】中新建CoregenIP类型的资源,输入CEO文件12(2)Verrilog文本输入moduleNoteTabs(Clk,ToneIndex);inputClk;output[3:0]ToneIndex;reg[7:0]Counter;always@(posedgeClk)beginif(Counter=138)Counter=8'b00000000;elseCounter=Counter+1'b1;endMusicu5(.addr(Counter),.clk(Clk),.dout(ToneIndex));endmodule对该模块进行综合,输入激励文件:13进行功能仿真,得到波形如下5、创建顶层文件modulesonger(clk_50M,reset,Code1,High1,Spkout);inputclk_50M;//CLK=50MHZinputreset;output[3:0]Code1;outputHigh1,Spkout;14wire[10:0]Tone;wire[3:0]ToneIndex;wireclk_4HZ,clk_12M;NoteTabsu0(.Clk(clk_4HZ),.ToneIndex(ToneIndex));ToneTabau1(.Index(ToneIndex),.Code(Code1),.High(High1),.Tone(Tone));Speakerau2(.Clk(clk_12M),.Tone(Tone),.SpkS(Spkout));div_50_12Mu3(clk_50M,clk_12M,reset);div_50_4HZu4(clk_50M,clk_4HZ,reset);15endmodule对顶层文件进行综合6、引脚锁定7、下载到实验板上进行验证三、实验结果及分析1、对tonetabs模块波形进行分析如图所示,根据音节发生器功能真值表,当发声控制输入Index为某一音符对应的值时,则对应某一音阶的数值将从端口Tone输出,同时由Code输出对应该音阶简谱的显示数码,并由High输出指示音阶高8度显示。如:index为4’h1时,tone输出11’h305,code为4’h1。显然与真值表相同,其他同样可验证的。2、对50M转12M的波形分析16有图可知,clk_50M进过4个周期后,clk_12进过一个周期,即为clk_12的频率为clk_50的1/4,显然达到了分频要求。四、实验思考题解答(实验指导书要求的思考题)1、电路上应该满足哪些条件,才能用数字器件直接输出的方波驱动扬声器发声?(1)输出的频率在扬声器的工作范围之内(扬声器的工作频率范围一般是能听见的声波);(2)驱动电流能够驱动扬声器。2、如果演奏其他乐曲,程序应做哪些方面的改动需要改动IP核中载入的CEF文件。五、体会1、这次实验,通过对原理的认知学习,对各电子琴模块的设计与认识,我基本掌握了电子琴的设计原理,同时也学会了如何对时钟脉冲进行分频与控制,进而得到想要的脉冲频率,如何创建与编写textfixture文件来进行波形仿真,以及如何实现IP核的调用与资源管理。2、实验中对存在IP的模块进行仿真存在较大的问题,始终得不到理想的波形,这说明我还要对IP核进行更深入的认识,更熟练的掌握IP核的应用。17
本文标题:FPGA报告实验4
链接地址:https://www.777doc.com/doc-5047194 .html