基於CORDIC算法的32位浮點三角超越函數之正餘弦函數的FPGA實現

2020-12-06 電子產品世界

摘要: 本文在傳統CORDIC算法的基礎之上,通過增加迭代次數,對參數進行了優化篩選,提高了運算精度,使設計出的軟核能夠在精度要求較高的場合中運行,如實時語音、圖像信號處理、濾波技術等。輸出數據經過IEEE-754標準化處理,能夠直接兼容大多數處理器,擴展了其應用範圍。最終在Altera公司NiosⅡ處理器中通過增加自定義指令的方式完成了硬體實現。

關鍵詞: CORDIC自定義指令IEEE-754標準化處理

引言

浮點超越函數的應用領域十分廣泛,涉及航空航天、機器人技術、實時語音、圖像信號處理、濾波技術、FFT變換等領域。因此,設計並實現浮點三角超越函數是非常重要的。硬體實現的超越函數算法,按照數學公式和對應的實現方式的不同,可以分為查表法、多項式近似法、基於查表的多項式結合方法、有理數近似和逐位法五類。經過對這些算法進行分析和比較,本文選擇 CORDIC作為超越函數的算法,並用Altera公司的CycloneⅡ晶片完成硬體實現。

CORDIC內核及前後處理單元設計

CORDIC內部結構


在迭代式架構下,內部CORDIC結構如圖1所示。

圖1  經典CORDIC硬體實現架構

圖1中架構由控制單元,選擇器,移位寄存器,ROM,加法器組成。系統的控制單元採用有限狀態機的實現形式,進行迭代和數據格式轉換的流程控制。ROM中存放的是預先計算好的反正切數據值,供迭代運算中調用。從架構中可以看出只有移位與加減運算,因此特別適合於用硬體實現。每次迭代運算後,再將數據返回,直到足夠的次數執行完成後,才將結果輸出。每次迭代之前要對角度值Z進行判斷,根據Z的符號來決定圖1中的符號。

實現該部分的關鍵代碼如下:
if(~z[31])
 begin
  x <= x - (y >>> counter);
  y <= y + (x >>> counter);
  z <= z - atan;
  end
else
 begin
  x <= x + (y >>> counter);
  y <= y - (x >>> counter);
  z <= z + atan;
 end  

前置處理單元

由於迭代本身的限制,最大旋轉角度用公式表示為:

     (1)
為了擴展輸入角的範圍,需要對輸入角進行預處理,使其落在第一象限範圍之內。即對輸入角度進行取模,根據所處的象限進行符號判斷和正餘弦交換。在CORDIC內核設計中,對0_範圍內的角度用一個32位的二進位整數來表示,即101101100000101101100000(即十進位數11930464)。

後置處理單元

後置處理將內部CORDIC計算出來的結果在輸出前轉換成IEEE-754標準格式,即形式,其結構如圖2所示。

圖2  後置處理單元硬體結構

圖2中的LZDC(Leading zero detection circuit)為前導零檢測電路,其功能是用來統計數據從最高位開始連續「0」的個數,再根據它把計算出來的數值轉換成IEEE-754標準格式。在轉換過程中需要對尾數進行左移,才能表示為,此位移量再與前置處理器單元傳來的參考指數值相減,得到輸出指數值。符號位直接由前置處理過程得到。最後將符號位、指數數值、小數按位連接得到IEEE-754格式的數據,並從硬體接口輸出端輸出。

設計及軟體仿真波形

用Quartus II對本設計進行了軟體波形仿真,選取角度值分別為、、和(即-)。

以為例,iAngle的十進位數為(/360)*88.8= 1059425266(小數部分忽略),十六進位表示為3F258BF2。oCos的內部仿真結果十六進位值為3FFD8131,對應的IEEE-754標準格式值oCos_IEEE754為3F7FF804,即十進位數0.020942,正弦的計算過程同理。

仿真結果對照如表1所示。

從表中可以看出,在(0_)輸入範圍內,用本設計計算仿真出的結果誤差小於10-6,在單精度表示範圍內誤差為0,且輸出表示為標準IEEE754類型。一次計算所需時鐘周期數為34。

自定義指令

Altera公司NiosⅡ處理器增加了多達256條用戶自定義指令,這是其它SOC系統無法比擬的。用戶自定義就是讓NiosⅡ軟核完成一個用HDL描述的電路模塊功能。用戶自定義指令可以在幾個時鐘周期之內完成複雜算法的處理能力,訪問存儲器或系統外的邏輯單元,加快專項任務的執行,以達到優化目的。通過用戶自定義指令可以把系統中用軟體處理中的耗時多的關鍵算法用硬邏輯電路來實現,大大提高處理器的效率。由於CORDIC內核的特性,正餘弦函數可以同時計算出來,因此適合於採用擴展用戶自定義指令來實現,即用一個硬體模塊來完成兩種函數的計算。通過一個附加的參數n來決定輸出是正弦或餘弦,這樣可以節約一半的硬體資源。本文在NIOSⅡ中增加了正餘弦自定義指令,其宏定義代碼如下:

#define MYCORDIC_N 0x00000002
#define MYCORDIC_N_MASK ((1<<1)-1)
#define FLOAT_COS(A)  __builtin_custom_fni(MYCORDIC_N+( 1&MYCORDIC_N_MASK),(A))
#define FLOAT_SIN(A)  __builtin_custom_fni(MYCORDIC_N+ (0&MYCORDIC_N_MASK),(A))

加入指令後,在NiosⅡ的IDE中進行軟硬體同時調試,相應的C語言測試代碼在此省略,給出對比結果如圖3和圖4所示。

圖3

圖4

本系統硬體驗證平臺採用DE2開發板,其中NiosⅡ處理器配置為full功能,分別使用16K數據cache和16K指令cache,增加了硬體乘法器和硬體除法器,開啟了流水線功能,已達到了NiosⅡ軟核處理器的最高性能。

從結果對比中看出,使用硬體指令後對完全相同的正餘弦角度進行計算時,其運算速度大大提高。需要說明的是,軟體運算隨著輸入角度的不同所使用的計算時間有很大差別,而使用硬體指令運算是,其計算時間基本不變。詳細對比如表2所示。

誤差方面,軟硬體運算在六位小數範圍內其誤差值為0,可見本設計確實達到了高精度的要求。

結語

本設計以提高處理器精度和速度為目標,通過在NiosⅡ處理器中添加用戶自定義指令的方式以更多的硬體資源換取更快的計算速度,從而滿足現代實時通訊處理的要求。在傳統CORDIC算法的基礎之上,巧妙的改進了算法,達到了更高精度和更快的速度,具有較廣泛的應用價值。當然,本設計只完成了正餘弦函數的硬體IP部分,還有更多的工作等待我們去完成,相信通過不斷的努力,我們會完成更多的函數硬體IP。

參考文獻
1.  Volder. The CORDIC trigonometric computing teclu}ique. IRE Trans. Electronic Computers, 1959, EC-8(3): 334-334.
2.  Richard Herveille. Cordic Core Specification . 18, 2001
3.  潘宏亮.浮點指數類超越函數的運算算法研究與硬體實現.西北工業大學 2006.3
4.  IEEE organise.IEEE Standard for Binary Floating-Point Arithmetic Inc 345 East 47th Street, New York, NY 10017, USA
5.  王博立.浮點運算CORDIC之實現與其在3D圖形學之應用.臺灣國立中山大學 2002.6
6.  www.Altera.com
7.  www.opencore.org
8.  www.edacn.net


相關焦點

  • 基於FPGA的複數浮點協方差矩陣實現
    最終導致FPGA器件資源枯竭,無法實現設計。為了保證算法的實現,必須對中間運算數據進行截斷,將每次累加的結果除2(可以通過移位運算來實現),以避免溢出。 此外,在應用MUSIC算法時,各種計算都是複數運算。
  • 基於FPGA高精度浮點運算器的FFT設計與仿真
    摘要 基於IEEE浮點表示格式及FFT算法,提出一種基2FFT的FPGA方法,完成了基於FPGA高精度浮點運算器的FFT的設計。利用VHDL語言描述了蝶形運算過程及地址產生單元,其仿真波形基本能正確的表示輸出結果。
  • 基於DSP和FPGA的機器人聲控系統設計與實現
    而tlv320aic23有7位地址和9位數據,也就是說,需要把數據項上面的最高位補充到第二個8 b中的最後一位。 mcbsp串口通過6個引腳clkx,clkr,fsx,fsr,dr和cx與tlv320aic23相連。數據經mcbsp串口與外設的通信通過dr和dx引腳傳輸,控制同步信號則由clkx,clkr,fsx,fsr四個引腳實現。
  • 教學研討 | 正弦函數和餘弦函數的圖象與性質
    三角函數是把已經學習過的三角比的知識和函數知識結合起來,是刻畫生活中周期現象問題的典型的函數模型,在高中數學知識體系中佔有十分重要的地位。本節課作為《三角函數》開篇的第一課時,主要解決了正弦、餘弦函數的定義和其圖像的畫法問題,為後面更好地學習三角函數的性質打下牢固的基礎。
  • 基於FPGA IP核的FFT實現
    在FFT的硬體實現中,需要考慮的不僅僅是算法運算量,更重要的是算法的複雜性、規整性和模塊化,而有關利用FFT IP核實現FFT算法卻涉及不多。這裡從Altera IP核出發,建立了基4算法的512點FFT工程,對不同參數設置造成的誤差問題進行分析,並在EP2C70F896C8器件上進行基於Quartus II的綜合仿真,得到利用FFT IP核的FFT算法高效實現,最後利用Matlab進行的計算機仿真分析證明了工程結果的正確性。
  • 32個超越函數問題
    超越函數,指的是變量之間的關係不能用有限次加、減、乘、除、乘方、開方運算表示的函數,如三角函數、對數函數、反三角函數、指數函數就是超越函數。導數是研究超越函數問題的基本方法,下面是32個超越函數問題,與君盛夏共享。
  • 基於FPGA的高速流水線浮點乘法器設計與實現
    同時由於基於IEEE754 標準的浮點運算具 有動態範圍大,可實現高精度,運算規律較定點運算更為簡捷等特點,浮點運算單元的設計 研究已獲得廣泛的重視。本文介紹了 32 位浮點乘法器的設計,採用了基4 布思算法,改進的4:2 壓縮器及布思 編碼算法,並結合FPGA自身特點,使用流水線設計技術,在實現高速浮點乘法的同時,也 使是系統具有了高穩定性、規則的結構、易於FPGA 實現及ASIC 的HardCopy 等特點。
  • 超越函數的突破應對策略
    超越函數是指那些不滿足任何以多項式作係數的多項式方程的函數。說的更技術一些,單變量函數若為代數獨立於其變量的話,即稱此函數為超越函數。例如,對數函數和指數函數即為超越函數。超越函數這個名詞通常被拿來描述三角函數,例如正弦、餘弦、正割、餘割、正切、餘切、正矢、半正矢等。函數的不定積分運算是超越函數的豐富來源,如對數函數便來自代數函數的不定積分。在微分代數裡,人們研究不定積分如何產生與某類「標準」函數代數獨立的函數,例如將三角函數與多項式的合成取不定積分。
  • 關於函數、反函數、三角函數、反三角函數、雙曲函數的補充知識
    本文由公眾號「數學學習之友」原創, 歡迎 分享最近幾年高中數學教材教學改革後,導致一些省、區的同學在高中學到的三角函數
  • 基於複數浮點運算的協方差矩陣的FPGA實現
    本文以空間譜估計作為研究背景,研究了複數據運算和浮點運算的特點,提出了一種適用於任何陣列流型、任意陣元的基於複數浮點運算的協方差矩陣的FPGA實現方案。  1 求解複數浮點協方差矩陣  以11陣元的均勻圓陣為例,其協方差矩陣的求解方案原理框圖如圖1所示。
  • FPGA 101:計算複雜數學函數
    另外,您還可以採用CORDIC等許多算法計算超越函數(參見:賽靈思中國通訊第79期的《如何在FPGA中運用CORDIC算法》,http://china.xilinx.com/ publications/archives/xcel l/Xcell79.pdf)。不過,在遇到極為複雜的數學函數時,與在FPGA之中實現精確需求函數相比,還有更高效的方法進行處理。
  • 三角函數值(附三角函數值表)
    (1)特殊角三角函數值   sin0=0   sin30=0.5   sin45=0.7071 二分之根號2   sin60=0.8660   二分之根號3   sin90=1   cos0=1   cos30=0.866025404   二分之根號3
  • 【反函數和反三角函數】圖解普林斯頓微積分 09
    第10 章反函數和反三角函數10.1 導數和反函數第一章就回顧了反函數的基本知識, 可以快速地再看下.
  • MATLAB函數庫大全(收藏版)
    >>關係運算之大於[]矩陣生成>=關係運算之大於等於{}&邏輯運算之與..\)~邏輯運算之非xor邏輯運算之異成表2.2 邏輯函數函數名功能描述函數名功能描述all測試向量中所用元素是否為真
  • Matlab常用函數與常用指令大全
    triu 抽取上三角陣4.4 特殊變量和常數(Special variables and constants)ans 最新表達式的運算結果eps 浮點相對誤差i,j 虛數單位inf 或Inf 無窮大isfinite 若是有限數則為真isinf 若是無窮大則為真isnan 若為非數則為真NaN 或nan 非數pi
  • 三角函數線詳解——高中數學必修四
    學習三角函數線,首先我們來認識下有向線段。1、有向線段:帶有方向的線段就叫做有向線段。如下圖所示:2、三角函數線的定義如圖:設任意角a的頂點在原點O(單位圓的圓心),始邊與x軸的非負半軸重合,終邊與單位圓相交於點P(x,y),過點P作x軸的垂線,,垂足為點M;過點A(1,0)作單位圓的切線,設它與角a的終邊(當a位於第一、第四象限時)或其反向延長線(當a位於第二、第三象限是)相交於點T,於是有sina=y=MP,cosa=x=OM,tan a
  • FPGA實現32階FIR數字濾波器的硬體電路方案
    傳統的FIR濾波器一般採用通用DSP處理器,但是DSP處理器採用的是串行運算,而FPGA是現場可編程陣列,可以實現專用集成電路,另外還可以採用純並行結構及考慮流水線結構,因此在處理速度上可以明顯高於DSP處理器。本文採用並行分布式算法在FPGA上設計並實現了高速處理的32階FIR低通濾波器,在此過程中利用Matlab的數值計算與分析功能來提高設計效率。
  • 教學研討|1.4.2 正弦函數、餘弦函數的性質
    研討素材一1.4.2正弦函數、餘弦函數的性質(二)長春汽車經濟技術開發區第三中學 孫佳欣一、教材分析對於函數性質的研究,在高一必修中已經研究了冪函數、指數函數、對數函數的圖象與質.因此作為高中最後一個基本初等函數的性質的研究學生已經有些經驗了其中
  • 基於FPGA的自然對數變換器的設計與實現
    本文利用CORD IC算法在FPGA上實現了高速自然對數變換器。CORD IC算法即坐標旋轉數字計算方法最初由J.D.Volder[5]於1959年提出,其基本思想是用一系列與運算基數相關的角度的不斷偏擺從而逼近所需旋轉的角度。
  • 利用正切函數單調性求解正餘弦函數不等式習題詳解 - 尖子生數理化...
    高中數學答疑篇之構造正切函數求解正餘弦不等式詳解本次課程內容:結合大提出的三角函數不等式問題進行正切函數單調性求解三角函數不等式知識點的講解,教大家正確而簡單地求解此類不等式。③ f(x)=tanx,在[0,90)或者(90,180]上是單調遞增的函數。