盧小冰



摘 要:CORDIC算法常用于高效地實現多種超越函數求值,但算法的通用性使其在FPGA上的實現具有一定的難度。利用此算法在對數方面的推導公式,介紹一種基于查表、移位、加法及除法等操作,在FPGA上得以實現的方法。
關鍵詞:坐標旋轉數字計算機(CORDIC)算法 對數函數 FPGA實現 查表法
中圖分類號:TP302 文獻標識碼:A 文章編號:1672-3791(2017)03(c)-0204-02
對數函數在粒子濾波、RBF神經網絡、圖像處理等領域廣泛運用。CORDIC算法(The Coordinate Rotation Digital Computer)是一種用于計算一些常用的基本運算函數和算術操作的循環迭代算法。CORDIC算法主要由加法、移位實現,從而大大降低了占用的FPGA資源。該文介紹一種由CORDIC算法推導的對數函數在FPGA上的實現。
1 CORDIC算法
1.1 CORDIC算法基本原理
CORDIC算法主要用于計算三角函數、雙曲函數、指數和對數,其基本思想是通過一系列固定的與運算基數相關的角度不斷偏擺來逼近所需的旋轉角度,使得矢量旋轉和定向運算不需要三角函數查表及乘、開方、反三角函數等復雜的數學運算,其原理如圖1所示。對于矢量旋轉角度變成,則有:
式中,。CORDIC算法一般工作在旋轉和矢量兩種模式下。旋轉模式為將矢量旋轉一個給定的角度;矢量模式為將輸入矢量旋轉到軸,同時記錄下旋轉的角度。文獻中給出了CORDIC算法具體的公式推導和兩種工作模式下次迭代后的最終結果。
1.2 CORDIC算法的對數運算推導
根據對數和反雙曲余切函數的線性關系,以10為底的對數可以通過計算反雙曲余切函數得到:
2 算法中的FPGA實現
2.1 算法的設計
CORDIC算法推導的對數函數,是基于小數跟的乘積,考慮到FPGA小數實現的問題,將其轉換為:
(3)
從式子可以看出,算法將由小數乘法轉換為移位加法求和后的乘法,從而大大降低硬件電路的復雜性。其次,的實現是通過查表法在FPGA中實現。
2.2 算法的實現
CORDIC算法的實現主要通過簡單的移位算法、高速流水線處理及查表查詢完成。簡單移位及高速流水線處理,快速精確完成式子(3)的系數的計算,同時對反正切函數的參數進行處理,反正切函數參數涉及除法,采用ip核完成得到參數;取得參數后,通過查表法,對應讀出存儲在ram中的反正切函數值,此步驟簡化了反正切函數高難度高復雜度的運算量,大大提高了運算速度及效率。最后,通過IP核完成乘法運算。整個算法過程,簡化了復雜的運算步驟,便于在FPGA上的實現。
2.3 算法的實現結果
算法在Diamond 3.0軟件環境下,使用Verilog HDL語言實現以上算法,并在Lattice公司的ECP2M系列芯片LFE2M20 E7F256C中進行驗證,采用Diamond提供的邏輯分析儀取得分析結果,分析結果如圖1所示,系統時鐘采用27 MHz;表1為理論值與實際值的對比;結果表明該設計達到要求。
3 結語
CORDIC算法推導出的對數函數在FPGA中的運用,已經在Lattice芯片得到驗證,驗證結果與理論值一致。同時,若對模塊稍加修改同樣可以移植到其他的系統中,這對大多數對系統資源比較敏感的嵌入式系統來說更具有很強的現實意義。
參考文獻
[1] 閻嘯,秦開宇,高援開,吳紹煒. 基于CORDIC算法的頻譜分析技術研究[J].電子科技大學學報,2006,35(3):335-338.
[2] Andraka Ray.A survey of CORDIC algorithms for FPGA base computer[C].In Proceedings of the 1998 ACM/SIGDA Sixth International Symposium on Field Programmable Gate Arrays,1998:191-200.
[3] Muller J M.A few results on table-based methods[J].Reliable Computing,1999,5(3):279-288.