图 1 DDS的原理框图
图 2 优化后的 DDS核心框图
用 FPGA实现 DDS的设计
吴曙荣 , 杨银堂 , 朱樟明
(西安电子科技大学 微电子研究所 ,陕西 西安 710071)
摘 要 :主要介绍了直接数字频率合成器 DDS (D irect D igital Frequency Synthesizer,简称 DDS)的原
理和特点 ,研究了用 FPGA实现 DDS的设计方法 ,给出了为提高芯片运算速度、加大输出带宽、减小
芯片面积等而采用的流水线架构、查找
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
压缩等优化方法。并给出了仿真结果。
关键词 :流水线 ;直接数字频率合成 ;压缩存储查找表 ;现场可编程门阵列
中图分类号 : TP274 文献标识码 : A 文章编号 : 1671Ο654X (2006) 01Ο0001Ο03
引言
随着科技的发展 ,对信号发生器各方面的要求越
来越高。传统的信号发生器由于波形精度低、频率稳
定性差等缺点 ,已经不能满足许多实际应用的需要 ,所
以必须研究新的信号发生器以满足实际应用的要求。
近年来 ,直接数字频率合成器 (DDS)由于其具有频率
分辨率高、频率变换速度快、相位可连续变化等特点 ,
在数字通信系统中已被广泛采用。随着微电子技术的
发展 ,现场可编程门阵列 ( FPGA )器件得到了飞速发
展。由于该器件具有速度快、集成度高和现场可编程
的优点 ,因而在数字处理中得到广泛应用 ,越来越得到
硬件电路设计工程师的青睐。
1 DDS的基本原理
DDS的主要思想是从相位的概念出发合成所需的
波形 ,其结构由相位累加器 ,相位 —幅值转换器 , D /A
转换器和低通滤波器组成 ,是 Tierney, Rader和 Gold
于 1971年提出 [ 1 ]。它的基本原理框图如图 1所示。
图 1中 , fc 为时钟频率 , K为频率控制字 , N 为相
位累加器的字长 , m 为 ROM地址线位数 , n为 ROM的
数据线宽度 (一般也为 D /A转换器的位数 ) , fo 为输出
频率 , 输出频率 f0 由 fC 和 K共同决定 : f0 = fC ×KÞ
2N 。又因为 DDS遵循奈奎斯特 (Nyquist)取样定律 :即
最高的输出频率是时钟频率的一半 ,即 f0 = fC Þ2。实
际中 DDS的最高输出频率由允许输出的杂散水平决
定 ,一般取值为 f0 ≤40% fC。
对 DDS进行优化设计 ,目的是在保持 DDS原有优
点的基础上 ,尽量减少硬件复杂性 ,降低芯片面积和功
耗 ,提高芯片速度等。
2 优化构想
为了减小 DDS的设计成本 , 对其结构进行优化 ,
优化后 DDS的核心结构框图如下所示。
其中的地址转换器是根据 adri[ 14 ]的数值判断数值是
增长 (0~π /2)或减少 (π /2~π) ,数据转换器是根据
adri[ 15 ]的数值判断生成波形的前半个周期 (0~π)或
者后半个周期 (π~2π)。
2. 1 流水线结构
将 32位累加器分成 4条流水线 ,每条流水线完成
8位的加法运算 ,流水线的进位进行级联 [ 2 ] , 运用流
水线结构可以提高累加器的运算速度 3倍多。为了提
高运算速度 ,加法器采用的是目前速度最快的预先进
位算法 ;为了避免因预先进位传输链过长而影响速度 ,
收稿日期 : 2005Ο10Ο26 修订日期 : 2005Ο12Ο05
基金项目 :国家重点实验室基金 (51433030103DZ0101)
作者简介 :吴曙荣 (1980Ο) ,女 ,陕西西安人 ,硕士研究生 ,研究方向为可编程混合信号。
第 36卷 第 1期 航 空 计 算 技 术 Vol. 36 No. 1
2006年 1月 Aeronautical Computing Technique Jan. 2006
每 8位加法器由两个 4位加法器实现。如图 3所示 :
采用流水线结构可以提高器件的运算速度。但是缺点
是数据需要保持 4个时钟周期 ,降低了系统跳频的跳
变频率。
图 3 流水线加法器框图
2. 2 加法器最低位的修正
提取相位累加器的高 16位输出作为 ROM的查找
地址 ,输出截位减少了 ROM的容量 ,损失的低 16位对
生成波精度造成的误差可以忽略不计 ;但因此产生的
截位误差却会对频谱纯度和输出带宽产生影响。实验
表明当频率控制字 K和截位误差 2(32 - 16)在为互质数
的情况下可以将影响减到最小。解决的办法是在相位
累加器的最低位加入 c0,相位累加器的字长变为 32 +
1位 ,截位误差为 2 (32 - 16) + 1 ,即频率控制字 (奇数 )和截
位误差 (偶数 )之间互质。这样带来地址上 1 /2LSB的
误差影响 ,但是在实际应用中可以忽略。
2. 3 ROM的压缩 :三角近似法
三角近似法是利用三角恒等式近似的方法对
ROM容量进行压缩 :因为 sin (A +B + C ) = sin (A +B )
cosC + cosA cosB sinC + sinA sinB sinC ,当 A 远大于 B 和
C时 ,则利用三角近似 cosB≈ 1, sinC≈ 0 ,上式可以简
化为 : sin (A +B + C) = sin (A +B ) + cosA sinC 。这样
可以将 ROM转化为两个较小的 ROM ,分别存储 sin (A
+B )和 cosA sinC的值 ,这两个 ROM的总容量为 2A (2B
+ 2C )。从频谱和 ROM容量两方面进行考虑 ,对于 14
位地址的最佳分割是 : A = 5, B = 4, C = 5[ 3 ]。
对 ROM表的压缩 ,是利用相位累加器的次高位来
判断象限 ,将正弦合成波合成到 0~π范围 ;最高位作
为符号位 ,将正弦波合成到 0~2π范围。对于余弦
波 ,符号位是由最高位与次高位异或得到 ,因为余弦波
形比正弦波形提前π /2相位。但是因为正弦函数和
余弦函数关于π /4对称 ,因此可以只存储 (0~π /4)的
正弦和余弦函数值 ,这样存储器大小将减小一半。相
位累加器的次次高位可以在 0~π /4和π /4~π /2之
间选择。实际电路实现时 ,次次高位是与次高位异或
产生这个信号。另外 ,为了完成正交输出 ,还要增加两
个 2: 1多路选择器电路。
3 DDS的 Verilog HDL实现
Verilog HDL语言专门面向硬件与系统设计 ,可以
在芯片算法、功能模块、结构层次、测试向量等方面进
行描述 ,是当前 ASIC设计的主要语言之一。
3. 1 四位超前进位加法器的主要源程序 [ 4 ] :
g[ i ] = a[ i ] &b[ i]; p [ i ] = a[ i ] | b [ i ];
always@ ( a or b or gnd or g or p )
begin
carrychain[ 0 ] = g[ 0 ] | p [ 0 ] &cin;
sum [ 0 ] = p [ 0 ] c^in;
for ( j = 4’1; j < 4; j = j + 4’b1)
begin
carrychain[ j ] = g[ j ] | p [ j ] &carrychain [ j - 1 ];
sum [ j] = p [ j ] c^arrychain[ j - 1 ];
end
cout = carrychain[ 3 ];
end
3. 2 流水线加法器阵列及最低位修正的实现
claadd8 s U_add1 (p ipe1, SYNCFREQ [ 7: 0 ] , gnd,
add1, c1) ;
claadd8 s U _ add2 ( p ipe2, SYNCFREQ [ 15: 8 ] ,
p ipec1, add2, c2) ;
claadd8 s U _ add3 ( p ipe3, SYNCFREQ [ 23: 16 ] ,
p ipec2, add3, c3) ;
claadd8 s U _ add4 ( p ipe4, SYNCFREQ [ 31: 24 ] ,
p ipec3, add4, c4) ;
在此调用了 8位超前进位加法器 [ 5 ] ,用 Verilog
HDL的结构描述方法实现 ,对应于用电路图输入逻
辑。四个加法器在不同的时钟控制下工作 ,实现流水
线结构 ; p ipe1、p ipe2、p ipe3、p ipe4分别为各自加法器的
和 ; SYNCFREQ 是 32 位频率控制字 , gnd、p ipec1、
p ipec2、p ipec3是加法器的输入进位位 , c1、c2、c3、c4是
加法器的输出进位位。
3. 3 波形折叠和抬高算法
3. 3. 1 波形折叠 (地址转换器 )
always@ ( adri)
if ( adri[ 14 ] )
adro = 14’h1ff a^dri[ 13: 0 ];
else
adro = adri;
end
endmodule
·2· 航 空 计 算 技 术 第 36卷 第 1期
图 4 DDS在 k = 02时的仿真时序图
3. 3. 2抬高算法 (数据转换器 )
always@ ( data or adri[ 15 ] ) begin
if ( ! adri[ 15 ] ) sindata = 9’h1ff d^ata;
else sindata = data - 9’h001;
end
result = { ! adri[ 15 ] , sindata};
end
根据 adri[ 14 ]的数值判断地址码是否需对π /2进
行折叠。用 ^(按位异或 )实现对地址码对 π /2的折
叠 :用全 1减去 adri的数值 ,因为被减数是确定的而且
是全 1,所以用异或实现减法 ,比用减法器节省门数。
根据 adri[ 15 ]的数值判断波形的正负 :若是正 ,则
用全 1和从 ROM中取出的值相加 ,相当于原数据减 1
后再在最高位拼接 1,以 1LSB的偏移量为代价 ,省略
减法器 ;若是负 ,则用按位异或实现减法 ,得到经过抬
高处理的数据。抬高处理是为了使 DAC的输入全为
正数。
3. 4 压缩 sin值 ROM查值表
rom1 U _ rom1 (QWAVESIN , MODPHASE , SY2
SCLK , RESETN ) ;
rom2 U _ rom2 ( p roduct , QWAVESIN2 , QWAVE2
SIN1 , SYSCLK , RESETN) ;
其中 rom1 是 sin (A + B ) 值的存储表 rom2 是
cosA sinC值的存储表。QWAVESIN是 rom1表的输出 ,
MODEPHASE是从累加器输出的量化正弦值。p roduct
是 rom2的输出 , QWAVESIN2 , QWAVESIN1分别是
cosA和 sinC的值。再由 9位加法器将 rom1和 rom2
的输出相加 ,就可得到正弦查值表的完整输出。
在 MAX + PLUSII下的正弦查值表的输出如下图
所示。
实验表明 ,所设计的 DDS在满足性能的条件下 ,
提高了芯片工作速度 ,节约了芯片面积 ,改善了频谱性能。
4 结束语
本文给出了利用 A ltera 公司的 FLEX10K设计
DDS的方法 ,并得到了一些改进 :使用流水线算法和输
入寄存器可以在不过多增加门数的条件下 ,大幅度提
高芯片的工作速度 ;修正加法器最低位带来 3dB左右
的频谱性能提高 ,提高了输出波形的频谱纯度 ;压缩
ROM的容量 ,可以使芯片在满足性能的基础上节约了
芯片资源。
参考文献 :
[ 1 ] D A Sutherland, R A Strauch, S S W harfield. CMOS/SOS
Frequency Synthesizer LSI Circuit for Spectrum Communica2
tions[ J ]. IEEE Solid State Circuit, 1984, 19 ( 8) : 497 -
505.
[ 2 ] 郭军朝 ,王森章 . 一种高速低功耗直接数字频率合成器
的设计与实现 [ J ]. 微电子学 , 2004. 10 (5) : 572 - 574.
[ 3 ] H T N icholas, H Samueli. A 150MHZ D irect D igital Fre2
quency Synthesizer in 1. 25μm COMS with - 90dbc Spurious
Sperformance[ J ]. IEEE Solid State Circuit, 1991, 26 (12) :
1959 - 1969.
[ 4 ] 夏宇闻. 从算法设计到硬件逻辑的实现 :复杂数字逻辑
系统的 Verilog HDL设计技术方法 [M ]. 北京 :高等教育
出版社 , 2001, 2.
[ 5 ] J Bhasker著 ,徐振林等译. Verilog HDL 硬件描述语言
[M ]. 北京 :机械工业出版社 , 2000, 7.
Design of a DDS Based on FPGA
W U ShuΟrong, YANG Y inΟtang, ZHU ZhangΟm ing
(M icroelectron ic Institu te of X id ian U niversity, X i′an 710071, Ch ina)
Abstract: This paper described the p rincip le and features of DDS (D irect D igital Frequency Synthesizer) , studied
the way to design DDS use FPGA, used p ipeline structures and look - up table comp ression etc methods to raises the
chip operation speed, enlarges the bandwidth output, decreases the chip area etc. Finally, give the simulate result.
Key words: p ipeline; DDS; look - up table comp ression; FPGA
·3·2006年 1月 吴曙荣 等 :用 FPGA实现 DDS的设计