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

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

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

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

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