一種CORDIC協(xié)處理器核的設(shè)計與實現(xiàn)
此模塊首先通過控制命令字、yz分量計算出旋轉(zhuǎn)的方向,然后對向量作旋轉(zhuǎn)。由于圓坐標(biāo)和雙曲坐標(biāo)模式下旋轉(zhuǎn)的角度不同,所以需要根據(jù)控制命令字進行選擇。由于使用了流水線結(jié)構(gòu),移位操作實際上通過布線而靜態(tài)確定,不需要專門的移位器。模塊使用3個可進行加減運算的ALU單元分別對xyz分量進行修正。Rom存儲了圓坐標(biāo)和雙曲坐標(biāo)模式下的旋轉(zhuǎn)角度,其精度根據(jù)IP核的配置而定,可以簡單地通過在實例化Verilog模塊時指定參數(shù)來進行配置。
本文引用地址:http://butianyuan.cn/article/201609/303786.htm2.4 后處理單元
由圖2可知,旋轉(zhuǎn)單元的輸出結(jié)果并不直接對應(yīng)CORDIC協(xié)處理器所提供的函數(shù)。后處理單元對CORDIC旋轉(zhuǎn)單元的輸出結(jié)果進行處理,實現(xiàn)所需要的函數(shù)。具體的處理如表2所示。
此外,由于前處理單元對圓坐標(biāo)輸入進行了象限折疊,后處理單元需要進行相應(yīng)的修正。例如對于圓坐標(biāo)旋轉(zhuǎn)模式,如果輸入的z∈[π/4,π/2],則前處理單元會將z變?yōu)?pi;/2-z,于是相應(yīng)的后處理單元需要將x和y的值相交換。
2.5 補償單元
由(4)可知,CORDIC每次旋轉(zhuǎn)都會改變向量的模,故需要對最終的xy分量進行補償。由于向量模變化只與坐標(biāo)系模式有關(guān),故補償單元可以用一個常數(shù)乘法器實現(xiàn)。常數(shù)乘法器可以通過用華萊士樹把移位后幾個向量相加來實現(xiàn)。本文在線下通過程序窮舉找出了一組加減操作數(shù)最少乘數(shù)編碼方式,對于18位的配置,可以使用一個9輸入的華萊士樹和一個加法器實現(xiàn),這使得該核在缺乏硬件乘法器的基于flash的Actel FPGA上也可以輕松使用。華萊士樹中一位的結(jié)構(gòu)如圖4所示。
3 性能分析
為了證明所提出的IP核的實用性,本文選取了迭代次數(shù)16—20、擴展位數(shù)為5位的幾種配置進行了綜合。綜合平臺使用了航天電子系統(tǒng)常用的2種FPGA:A3P3000E和xc4vf40 綜合結(jié)果如表3所示。
可見本IP核具有較高的性能和較低的資源占用率,可以較容易地被集成,且隨著迭代次數(shù)和精度的提高,資源的增長趨勢穩(wěn)定,速度的下降并不明顯。
一直以來有很多為加速CORDIC運算而提出的方法,其中很多使用了冗余數(shù),試圖通過冗余數(shù)進位傳播有限的特點來降低加法器的延遲。但本文通過對比發(fā)現(xiàn),基于冗余數(shù)的算法僅在A3P3000E的實現(xiàn)上有一定速度優(yōu)勢,而在virtex4上沒有速度優(yōu)勢,還在資源利用率上有很大劣勢。原因是當(dāng)前的大多數(shù)FPGA針對常見運算邏輯,如加法器的實現(xiàn)作出了特殊優(yōu)化,使用了快速進位鏈降低加法器的進位延遲。相對的,由于FPGA缺乏對冗余數(shù)邏輯的支持,冗余數(shù)加法器需要由基本單元綜合生成,具有較大的布線延遲,且需要消耗大量的LUT或邏輯門資源。此外,由于冗余數(shù)使用2倍于補碼長度的編碼方式來表示數(shù)值,冗余數(shù)需要使用更多的寄存器寄存每級流水線的中間結(jié)果。綜上,對于有效位數(shù)較少的配置,本文提出的CORDIC協(xié)處理器具有更好的性能與資源利用更具優(yōu)勢。
4 精度與誤差
根據(jù)參考文獻可知,CORDIC計算的誤差主要來自2部分:由于每次迭代時用來修正z分量的角度有限而產(chǎn)生的近似誤差和由于計算位數(shù)有限而產(chǎn)生的xy分量截斷誤差。為了盡量降低誤差,首先應(yīng)該保證旋轉(zhuǎn)過程中用來修正z的數(shù)值是經(jīng)過舍入得到的,而不是簡單通過截斷得到的,這樣可以減小由于使用近似的旋轉(zhuǎn)角度而產(chǎn)生的舍入誤差。其次可以考慮在最終階段運算結(jié)果前進行舍入。運算結(jié)果的舍入可以在補償單元通過增加華萊士樹的輸入實現(xiàn)。即增加一個輸入變量,其大小為最低有效位的一半,符號與補償單元的輸入相同。除此之外,需要根據(jù)所需的精度合理選擇CORDIC協(xié)處理器的數(shù)據(jù)位數(shù),增加擴展位,即對于n位的CORDIC運算,在迭代運算時使用n+m位,在迭代結(jié)束后舍棄m位,這樣做可以保證前面的n位不受到截斷誤差的影響。本文選取了18位CORDIC來說明擴展位和迭代次數(shù)對精度的影響。對于圓坐標(biāo)旋轉(zhuǎn)模式,輸入向量為x=2.0,y=0.0,z∈[-π,π]的所有可能輸入向量;對于圓坐標(biāo)向量模式,輸入為模為2.0,夾角屬于[-π,π]的所有可能輸入向量;對于雙曲旋轉(zhuǎn)模式,輸入為x=2.0,y=0.0,z∈[-1.0,1.0]的所有可能輸入向量;對于雙曲向量模式,輸入為x=a+1,y=a-1,α∈[0.25,1.0]的所有可能輸入。各個函數(shù)的誤差與所選取的迭代次數(shù)和擴展位的關(guān)系如表4所示。
其中ulp為最低位單位。對于20位定點數(shù)有1ulp=2-18。配置為擴展位數(shù)和迭代次數(shù)。通過實驗可以發(fā)現(xiàn),對擴展后的向量進行截斷會帶來顯著的誤差增長。并且只會在使用較長擴展位時對結(jié)果進行舍入才有明顯的效果,因為擴展位較少的情況下舍入反而可能會讓結(jié)果向錯誤的方向舍入。最后值得注意的是雙曲模式下的函數(shù)誤差高于圓坐標(biāo)模式,由(8)可知這是由于雙曲模式向量角度收斂性更差而導(dǎo)致的。
5 結(jié)束語
本文提出的CORDIC協(xié)處理器可以容易地集成進目前常見的航天級FPGA中,為CPU提供更強的三角函數(shù)和超越函數(shù)運算能力。在中端的V4系列FPGA中實現(xiàn)萬分之1精度的三角函數(shù)和超越函數(shù)只需要不到10%的資源,并可運行于較高的系統(tǒng)時鐘下。CORDIC協(xié)處理器提供了并行運算幾種常用三角和超遠函數(shù)的功能,不僅適用于導(dǎo)航計算機,也可以被用于其他有大量實時性計算需求的嵌入式系統(tǒng)中。
評論