王 琦,欒鑄徵
(船舶重工集團公司723所,揚州225001)
在雷達信息處理中,需要進行球面坐標(biāo)與直角坐標(biāo)的轉(zhuǎn)換,目前大多是通過軟件方式來實現(xiàn)的[1],但隨著雷達數(shù)據(jù)率的不斷提升,用軟件的方法越來越不能滿足處理的實時性要求了,所以有必要用硬件來實時計算。
CORDIC算法可以將多種難以用硬件電路直接實現(xiàn)的復(fù)雜運算分解為統(tǒng)一、簡單的移位、加迭代運算,而且結(jié)構(gòu)規(guī)則,運算周期可以預(yù)測,適合于超大規(guī)模集成電路(VLSI)實現(xiàn)。由于CORDIC采用迭代的思想,且可以不需要乘法運算,所以特別適用于硬件實現(xiàn)(FPGA或?qū)S眉呻娐罚ˋSIC))。另一方面,隨著DSP(數(shù)字信號處理器)芯片中乘法指令的快速實現(xiàn)(一條乘法指令可以在2個周期內(nèi)完成對多個數(shù)據(jù)的乘法操作),以及體系上并行度的提高,使得在DSP芯片上實現(xiàn)CORDIC算法也成為一個可行的方案。
本文首先介紹CORDIC算法原理,然后分析了算法中旋轉(zhuǎn)迭代次數(shù)、操作數(shù)位寬與精度的關(guān)系,最后分別在ALTERA公司的FPGA芯片(Stratix2系列的EP2S90)和TI公司的DSP芯片(TMS320C6455)上實現(xiàn)旋轉(zhuǎn)模式下的CORDIC算法,并將兩者的精度、時間效率、空間效率進行比較分析。
1971年,Walther提出了統(tǒng)一的CORDIC算法[2],引入了參數(shù)m,將CORDIC實現(xiàn)的3種迭代模式:三角運算、雙曲運算和線性運算統(tǒng)一于一個表達式下,形成目前所用到的CORDIC算法最基本的數(shù)學(xué)基礎(chǔ)。該算法的基本思想是通過一系列固定的、與運算基數(shù)相關(guān)的角度不斷偏擺,以逼近所需的旋轉(zhuǎn)角度,可由下列等式描述:
式中:X(n)、Y(n)和Z(n)為所期望得到的函數(shù)。
根據(jù)m=1、-1或0,可以將上面的運算分別稱為圓周旋轉(zhuǎn)運算、雙曲旋轉(zhuǎn)運算或線形旋轉(zhuǎn)運算。其中:
m=1時,通常微轉(zhuǎn)角θi=arctan(2-i),且各微轉(zhuǎn)角要滿足,使結(jié)果Z(n)=0的旋轉(zhuǎn)稱為旋轉(zhuǎn)模式,使結(jié)果Y(n)=0的旋轉(zhuǎn)稱為向量模式。當(dāng)m=1時,旋轉(zhuǎn)模式的CORDIC算法的迭代公式如下:
式中:i為迭代次數(shù);δi=sign[Z(i)]。
由基本原理可知,CORDIC算法所能達到的精度與所選取的旋轉(zhuǎn)迭代次數(shù)和操作數(shù)位寬有關(guān)。
一方面,根據(jù)角度精度計算公式:
可知,算法的精度隨著迭代次數(shù)的增加而提高。需要注意的是,為了提高精度,并不能一味地增加迭代次數(shù),不僅僅因為迭代次數(shù)的增加會犧牲系統(tǒng)速度,增加硬件資源消耗,更因為數(shù)據(jù)位寬制約著有效迭代次數(shù)。輸入數(shù)據(jù)用M位二進制數(shù)表示,當(dāng)?shù)螖?shù)超過M次時,X0,Y0右移的位數(shù)超過M位,導(dǎo)致移位操作無效,這樣限制了有效的迭代運算次數(shù),即限制了算法的精度。因此,在設(shè)計中,需對輸入數(shù)據(jù)進行位擴展,將原始坐標(biāo)和基本旋轉(zhuǎn)角度均擴大2m倍,這樣有效迭代次數(shù)增加了m次,基本旋轉(zhuǎn)角度更加接近理論值,使算法精度提高。
另外,用來表述角度的二進制位數(shù)的有限也限制了算法的精度。在設(shè)計中,角度須用較寬的數(shù)據(jù)位來表示。比如當(dāng)角度用20位有符號數(shù)表示時,每1°用十六進制表示為 (220-1)/360≈B61(十六進制),角度分辨率為360°/(220-1)≈0.000 343°,則CORDIC迭代中的第19次固定旋轉(zhuǎn)角度無法分辨出來,所以對于20bit位寬角度,CORDIC最多只要進行18次迭代,該精度已能夠滿足一般的工程應(yīng)用。
對于CORDIC算法的FPGA實現(xiàn),本文采用高速全流水線結(jié)構(gòu)。流水線CORDIC結(jié)構(gòu)雖然占用的硬件資源較多,但該結(jié)構(gòu)可以提高數(shù)據(jù)的吞吐率。對于大多數(shù)數(shù)字信號處理算法來說,存在很多同一指令連續(xù)處理很長一段數(shù)據(jù)的情況,此時高吞吐率更有意義。從當(dāng)前VLSI的發(fā)展趨勢上來看,芯片內(nèi)的門資源相對富裕,對流水線CORDIC的實現(xiàn)規(guī)模約束很小。
此外,流水線CORDIC不存在迭代式CORDIC的反饋回路,使得單元結(jié)構(gòu)更加規(guī)則,有利于VLSI的實現(xiàn)。圖1給出了FPGA中CORDIC算法的一般流水線結(jié)構(gòu)。
圖1 FPGA中CORDIC算法的一般流水線結(jié)構(gòu)
利用FPGA實現(xiàn)流水線結(jié)構(gòu)的CORDIC算法,主要利用FPGA寄存器資源較豐富的特點,在每個單元的輸入和輸出端分別加入寄存器,對輸入輸出進行鎖存。并利用了2個移位器和2個加減法器,再使用不同的時鐘信號作為輸入信號,并采用兩相門控時鐘進行控制,以保證整個設(shè)計的同步性。
Stratix ii器件系列將FPGA性能推向了新的高度,該系列是業(yè)界最快、密度最高的FPGA。高性能的Stratix ii器件架構(gòu)除了具有革新性的邏輯結(jié)構(gòu)之外,還包括速度優(yōu)化的互連結(jié)構(gòu)和極高效的時鐘網(wǎng)絡(luò),它們連接LE、TriMatrix存儲塊、DSP塊、鎖相環(huán)(PLL)和I/O單元(IOE)實現(xiàn)最大系統(tǒng)性能。Stratix ii器件包括高性能的嵌入DSP塊,它能夠運行在370MHz,并為DSP應(yīng)用進行優(yōu)化,消除了大計算量應(yīng)用中的性能瓶頸,提供可預(yù)測和可靠的性能,這樣既節(jié)約資源又不會損失性能。另外,還提供了靈活的可配置成不同數(shù)據(jù)寬度和延遲的軟核乘法器,可大大提高數(shù)據(jù)的吞吐量。
本文在Altera公司的Quartus ii7.2軟件環(huán)境下采用自頂向下的方法,使用VHDL語言設(shè)計了圖1所示流水線結(jié)構(gòu)的旋轉(zhuǎn)模式下的CORDIC算法,并在Stratix ii EP2S90F1020I4芯片上進行了驗證。DSP芯片作為軟件可編程器件,具有通用微處理器方便靈活的特點。DSP中實現(xiàn)旋轉(zhuǎn)模式下的CORDIC算法,是一個軟件流程,流程圖如圖2所示。
TMS320C6000系列是美國TI公司推出的高性能DSP芯片,其最主要特點是在體系結(jié)構(gòu)上采用了超長指令字(VLIW),每個周期能執(zhí)行8條32位指令,通過指令間的并行來獲取更高的性能。并行的系統(tǒng)結(jié)構(gòu)是該系列DSP高性能的體現(xiàn),使之在性能上完全超越了其他傳統(tǒng)的DSP。另外,其內(nèi)核CPU由2個寄存器組A和B組成,具有8個(2個乘法器和6個ALU)32位字長的功能單元。
本文所用的TMS320C6455是定點DSP,最高主頻達1.0GHz,峰值處理能力達8 000MIPS,非常適合于實時信號處理。在TI公司的CCS3.3軟件開發(fā)環(huán)境下,使用C語言和匯編語言混合編程,并結(jié)合C64系列DSP的多級流水線、高并行性(SIMD)和片內(nèi)存儲器的特點,實現(xiàn)了圖2所示的CORDIC算法。
圖2 DSP中旋轉(zhuǎn)模式下的CORDIC算法實現(xiàn)軟件流程
本文分別在FPGA(Stratix ii EP2S90F1020I4)芯片和DSP(TMS320C6455)芯片上實現(xiàn)旋轉(zhuǎn)模式下的CORDIC算法?,F(xiàn)分別從數(shù)值精度、時間效率和空間效率角度對二者的優(yōu)劣進行比較。數(shù)值精度可用誤差來衡量,時間效率可以用周期數(shù)或程序執(zhí)行時間來衡量,而空間效率主要指算法所消耗的存儲空間以及寄存器個數(shù)。
仿真在以下條件下進行:輸入輸出數(shù)據(jù)位寬為16bit,中間數(shù)據(jù)位寬為20bit(即位擴展4bit),角度位寬為20bit,迭代次數(shù)16次。
表1給出了在上述仿真條件下FPGA和DSP實現(xiàn)極坐標(biāo)與直角坐標(biāo)轉(zhuǎn)換仿真結(jié)果的精度比較。
從表1可看出,相同仿真條件下,F(xiàn)PGA計算結(jié)果與真值間的誤差在0.008 2%左右,可滿足大部分工程應(yīng)用對精度的要求;而DSP的計算結(jié)果與真值間的誤差僅為0.000 9%,該誤差可忽略,DSP精度比FPGA高1個數(shù)量級。
FPGA的最高工作頻率Fmax跟數(shù)據(jù)位寬和迭代次數(shù)有關(guān),而DSP工作頻率設(shè)定為1.0GHz,即其1個指令周期為1ns。表2給出了FPGA與DSP 的時間效率的比較。
表1 FPGA和DSP實現(xiàn)(R,θ)→(x,y)轉(zhuǎn)換的仿真結(jié)果精度比較
表2 FPGA與DSP的時間效率的比較
從表2可看出,在FPGA中,周期數(shù)只跟迭代次數(shù)有關(guān),但最高時鐘頻率跟數(shù)據(jù)位寬與迭代次數(shù)均有關(guān)。DSP中,周期數(shù)主要與迭代次數(shù)有關(guān)。相同條件下,F(xiàn)PGA速度遠遠快于DSP,且隨著數(shù)據(jù)位寬的增加和迭代次數(shù)的增加,兩者的執(zhí)行時間均相應(yīng)增加。
對于資源的消耗,F(xiàn)PGA主要是消耗算術(shù)邏輯單元和寄存器,DSP則是指占用芯片內(nèi)部隨機存儲器的大小。表3給出了FPGA與DSP空間效率的比較。
表3 FPGA與DSP空間效率的比較
從表3可看出,隨著數(shù)據(jù)位寬和迭代次數(shù)的增加,F(xiàn)PGA消耗的硬件資源相應(yīng)增加,而DSP所消耗的內(nèi)存資源相對變化不大。
對于旋轉(zhuǎn)模式下的CORDIC算法在FPGA和DSP中的實現(xiàn),通過兩者數(shù)值精度、時間效率和空間效率的比較,可以得到以下結(jié)論:相同仿真條件下,DSP數(shù)值精度比FPGA高,而FPGA速度遠遠快于DSP,且消耗更少的硬件資源,但DSP設(shè)計更靈活,可移植性更強,通用性更好。
本文在現(xiàn)有的CORDIC算法的基礎(chǔ)上分析了算法中旋轉(zhuǎn)迭代次數(shù)、操作數(shù)位寬與精度的關(guān)系,并分別在FPGA芯片和DSP芯片上采用全流水式、高并行化結(jié)構(gòu)進行設(shè)計,提高了數(shù)據(jù)吞吐率,加快了數(shù)據(jù)處理速度,通過選取合適的位寬和迭代次數(shù),使計算精度得到提高。仿真結(jié)果對比表明,相同條件下,F(xiàn)PGA相比DSP速度更快,消耗硬件資源更少,而DSP擁有更高的數(shù)值精度和靈活性。
[1]劉翠海,王文清,袁滿.一種支持雷達P顯仿真的實時坐標(biāo)變換策略[J].系統(tǒng)仿真學(xué)報,2012,14(9):17-22.
[2]Walther J.A unified algorithm for elementary functions[A].Spring Joint Computer Conference[C].New York,1971:379-385.
[3]季中恒,宋博.CORDIC算法及其硬件實現(xiàn)[J].彈箭與制導(dǎo)學(xué)報,2005,25(3):609-612.
[4]李滔.流水線CORDIC算法及其應(yīng)用研究[D].北京:北京理工大學(xué),1999.
[5]吳繼 華,王誠.Altera FPGA/CPLD 設(shè)計(高級篇)[M].北京:人民郵電出版社,2005.