电子课程设计
------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仿真波形图可知当来一个时钟脉冲时,对应波形存储器寻址,可得结果正确——是离散的正弦波采样点。