《数字系统课程设计报告可调信号发生器的Verilog HDL设计.doc》由会员分享,可在线阅读,更多相关《数字系统课程设计报告可调信号发生器的Verilog HDL设计.doc(17页珍藏版)》请在三一办公上搜索。
1、 课程设计报告课程名称现代数字系统设计设计题目可调信号发生器的Verilog HDL设计系 别机械与电子工程系班 级07电信2班学生姓名学 号任课教师完成时间2010/7/7南湖学院教务办设计任务 起至日期:2010/6/24-2010/7/7设计题目:可调信号发生器的Verilog HDL设计设计要求:1、 设计一可调信号发生器;2、 能实现正弦波、三角波和矩形波三种波形输出;3、 实现频率可调,调节倍率为10;4、 利用Verilog HDL对此信号发生器进行建模;5、 在Modelsim SE、Quartus II进行仿真测试,给出仿真结果。可调信号发生器的Verilog HDL设计一、
2、设计任务与要求随着大规模集成电路技术和EDA技术的迅速发展,使得数字系统的硬件设计如同软件设计那样方便快捷,而Verilog HDL 是当前应用最广泛的并成为IEEE标准的一种硬件描述语言。Verilog HDL是在C语言的基础上演化而来,具有结构清晰、文法简明、功能强大、高速模拟和多库支持等优点。为此本文通过使用Verilog HDL硬件描述语言设计了一可产生正弦波、方波、三角波、锯齿波等多种波形信号发生器,而且实现频率可调,并能在在Modelsim SE、Quartus II进行仿真测试,得出出仿真结果。二、方案设计与论证课题要求通过使用Verilog HDL硬件描述语言设计了一可产生正弦
3、波、方波、三角波、锯齿波等多种波形信号发生器,而且实现频率可调,并能在在Modelsim SE、Quartus II进行仿真测试,得出出仿真结果。方案一:采用专用的波形产生单片机芯片,在产生波形是具有十分明显的优势,但是在市场上难以买到。方案二:采用通用型单片机,如MCS-51系列。配合高速函数发生器MAX038集成芯片。可以实现正弦波、三角波、方波、脉冲波,达到系统设计的要求。但是单片机的可用资源比较少,数据处理速度跟不上信号数据的变化。同时需要大量的外围器件来支撑。方案三:采用FPGA器件,使用DDS技术。FPGA器件是一种超低功耗的、高度集成的器件,其内部带有锁相环、寄存器等丰富的单元器
4、件。FPGA内部集成的锁相环可以把外部时钟倍频到几百兆,并且极其准确。FPGA器件管脚数一般都是数百个,可以方便连接外设。FPGA处理的是并行的逻辑,可以同时处理不同的任务,这就成就了FPGA器件有更高的效率,这是其它器件所不能代替的。FPGA有大量的软核,如单片机、DSP软核,并且IO口仅受FPGA自身IO限制。因此只要单片机、DSP可以实现的功能FPGA器件一样可以实现,并且实现的更加完善。DDS的频率分辨率在相位累加器的位数N足够大时,从理论上是可以获得相应的分辨率的;DDS是一个全数字结构的开环系统,无反馈环节,其速度极其快,一般在纳秒级,完全跟得上数据的变化;DDS的相位误差主要是依
5、赖于时钟的相位特性,相位误差很小。另外DDS的相位是连续变化的,形成的信号具有良好的频谱。这三点是传统信号发生器无法实现的。通过以上方案的比较,故选择方案三作为本课题系统设计方案三、系统总体设计可调信号发生器系统由顶层模块、FPGA器件、控制开关和输入输出模块等部分组成,如下图所示。在PFGA中实现的顶层文件包含地址指针和数据ROM,12部分。其中,数据ROM由QuartusII软件的LPM_ROM模块构成,能达到最优设计,LPM_ROM由FPGA中的EAB或ESB实现。数据ROM中存储的正弦波形、方波、三角波和锯齿波4种信号各一个周期的波形数据(在此选择一个周期128个数据样点),地址指针读
6、取的ROM衷不同区域的数据,可产生不同的波形,并通过使用嵌入式逻辑分析仪进行实时测试2,根据取数据间隔的不同,即可实现调整频率的功能。3.1系统模块设计可调信号发生器系统的功能模块主要由顶层文件(verilogHDL源程序)和波形ROM两部分组成。波形数据ROM设计的主要包括设计的波形数据ROM初始化数据文件和定制ROM元件(datarom.v)。3.1.1顶层文件设计本系统采用Altera公司器件为核心,通过QuartusII软件编写VerilogHDL源程序,实现一个可以产生正弦波、方波、三角波和锯齿波四种信号,并且能够实现信号转换以及频率可调功能的信号发生器3。其中,contron控制产
7、生波形的种类,0、1、2、3分别产生正弦波、锯齿波、方波和三角波;i控制读取数据间隔,调整频率。FPGA是20世纪80年代中期出现的高密度可编程逻辑器件,它一般由布线资源分隔的可编程逻辑单元构成阵列,又由可编程I/O单元围绕阵列构成整个芯片,排列阵列的逻辑单元由布线通道中的可编程内连线连接起来实现一定的逻辑功能。一个FPGA包含丰富的具有快速系统速度的逻辑门、寄存器和I/O组成。 复杂可编程逻辑器件FPGA具有工作频率高、性能可靠、集成度高等优点。采用VerilogHDL硬件描述语言设计,在EDA工具Quartus中编写,并综合,通过在系统可编程技术配置FPGA器件,使其形成符合用户要求的专用
8、集成电路。本系统的核心技术在于直接数据合成(DDS)技术。DDS技术是一种新型的频率合成技术,理论上是可以合成任意频率的波形。其基本原理框图如下图所示。此次以正弦波合成为例,把一个周期的单位振幅正弦波的相位分成2N个等间隔点,则两点之间的相位间隔为2/2N,相应各点的函数值用D位二进制表示,顺序地放入到ROM中,构成“函数表”。相位累加器的相位以n*(2/2N)(其中n=1,2,3,)为增量,在基准频率f0的控制下产生A位相位数据对ROM寻址,将对应的D位函数值数据送入到D/A转化器输出相应的波形,这时频率分辨率为f0min= fc/2N。用N位频率码k控制相位累加器的n*(2/2N)时输出信
9、号频率为f0=k*fc/2N。由于DDS是相位控制系统,所以其也具备了很强的信号调制能力,这样就有利于各种调制方式(其原理同输出波形原理一样,因此这里也不再重复)以正弦波产生为例,正弦波形的源程序如下:/* 信号定义inclock时钟输入control波形选择 00 正弦波 01 锯齿波 10 方波 11 三角波i调频输入q_out波形数据输出 */module signal_gene( inclock, q_out, control, i );input inclock; / 时钟输入output7:0 q_out; / 波形数据输出input1:0 control; / 波形选择input
10、3:0 i; / 调频输入reg7:0 m, k;reg8:0 address;datarom datarom_component / 调用波形ROM( .address( address ), / 地址 .clock( inclock ), / 时钟 .q_out( q_out ) ); / 数据always ( posedge inclock )begin case( control )0: / 产生正弦波 beginif( control = 1 ) address = 128;if( control = 2 ) address = 256;if( control = 3 ) addre
11、ss = 384;if( i = 0 | i = 1 ) / 步长为1beginaddress = 127 ) / 完成1个周期address = 0;endelsebegin / 步长大于1k = 127 / i;m = i * k; / 最后1个样点address = m ) / 完成1个周期address = 0;endend3.2波形数据ROM初始化的数据文件设计初始化数据文件格式有2种:memory initialization file(.mif)格式文件和hexadecimal(Intelformat)file(.hex)格式文件。本设计共产生四种波形,每种波形一个周期取128个
12、数据,因此选用的初始化数据个数number为512个,数据宽度取8位的ROM数据。在MATALAB中,调用各函数生成采样数据文件。Matalab正弦采样函数如下clc;fid = fopen(datarom.txt,wt);x = 0:0.0078:1;y = 100*(sin(2*pi*x)+1);plot(x,y);for i = 1:128 fprintf(fid,9_d%d:q=8_h%s;n,i,dec2hex(floor(y(i),2);endfclose(fid);注:采样点数据见附页3.3定制ROM元件在QuartusII中,选择datarom,模块数据线宽度和数据单元个数、选
13、择地址锁信号clock以及数据文件完成设计,可产生用于波形数的ROM文件datarom.v。datarom模块module datarom(address,clock,q_out);input8:0address;input clock;output7:0q_out;reg7:0q;always (posedge clock)case(address)./导入各波形采样点数值.default :q = 8d0;endcaseassign q_out = q;endmodule数据文件生成定制数据rom模块图定制数据rom模块图四、仿真过程与仿真结果用Quartus II仿真可得信号产生波形调试
14、图信号产生仿真波形 信号调试波形 采样后得到波形 信号波形图五、结果分析与结论经测试,基于FPGA信号发生器基本达到了设计所有要求。仿真能够产生波形,且仿真波形与预测结果一致。本设计采用了较为灵活的设计方案,本系统具有结构紧凑,功能强大,可扩展性强的特点,并且调试相对容易,进度可控制性强。六、设计心得通过本次课程设计,我基本对FPGA的设计流程有了入门的了解和认识,在课堂之外进一步加深了对EDA课程各知识点的学习和以及quartusII软件开发平台的操作。也深深地感受到,工科的学习是来不得半点虚伪的,一定要自己动手操作,不懂就是不懂。对于程序的编写过程其实就是一个改错的过程,通过改错就会发现自
15、己只是的不足。做课程设计的过程也是一个升华自我耐心的机会,不能因为一时找不到方法就放弃。课程设计与此同时也让我加深强了对课题的专业知识的认识和对专业文件检索能力。很欣赏胡老师的这种学习成绩考核方法,实在,富有创新精神。这种考核方案还是更能真实的检验每个同学的学习效果。也能让各同学真正的学以致用,学到东西,也能对自己的学习和大学生活有个更加清醒的认识。希望并恳请胡老师,在工科专业课程考核中多多推广这种考核方案。七、参考文献1王金明.数字系统设计与VerilogHDLM.北京:电子工业出版社,2006:285-294.2栾佳明、张秀娟.基于FPGA可调信号发生器的设计.Electronic Des
16、ign Engineering,2010第5期3黄乡生等.基于DDS和FPGA的数字函数发生器的设计和实现.东华理工大学学报(自然科学版)2009第4期致 谢我能够顺利完成这次课程设计是在许多人的帮助下做到的。首先是我的指导老师胡老师。本次课程设计的选题、资料收集、报告的撰写都是在胡老师的指导下完成的。在此,我对胡老师给予我的帮助表示衷心的感谢。再次就是身边的一些同学,特别是李坡同学,在我遇到问题时,我们一起探讨,为我解决许多问题,在进行采样点的提取以及软件的仿真上他给了我很大的帮助,更坚定了我认真学习的决心。没有他的帮忙我也不可能顺利的完成我的课程设计,在这里对他表示由衷的感谢。本文在写作过
17、程中参考了大量文献资料,主要文献资料已开列出来,本文有些句子或段落引自这些参考文献,在此向所有的作者表示深深的感谢!最后再次对辅导老师和帮助过我的朋友们致以真诚的感谢。附页:/* 信号定义inclock时钟输入control波形选择 00 正弦波 01 锯齿波 10 方波 11 三角波i调频输入q_out波形数据输出 */module signal_gene( inclock, q_out, control, i );input inclock; / 时钟输入output7:0 q_out; / 波形数据输出input1:0 control; / 波形选择input3:0 i; / 调频输入r
18、eg7:0 m, k;reg8:0 address;datarom datarom_component / 调用波形ROM( .address( address ), / 地址 .clock( inclock ), / 时钟 .q_out( q_out ) ); / 数据always ( posedge inclock )begin case( control )0: / 产生正弦波 beginif( control = 1 ) address = 128;if( control = 2 ) address = 256;if( control = 3 ) address = 384;if( i
19、 = 0 | i = 1 ) / 步长为1beginaddress = 127 ) / 完成1个周期address = 0;endelsebegin / 步长大于1k = 127 / i;m = i * k; / 最后1个样点address = m ) / 完成1个周期address = 0;endend1: / 产生锯齿波 beginif( control = 0 ) address = 0;if( control = 2 ) address = 256;if( control = 3 ) address = 384;if( address 128 ) address = 128;elseb
20、eginif( i = 0 | i = 1 )beginaddress = address + 1;if( address = 255 )address = 128;endelsebegink = 127 / i;m = i * k;address = ( m + 128 ) )address = 128;endendend2: / 产生方波beginif( control = 0 ) address = 0;if( control = 1 ) address = 128;if( control = 3 ) address = 384;if( address 256 ) address = 2
21、56;else begin if( i = 0 | i = 1 )beginaddress = address + 1;if( address = 383 )address = 256;endelse begink = 127 / i;m = i * k;address = ( m + 256 ) )address = 256;end end end3: / 产生三角波 beginif( control = 0 ) address = 0;if( control = 1 ) address = 128;if( control = 2 ) address = 256;if( address 38
22、4 ) address = 384;elsebegin if( i = 0 | i = 1 ) beginaddress = address + 1;if( address = 511 )address = 384; end else begink = 127 / i;m = i * k;address = ( m + 384 ) )address = 384;endendend endcaseendendmodule采样数据9d1:q=8h64;9d2:q=8h68;9d3:q=8h6D;9d4:q=8h72;9d5:q=8h77;9d6:q=8h7C;9d7:q=8h80;9d8:q=8h
23、85;9d9:q=8h8A;9d10:q=8h8E;9d11:q=8h93;9d12:q=8h97;9d13:q=8h9B;9d14:q=8h9F;9d15:q=8hA3;9d16:q=8hA7;9d17:q=8hAA;9d18:q=8hAE;9d19:q=8hB1;9d20:q=8hB4;9d21:q=8hB7;9d22:q=8hB9;9d23:q=8hBC;9d24:q=8hBE;9d25:q=8hC0;9d26:q=8hC2;9d27:q=8hC3;9d28:q=8hC4;9d29:q=8hC6;9d30:q=8hC6;9d31:q=8hC7;9d32:q=8hC7;9d33:q=8hC
24、7;9d34:q=8hC7;9d35:q=8hC7;9d36:q=8hC6;9d37:q=8hC6;9d38:q=8hC5;9d39:q=8hC3;9d40:q=8hC2;9d41:q=8hC0;9d42:q=8hBE;9d43:q=8hBC;9d44:q=8hB9;9d45:q=8hB7;9d46:q=8hB4;9d47:q=8hB1;9d48:q=8hAE;9d49:q=8hAA;9d50:q=8hA7;9d51:q=8hA3;9d52:q=8h9F;9d53:q=8h9B;9d54:q=8h97;9d55:q=8h93;9d56:q=8h8F;9d57:q=8h8A;9d58:q=8h8
25、6;9d59:q=8h81;9d60:q=8h7C;9d61:q=8h77;9d62:q=8h73;9d63:q=8h6E;9d64:q=8h69;9d65:q=8h64;9d66:q=8h5F;9d67:q=8h5A;9d68:q=8h55;9d69:q=8h51;9d70:q=8h4C;9d71:q=8h47;9d72:q=8h42;9d73:q=8h3E;9d74:q=8h39;9d75:q=8h35;9d76:q=8h31;9d77:q=8h2C;9d78:q=8h28;9d79:q=8h25;9d80:q=8h21;9d81:q=8h1D;9d82:q=8h1A;9d83:q=8h1
26、7;9d84:q=8h14;9d85:q=8h11;9d86:q=8h0E;9d87:q=8h0C;9d88:q=8h09;9d89:q=8h07;9d90:q=8h06;9d91:q=8h04;9d92:q=8h03;9d93:q=8h02;9d94:q=8h01;9d95:q=8h00;9d96:q=8h00;9d97:q=8h00;9d98:q=8h00;9d99:q=8h00;9d100:q=8h00;9d101:q=8h01;9d102:q=8h02;9d103:q=8h04;9d104:q=8h05;9d105:q=8h07;9d106:q=8h09;9d107:q=8h0B;9d108:q=8h0D;9d109:q=8h10;9d110:q=8h13;9d111:q=8h16;9d112:q=8h19;9d113:q=8h1C;9d114:q=8h20;9d115:q=8h23;9d116:q=8h27;9d117:q=8h2B;9d118:q=8h2F;9d119:q=8h34;9d120:q=8h38;9d121:q=8h3C;9d122:q=8h41;9d123:q=8h46;9d124:q=8h4A;9d125:q=8h4F;9d126:q=8h54;9d127:q=8h59;9d128:q=8h5E;