閆溫合,胡永輝,李瑾琳,何在民,吳成英,趙坤娟
?
應(yīng)用于數(shù)字下變頻中CORDIC算法的FPGA實(shí)現(xiàn)
閆溫合1,2,3,胡永輝1,2,李瑾琳4,何在民1,2,吳成英5,趙坤娟1,2,3
(1. 中國(guó)科學(xué)院國(guó)家授時(shí)中心,西安 710600;2. 中國(guó)科學(xué)院精密導(dǎo)航定位與定時(shí)技術(shù)重點(diǎn)實(shí)驗(yàn)室,西安 710600; 3. 中國(guó)科學(xué)院大學(xué),北京 100049;4. 湖北省電力公司信息通信分公司,武漢 430077;5. 湖北民族學(xué)院,恩施 445000)
正余弦信號(hào)在GNSS接收終端的數(shù)字下變頻中有著重要的應(yīng)用,CORDIC算法是實(shí)現(xiàn)正余弦信號(hào)的最重要方法。立足于DDS與CORDIC算法的基本原理,針對(duì)CORDIC算法實(shí)現(xiàn)主要存在的3個(gè)問(wèn)題,結(jié)合變象限法、流水線(xiàn)技術(shù)及相幅量化數(shù)據(jù)格式,在FPGA上通過(guò)實(shí)現(xiàn)CORDIC算法可在一個(gè)時(shí)鐘周期內(nèi)計(jì)算出正余弦信號(hào)幅值。仿真結(jié)果表明:與傳統(tǒng)CORDIC算法實(shí)現(xiàn)相比,本文實(shí)現(xiàn)的正余弦信號(hào)精度高且速度快,并能滿(mǎn)足GNSS接收終端數(shù)字下變頻對(duì)正余弦信號(hào)的需求。
CORDIC算法;流水線(xiàn)結(jié)構(gòu);正余弦信號(hào);數(shù)字下變頻(DDS)
在GNSS(global navigation satellite systems)接收終端中,數(shù)字下變頻器(digital down-converter,DDC)主要實(shí)現(xiàn)的功能是將A/D采樣后的數(shù)字信號(hào)從中頻信號(hào)變成基帶信號(hào),它是用本地的同相載波和正交載波分別與接收中頻信號(hào)相乘,這樣可以剝離載波并在后續(xù)電路中差分解調(diào)時(shí)利用同相和正交2個(gè)分量消除相差的影響[1]。由于下變頻混頻器位于接收系統(tǒng)的前端,它的性能對(duì)整個(gè)接收系統(tǒng)的性能影響很大,所以需要快速和精準(zhǔn)地進(jìn)行正余弦函數(shù)的計(jì)算,傳統(tǒng)的乘、除等計(jì)算方法在FPGA中實(shí)現(xiàn)時(shí)需要占用大量的片內(nèi)資源,并且三角函數(shù)的運(yùn)算很難實(shí)現(xiàn)。早期的硬件實(shí)現(xiàn)方法是采用查表法,多項(xiàng)式展開(kāi)或近似的方法,這些方法在速度、精度、資源方面不能很好兼顧。CORDIC(the coordinate rotational digital computer)算法是J. E. Volder于1959年在美國(guó)航空控制系統(tǒng)的設(shè)計(jì)中提出的一種用于計(jì)算一些常用的基本運(yùn)算函數(shù)和算術(shù)操作的循環(huán)迭代算法[2]。1971年J. S. Walther 提出改進(jìn)的統(tǒng)一CORDIC算法[3],他把圓周運(yùn)算、雙曲旋轉(zhuǎn)和直線(xiàn)旋轉(zhuǎn)統(tǒng)一到一個(gè)CORDIC迭代方程里,為統(tǒng)一的硬件實(shí)現(xiàn)提供了理論基礎(chǔ)。該方法是用一系列與運(yùn)算基數(shù)相關(guān)的角度不斷偏擺從而逼近所需旋轉(zhuǎn)的角度,從廣義上講它是一個(gè)數(shù)值性計(jì)算逼近的方法,由于這些固定的角度與計(jì)算基數(shù)有關(guān),運(yùn)算只有移位和加減。與傳統(tǒng)的查表法相比,CORDIC實(shí)現(xiàn)節(jié)約了大量的ROM資源,可以滿(mǎn)足GNSS接收終端數(shù)字下變頻對(duì)正余弦信號(hào)產(chǎn)生精度和速度的需求。
直接數(shù)字頻率合成技術(shù)(direct digital synthesis,DDS)是美國(guó)學(xué)者J. Tierney,C. M. Resder和B. Gold于1973年首先在論文《A Digital Frequency Synthesizer》中提出的。與其他的頻率合成技術(shù)相比較,這種方法具有輸出頻率可調(diào)、頻率切換時(shí)間短、輸出相位連續(xù)、分辨率高、相對(duì)帶寬寬和易于調(diào)制等許多優(yōu)點(diǎn)[4],傳統(tǒng)的基于查表法的DDS典型結(jié)構(gòu)如圖1所示,由圖1可見(jiàn)DDS主要包含以下單元:相位累加器、正弦查表RAM、D/A轉(zhuǎn)換器以及一個(gè)低通濾波器。
圖1 傳統(tǒng)的DDS工作原理
傳統(tǒng)的DDS實(shí)現(xiàn)簡(jiǎn)單,但是隨著精度的提高,F(xiàn)PGA實(shí)現(xiàn)時(shí)RAM模塊占用存儲(chǔ)器單元呈指數(shù)增長(zhǎng),這不僅使設(shè)計(jì)對(duì)硬件資源的要求過(guò)高,而且降低了系統(tǒng)的處理速度,因而不能滿(mǎn)足節(jié)省資源的要求。
圖2 CORDIC算法原理示意圖
由式(7)可知,是一個(gè)增益因子,實(shí)現(xiàn)的時(shí)候可以單獨(dú)處理,而無(wú)需每一次運(yùn)算時(shí)都重新計(jì)算,具體的作法是將增益存儲(chǔ)在ROM中,需要用到的時(shí)候查表即可,于是可以得到組合迭代方程為
于是經(jīng)過(guò)次迭代之后,CORDIC輸出變?yōu)?/p>
從以上的分析可以看出,CORDIC算法在圓周系統(tǒng)的旋轉(zhuǎn)模式下可以用來(lái)計(jì)算一個(gè)輸入角的正弦、余弦和正切。
現(xiàn)場(chǎng)可編程邏輯器件(FPGA)是在專(zhuān)用集成電路(ASIC)的基礎(chǔ)上發(fā)展起來(lái)的一種新型邏輯器件,其特點(diǎn)是用戶(hù)可以完全通過(guò)軟件進(jìn)行配置和編程,完成某特定的功能,并且它可以反復(fù)擦寫(xiě)[6]。在本設(shè)計(jì)中選用的FPGA芯片是Altera公司開(kāi)發(fā)的CyclonII系列中的EP2C70F896C6器件,使用Verilog語(yǔ)言完成電路描述,在QuartusII11.1軟件平臺(tái)上進(jìn)行編譯,仿真部分使用Model公司的硬件仿真工具M(jìn)odelsim6.5b。
CORDIC算法的FPGA設(shè)計(jì)主要存在3個(gè)問(wèn)題[7]。1)旋轉(zhuǎn)角度覆蓋范圍為
因此只能達(dá)到[-99.88°,+99.88°],無(wú)法覆蓋整個(gè)周期;2)CORDIC算法在一次角度運(yùn)算中必須使用多次迭代,而每次迭代方向都必須根據(jù)上一次迭代的結(jié)果確定,即每次迭代必須在上次完成以后進(jìn)行,從而導(dǎo)致速度減慢;3)數(shù)據(jù)格式問(wèn)題,包括角度和計(jì)算數(shù)值的數(shù)據(jù)格式。
綜合考慮上面提到的問(wèn)題,在FPGA設(shè)計(jì)中本文采用變象限法,單步流水線(xiàn)技術(shù)和相幅量化數(shù)據(jù)格式這3種技術(shù),圖3為CORDIC算法相/幅轉(zhuǎn)化原理框圖。
圖3 CORDIC算法相幅轉(zhuǎn)換原理圖
CORDIC算法的基本原理是:通過(guò)相位累加器輸入一個(gè)16 bits的二進(jìn)制數(shù),取其中高2位用來(lái)分辨收到相位所在的象限,隨后分別將高2位發(fā)送給前處理單元和延遲單元,前處理單元根據(jù)接收到的數(shù)據(jù)進(jìn)行處理,處理結(jié)果送入CORDIC算法單元,即流水線(xiàn)結(jié)構(gòu)。延遲單元和CORDIC算法單元同步輸出結(jié)果,保存輸入數(shù)據(jù)高2位用于恢復(fù)結(jié)果到原來(lái)象限,并輸出結(jié)果。
1)前處理單元基本原理
前處理單元是負(fù)責(zé)將相位值變換到第1象限并把高2位送入延遲單元,并送入CORDIC算法模塊進(jìn)行迭代計(jì)算。
①當(dāng)高2位為“00”時(shí),輸入相位為第1象限,相位值不變,直接傳給CORDIC模塊;
②當(dāng)高2位為“01”時(shí),輸入相位為第2象限,相位值減去16d16384(90°),同時(shí)傳給CORDIC模塊;
③當(dāng)高2位為“10”時(shí),輸入相位為第3象限,相位值減去16d32768(180°),接著傳給CORDIC模塊;
④當(dāng)高2位為“11”時(shí),輸入相位為第4象限,相位值減去16d49152(270°),同樣傳給CORDIC模塊。
2)后處理單元基本原理
①當(dāng)接收到的高2位是“00”,表示第1象限,輸出的正余弦值都不變:
②當(dāng)接收到的高2位是“01”,表示第2象限,輸出結(jié)果做如下變換:
③當(dāng)接收到的高2位是“10”,表示第3象限,輸出結(jié)果做如下變換:
④當(dāng)接收到的高2位是“11”,表示第4象限,輸出結(jié)果做如下變換:
3)CORDIC算法流水線(xiàn)結(jié)構(gòu)
圖4 n級(jí)CORDIC算法流水線(xiàn)結(jié)構(gòu)
從以上分析可知,運(yùn)用流水線(xiàn)結(jié)構(gòu)可以大大提高算法的實(shí)時(shí)性,其在處理速度上的優(yōu)勢(shì)是CORDIC算法用移位和加法代替乘法運(yùn)算產(chǎn)生的。本設(shè)計(jì)采用的是16級(jí)流水線(xiàn)結(jié)構(gòu),只需等待16個(gè)時(shí)鐘周期后就開(kāi)始輸出有效運(yùn)算結(jié)果值,且在其后的每個(gè)時(shí)鐘周期都會(huì)輸出一個(gè)結(jié)果值,大大地提高了運(yùn)算的效率。圖5所示的是使用QuartusⅡ11.1實(shí)現(xiàn)的部分RTL級(jí)結(jié)構(gòu)(包括2次迭代結(jié)構(gòu)Cordic_interation[])。
圖5 FPGA實(shí)現(xiàn)的部分RTL級(jí)結(jié)構(gòu)
下面2圖是仿真產(chǎn)生的一個(gè)角度輸出結(jié)果(圖6)和正余弦結(jié)果(圖7),其中輸入時(shí)鐘_Clk頻率為100 MHz,輸出正余弦頻率為1 MHz,Accum_Reg是頻率控制字FCW,sin和cos為輸出正余弦信號(hào)。
圖6 仿真輸入一個(gè)角度輸入結(jié)果
圖7 仿真得到的正余弦結(jié)果
由以上仿真結(jié)果可知,CORDIC運(yùn)算模塊是經(jīng)過(guò)16個(gè)周期延遲后開(kāi)始連續(xù)地輸出正弦結(jié)果,其與實(shí)際計(jì)算的正余弦值誤差分析見(jiàn)表1。
表1 結(jié)果誤差
表1表明,由這些具有代表性的仿真結(jié)果來(lái)看,實(shí)際值與理論值存在一定的偏差,但輸入角度在一定范圍內(nèi)正弦函數(shù)的絕對(duì)誤差很小,其精度非常高,而且可以隨著結(jié)果位數(shù)的增加無(wú)限接近真實(shí)值,因此可以滿(mǎn)足GNSS接收終端數(shù)字下變頻的要求[10]。
本文簡(jiǎn)單介紹了傳統(tǒng)DDS系統(tǒng)的原理與結(jié)構(gòu)和應(yīng)用廣泛的CORDIC算法,并結(jié)合變象限法、流水線(xiàn)技術(shù)及相幅量化數(shù)據(jù)格式針對(duì)CORDIC算法實(shí)現(xiàn)了正余弦信號(hào)的硬件設(shè)計(jì),并能夠在1個(gè)時(shí)鐘周期內(nèi)連續(xù)計(jì)算出函數(shù)值,通過(guò)對(duì)仿真結(jié)果分析可以得到所要求頻率的正余弦波形,結(jié)果表明速度和精度都符合數(shù)字下變頻對(duì)正余弦的要求,并且這個(gè)結(jié)構(gòu)可以在現(xiàn)代電子系統(tǒng)設(shè)備及頻率源設(shè)計(jì)中使用,具有較廣泛的應(yīng)用價(jià)值。
[1] 謝崗. GPS原理與接收機(jī)設(shè)計(jì)[M]. 北京: 電子工業(yè)出版社, 2009: 181-286 .
[2] VOLDER J E, CONVAER A D, FORT W. The CORDIC trigonometric computing technique[J]. IEEE Transactions on Electronic Computers, 1959, 8(3): 334-334.
[3] WALTHER J S, PALO ALTO. A unified algorithm for elementary functions[J]. Spring Joint Computer Conference, 1971: 379-385.
[4] 李俊, 張曉東. 基于VB的串行通信在控制系統(tǒng)中的應(yīng)用[J]. 機(jī)械電子, 2008, (10): 29-31, 32.
[5] 高澤溪, 高成. 直接數(shù)字頻率合成器(DDS)及其性能分析[J]. 北京航空航天大學(xué)學(xué)報(bào), 1998, 24(5): 615-618.
[6] 張正, 董少武, 張敏. 一種基于FPGA的多種波形發(fā)生器的設(shè)計(jì)[J]. 時(shí)間頻率學(xué)報(bào), 2008, 31(2): 133-137.
[7] 姚亞峰, 付東兵, 楊曉非. 高速CORDIC 算法的電路設(shè)計(jì)與實(shí)現(xiàn)[J]. 半導(dǎo)體技術(shù), 2008, 33(4): 346-348.
[8] 耿丹. CORDIC算法研究與實(shí)現(xiàn)[J]. 遙測(cè)遙控, 2007, 28(S1): 39-42.
[9] 楊宏, 李國(guó)輝, 劉立新. 基于FPGA的CORDIC算法的實(shí)現(xiàn)[J]. 西安郵電學(xué)院學(xué)報(bào), 2008, 13(1): 75-77.
[10] 何在民, 胡永輝, 武建鋒. BPSK-R信號(hào)與BOC信號(hào)碼跟蹤性能分析及比較[J]. 時(shí)間頻率學(xué)報(bào), 2012, 35(2): 112-119.
FPGA implementation of CORDIC algorithm applied to digital down conversion
YAN Wen-he1,2,3, HU Yong-hui1,2, LI Jin-lin4, HE Zai-min1,2, WU Cheng-ying5, ZHAO Kun-juan1,2,3
(1. National Time Service Center, Chinese Academy of Sciences, Xi′an 710600, China;2. Key Laboratory of Precision Navigation and Timing Technology, National Time Service Center,Chinese Academy of Science, Xi′an 710600, China;3. University of Chinese Academy of Sciences, Beijing 100049, China;4.Information and Communication Branch of Hubei Electric Power Company, Wuhan 430077, China;5. Hubei University for Nationalities, Enshi 445000, China)
The sine and cosine signals are used in digital down conversion of GNSS receiver with important sense and the CORDIC algorithm is the most important way to implement the sine and cosine signals. According to the basic principle of DDS and CORDIC algorithm, aiming at the three existing problems in implementation of CORDIC algorithm, and combining the variable quadrant method, pipeline structure technique and phase/ amplitude quantization data format, we have realized the CORDIC algorithm with FPGA and thus the amplitude values of sine and cosine signals can be calculated in one clock cycle. The simulation results show that compared with the traditional CORDIC algorithm implementation the implementation presented in this paper is characteristic of a higher accuracy of the sine and cosine signals and a higher speed, meeting the needs of the digital down conversion of GNSS receiving terminal.
CORDIC algorithm; pipeline structure; sine and cosine signals; DDS(digital down-conversion)
P127.1
A
1674-0637(2014)01-0034-07
2013-03-08
中國(guó)科學(xué)院“西部之光”人才培養(yǎng)計(jì)劃“西部博士資助項(xiàng)目”(Y307YR6601)
閆溫合,男,碩士研究生,主要從事衛(wèi)星導(dǎo)航定位與時(shí)間同步研究。