基于FPGA的直接数字频率合成器设计.doc
《基于FPGA的直接数字频率合成器设计.doc》由会员分享,可在线阅读,更多相关《基于FPGA的直接数字频率合成器设计.doc(29页珍藏版)》请在三一办公上搜索。
1、 JIANGSU UNIVERSITY OF TECHNOLOGY FPGA技术实验报告 基于FPGA的直接数字频率合成器设计学 院: 电气信息工程学院 专 业: 测控技术与仪器 班 级: 11测控2 姓 名: 学 号: 指导教师: 时 间: 2014年12月 目 录一、功能要求与整体设计-(3)1.1功能要求-(3)1.2整体设计-(3) 二、 DDS技术的基本原理-(3)三、 基本DDS设计-(5)3.1 频率预置与调节电路-(5)3.2 累加器-(5)3.3 波形存储器-(6)3.4 D/A转换器-(6)3.5 低通滤波器-(6)四 、基于DDS的正弦信号发生器设计实现-(6)4.1 3
2、2位加法器ADDER32设计-(6)4.2 32位寄存器REG32B设计-(7)4.3 正弦波ROM设计-(8)五、程序设计-(9)5.1正弦波产生程序设计-(9)5.2 三角波产生程序设计-(11)5.3方波产生程序设计-(12)5.4锯齿波产生程序设计-(14)5.5 顶层仿真-(16)六、 DAC0832接口电路及程序设计-(17)6.1 DAC0832接口电路设计-(17)6.2 DAC0832 接口程序设计-(18)七、 软硬件调试-(18)7.1 软件下载-(18)7.2 硬件调试-(19)八、心得体会-(22)九、参考文献-(22)十、附录-(23) 附录1 源程序清单-(23)
3、 附录2 实物图-(27)一、功能要求和整体设计1.1功能要求设计一个多功能波形发生器。该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。具体要求如下:(1)具有产生正弦波、方波、三角波、锯齿波4种周期性波形的功能。(2)用键盘输入编辑生成上述4种波形(同周期)的线性组合波形。(3)具有波形存储功能。(4)输出波形的频率范围为100Hz200kHz;重复频率可调,频率步进间隔100Hz。(5)具有显示输出波形的类型、重复频率(周期)和幅度的功能。 1.2整体设计多功能波形发生器系统由输入部分、FPGA部分、DAC、显示部分四部分组成。其系统框图如图1-1所示。 图1-1 系统框
4、图二、DDS技术的基本原理 对于正弦信号发生器,它的输出可以用下式来描述: (1)其中,Sout是指该信号发生器的输出信号波形,fout只输出信号对应的频率。上式的表述对于时间t是连续的,为了用数字逻辑实现该表达式,必须进行离散化处理,用基准时钟clk进行抽样,令正弦信号的的相位为 (2)在一个clk周期clk,相位的变化量为 (3)其中fclk指clk的频率对于2可以理解为“满”相位,为了对进行数字量化,把2切割成2N,用词每个clk周期的相位增量用量化值B来描述:B=(2N)/2,且B为整数与上式联立可得: (4)显然,信号发生器可以描述 (5)其中k-1指前一个clk周期的相位值,同样得
5、出 (6)由以上推倒可以得出,只要对相位的量化值进行简单的累加运算,就可以得到正弦信号的当前相位值,而用于累加的香味增量量化值B决定了信号的输出频率fout并呈现简单的线性关系。 直接数字合成器DDS就是根据以上原理而设计的数控频率合成器,图2-1为其基本DDS结构,主要有相位累加器、相位调制器、正弦ROM查找表构成图中的相位累加器、相位调制器、正弦ROM查找表是DDS结构中的数字部分。图2-1 基本DDS结构三、 基本DDS设计DDS基本组成如图3-1所示。图3-1为DDS基本组成3.1 频率预置与调节电路 此部分主要实现频率控制量的输入与调节,不变量K被称为相位增量,也叫频率控制字,通过调
6、节频率控制字可以改变信号的输出频率。3.2 累加器相位累加器由加法器和寄存器组成,其组成框图如图3-2所示。 图3-2 相位累加器组成框图 在时钟的作用下,进行相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作。3.3 波形存储器 可以进行波形的相位幅值转换。ROM的N位地址:把0360度的正弦角度离散成具有2N个样值的序列 ;ROM的D位数据位:2N个样值的幅值量化为D位二进制数据。3.4 D/A转换器 D/A转换器可以把已经合成的波形的数字量转换成模拟量。3.5 低通滤波器滤除生成的阶梯形正弦波中的高频成分,将其变成光滑的波形。四、基于DDS的正弦信号发生器设计实现根据
7、设计原理框图分别设计出加法器、寄存器、正弦波等ROM。 4.1 32位加法器ADDER32设计 在原理图文件下在空白处双击,单击“MegaWizard Plug-In Manager”选择第一项,如图4-1所示 。图4-1 原理图设置 选择器件为cyclone,语言方式为VerilogHDL。在算数项Arithmetic中选择计数器LPM_ADD_SUB.存于所建工程文件夹下命名为ADDER32. 单击NEXT,进入以后对话框后选择32位加法器工作模式选择有一位加法进位输出,选择有符号加法方式,选择2级流水线工作模式 ,此时该加法器变为有时序电路的模块,最后至finish按钮,编辑完成,32位
8、加法器模块如图4-2所示。 图4-2 32位加法器模块4.2 32位寄存器REG32B设计 寄存器DFF32由LMP_FF宏模块担任,生成方法同ADDER32相同,设置位数为32位,且为时序控制模块,如图4-3所示。图4-3 32位寄存器模块 DFF32与ADDER32构成一个32位累加器其高十位A31.22为波形数据ROM的地址。 十位加法器和寄存器与32位方法相同。4.3 正弦波ROM设计 a.首先通过mif文件来产生正弦波注意:在生成正弦波的时候要注意与sin_rom中的数据一致。即位DEPTH = 1024;WIDTH = 10;这样才能保证在最后的输出中能够有完整的正弦波图形输出。存
9、盘并命名为sin_rom.mifb.LPM_ROM的订制:按ADDER32的产生方法来产生LMP_ROM,在宏模块选择中选“Memory Complier”中“ROM:1-PORT”项,依次设定地址线与数据线的位宽均为十位,最后产生LMP_ROM,如图4-4所示。图4-4 正弦波模块 其他波形ROM与正弦波类似。五、程序设计5.1 正弦波产生程序设计 通过循环不断地从RAM中依次读取正弦波一个周期在时域上64个采样点的波形数据送入波形DAC,从而产生正弦波。正弦波的频率取决于读取数据的速度。程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRAR
10、Y altera_mf;USE altera_mf.all;ENTITY sin_rom ISPORT(address: IN STD_LOGIC_VECTOR (9 DOWNTO 0);inclock: IN STD_LOGIC ; q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);END sin_rom;ARCHITECTURE SYN OF sin_rom ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (9 DOWNTO 0);COMPONENT altsyncramGENERIC (clock_enable_input_a: STRI
11、NG;clock_enable_output_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a: NATURAL;operation_mode: STRING;outdata_aclr_a: STRING;outdata_reg_a: STRING;ram_block_type: STRING;widthad_a: NATURAL;width_a: NATURAL;width_byteena_a: NATURAL);PORT (clock
12、0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (9 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);END COMPONENT;BEGINq BYPASS,clock_enable_output_a = BYPASS,init_file = myrom.mif,intended_device_family = Cyclone II,lpm_hint = ENABLE_RUNTIME_MOD=NO,lpm_type = altsyncram,numwords_a = 1024,operation_
13、mode = ROM,outdata_aclr_a = NONE,outdata_reg_a = CLOCK0,ram_block_type = M4K,widthad_a = 10,width_a = 10,width_byteena_a = 1)PORT MAP (clock0 = inclock,address_a = address,q_a = sub_wire0);END SYN; 5.2 三角波产生程序设计 三角波波形是对称的,每边呈线形变化,所以可以根据地址数据做简单运算,就可以得到三角波。程序如下:library ieee;use ieee.std_logic_1164.all
14、;use ieee.std_logic_unsigned.all;-程序包entity triangle is-定义三角波实体port(clk,reset:in std_logic;q:out std_logic_vector(7 downto 0);end triangle;architecture behav of triangle is -定义三角波结构体beginprocess(clk,reset) -进程开始variable tmp:std_logic_vector(7 downto 0); -定义中间变量tmp、avariable a:std_logic;beginif reset
15、=0then -复位信号设置tmp:=00000000;elsif rising_edge(clk) then -捕捉时钟信号上升沿if a=0then -a=0时依次输出三角波上升沿if tmp=11111110thentmp:=11111111;a:=1;else tmp:=tmp+1; end if;else -a=1时依次输出三角波下降沿if tmp=00000001thentmp:=00000000;a:=0;else tmp:=tmp-1; end if;end if;end if;q=tmp; -输出信号q=tmpend process; end behav;5.3 方波产生程序
16、设计 方波产生也是由64个采样点组成, 64个采样点的数据只有“低电平”和“高电平” 2种状态。更改“低电平”和“高电平”出现的比例,可以达到调节占空比的目的。程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity square isport(clk,reset: in std_logic;q:out std_logic_vector(7 downto 0);end square;architecture behav of square issignal a:std_logic;b
17、eginprocess(clk,reset)variable tmp:std_logic_vector(7 downto 0);beginif reset=0thena=0; elsif rising_edge(clk) thenif tmp=11111111thentmp:=00000000;else tmp:=tmp+1;end if;if tmp=10000000thena=1;elsea=0;end if;end if;end process;process(clk,a)begin if rising_edge(clk)thenif a=1 thenq=11111111;elseq=0
18、0000000;end if;end if;end process;end behav; 5.4 锯齿波产生程序设计 产生单调性锯齿波,因此把地址数据进行左移2位,结果送波形DAC就可。 程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all; LIBRARY altera_mf;USE altera_mf.all; ENTITY juxing ISPORT(address: IN STD_LOGIC_VECTOR (9 DOWNTO 0);clock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0);E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 直接 数字 频率 合成器 设计

链接地址:https://www.31ppt.com/p-4148214.html