文档库 最新最全的文档下载
当前位置:文档库 › 【EDA课程设计】--”DDS信号发生器“

【EDA课程设计】--”DDS信号发生器“

【EDA课程设计】--”DDS信号发生器“
【EDA课程设计】--”DDS信号发生器“

电子课程设计

------DDS信号发生器合成器

学院:

专业班级:

姓名:

学号:

指导老师:

2012年12月

直接数字频率合成器(DDS)

一、设计任务与要求

直接数字频率综合技术,即DDS技术,是一种新型的频率合成技术和信号产生方法。利用EDA技术和FPGA实现直接数字频率合成器DDS的设计。

设计要求:

1、利用QuartusII软件实验箱实现DDS的设计;

2、通过实验箱上的开关输入DDS的频率和相位控制字,并能用示波器观

察加以验证;

3、系统具有清零和使能的功能;

4、DDS中的波形存储器模块用Altera公司的Cyclone系列FPGA芯片中

的ROM实现。

二、总体框图

图1 DDS总体框图

1、模块的功能

(1)频率预置和调节电路

不变量K称作相位增量,也叫频率控制字。此模块实现频率控制量的输入。

(2)相位累加器

相位累加器是一个带有累加功能的N位加法器,它以设定的N位频率控制字K作为步长进行线性累加,当其和满时,计数器清零,并进行重新运算,它使输出频率正比于时钟频率和相位增量之积。

(3)相位寄存器

相位寄存器是一个N位的寄存器,它对输入端输入的数据进行寄存,当下一个时钟到来时,输出寄存的数据。

图2 相位累加器

相位累加器的组成=N位加法器+N位寄存器

相位累加器的作用:在时钟的作用下,进行相位累加

注意:当相位累加器累加满量时就会产生一次溢出,完成一个周期

的动作。

(4)正弦查找表

正弦查找表ROM是DDS最关键的部分,也是最复杂的部分,设计时首先需对正弦函数进行离散采样,接着将采样的结果放到ROM模块的对应存储单元中,每一位地址对应一个数值,输出为8位。ROM中必须包含完整的正弦采样值,此设计采样256点,而且还要注意避免在按地址读取ROM内容时可能引起的不连续点,避免量化噪音集中于基频的谐波上。

作用:进行波形的相位----幅值转换

原理:

ROM的N位地址

把0° 360°的正弦角度离散成具有2N个样值的序列

ROM的D位数据位

则2N个样值的幅值量化为D位二进制数据

(5) D/A转换器

D/A转换器的作用:把已经合成的正弦波的数字量转换成模拟量。

典型D/A转换器芯片DAC0832:

DAC0832是一个8位D/A转换器。单电源供电,从+5V—+15V均可正常工作。基准电压的范围为正负10V;电流建立时间为1s;CMOS工艺,低功耗,仅20mW。DAC0832转换器芯片为20引脚,双列直插式封装,其引脚排列如图4所示。

图4 DAC0832引脚图

对各引脚信号说明如下:

▲ DI7—DI0:转换数据输入。

▲ CS:片选信号(输入),低电平有效。

▲ ILE:数据锁存允许信号(输入),高电平有效。

▲ WR1:写信号(输入),低电平有效。

▲ WR2:第2写信号(输入),低电平有效。

▲ XFER:数据传送控制信号(输入),低电平有效。

▲ IOUT1、IOUT2:电流输出1、2,

DAC转换器的特性之一是:Iout1+Iout2=常数

▲ RFB—反馈电阻端

▲ VREF:基准电压,其电压可正可负,范围-10V—+10V.

▲ DGND:数字地

▲ AGND:模拟

(6)低通滤波器

低通滤波器的作用:滤除生成的阶梯正弦波中的高频成分,将其变成光

滑的正弦波。

2、设计思路

直接数字频率合成器(Direct Digital Frequency Synthesizer)是一种基于全数字技术,从相位概念出发直接合成所需波形的一种频率合成技术。

其电路系统具有较高的频率分辨率,可以实现快速的频率切换(<20ns),频率分辨率高(0.01HZ),频率稳定度高,输出信号的频率和相位可以快速程控切换,输出相位可连续,可编程以及灵活性大等优点。DDS技术很容易实现频率、相位和幅度的数控调制,广泛用于接收本振、信号发生器、仪器、通信系统、雷达系统等,尤其适合调频无线通信系统。

图1是DDS的基本总体框图,频率控制字M和相位控制字N分别控制DDS 输出正弦波的频率和相位。DDS系统的核心是相位累加器,它由一个累加器和一个N位寄存器组成。每来一个时钟脉冲,相位寄存器以步长M增加。相位寄存器的输出与相位控制字相加,其结果作为正弦查找表的地址。正弦查找表由ROM构成,内部存有一个完整周期正弦波的数字幅度信息,每个查找表的地址对应正弦波中0-360°范围内的一个相位点。查找表把输入的地址信息映射成正弦波的数字幅度信号,同时输出到数模转换器DAC的输入端,DAC输出的模拟信号经过低通滤波器(LPF),可得到一个频谱纯净的正弦波。 DDS基本结构框图特点:其中CLK来自高稳性晶振所提供,用于提供DDS 各种部件的同步工作。DDS核心的相位累加器由一个N位字长的二进制加法器和一个有时钟f取样的N位寄存器组成,作用是对频率控制字进行线性累加;波形存储器中所对应的是一张函数波形查询表,对应不同的相位码址输出不同的幅度编码。当相位控制字为0,相位累加输出的序列对波形存储器寻址,得到一系列离散的幅度编码。该幅度编码经D/A转换后得到对应的阶梯波,最后经低通滤波器平滑后可得到所需的模拟波形。相位累加器在基准时钟的作用下,进行线性相位累加,当相位累加器加满量时就会产生一次溢出,这样就完成了一个周期,这个周期就是DDS信号的一个频率周期。

三、选择器件

直接数字频率合成器(DDS)中所用到的器件为:

1、装有QuartusⅡ软件的计算机一台。

2、芯片:使用Altera公司生产的Cyclone系列芯片,如EP1C12Q240C8芯

片。

3、EDA实验箱一个。

4、下载接口是数字芯片的下载接口(JTAG),主要用于FPGA芯片的数据下

载。

5、按键开关和LED灯。

6、时钟源。

7、示波器。

四、功能模块

模块一:相位累加器SUM99

(A) 相位累加器SUM99逻辑符合

表1相位累加器逻辑功能表

当来一个时钟脉冲时,频率控制字与相位控制字相加,累加和为S.

当RESET为低电平时,输出OUT复位为0;

当RESET为高电平,使能信号EN为高电平时,来一个时钟脉冲信号,频率控制字线性累加输出一个OUT数据.

仿真结果:

图5 相位累加器的仿真波形

仿真结果说明:由仿真波形图可知当来一个上升沿时输出频率控制字线性累加和。它以设定的8位频率控制字K作为步长来进行加法运算实现累加功能,当其和满时,计数器清零,并进行重新运算。

SUM99的VHDL程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY SUM99 IS

PORT(K:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

CLK:IN STD_LOGIC;

EN:IN STD_LOGIC;

RESET:IN STD_LOGIC;

OUT1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END ENTITY SUM99;

ARCHITECTURE ART OF SUM99 IS

SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

PROCESS(CLK,EN,RESET)IS

BEGIN

IF RESET='0'THEN

TEMP<="00000000";

ELSE

IF CLK'EVENT AND CLK='1'THEN

IF EN='1'THEN

TEMP<=TEMP+K;

END IF;

END IF;

END IF;

OUT1<=TEMP;

END PROCESS;

END ARCHITECTURE ART;

模块二:相位寄存器REG1

(B)相位寄存器REG1逻辑符号

表3 相位寄存器 逻辑功能表

数据端D ,用来输入被寄存的二进制信号;

脉冲端CLK,在脉冲的上升沿到来时,Q 随D 变化;

仿真结果:

图6 相位寄存器REG1的仿真波形

仿真结果说明:由仿真波形可看出相位寄存器的输出Q 随输入端D 而变化,当来一个时钟沿时,D 就输入一个数,Q 就随之而变化。并且存在一定延时。

REG1的VHDL 程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG1 IS

PORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC;

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END ENTITY REG1;

ARCHITECTURE ART OF REG1 IS

BEGIN

PROCESS(CLK)IS

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

Q<=D;

END IF;

END PROCESS;

END ARCHITECTURE ART;

模块三:正弦查找表ROM

(C)正弦查找表ROM 逻辑符号

表3 ROM256_8中的数据

定制LPM_ROM元件:

图7 定制新的宏观能块

图8 LPM 宏功能块设定

图9 选择SinROM模块数据线和地址线宽度

图10 选择地址锁存信号CLOCK

图11 调入ROM初始化数据文件

图12 LPM_ROM设计完成

仿真结果:

图13 ROM256_8的仿真波形

仿真结果说明:由仿真波形图可知,按ROM256_8中的存储数据地址address,当来一个时钟脉冲时,就会输出ROM256_8存储器中的数据。当相位

控制字为0,相位累加输出的序列对波形存储器寻址,得到一系列离

散的幅度编码。

ROM256_8的VHDL程序:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

LIBRARY altera_mf;

USE altera_mf.all;

ENTITY ROM256_8 IS

PORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);

clock: IN STD_LOGIC ;

q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0));

END ROM256_8;

ARCHITECTURE SYN OF rom256_8 IS

SIGNAL sub_wire0: STD_LOGIC_VECTOR (7 DOWNTO 0);

COMPONENT altsyncram

GENERIC (address_aclr_a: STRING;

init_file: STRING;

intended_device_family: STRING;

lpm_hint: STRING;

lpm_type: STRING;

maximum_depth: NATURAL;

numwords_a: NATURAL;

operation_mode: STRING;

outdata_aclr_a: STRING;

outdata_reg_a: STRING;

widthad_a: NATURAL;

width_a: NATURAL;

width_byteena_a: NATURAL

);

PORT (clock0: IN STD_LOGIC ;

address_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);

q_a: OUT STD_LOGIC_VECTOR (7 DOWNTO 0));

END COMPONENT;

BEGIN

q <= sub_wire0(7 DOWNTO 0);

altsyncram_component : altsyncram

GENERIC MAP (

address_aclr_a => "NONE",

init_file => "Sinrom256_8.mif",

intended_device_family => "Cyclone",

lpm_hint => "ENABLE_RUNTIME_MOD=NO",

lpm_type => "altsyncram",

maximum_depth => 256,

numwords_a => 256,

operation_mode => "ROM",

outdata_aclr_a => "NONE",

outdata_reg_a => "UNREGISTERED",

widthad_a => 8,

width_a => 8,

width_byteena_a => 1

);

PORT MAP (

clock0 => clock,

address_a => address,

q_a => sub_wire0

);

END SYN;

模块四、ROM256_8输出数据寄存器REG2:

(D )寄存器逻辑符号

表4 寄存器功能表

数据端D,用来输入被寄存的二进制信号;

脉冲端CLK,在脉冲的上升沿到来时,Q 随D 变化; 仿真结果:

图14 寄存器REG2的仿真波形

仿真结果分析:

由仿真波形可看出相位寄存器的输出Q随输入端D而变化,当来一个时钟沿时,D就输入一个数,D就随之而变化。并且存在一定延时。

REG2的VHDL程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY REG2 IS

PORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

CLK:IN STD_LOGIC;

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END ENTITY REG2;

ARCHITECTURE ART OF REG2 IS

BEGIN

PROCESS(CLK)IS

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

Q<=D;

END IF;

END PROCESS;

END ARCHITECTURE ART;

模块五、DA C 0832数模转换器

(E)DAC 0832逻辑符号

DAC 0832的VHDL程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY DAC0832 IS

PORT(CLK:IN STD_LOGIC;

RST:IN STD_LOGIC;

ILE:OUT STD_LOGIC;

CONT:OUT STD_LOGIC;

DATA_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END DAC0832;

ARCHITECTURE BEHAV OF DAC0832 IS

SIGNAL Q:INTEGER RANGE 0 TO 63;

SIGNAL DATA:STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

PROCESS(CLK)

BEGIN

IF RST='1'THEN Q<=0;

ELSIF CLK'EVENT AND CLK='1'THEN

IF Q=63 THEN Q<=0;

IF DATA="11111111"THEN DATA<="00000000";

ELSE DATA<=DATA+1;

END IF;

ELSE Q<=Q+1;

END IF;

END IF;

END PROCESS;

ILE<='1';CONT<='0';DATA_OUT<=DATA;

END BEHAV;

数模转换正弦波形:

设计的输出频率为7.3682307MHz,但是示波器显示为7.599MHz,示波器显示的频率是不准确的,实际可以用频谱仪看输出的频率。

图15 不加滤波器的DDS输出

可以看到正弦波是由一个台阶一个台阶组成的,这就是DA的模拟输出。

加低通滤波器

图16 加低通滤波器的DDS 输出

可以看到台阶没有了,正弦波变得比较光滑,这是因为高阶的谐波分量都被滤除

了。

五、总体设计电路图

图 17 顶层电路原理图

电路整体工作情况:

DDS 设计顶层原理图如上,假定相位控制字位0,这时DDS 的核心部分相位累加器的FPGA 的设计可分为如下几个模块:相位累加器SUM99、相位寄存器REG1、正弦查找表ROM 和输出数据寄存器REG2。图中,输入信号有时钟输入CLK,使能端EN,复位端RESET,频率控制字K,输出信号为Q 。

整个DDS模块采用一个时钟,CLK来自为高稳性晶振提供,以用来同步各个模块的运算速度。DDS核心的相位累加器由一个8位字长的二进制加法器和一个有时钟f取样的8位寄存器组成,作用是对频率控制字进行线性累加,当其和满时,计数器清零,并进行重新运算。相位寄存器REG1是一个一般的8位寄存器,它对输入端输入的数据进行寄存,当下一个时钟到来时,输出寄存的数据。波形存储器中所对应的是一张函数波形查询表,对应不同的相位码址输出不同的幅度编码。当相位控制字为0,相位累加输出的序列对波形存储器寻址,得到一系列离散的幅度编码。为了保证输出数据的稳定性,将ROM的输出数据先寄存在REG2中,待下一个时钟到来时,再将其输出。整个系统各模块是在同步时钟信号CLK的控制下协调工作的。REG2所寄存的幅度编码经D/A转换后得到对应的阶梯波,最后经低通滤波器平滑后可得到所需的模拟波。相位累加器在基准时钟的作用下,进行线性相位累加,当相位累加器加满量时就会产生一次溢出,这样就完成了一个周期,这个周期也就是DDS信号的一个频率周期。

整个系统DDS的仿真结果:

图18 顶层电路原理图的仿真波形

仿真结果分析:

当相位控制字为0,相位累加输出的序列对波形存储器寻址,得到一系列离散的幅度编码。由系统DDS仿真波形图可知当来一个时钟脉冲时,对应波形存储器寻址,可得结果正确——是离散的正弦波采样点。

相关文档