張存生,張德學(xué),韓學(xué)森,王 超,張 恒,冀貞賢
基于CORDIC算法的參數(shù)可調(diào)信號(hào)源設(shè)計(jì)
張存生,張德學(xué),韓學(xué)森,王 超,張 恒,冀貞賢
(山東科技大學(xué) 電子通信與物理學(xué)院,山東 青島 266590)
直接頻率合成技術(shù)(DDS)是無(wú)線通信中的關(guān)鍵技術(shù),因應(yīng)用場(chǎng)合及技術(shù)指標(biāo)不同,DDS中的正弦波形產(chǎn)生模塊有多種實(shí)現(xiàn)方法,本設(shè)計(jì)采用CORDIC算法計(jì)算波形數(shù)據(jù),并通過(guò)預(yù)處理實(shí)現(xiàn)全部相位波形數(shù)據(jù)的即時(shí)計(jì)算,不占用存儲(chǔ)資源,且可通過(guò)改變迭代次數(shù)來(lái)調(diào)節(jié)精度。所設(shè)計(jì)的DDS精度、頻率、相位可調(diào),在Altera Cyclone2中實(shí)現(xiàn)時(shí),時(shí)鐘頻率可達(dá)172 MHz,占用1 171 LUTs。
FPGA;直接頻率合成技術(shù);CORDIC
直接頻率合成技術(shù)(Direct Digital Synthesizer,DDS)是電子系統(tǒng)的重要組成部分,也是無(wú)線通信中關(guān)鍵技術(shù)。在數(shù)字混頻中,DDS產(chǎn)生正弦信號(hào)與輸入信號(hào)進(jìn)行相乘可以實(shí)現(xiàn)信號(hào)調(diào)制的效果。目前,通過(guò)現(xiàn)場(chǎng)可編程門陣列 (Field Programmable Gate Array,F(xiàn)PGA)實(shí)現(xiàn)DDS有三種途徑:基于無(wú)限沖激響應(yīng) (Infinite Impulse Response,IIR)濾波器的實(shí)現(xiàn)方法、基于查找表 (Look Up Table,LUT)的實(shí)現(xiàn)方法以及基于坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī) (Coordinate Rotation Digital Computer,CORDIC)算法的實(shí)現(xiàn)方法[1]。基于IIR濾波器的實(shí)現(xiàn)方法用到大量乘法器,不利于FPGA實(shí)現(xiàn),基于查找表的實(shí)現(xiàn)方法用到大量ROM資源,而CORDIC算法只需要簡(jiǎn)單移位操作和加減操作就可以計(jì)算正余弦值,可用FPGA高效實(shí)現(xiàn)。CORDIC 算法是一種用于計(jì)算一些常用的基本運(yùn)算函數(shù)和算術(shù)操作的循環(huán)迭代算法[2]。
本設(shè)計(jì)基于CORDIC算法設(shè)計(jì)DDS,產(chǎn)生正余弦信號(hào),并通過(guò)改變輸入信號(hào)FWWORD、PH_ADJ_EN、PH_ADJ和DATA_ACC_SEL達(dá)到頻率和相位可調(diào)以及輸出數(shù)據(jù)精度可調(diào)的效果。AD9850芯片可以實(shí)現(xiàn)相位的調(diào)節(jié),但是其調(diào)節(jié)有最小量為11.25°的限制。本設(shè)計(jì)可以在運(yùn)行階段將相位在[-180°,180°]之間任意調(diào)節(jié),同時(shí)可以對(duì)數(shù)據(jù)精度和輸出波形頻率進(jìn)行調(diào)節(jié)。用Verilog編寫代碼,使用Modelsim完成代碼仿真,使用Altera的EP2C70F89C6芯片進(jìn)行資源評(píng)估。

圖1 傳統(tǒng)的DDS
傳統(tǒng)DDS采取查找表方式進(jìn)行設(shè)計(jì),將相位對(duì)應(yīng)值預(yù)先存儲(chǔ)在ROM中,通過(guò)地址控制找到相位對(duì)應(yīng)正余弦值,從而產(chǎn)生正余弦波形。這種方式會(huì)用到大量ROM資源。傳統(tǒng)DDS設(shè)計(jì)見(jiàn)圖1。本文基于CORDIC算法設(shè)計(jì)DDS,通過(guò)改變輸入信號(hào)FWWORD、PH_ADJ_EN、PH_ADJ和DATA_ACC_SEL實(shí)現(xiàn)波形頻率、波形相位和數(shù)據(jù)精度可調(diào),同時(shí)不使用ROM資源,其中FWWORD調(diào)節(jié)波形頻率、PH_ADJ_EN和PH_ADJ共同調(diào)節(jié)相位,DATA_ACC_SEL通過(guò)選擇不同迭代次數(shù)的迭代數(shù)據(jù)改變輸出數(shù)據(jù)的精度。
本設(shè)計(jì)主要包括相位累加、頻率控制、相位控制、CORDIC預(yù)處理、CORDIC迭代和迭代次數(shù)選擇模塊,結(jié)構(gòu)如圖2所示。其中通過(guò)CORDIC預(yù)處理和迭代部分求出每個(gè)相位對(duì)應(yīng)正余弦值,并將計(jì)算結(jié)果輸出。在相位累加部分,通過(guò)相位不斷循環(huán)累加獲得[-180o,180o]之間的相位,將累加相位數(shù)據(jù)送到CORDIC算法模塊,進(jìn)而得到連續(xù)輸出的正余弦函數(shù)值,獲得正交正余弦波形。迭代次數(shù)選擇模塊則可以選擇不同迭代次數(shù)進(jìn)而改變輸出數(shù)據(jù)的精度。與參考文獻(xiàn)[2]和[3]相比,加入了數(shù)據(jù)精度、波形相位和波形頻率調(diào)節(jié)部分。與AD9850芯片相比,相位調(diào)節(jié)不再受到限制,并且輸出數(shù)據(jù)精度可以調(diào)節(jié)。

圖2 DDS的結(jié)構(gòu)
CORDIC算法可以用來(lái)直接計(jì)算正余弦函數(shù)、乘除法以及雙曲函數(shù)。經(jīng)過(guò)發(fā)展CORDIC算法已經(jīng)發(fā)展成為擁有圓周系統(tǒng)、線性系統(tǒng)和雙曲系統(tǒng)的一個(gè)算法系統(tǒng)。每種系統(tǒng)中又包含旋轉(zhuǎn)模式和向量模式兩種不同的計(jì)算模式。本設(shè)計(jì)采用圓周系統(tǒng)中旋轉(zhuǎn)模式計(jì)算正余弦值,獲得相位對(duì)應(yīng)正余弦值。為了保證數(shù)據(jù)在量化后沒(méi)有溢出,CORDIC算法迭代部分輸入信號(hào)采用16位有符號(hào)數(shù),迭代次數(shù)由DATA_ACC_SEL決定,最多為16次。
2.1 算法迭代原理
圓周系統(tǒng)旋轉(zhuǎn)模式矢量旋轉(zhuǎn)圖如圖3所示。

圖3 圓周系統(tǒng)旋轉(zhuǎn)模式矢量旋轉(zhuǎn)圖
根據(jù)圖3可知P點(diǎn)的坐標(biāo)如下:
(1)
逆時(shí)針旋轉(zhuǎn)β得到的Q點(diǎn)坐標(biāo)為:
(2)
展開(kāi)可得:
(3)
將式(1)代入式(3)可得:
(4)
提出cosβ可得:
(5)
如果去掉cosβ可以得到R的坐標(biāo):
(6)
將β分成若干次疊加,那么每次的疊加結(jié)果與上次的關(guān)系為:
(7)
不妨令
βi=tan-1(di2-i)
(8)
將式(8)代入式(7)可得:
(9)
為了確定di的符號(hào),引入變量Z,并給出如下關(guān)系:
zi+1=zi-ditan-12-i
(10)
得到圓周系統(tǒng)旋轉(zhuǎn)模式下的迭代方程如下:
(11)
式(11)沒(méi)有考慮到模長(zhǎng)處理。引入模長(zhǎng)補(bǔ)償因子An。在圓周系統(tǒng)旋轉(zhuǎn)模式下,最終迭代的目標(biāo)是使得Zn=0,最終得到圓周系統(tǒng)旋轉(zhuǎn)模式公式如下:
(12)
令x0=1/An,y0=0可得:
(13)
根據(jù)式(12)和式(13)可知,給定初始值x0和y0,并根據(jù)迭代次數(shù)確定An,利用CORDIC迭代算法,可得Z0對(duì)應(yīng)的正弦值和余弦值。
對(duì)應(yīng)式(11)的并行架構(gòu)設(shè)計(jì)如圖4所示。參考XILINX CORDIC IP[5]核的設(shè)計(jì),本次設(shè)計(jì)迭代次數(shù)最多為16次,CORDIC迭代模塊是16位有符號(hào)數(shù)。

圖4 并行的CORDIC處理器
經(jīng)過(guò)計(jì)算式(8)可以知道β的累加結(jié)果在 [-99.88°,99.88°]之間,即可以直接計(jì)算角度在[-99.88°,99.88°]之間,不在該范圍內(nèi)的相位,需要對(duì)其進(jìn)行預(yù)處理。
2.2 預(yù)處理原理
根據(jù)三角函數(shù)的性質(zhì),對(duì)不能直接計(jì)算的相位值進(jìn)行預(yù)處理。CORDIC算法的預(yù)處理關(guān)系見(jiàn)表1。其中(x0,y0)是預(yù)處理之前的坐標(biāo),θ是要進(jìn)行處理的角度。在預(yù)處理結(jié)果一列中是對(duì)應(yīng)的處理后的結(jié)果。引入變量W,根據(jù)預(yù)處理對(duì)應(yīng)關(guān)系可以得到:
(14)

3.1 仿真結(jié)果
CORDIC迭代模塊輸入采用弧度輸入,并對(duì)輸入進(jìn)行量化處理,擴(kuò)大214倍,輸出結(jié)果也將擴(kuò)大214倍。通過(guò)時(shí)鐘驅(qū)動(dòng)相位累加模塊,產(chǎn)生連續(xù)相位。
FWWORD為17位有符號(hào)數(shù),數(shù)據(jù)范圍在[-65 536,65 535]之間。PH_ADJ為17位有符號(hào)數(shù),相位調(diào)節(jié)范圍在[-65 536,65 535]之間,量化后CORDIC模塊的輸入值范圍在[-51 472,51 472]之間,因此,PH_ADJ可以進(jìn)行[-51 472,51 472]之間的任意相位調(diào)節(jié)。DATA_ACC_SEL的位寬是2,可以選擇迭代7次、10次、13次或16次。
使用Modelsim對(duì)設(shè)計(jì)做仿真,圖5給出了在迭代次數(shù)為16時(shí),對(duì)相位和頻率調(diào)節(jié)測(cè)試的波形。測(cè)試開(kāi)始時(shí)頻率累加步長(zhǎng)為10,初始相位為0。第一次調(diào)整將相位累加步長(zhǎng)改為20,相位不做調(diào)整。第二次累加步長(zhǎng)不做調(diào)整,將相位調(diào)節(jié)到-90°。第三次將累加步長(zhǎng)調(diào)節(jié)為30,同時(shí)將相位調(diào)節(jié)到90°。經(jīng)過(guò)三次測(cè)試可知,該設(shè)計(jì)可以產(chǎn)生正交正余弦波形,同時(shí),可以對(duì)產(chǎn)生波形的頻率和相位進(jìn)行調(diào)整,并且對(duì)單個(gè)參數(shù)進(jìn)行調(diào)整時(shí),其他參數(shù)不受影響。FWWORD對(duì)頻率進(jìn)行調(diào)節(jié),PH_ADJ_EN和PH_ADJ對(duì)相位進(jìn)行調(diào)節(jié),同時(shí)相位的調(diào)節(jié)不會(huì)受到限制。

圖5 仿真結(jié)果
表2給出了在累加步長(zhǎng)為10、初始相位為0時(shí),不同迭代次數(shù)產(chǎn)生的數(shù)據(jù)。其中迭代次數(shù)有7次、10次、13次和16次。表中的實(shí)際值是真實(shí)數(shù)據(jù)擴(kuò)大214倍之后的數(shù)據(jù)。根據(jù)表中數(shù)據(jù)可知,不同的迭代次數(shù)產(chǎn)生的數(shù)據(jù)精度是不同的,本設(shè)計(jì)中DATA_ACC_SEL信號(hào)可以選擇不同迭代次數(shù)的迭代結(jié)果,進(jìn)而改變數(shù)據(jù)的輸出精度。在13次和16次的迭代中數(shù)據(jù)是一樣的,說(shuō)明在數(shù)據(jù)位寬一定的情況下,數(shù)據(jù)的最大迭代次數(shù)是一定的。

表2 不同迭代次數(shù)的數(shù)據(jù)對(duì)比(正弦數(shù)據(jù))
3.2 資源評(píng)估
采用Quartus Ⅱ 13設(shè)計(jì)RTL代碼,并在Altera的EP2C70F89C6 FPGA芯片上實(shí)現(xiàn),評(píng)估資源利用率和最大工作頻率,與文獻(xiàn)[3]使用的芯片相同。本設(shè)計(jì)與文獻(xiàn)[3]中的傳統(tǒng)設(shè)計(jì)及優(yōu)化后的設(shè)計(jì)資源對(duì)比見(jiàn)表3。由表3可知,本設(shè)計(jì)在加入數(shù)據(jù)精度調(diào)節(jié)、相位和頻率調(diào)節(jié)后與傳統(tǒng)設(shè)計(jì)的資源使用[3]相當(dāng),且不占用block memory。測(cè)得本設(shè)計(jì)的最大工作頻率可達(dá)172.83 MHz高于AD8950的最大工作頻率125 MHz。

表3 資源對(duì)比
本設(shè)計(jì)基于CORDIC算法進(jìn)行DDS設(shè)計(jì),對(duì)設(shè)計(jì)進(jìn)行Modelsim仿真,通過(guò)調(diào)節(jié)輸入信號(hào)FWWORD、PH_ADJ_EN、PH_ADJ和DATA_ACC_SEL能夠達(dá)到相位和頻率可調(diào)以及輸出數(shù)據(jù)精度可調(diào)的效果。
采用Quartus Ⅱ 13設(shè)計(jì)RTL代碼,并用Altera的EP2C70F89C6 FPGA芯片進(jìn)行資源評(píng)估,在加入數(shù)據(jù)精度調(diào)節(jié)、相位和頻率調(diào)節(jié)后與傳統(tǒng)設(shè)計(jì)的資源使用情況相當(dāng),并且沒(méi)有使用到ROM資源,節(jié)省了ROM資源。
[1] 高亞軍.基于FPGA的數(shù)字信號(hào)處理(第二版)[M].北京:電子工業(yè)出版社,2015.
[2] 景標(biāo),邢維巍,張燕琴.基于 CORDIC 算法的正交信號(hào)源實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2016,39(7):57-59.
[3] 常柯陽(yáng),曾岳南,陳平,等.CORDIC算法在正余弦函數(shù)中的應(yīng)用及其 FPGA實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2013,49(7):140-143.
[4] 李慶華.通信IC設(shè)計(jì)(上冊(cè))[M].北京:機(jī)械工業(yè)出版社,2016.
[5] 劉東華.Xilinx系列FPGA芯片IP核詳解[M].北京:電子工業(yè)出版社,2013.
Signal source of adjustable parameters design based on CORDIC algorithm
Zhang Cunsheng, Zhang Dexue, Han Xuesen, Wang Chao, Zhang Heng, Ji Zhenxian
(College of Electronic,Communication and Physics, Shandong University of Science and Technology, Qingdao 266590,China)
Direct Digital Synthesizer(DDS) is the key technology in wireless communications. Due to different applications and specifications, sine wave of DDS generator module has a variety of implementations. The design uses CORDIC algorithm to calculate the waveform data, uses pretreatment to achieve full phase waveform real-time calculation of data, and doesn’t take up storage resources. The precision can be adjusted by changing the number of iterations. The accuracy frequency and phase of the DDS designed in this paper are adjustable. Implemented in Altera Cyclone2, the clock frequency is up to 172 MHz, occupying 1 171 LUTs.
FPGA; DDS; CORDIC
TN99
A
10.19358/j.issn.1674- 7720.2017.04.018
張存生,張德學(xué),韓學(xué)森,等.基于CORDIC算法的參數(shù)可調(diào)信號(hào)源設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2017,36(4):59-62.
2016-09-20)
張存生(1990-),男,碩士研究生,主要研究方向:專用集成電路設(shè)計(jì)。
張德學(xué)(1977-),男,副教授,碩士生導(dǎo)師,主要研究方向:異構(gòu)多核片上網(wǎng)絡(luò)NoC建模與評(píng)估、SoC集成電路設(shè)計(jì)。
韓學(xué)森(1992-),男,碩士研究生,主要研究方向:專用集成電路設(shè)計(jì)。