您好,欢迎来到榕意旅游网。
搜索
您的当前位置:首页EDA 课程设计 江西理工 应科院 直接数字频率合成器(DDS)

EDA 课程设计 江西理工 应科院 直接数字频率合成器(DDS)

来源:榕意旅游网


SOPC/EDA综合课程设计

直接数字频率合成器

学 院: 江西理工大学应用科学学院 指导老师: 王忠峰 专业班级: 电气081 姓 名: qq4115230 学 号:

时 间: 2011年1月

目录

第一章 直接数字频率合成器与设计任务……………………………………….....3 1.1关于直接数字频率合成器……………………………………………………….3 1.2直接数字频率合成器的设计要求…………………………………………….…3 第二章 系统设计方案…………………………………………………………….…4 2.1 DDS的工作原理………………………………………………………………....4 2.2模块的功能………………………………………………………………….........6 2.3选择器件……………………………………………………………………….…7 2.4功能模块………………………………………………………………………….8 2.5系统的整体组装…………………………………………………………………13 第三章 设计的心得体会……………………………………………………………..16 附录一 参考文献……………………………………………………………………17

2

第一章 直接数字频率合成器与设计任务

1. 1 关于直接数字频率合成器

1971年,美国学者J.Tierncy、C.M.Reader和B.Gold提出了以全数字技术从相位概念出发直接合成所需波形的一种新的频率合成原理。随着技术和水平的提高,一种新的频率合成技术——直接数字频率合成(DDS,Direct Digital Synthesis)技术得到了飞速发展。 DDS技术是一种把一系列数字形式的信号通过DAC转换成模拟形式的信号合成技术,目前使用最广泛的一种DDS方式是利用高速存储器作查找表,然后通过高速DAC输出已经用数字形式存入的正弦波。

DDS技术具有频率切换时间短(<20 ns),频率分辨率高(0.01 Hz),频率稳定度高,输出信号的频率和相位可以快速程控切换,输出相位可连续,可编程以及灵活性大等优点,它以有别于其他频率合成方法的优越性能和特点成为现代频率合成技术中的佼佼者。DDS广泛用于接受机本振、信号发生器、仪器、通信系统、雷达系统等,尤其适合跳频无线通信系统。

1. 2 直接数字频率合成器的设计要求

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

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

2.通过实验箱上的开关输入DDS的频率和相位控制字,并能用示波器观察加以验证; 3.系统具有清零和使能的功能;

4.DDS中的波形存储器模块用Altera公司的Cyclone系列FPGA芯片中的ROM实现。

3

第二章 系统设计方案

2. 1 DDS的工作原理

一个纯净的单频信号可表示为:

utUsin2foto (2-1)

只要它的幅度U和初始相位o不变,它的频谱就是位于fo的一条谱线。为了分析简化起见,可令U=1,o=0,这将不会影响对频率的研究。即:

(2-2) utsin2fotsint如果对(2-2)的信号进行采样,采样周期为Tc(即采样频率为fc),则可得到离散的波

形序列:

unsin2fonTc n0,1,2... (2-3)

相应的离散相位序列为:

n2fonTcn n0,1,2... (2-4)

式中:

2foTc2fofc (2-5)

是连续两次采样之间的相位增量。根据采样定理:

fo12fc (2-6)

只要从(2-3)出来的离散序列即可唯一的恢复出(2-2)的模拟信号。从(2-2)可知,是相位函数的斜率决定了信号的频率;从(2-5)可知,决定相位函数斜率的是两次采样之间的相位增量。因此,只要控制这个相位增量,就可以控制合成信号的频率。现将整个周期的相位2分成M份,每一份为即可得到信号的频率:

foK2TcKMfc2M,若每次的相位增量选择为的K倍,

(2-7)

相应的模拟信号为:

Kutsin2fctM (2-8)

式中K和M都是正整数,根据采样定理的要求,K的最大值应小于M的1/2。

4

综上所述,在采样频率一定的情况下,可以通过控制两次采样之间的相位增量(不得大于π)来控制所得离散序列的频率,经保持、滤波之后可唯一的恢复出此频率的模拟信号。

图2.1 DDS基本原理图

其实质是以基准频率源(系统时钟)对相位进行等间隔的采样。由图2.1见,DDS 由相位累加器和波形存储器(即,ROM查询表)构成的数控振荡器(NCO_ Numerically Controlled Oscillators)、数模转换器(DAC)以及低通滤波器(LPF)三部分组成。在每一个时钟周期,N位相位累加器与其反馈值进行累加,其结果的高L位作为查询表的地址,然后从ROM中读出相应的幅度值送到DAC。再由DAC将其转换成为阶梯模拟波形,最后由具有内插作用的LPF将其平滑为连续的正弦波形作为输出。因此,通过改变频率控制字K就可以改变输出频率在这里

N KFWN1:0,M2

fo。

由上面的分析可得DDS的输出频率:

foFWN1:02Nfc (2-9)

由上式可知,DDS的最小输出频率为:

DDS的频率分辨率为:

DDS频率输入字的计算:

FW(N-1:0) = 2fo/fc (2-12)

综上所述,频率控制字K和相位控制字M分别控制DDS输出正(余)弦波的频率和相位。DDS系统的核心是相位累加器,它由一个累加器和一个N位相位寄存器组成。每来一个时钟脉冲,相位寄存器以步长K增加。

5

N

fo12Nfc (2-10)

fo12Nfc (2-11)

2. 2模块的功能

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

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

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

注意:当相位累加器累加满量时就会产生一次溢出,完成一个周期的动作。 相位 频率控 f 量化 制字K 序列 N位 加 法 器 寄 存 器 N位 N位 图2.2 相位累加器

(3) 相位寄存器

相位寄存器是一个N位的寄存器,它对输入端输入的数据进行寄存,当下一个时钟到来时,输出寄存的数据。 (4) 正弦查找表

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

地 数 相位量化序列 正弦幅度量化序列 波 形 ROM

址 据 D位 N位 图2.3 波形存储器

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

原理:

ROM的N位地址:把0°—360°的正弦角度离散成具有2个样值的序列 ROM的D位数据位:2个样值的幅值量化为D位二进制数据

6

n

n

(5) D/A转换器

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

各引脚信号说明如下:

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

▲ CS:片选信号(输入),低电平有效。 ▲ ILE:数据锁存允许信号(输入),高电平有效。 ▲ WR1:写信号(输入),低电平有效。 ▲ WR2:第2写信号(输入),低电平有效。 ▲ XFER:数据传送控制信号(输入),低电平有效。 ▲ Iout1、Iout2:电流输出1、2,

DAC转换器的特性之一是:Iout1+Iout2=常数 ▲ Rfb—反馈电阻端

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

▲ AGND:模拟 图2.4 DAC0832引脚图 (6) 低通滤波器

低通滤波器的作用是滤除生成的阶梯正弦波中的高频成分,将其变成光滑的正弦波。 Sin(t)Sin(t) 图2.5

tt2. 3选择器件

直接数字频率合成器(DDS)中所用到的器件为: (1) 装有QuartusⅡ软件的计算机一台。

(2) 芯片:使用Altera公司生产的Cyclone系列芯片,如EP1C3T144C8芯片。 (3) EDA实验箱一个。

(4) 下载接口是数字芯片的下载接口(JTAG),主要用于FPGA芯片的数据下载。 (5) 按键开关和LED灯。

(6) 时钟源。 (7)示波器。

7

2. 4功能模块

 模块一:相位累加器SUM99

输 入 CLK X EN X 1 RESET 0 1 复 位 OUT[7..0] 输 出 SUM99 K[7..0]OUT1[7..0] CLK EN RESET inst6

表1 相位累加器SUM99逻辑功能表 图1 SUM99逻辑符号

当RESET为低电平时,输出OUT复位为0;当RESET为高电平,使能信号EN为高电平时,来一个时钟脉冲信号,频率控制字线性累加输出一个OUT数据. SUM99的VHDL程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.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;

8

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

仿真结果说明:

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

 模块二:相位寄存器REG1

输 入 CLK D Q1 Q2 输 出 Q Q1 Q2

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

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

REG1 D[7..0]Q[7..0] CLK

inst7 表2 相位寄存器逻辑功能表 图3 REG1逻辑符号

REG1的VHDL程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.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

9

BEGIN

PROCESS(CLK)IS BEGIN

IF(CLK'EVENT AND CLK='1')THEN Q<=D; END IF; END PROCESS;

END ARCHITECTURE ART;

图4 相位寄存器的仿真波形

仿真结果说明:

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

 模块三:正弦查找表ROM

正弦查找表ROM的VHDL源程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ROM IS

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

OUTP:OUT SIGNED (7 DOWNTO 0)); END ENTITY ROM;

ARCHITECTURE ART OF ROM IS BEGIN

PROCESS (CLK) IS BEGIN

10

IF (CLK'EVENT AND CLK='1') THEN CASE ADDR IS

WHEN \"00000000\"=>OUTP<=\"00000000\"; WHEN \"00000001\"=>OUTP<=\"00000010\";

WHEN \"00000010\"=>OUTP<=\"00000011\"; WHEN \"00000011\"=>OUTP<=\"00000101\"; WHEN \"00000100\"=>OUTP<=\"00000110\"; WHEN \"00000101\"=>OUTP<=\"00001000\";

WHEN \"00000110\"=>OUTP<=\"00001001\"; WHEN \"00000111\"=>OUTP<=\"00001011\"; WHEN \"00001000\"=>OUTP<=\"00001101\";

WHEN \"00001001\"=>OUTP<=\"00001110\"; 图5 查找表ROM逻辑符号 WHEN \"00001010\"=>OUTP<=\"00010000\"; WHEN \"11101001\"=>OUTP<=\"11011100\"; WHEN \"11101010\"=>OUTP<=\"11011110\"; WHEN \"11101011\"=>OUTP<=\"11011111\"; WHEN \"11101100\"=>OUTP<=\"11100001\"; WHEN \"11101101\"=>OUTP<=\"11100010\"; WHEN \"11101110\"=>OUTP<=\"11100100\"; WHEN \"11101111\"=>OUTP<=\"11100101\"; WHEN \"11110000\"=>OUTP<=\"11100111\"; WHEN \"11110001\"=>OUTP<=\"11101001\"; WHEN \"11110010\"=>OUTP<=\"11101010\"; WHEN \"11110011\"=>OUTP<=\"11101100\"; WHEN \"11110100\"=>OUTP<=\"11101101\"; WHEN \"11110101\"=>OUTP<=\"11101111\"; WHEN \"11110110\"=>OUTP<=\"11110000\"; WHEN \"11110111\"=>OUTP<=\"11110010\"; WHEN \"11111000\"=>OUTP<=\"11110011\"; WHEN \"11111001\"=>OUTP<=\"11110101\"; WHEN \"11111010\"=>OUTP<=\"11110111\"; WHEN \"11111011\"=>OUTP<=\"11111010\"; WHEN \"11111100\"=>OUTP<=\"11111011\"; WHEN \"11111101\"=>OUTP<=\"11111101\"; WHEN \"11111110\"=>OUTP<=\"11111110\"; WHEN \"11111111\"=>OUTP<=\"00000000\"; WHEN OTHERS=>OUTP<=\"00000000\"; END CASE; END IF;

END PROCESS;

END ARCHITECTURE ART;

图6 正弦查找表ROM仿真波形图

仿真结果说明:

将采样的结果放到ROM模块的对应存储单元中,每一位地址对应一个数值,输出为8位。

11

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

输 入 CLK D 输 出 Q REG2D[7..0]CLKQ[7..0] Q1 Q1 inst6 Q2 Q2 表3 寄存器功能表 图7 REG逻辑符号

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

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

图8 寄存器REG2的仿真波形

仿真结果说明:

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

REG2的VHDL程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.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

12

BEGIN

IF(CLK'EVENT AND CLK='1')THEN Q<=D; END IF; END PROCESS; END ARCHITECTURE ART;

2. 5 系统的整体组装

图9 DDS总体设计电路图

系统的整体组装DDS的VHDL源程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DDS IS

PORT(K:IN STD_LOGIC_VECTOR(7 DOWNTO 0); EN:IN STD_LOGIC; RESET:IN STD_LOGIC; CLK:IN STD_LOGIC;

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY DDS;

ARCHITECTURE ART OF DDS IS COMPONENT SUM99 IS

PORT(K:IN STD_LOGIC_VECTOR(7 DOWNTO 0); EN:IN STD_LOGIC; RESET:IN STD_LOGIC; CLK:IN STD_LOGIC;

OUT1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT SUM99; COMPONENT REG1 IS

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

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

13

END COMPONENT REG1; COMPONENT ROM IS

PORT(CLK:IN STD_LOGIC;

ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); OUTP:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT ROM; COMPONENT REG2 IS

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

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT REG2;

SIGNAL S1:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL S2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL S3:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

U0:SUM99 PORT MAP(K=>K, EN=>EN, RESET=>RESET, CLK=>CLK, OUT1=>S1); U1:REG1 PORT MAP(D=>S1, CLK=>CLK, Q=>S2);

U2:ROM PORT MAP(ADDR=>S2, CLK=>CLK, OUTP=>S3); U3:REG2 PORT MAP(D=>S3, CLK=>CLK, Q=>Q); END ARCHITECTURE ART;

图10 DDS仿真波形图

电路整体工作情况:

DDS设计顶层原理图如上,假定相位控制字位0,这时DDS的核心部分相位累加器的FPGA的设计可分为如下几个模块:相位累加器SUM99、相位寄存器REG1、正弦查找表ROM和输出数据寄存器REG2。图中,输入信号有时钟输入CLK,使能端EN,复位端RESET,频率控制字K,输出信号为Q。整个DDS模块采用一个时钟,CLK来自为高稳性晶振提供,以用来同步各个模块的运算速度。DDS核心的相位累加器由一个8位字长的二进制加法器和一个有时钟f取样的8位寄存器组成,作用是对频率控制字进行线

14

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

15

第三章 设计的心得体会

经过这一次地课程设计,进一步加深了自己对电子设计自动化的了解与认识。

并熟练了对QuartusII软件的操作。同时也掌握了课程设计的一般流程,为以后的设计也积累了一定的经验。加深了对直接数字频率合成器(DDS)原理和设计思路的了解。开始看到这个课程设计的题目时,不知道从何下手。在网上和图书馆查阅和学习了关于许多DDS的资料后,才渐渐理清些头绪。在编写程序的过程中,也遇到了诸多问题。通过与同学探讨和向老师请教,我发现了许多自己学习上的不足之处和知识盲区。做课程设计时,应先查阅相关知识,把原理吃透,确定一个大的设计方向,再按照这个方向把分模块要实现的功能用流程图的形式展示。最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。总之,通过这次的设计,尽一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。

课程设计的过程中首先要感谢的是我们的指导老师王忠峰老师,感谢您的耐心指导,您的指导教程和实验视频对最后课设的完成也起了很大作用。同时还要感谢那些给予我帮助的同学,没有你们的建议和演示,光靠我一个人的闭门造车是无法完成这份报告的。我还要继续努力,多向老师和同学请教,多学些相关方面的知识,为今后的学习工作打好基础。

16

附录一 参考文献

[1] 王忠锋. SOPC/EDA综合课程设计指导书,

[2] 谭会生,张昌凡.EDA技术及应用(第二版). 西安:西安电子科技大学出版社,2001 [3] 潘松,黄继业.EDA技术与VHDL(第三版).北京:清华大学出版社,2009 [4] 李国丽,朱维勇. EDA与数字系统设计. 北京:机械工业出版社,2004 [5] 潘松,黄继业. EDA技术实用教程. 北京:科学出版社,2002

17

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- nryq.cn 版权所有 赣ICP备2024042798号-6

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务