找回密码
 注册
关于网站域名变更的通知
查看: 314|回复: 2
打印 上一主题 下一主题

基于FPGA的正交数字混频器中数控振荡器的设计与实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-5-29 18:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
 摘??? 要:本文介绍了一种利用矢量旋转CORDIC(COordination Rotation DIgital Computer)算法实现正交数字混频器中的数控振荡器(NCO)的方法。首先推导了CORDIC算法产生正/余弦信号的实现过程,然后给出了在FPGA中设计数控振荡器的顶层电路结构,并根据算法特点在设计中引入流水线结构设计。' r# n3 x0 D* j
  关键词:软件无线纾皇卣竦雌鳎?SPAN lang=EN-US>CORDIC算法;FPGA* D, [- Z! F3 A3 w% R, a# ^
?' I" D# k4 ^8 j+ I/ F4 T
引言
  q9 H! ]8 @$ ^2 j  数控振荡器是正交数字混频器的核心部分,具有频率分辨率高、频率变化速度快、相位可连续线性变化和生成的正/余弦信号正交特性好等特点。而且NCO的相位、幅度均已数字化,可以直接进行高精度的数字调制/解调。随着数字通信技术的发展,传送的数据速率越来越高。如何得到一个可数控的高频载波信号是实现高速数字通信系统必须解决的问题。本文将介绍如何在FPGA中实现高速正交数字混频器中的数控振荡器设计。
/ s, Q* I1 V2 y
' T4 B: v& v! b: E

- C: ^4 ?# W$ P# O. g) O- X数控振荡器的实现原理
0 P7 h: h$ c: A( `' d% i  数控振荡器的作用是产生正交的正弦和余弦样本, 传统做法是采用查表法(LUT),即事先根据各个正/余弦波相位计算好相位的正/余弦值,并按相位角度作为地址在存储器中对其进行寻址,构成一个幅度/相位转换电路(即波形存储器),通过该转换电路进行查表获得正/余弦信号样本。为了提高数控振荡器的频率分辨率,往往需要扩大波形存储器的容量,造成存储资源的大量消耗。而且,如果需要外挂RAM来存储波形,由于受到RAM读取速度的影响,数控振荡器的输出速率必然受到制约。因此,当设计高速、高精度的数控振荡器时,查表法就不适合采用。
3 [; {* Z* }0 p" b* p: h  为了避免使用大容量存储器,可以考虑利用算法来产生正/余弦样本。基于矢量旋转的CORDIC算法正好满足了这一需求, 该算法有线性的收敛域和序列的特性,只要迭代次数足够,即可保证结果有足够的精度。统一的CORDIC形式的基本原理是,初始向量V1(x1,y1)旋转角度?后得到向量V2(x2,y2):9 @. S3 o3 d3 A/ V' e; ]
?
1 S- i2 a% u/ X. Rx2=x1·cos?-y1·sin?,0 E6 ?- h+ o  @9 B( y# y
y2=y1·cos?+x1·sin??????????? (1)
* R" P: @/ M5 v8 G即:
1 D1 ]7 S& e3 n5 y; Rx2=(x1-y1·tan?)·cos??
  `: \1 \( _8 J0 Q' H; @y2=(y1+x1·tan?)·cos?????????(2)
' h- N- a% Q9 ^" x. P  ^  ~" e  若每次旋转角度?的正切值为2的整数次幂,即:?i=arctan(2-i),则,假设以?i代表矢量的旋转方向,+1表示逆时针旋转,-1表示顺时针旋转,故第i步旋转可用以下两式表示:
5 y* l( R, J4 a* d9 R1 g6 O
8 M9 G( S% [& y- w- h1 _; q(3)% m/ E4 d% ~" R4 g6 r2 O6 H
  其中为模校正因子。对于字长一定的运算,该因子是一个常数,用K表示,以16bit字长为例,则( c6 F3 T' B9 J; k. w
。可见,迭代运算不能使幅值比例因子恒为1。为了抵消迭代对比例因子的影响,可将每级迭代的输入数据X、Y校正后再参与运算,以避免在迭代运算中增加校正运算,降低CORDIC算法的速度。由此运算迭代式可以简化成:9 V2 V/ h9 p2 E; J% ~" j
) Z" R* F$ ~# b
????????????????? (4)/ T+ _" j% ?% k. \1 r. r+ Z: x7 s
  可见,以上两式运算仅通过加法器及移位器就可以实现。另外,若用zi表示第i次旋转时与目标角度之差,则:$ _' ^/ w0 d; n5 T$ `, c9 ~
?????????? (5)
0 L1 c0 }+ K! n) L8 q7 K# a  经过n次旋转后,(4)式经n次迭代可以得到以下结果:
; ?! j) O5 p& q9 {0 G/ s?????? (6)
7 h5 m& u  t; U' l! k  本文介绍的数控振荡器的设计就是在(6)式的基础上,给定,,则迭代结果为:. {( n  S; w0 N  e- m5 f& X5 V
,,。(7)
0 l+ x" D# z+ W8 E  所以,将所需产生的角度值作为z0输入,通过(4)、(5)两式的迭代运算,迭代结果输出的xn和yn就是所需要的三角函数值。9 w' m( }" [, X& X
?2 n8 t- n9 D- e# G$ n
数控振荡器的FPGA实现
9 ]0 @* j8 G0 o1 S6 `  数控振荡器的顶层电路结构。可以看到,频率控制字寄存器将接收到的的频率控制字送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值即对相位进行累加,随后将累加值送入相位相加器,与相位控制字寄存器接收到的初始相位相加,得到当前的相位值。其中,相位累加器是决定NCO性能的一个关键模块,可以利用FPGA器件的进位链实现快速、高效的电路结构。然而, 由于进位链必须位于临近的逻辑阵列块CLB和逻辑单元LC内,所以长的进位链会减少其它逻辑使用的布线资源;同时,过长的进位链也会制约整个系统速度的提高。因此,设计中采用进位链和流水线技术相结合的办法。采用以上做法实现的相位累加器既能保证具有较高的资源利用率, 又能大幅提高系统的性能和速度。
  U3 ^( t$ [6 f3 _

5 f1 K" h* E7 }; W% L, x  经过上述相位处理之后,即可获得具有所设定初始相位的正/余弦相位序列,将此序列送入基于CORDIC算法的波形发生器,最终获得两路正交的正/余弦输出序列。
9 Y& z* g& P2 v

! w1 i5 a+ T7 }( M1 w% p0 E  p  Z" M  CORDIC迭代算法的一种最直接的实现方法是:只设计一级CORDIC运算迭代单元,然后在系统时钟的驱动下,将本级的输出作为本级的输入,通过同一级迭代完成运算。这种方法虽然很直观, 但是为了将计算结果提供给下一级运算,会占用大量的寄存器资源,带来许多额外的资源消耗。而且其最大的缺点是运算速度较慢(需要n-1个时钟周期才能输出一个数据),不利于数据的高速实时处理。7 x3 e' d0 E" v5 f

6 j( ~* t1 u6 s4 Y  因此在实际设计中,采用的是由16级CORDIC运算单元组成的流水线结构,正常工作时只需一个时钟周期就能输出一个数据,为数据实现高速实时处理提供了保障。每一级实现的功能是根据(4)式进行一次迭代,移位的位数等于当前的迭代级数,加减法选择由该级中Z的最高位(符号位)决定,得到下一级的X、Y 和Z的值。经过16级流水线运算后,Z的值变为0,X和Y的值则为初始值z0的余弦和正弦值。每一级电路结构主要包括两个移位器和三个加(减)法器,级与级之间直接相连,不需要额外的寄存器。?i的值为arctan(2-i),可将该小数转换为二进制数后,保存于存储单元中,为每一级流水线提供查找表。对于16级的流水线结构,i的范围是0~15。
) E" Z! S- ^8 q- I* ?# r3 d设计中还应该注意迭代序列所能覆盖的角度范围,若直接采用n级迭代序列:0,1,2,L,n-1,则迭代所能覆盖的角度范围仅有-99.9麀+99.91旧杓仆ü黾拥问蠢┐蠼嵌雀哺欠段В丛黾恿礁鰅=0的迭代,将迭代序列扩展为0,0,0,1,2,L, n-1,从而使角度覆盖范围也扩大到。
3 B! g( h- O+ x. V; C! h$ z?) s6 l# k0 Y! |: g) K7 _( Q+ j
数控振荡器的
" F0 B* J4 ?2 A8 r0 l- H  ^仿真结果及性能分析1 ]: M8 J$ z+ y6 n9 I
  本设计利用Altera公司的Quartus II软件,采用VHDL对上述数控振荡器结构进行描述,在Modlesim上通过功能仿真,结果正确后综合出电路网表,最后将程序下载至Stratix器件EP1S20B780C6中实现。5 A  j6 B9 _6 D- @

" P) @, A! i% y& a1 N/ l4 B  由于设计中采用了Stratix器件,该器件的32位加减器工作频率可以达到90MHz以上,从而为产生高速的正交信号提供高速可靠的工作时钟。考虑到NCO的工作时钟瓶颈是在相位累加器,因此可以根据具体需要缩减相位累加器的位数来提高NCO的工作时钟频率。本文设计的NCO工作时钟为100MHz,相位累加器的位数为16位,输入的频率控制字为4CCCH,根据公式: ,,其中为输入的频率控制字,fclk为工作时钟, N为相位累加器位数,可算出NCO输出的正/余弦信号的频率fout=30MHz,频率分辨率1.5kHz。频率分辨率说明:通过输入频率控制字来改变输出正/余弦信号的频率时,可以达到1.5kHz的最小步进。另外,也可以根据实际需要的频率改变输入频率控制字值。当然,NCO输出频率的上限要受到Nyquist定律的限制,即fout的最大值为fclk/2,实际设计一般不大于0.4fclk。# P- |/ G$ c  u( l1 B
' L7 q; a0 v  ]3 w5 S6 w
. u. E, J* D! F) |! o8 `. }
结语
% p* ~. O9 v7 c  本文研究了正交数字混频器中数控振荡器的设计与实现方法,着重分析了如何在FPGA器件中利用CORDIC迭代算法产生正/余弦信号。可以看到,该数控振荡器不但省去了传统NCO庞大的存储器资源,仅用移位寄存器和加法器就可产生正/余弦信号,结构简单,非常适用于在正交数字混频器中进行高速高精度的数字调制/解调。( u; w+ c2 ?7 f/ [- N+ ~/ P8 N8 O
2 [! Z* i; J9 `" x5 z) Z

该用户从未签到

2#
发表于 2020-5-29 19:35 | 只看该作者
随着数字通信技术的发展,传送的数据速率越来越高。如何得到一个可数控的高频载波信号是实现高速数字通信系统必须解决的问题。

该用户从未签到

3#
发表于 2020-5-30 16:57 | 只看该作者
学习了,谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-13 09:56 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表