一種CORDIC協(xié)處理器核的設計與實(shí)現
此模塊首先通過(guò)控制命令字、yz分量計算出旋轉的方向,然后對向量作旋轉。由于圓坐標和雙曲坐標模式下旋轉的角度不同,所以需要根據控制命令字進(jìn)行選擇。由于使用了流水線(xiàn)結構,移位操作實(shí)際上通過(guò)布線(xiàn)而靜態(tài)確定,不需要專(zhuān)門(mén)的移位器。模塊使用3個(gè)可進(jìn)行加減運算的ALU單元分別對xyz分量進(jìn)行修正。Rom存儲了圓坐標和雙曲坐標模式下的旋轉角度,其精度根據IP核的配置而定,可以簡(jiǎn)單地通過(guò)在實(shí)例化Verilog模塊時(shí)指定參數來(lái)進(jìn)行配置。
本文引用地址:http://dyxdggzs.com/article/201609/303786.htm2.4 后處理單元
由圖2可知,旋轉單元的輸出結果并不直接對應CORDIC協(xié)處理器所提供的函數。后處理單元對CORDIC旋轉單元的輸出結果進(jìn)行處理,實(shí)現所需要的函數。具體的處理如表2所示。

此外,由于前處理單元對圓坐標輸入進(jìn)行了象限折疊,后處理單元需要進(jìn)行相應的修正。例如對于圓坐標旋轉模式,如果輸入的z∈[π/4,π/2],則前處理單元會(huì )將z變?yōu)?pi;/2-z,于是相應的后處理單元需要將x和y的值相交換。
2.5 補償單元
由(4)可知,CORDIC每次旋轉都會(huì )改變向量的模,故需要對最終的xy分量進(jìn)行補償。由于向量模變化只與坐標系模式有關(guān),故補償單元可以用一個(gè)常數乘法器實(shí)現。常數乘法器可以通過(guò)用華萊士樹(shù)把移位后幾個(gè)向量相加來(lái)實(shí)現。本文在線(xiàn)下通過(guò)程序窮舉找出了一組加減操作數最少乘數編碼方式,對于18位的配置,可以使用一個(gè)9輸入的華萊士樹(shù)和一個(gè)加法器實(shí)現,這使得該核在缺乏硬件乘法器的基于flash的Actel FPGA上也可以輕松使用。華萊士樹(shù)中一位的結構如圖4所示。

3 性能分析
為了證明所提出的IP核的實(shí)用性,本文選取了迭代次數16—20、擴展位數為5位的幾種配置進(jìn)行了綜合。綜合平臺使用了航天電子系統常用的2種FPGA:A3P3000E和xc4vf40 綜合結果如表3所示。

可見(jiàn)本IP核具有較高的性能和較低的資源占用率,可以較容易地被集成,且隨著(zhù)迭代次數和精度的提高,資源的增長(cháng)趨勢穩定,速度的下降并不明顯。
一直以來(lái)有很多為加速CORDIC運算而提出的方法,其中很多使用了冗余數,試圖通過(guò)冗余數進(jìn)位傳播有限的特點(diǎn)來(lái)降低加法器的延遲。但本文通過(guò)對比發(fā)現,基于冗余數的算法僅在A(yíng)3P3000E的實(shí)現上有一定速度優(yōu)勢,而在virtex4上沒(méi)有速度優(yōu)勢,還在資源利用率上有很大劣勢。原因是當前的大多數FPGA針對常見(jiàn)運算邏輯,如加法器的實(shí)現作出了特殊優(yōu)化,使用了快速進(jìn)位鏈降低加法器的進(jìn)位延遲。相對的,由于FPGA缺乏對冗余數邏輯的支持,冗余數加法器需要由基本單元綜合生成,具有較大的布線(xiàn)延遲,且需要消耗大量的LUT或邏輯門(mén)資源。此外,由于冗余數使用2倍于補碼長(cháng)度的編碼方式來(lái)表示數值,冗余數需要使用更多的寄存器寄存每級流水線(xiàn)的中間結果。綜上,對于有效位數較少的配置,本文提出的CORDIC協(xié)處理器具有更好的性能與資源利用更具優(yōu)勢。
4 精度與誤差
根據參考文獻可知,CORDIC計算的誤差主要來(lái)自2部分:由于每次迭代時(shí)用來(lái)修正z分量的角度有限而產(chǎn)生的近似誤差和由于計算位數有限而產(chǎn)生的xy分量截斷誤差。為了盡量降低誤差,首先應該保證旋轉過(guò)程中用來(lái)修正z的數值是經(jīng)過(guò)舍入得到的,而不是簡(jiǎn)單通過(guò)截斷得到的,這樣可以減小由于使用近似的旋轉角度而產(chǎn)生的舍入誤差。其次可以考慮在最終階段運算結果前進(jìn)行舍入。運算結果的舍入可以在補償單元通過(guò)增加華萊士樹(shù)的輸入實(shí)現。即增加一個(gè)輸入變量,其大小為最低有效位的一半,符號與補償單元的輸入相同。除此之外,需要根據所需的精度合理選擇CORDIC協(xié)處理器的數據位數,增加擴展位,即對于n位的CORDIC運算,在迭代運算時(shí)使用n+m位,在迭代結束后舍棄m位,這樣做可以保證前面的n位不受到截斷誤差的影響。本文選取了18位CORDIC來(lái)說(shuō)明擴展位和迭代次數對精度的影響。對于圓坐標旋轉模式,輸入向量為x=2.0,y=0.0,z∈[-π,π]的所有可能輸入向量;對于圓坐標向量模式,輸入為模為2.0,夾角屬于[-π,π]的所有可能輸入向量;對于雙曲旋轉模式,輸入為x=2.0,y=0.0,z∈[-1.0,1.0]的所有可能輸入向量;對于雙曲向量模式,輸入為x=a+1,y=a-1,α∈[0.25,1.0]的所有可能輸入。各個(gè)函數的誤差與所選取的迭代次數和擴展位的關(guān)系如表4所示。

其中ulp為最低位單位。對于20位定點(diǎn)數有1ulp=2-18。配置為擴展位數和迭代次數。通過(guò)實(shí)驗可以發(fā)現,對擴展后的向量進(jìn)行截斷會(huì )帶來(lái)顯著(zhù)的誤差增長(cháng)。并且只會(huì )在使用較長(cháng)擴展位時(shí)對結果進(jìn)行舍入才有明顯的效果,因為擴展位較少的情況下舍入反而可能會(huì )讓結果向錯誤的方向舍入。最后值得注意的是雙曲模式下的函數誤差高于圓坐標模式,由(8)可知這是由于雙曲模式向量角度收斂性更差而導致的。
5 結束語(yǔ)
本文提出的CORDIC協(xié)處理器可以容易地集成進(jìn)目前常見(jiàn)的航天級FPGA中,為CPU提供更強的三角函數和超越函數運算能力。在中端的V4系列FPGA中實(shí)現萬(wàn)分之1精度的三角函數和超越函數只需要不到10%的資源,并可運行于較高的系統時(shí)鐘下。CORDIC協(xié)處理器提供了并行運算幾種常用三角和超遠函數的功能,不僅適用于導航計算機,也可以被用于其他有大量實(shí)時(shí)性計算需求的嵌入式系統中。
評論