欢迎来到天天文库
浏览记录
ID:21334412
大小:1.11 MB
页数:16页
时间:2018-10-21
《dds频率发生器设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、i南科技大学FPGA课程设计报告课程题目:指导老师:学生:波形发生刘桂华任健铭gg二o—二年五月三H【摘要】本文主要讨论了Verilog语言的基于DDS的波形发生器的设计。从设计要求入手,本文给出了DDS的详细设计过程,包括各个模块的设计思想,电路图,Verilog语言程序代码。其大致思想为通过频率控制字和相位控制字去控制正弦函数的ROM存储表的地址并对应着得到其幅度值,最终达到输出需要波形的目的。本设计除了完成指定的任务。在此基础上,为了验证实验结果我们通过Quartusll的仿真工具对设计的DDS进行了仿
2、真,并且还进行了理论分析,发现理论和实践结合的非常好。【关键词】FPGADDSVerilog波形发生器QuartusII(1)设计并实现一个可产生正弦波、三角波波形发生器;(2)其工作频率为50MHz,可产生1MHz、2MHz、3MHz、4MHz、5MHz的正弦波、三角波。所产生波形的幅度、和位均可调整,输出数据的字长为12bit。若波形的频率为nMHz,则相位的最小调幅为2k*n/60;(3)要求进行4级幅度调整,即ROM屮存储的数据字长为10bit,ROM输出的数据分别乘以001、010、011、和100
3、。2.设计原理及分析本波形发生器的设计总共包含有频率选择、波形选择、相位选择和幅度选择四个大块。其具体结构见阁2-1.图2-1整体设计方案2.1DDS基本原理DDS的基本原理是利用采样定量,通过奔表法产生波形。DDS的结构有很多种,其基本的电路原理可用图2-2来表示。图2-2DDS基本电路原理图fc其中,相位累加器由N位加法器与N位累加寄存器级联构成如图2-3:fc图2-3相频累加器每来一个时钟脉冲cf,加法器将控制字k与累加寄存器输出的累加相位数据相加,把相加后的结果送到累加寄存器的数据输入端,以使加法器在
4、不一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用I,不断对频率控制字进行线性相位加累加。由此可以看出,相位累加器在每一个时钟输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的输出频率就是DDS输出的信号频率。接着,把相位累加器输出的数据作为波形存储器(ROM)的相位取样地址。这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查山(可以看成是一种映射),完成相位到相放幅值转换。2.2频率选择基于DDS的波形发生器,其输出波形的频率由两方面决定。一
5、方面是由频率控制字,即波形输出的步长决定;另一方面是由波形点输出的固有频率决定。DDS输出信号的频率与基准时钟频率的关系由下式给定:其中,cf为基准时钟频率,2'为波形存储器的字数,N为相位累加器的位数,k为频率控制字。一般的,k小于N。假设基准时钟频率为131kHz,累加器为8位,kM,则f。,2048Hz。2.3波形选择木设计要实现三角波和正弦波这两种波形的输出。所以,在整个模块设定了一个输入控制端。通过查询这个输入控制端的电平的高低来确定输出正弦波还是输出三角波。其实质还是利用了rom表完成了对相同相位
6、的不同幅度的输出。2.4初相位选择本设计中,对于产生的波形的初相的控制我们同样设定了一个输入控制端。通过控制端的不同状态给波形添加不同的初相。其原理是对相频累加器的初次输出加上一个特定的值。在本设计中无法实现初相的任意值设定。本设计只是设定了几个特定的初相供选择己验证理论的正确性。2.5幅度选择按照设计耍求,波形的最终输出幅度值是可调节的。设计要求中规定幅度值是能够按照1到4倍的大小调节的。故在本设计中,在最后输出前,我们增加了一个幅度按调节的部分。将相位幅度转换成功后的值再乘上一个要求的调幅系数为最终的波形
7、输出。2.各模块代码及电路原理3.1.频率控制字modulef_ctr(sel,f_out,en,reset);input[2:0]sel;inputen,reset;f_ctrsel[2..O]f_out[8..0]enresetinstoutput[8:0]f_out;reg[8:0]f_out;always@(sel)beginif(!reset)f_out<=9'bOOOOOOOOO;elseif(en)begincase(sel)3*b001:f_out<=9'b001010010;3'b010:f
8、_out<=9'b010100100;3'b011:f_out<=9'b011110110;3'bl00:f_out<=9^101001000;311014out<=9^110011010;default:f_out<=9'bOOOOOOOOO;endcaseendendendmodule3.2相频累加器/相位控制字(溢出没看懂)modulen_full_adder(a,b,clk,sel/y);/
此文档下载收益归作者所有