EDA实验设计---直接频率合成(DDS)设计_第1页
EDA实验设计---直接频率合成(DDS)设计_第2页
EDA实验设计---直接频率合成(DDS)设计_第3页
EDA实验设计---直接频率合成(DDS)设计_第4页
EDA实验设计---直接频率合成(DDS)设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、南京理工大学 EDA设计(II) 1004220334-马若飞 EDA实验报告-直接数字频率合成器(DDS)设计学院专业:电子工程与光电技术学院学生学号:1004220334学生姓名:马若飞指导老师:蒋立平交稿时间:2012年12月20日Ø 摘要:直接数字合成(DDS)是一种数字式技术,产生的频率和相位可调输出信号引用到一个固定频率时钟源模块的精度数字数据技术。本质上,参考时钟脉冲频率间隔分开一个DDS结构提出的二进制控制字。控制字通常是24到48位长,使 DDS的实施提供优越的输出频率调谐分辨率。在日益竞争成本的今天,高性能,功能与作用相结合,DDS 产品正迅速地成为除传统的高速频

2、率的模拟合成器解决办法之外的另一种选择。高速,高性能,D/A变换器和DDS结构到单片机(通常是一个完整DDS的解决办法)上的综合使这项技术能够瞄准广泛应用,而且在许多场合提供一种替代基于模拟的PLL合成器。在许多应用中,使用DDS的解决方案拥有灵活的特性,相较模拟等效电路锁相环频率合成器它有一些独特的优势。DDS 优势: 微赫兹的输出频率和相位调整功能,这些全部在数字控制下完成。 极其快的调相输出频率(或者相位),相位频率连续无畸变/使未达到的相关模拟还原时间异常。 DDS数字化实现了消除了手工系统调谐的需要操控和零部件老化和温度模拟合成器解决办法。 DDS实现了数字的控制接口,当它在处理器下

3、控制时系统可被遥控的环境变得容易、精确且尽可能完善。当它作为一个相位合成器时,DDS能够前所未有的匹配来控制I和Q的输出。Ø 关键字:直接频率合成器(DDS),任意的波形发生器,频率计目 录I、 正文3一、设计要求说明3二、方案论证3三、各模块设计原理5 1、相位累加器5 2、建立ROM宏单元6 3、频率控制与相位控制模块11 4、动态显示模块14 5、分频模块16 6、测频模块18 四、总装图20五、编程下载20II、结论21III、参考文献22IV、实验感想22I、 正文一、 设计要求说明:本实验的内容是使用DDS的方法设计一个任意频率的正弦信号发生器,利用Quartus II完

4、成设计、仿真等工作,并进行硬件测试。1、 基本要求:1) 利用QuartusII软件和SmartSOPC实验箱实现DDS的设计。2) 利用实验箱上的D/A转换器件将ROM输出的数字信号转换为模拟信号,能够通过示波器观察到正弦波形。3) 通过开关输入DDS的频率和相位控制字,可分别对波形的频率和相位进行调节,并能用示波器观察加以验证。4) 设计实现一个频率计,可对波形频率加以测量,同时和示波器上显示的频率进行对比,绝对误差不能超过1Hz。2、 扩展要求:1) 设计能输出多种波形(三角波、锯齿波、方波等)的多功能波形发生器,并能通过开关对各种波形进行转换。2) 当ROM中只存储1/4个波形的时候,

5、也能设计输出完整的波形。3) 可对输出的两路相位差进行测量,并且在数码管上显示。二、 方案论证:DDS即Direct Digital Synthesizer 数字合成器,是一种新型频率合成技术。具有相对带宽大、频率转换时间短、分辨力高、相位连续性好等优点,很容易实现频率、相位和幅度的数控调制,广泛应用于通讯领域。DDS的基本结构如图2.1所示,主要由相位累加器、相位调制器、正弦波数据表(ROM)、D/A转换器构成。相位累加器由N位加法器N位寄存器构成。每来一个时CLOCK,加法器就将频率控制字fword与累加寄存器输出的累加相位数据相加,相加的结果又反馈送至累加寄存器的数据输入端,以使加法器在

6、下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。用相位累加器输出的数据作为波形存储器(ROM)的相位取样地址,这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅值转换。波形存储器的输出送到D/A转换器,由D/A转换器将数字信号转换成模拟信号输出,DDS信号波程示意图如图2.2所示。由于相位累加器为N位,相当于把正弦信号在相位上的精度定为N位(N的取值范

7、围一般为2432),所以分辨率为1/2N。若系统时钟频率为Fclk,频率控制字fword为1,则输出频率为Fout=Fclk/2N,这个频率相当于“基频”。若fword 为B,则输出频率为:当系统输入时钟频率Fclk不变时,输出信号频率为频率控制字M所决定。由上式可得:其中B为频率字,注意B要取整,有时会有误差。选取ROM的地址(即相位累加器的输出数据)时,可以间隔选项,相位寄存器输出的位数M一般取1016位,这种截取方法称为截断式用法,以减少ROM的容量。M太大会导致ROM容量的成倍一升,面输出精度受D/A位数的限制未有很大改善。图2.1 DDS的基本结构图ROMD/A低通滤波器相位累加器

8、图2.2 DDS工作流程示意图三、 各模块设计原理:1、 相位累加器:累加器由一个全加器和一个寄存器构成。从功能上看寄存器即是将输入的数据暂存,然后延时一个时钟频率后输出。可通过VHDL语言当中的IF语句实现。所以全加器和寄存器可以通过VHDL语言集成在一起,形成累加器。在累加的过程中,对频率控制字进行累加,对相位控制字只加一次。整个累加器用VHDL语言描述如下:-累加器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity leijia2 isport( clk :in std_logic

9、; ad_fw :in std_logic_vector(11 downto 0); -频率控制字 ad_pw :in std_logic_vector(11 downto 0); -相位控制字 result :buffer std_logic_vector(11 downto 0) ); end leijia2;architecture maxpld of leijia2 issignal res:std_logic_vector(11 downto 0);beginprocess(clk,ad_fw,ad_pw) begin if rising_edge(clk) then res<

10、=res+ad_fw; result<=res+ad_pw; end if;end process;end maxpld;累加器集成后的模块为:累加器仿真波形为:2、 建立ROM宏单元:1) 启动Quartus II建立一个空白文件(Block Diagram/Schematic File);2) 双击页面,出现如图3.1的窗口,在Name输入栏里输入lpm_rom,点击“OK”;3) 出现如图3.2的窗口。选择VHDL,自行选择文件保存路径及文件名,点击Next;4) 出现如图3.3的窗口。本实验选择10 bits和4096 words(即12位)。点击Next,出现如图3.4的窗口,

11、不作任何设置,点击Next;5) 出现如图3.5的窗口。在File Name 内选择生成ROM中数据的mif文件(下面将具体阐述如何生成此文件)。点击finish 即可生成ROM宏单元。图 3.1图 3.2图 3.3图 3.4图 3.56) 新建ROM宏单元初始化mif文件:mif 文件有两种生成方式,第一种是 File->New->Other Files 选中Memory Initialization file。之后会生成一个类似 Excel 的表单,我们只需要在每个的地址位置上填上相应的数据即可。如图3.6所示。图 3.6由于这手工填写的方法非常费时,所以最好的方法就是参照mi

12、f文件的格式,用程序或软件自动生成一个mif文件,即是所说的第二种方法。在此介绍用C+语言生成ROM数据的方法,下面是产生ROM数据值的C+程序:#include "stdio.h"#include "math.h"int main(int argc, char *argv) int i=0; double s=0; for(i=0; i<4096; i+) /生成的波形表一个周期4096个点 s=sin(atan(1)*8*i/4096); /atan(1)*8=2pi printf("%d: %x; n", i,(int)(

13、s+1)*1023/2);/数据宽度10位 return 0;把述程序保存为romgen.cpp编译执行后,在Debug里边会生成一个可执行文件可执行文件romgen.exe。在DOS命令下执行:Romgen>sine.mif; /运行时要在romgen.exe文件所在的目录下生成sine.mif文件用记事本打开,加上如下所示的mif 文件的头部说明即可:DEPTH=4096; -数据个数为4096个WIDTH=10; -数据宽度为10bitsADDRESS_RADIX=DEC; -地址以10制显示DATA_RADIX=HEX; -数据以16进制显示CONTENTBEGIN -ROM的数

14、据,每个数据必须占用一行,否则会错 ENDROM模块为图为:用相同的方法可实现余弦波、三角波、锯齿波的ROM。3、 频率控制与相位控制模块:频率控制与相位控制一样,均是由一个模100计数器和一个BCD-二进制码转换器组成。模100计数器输出的是0100的BCD码,通过显示译码器之后可在数码管上显示。把模100计数器输出的BCD码输入BCD-二进制码转换器之后再分别输入到累加器的频率(ad_fw)、相位控制(ad_pw)端相加,就可实现对频率和相位的调节。1) 模100计数器由VHDL代码实现,具有清零功能,可级联。用VHDL语言描述如下:-模100计数器library ieee;use iee

15、e.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY cntm100 ISPORT(ci :in std_logic; -进位信号,输入 nreset :in std_logic; -清零信号(异步清零,低位有效),输入 clk :in std_logic; -时钟信号(下降沿触发),输入 co :out std_logic; -进位信号,输出 qh :buffer std_logic_vector(3 downto 0); -高位,输出 ql :buffer std_logic_vector(3 downto 0) -低位,输

16、出);END cntm100;ARCHITECTURE behave OF cntm100 ISBEGINco<='1' when (qh="1001" and ql="1001" and ci='1') else '0'PROCESS(clk, nreset) BEGIN IF(nreset='0')THEN qh<="0000" ql<="0000" ELSIF(clk 'EVENT AND clk='0'

17、)THEN if(ci='1') then if(ql=9) then ql<="0000" if(qh=9) then qh<="0000" else qh<=qh+1; end if; else ql<=ql+1; end if; end if; END IF; -END IF_resetEND PROCESS;END behave;模100计数器集成后模块为:模100计数器仿真波形为:1) BCD-二进制译码器由两个74184译码器组成。此处应该注意的是,由于计数器只能模100,译出的二进制码为只需7位,而R

18、OM为12位。为了使接口匹配,我们可以在译出的二进制码前面加0或者在其后面加0。由于ROM中有4096(212)个样点。移相100位很不明显,也达不到设计要求。所以对于相位控制字在译码的时候我们在输出的二进制码后面添0,对于频率控制字在输出二进制码前面添0即可。BCD-二进制译码器的74184组装图为:BCD-二进制译码器仿真波形为【BCD码(50)-二进制码(0110010)】:BCD-二进制译码器集成后模块为:这就是模100计数器和BCD-二进制码译码器连接在一起即组成频率(相位)控制模块。4、 动态显示模块:动太显示模块由两部分构成,一是七选一控制电路,二是七段数码管显示译码器7447。

19、理论上给七选一控制电路一个大于50Hz的频率(此处我们给1KHz),由于人眼的视觉暂留效应,我们仍然可以看到所有数码管均显示。七选一控制电路由VHDL代码实现,通进修改代码,最高可实现八路同时显示。用VHDL语言描述如下:-七选一的控制电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY SEL ISPORT(CLK : IN STD_LOGIC; RST : IN STD_LOGIC; QIN1 : IN STD_LOGIC_

20、VECTOR(3 DOWNTO 0); QIN2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); QIN3 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); QIN4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); QIN5 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); QIN6 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); QIN7 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); QOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

21、 SEL : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END SEL;ARCHITECTURE BEHAVE OF SEL ISBEGIN PROCESS(CLK,RST) VARIABLE CNT:INTEGER RANGE 0 TO 6; BEGIN IF(RST='0') THEN CNT:=0; SEL<="00000000" QOUT<="0000" ELSIF CLK 'EVENT AND CLK='1' THEN IF CNT=6 THEN CNT:=0; ELS

22、E CNT:=CNT+1; END IF; CASE CNT IS WHEN 0=>QOUT<=QIN1; SEL <="11111110" WHEN 1=>QOUT<=QIN2; SEL <="11111101" WHEN 2=>QOUT<=QIN3; SEL <="11111011" WHEN 3=>QOUT<=QIN4; SEL <="11110111" WHEN 4=>QOUT<=QIN5; SEL <="1

23、1101111" WHEN 5=>QOUT<=QIN6; SEL <="11011111" WHEN 6=>QOUT<=QIN7; SEL <="10111111" WHEN OTHERS=>QOUT<=QIN1; SEL <="11111111" END CASE; END IF; END PROCESS;END BEHAVE;七选一电路集成模块为:动态显示模块组装图为:动态显示集成模块图为:动态显示仿真图为(对QIN1=2时进行动显译码):5、 分频模块:分频器由VH

24、DL编译形成。主要编程思想是,设计一个变量用来计数,变量来的范围由分频数决定。前一半计数范围内使输出为0,后一半计数范围内使输出为1,即可实现分频,且占空比为50%。利用该思想,可轻易地对输入频率进行任意分频。本实验分频器可分出2KHz、1KHz、2Hz、1Hz、1MHz和0.5Hz的频- 18 -率。用VHDL语言描述如下:-分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin1 is port(clk_in,reset : in std_logic;clk_out0

25、,clk_out1,clk_out2,clk_out3,clk_out4,clk_out5 :out std_logic);end fenpin1;architecture structure of fenpin1 isconstant count0:integer:=24000;constant count1:integer:=48000;constant count2:integer:=24000000;constant count3:integer:=48000000;constant count4:integer:=48;constant count5:integer:=9600000

26、0;begindivide_clk:process(clk_in,reset)variable n0:integer range 0 to 23999; variable n1:integer range 0 to 47999;variable n2:integer range 0 to 23999999;variable n3:integer range 0 to 47999999;variable n4:integer range 0 to 47;variable n5:integer range 0 to 95999999;beginif (reset='1')thenn

27、0:=0; n1:=0; n2:=0; n3:=0;clk_out0<='0' clk_out1<='0' clk_out2<='0' clk_out3<='0'clk_out4<='0'clk_out5<='0'elsif falling_edge(clk_in)thenif(n0<(count0/2)thenclk_out0<='0'n0:=n0+1;elsif(n0<count0)thenclk_out0<='

28、1'n0:=n0+1;elsen0:=0;end if; -2KHzif(n1<(count1/2)thenclk_out1<='0'n1:=n1+1;elsif(n1<count1)thenclk_out1<='1'n1:=n1+1;elsen1:=0;end if; -1KHzif(n2<(count2/2)thenclk_out2<='0' n2:=n2+1;elsif(n2<count2)thenclk_out2<='1'n2:=n2+1;elsen2:=0;end

29、if; -2Hzif(n3<(count3/2)thenclk_out3<='0'n3:=n3+1;elsif(n3<count3)thenclk_out3<='1'n3:=n3+1;elsen3:=0;end if; -1Hzif(n4<(count4/2)thenclk_out4<='0'n4:=n4+1;elsif(n4<count4)thenclk_out4<='1'n4:=n4+1;elsen4:=0;end if; -1MHz if(n5<(count5/2)the

30、nclk_out5<='0'n5:=n5+1;elsif(n5<count5)thenclk_out5<='1'n5:=n5+1;elsen5:=0;end if; -0.5Hzend if;end process divide_clk;end architecture structure;分频器集成模块图为:分频器仿真图为:6、 测频模块:测频模块主要由两部分构成。一是模60K(本设计中频率最高为50K)的计数器,二是锁存器。模60K计数器由一个模60的计数器和一个模1000的计数器级联而成,前面已经讲过计数器的设计方法,这里不再赘述。至于锁

31、存器即是将输入延时之后输出,用一个IF语句,条件为上升沿(或下降沿)到来即可实现.锁存器的时钟端输入0.5Hz的频率,同时将0.5Hz频率进行反相延时之后输入模60K计数器的清零端。那么在2秒中之内,有1秒钟计数器在计数,1秒钟计数在清零。同时由于计数器中输入的0.5Hz经过了反相延时,所以正当计数器清零的时候锁存器将所计的1秒钟的脉冲个数(即是频率)锁存并输出到数码管显示。锁存器用VHDL语言描述如下:-锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY suocun ISPOR

32、T(LOAD :IN STD_LOGIC; DIN5 :IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN4 :IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN3 :IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN2 :IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN1 :IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT5 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT4 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); D

33、OUT3 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT2 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT1 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END;ARCHITECTURE BEHAVIOR OF suocun IS BEGIN PROCESS(LOAD,DIN1,DIN2,DIN3) BEGIN IF (LOAD 'EVENT AND LOAD='1') THEN DOUT5<=DIN5; DOUT4<=DIN4; DOUT3<=DIN3; DO

34、UT2<=DIN2; DOUT1<=DIN1; END IF; END PROCESS; END BEHAVIOR;测频器的总装图为:24测频器仿真图为(图中显示频率为49Hz):封装如下:四、 总装图:各模块设计完成之后,对各模块按照图2.1所示的顶层图进行总装、调试。总装图如下:五、 编程下载:1、分配管脚在打开的Quartus II 7.0窗口中,选择“Assignments-Pins”,在Location下拉选择相应的管脚或直接输入相应的管脚号。管脚分配图如下:2、安全设置选择“Assignments-Setting”,在Device&Pin Options中点击Unused Pins标签页,设置不用的管脚为三态。3、全程编译选择“Processing”,在其下拉菜单中选择“Start Compilation”进行全程编译。4、下载点击工具栏上的 按钮,在Hardware Setup中点击Add Hardware按钮,选定OK,将Hardware Setup改为ByteBlasterLPT1。在Program/configure列下的复选框中打勾后,点击

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论