基于芯片和算法實現(xiàn)自然對數(shù)變換器的應用方案
發(fā)布時間:2021-04-27 15:44:57
點擊次數(shù):199
在需要硬件實現(xiàn)對數(shù)運算的場合,其精度和速度是必須考慮的問題。目前硬件實現(xiàn)對數(shù)變換的方法主要有查表法、泰勒公式展開法和線性近似法。查表法所需要的存儲單元隨著精度的增加或輸入值范圍的增大而成指數(shù)增加;泰勒公式展開法需要乘法器,面積大不易實現(xiàn);線性近似法的精度有限,且需要誤差校正電路,實現(xiàn)較難。
本文利用CORDIC算法在FPGA上實現(xiàn)了高速自然對數(shù)變換器。CORDIC算法即坐標旋轉數(shù)字計算方法初由J.D.Volder于1959年提出,其基本思想是用一系列與運算基數(shù)相關的角度的不斷偏擺從而逼近所需旋轉的角度。1971年J.S.Walter提出統(tǒng)一的CORDIC算法,把圓周旋轉、直線旋轉和雙曲旋轉統(tǒng)一到同一個CORDIC迭代方程里,為同一硬件實現(xiàn)多功能運算提供了前提。由于它將許多復雜的算術運算化成簡單的加法和移位操作,在不影響運算速度和精度的情況下,極大的降低了硬件設計的復雜性,節(jié)約了硬件資源。利用CORDIC算法可以直接實現(xiàn)乘法、除法、正余弦函數(shù),反正切函數(shù)、雙曲函數(shù)等,對輸入進行適當?shù)某跏蓟梢詫崿F(xiàn)正切、雙曲正切、對數(shù)和指數(shù)等函數(shù)。
在數(shù)字信號處理領域用的較多的是DSP和FPGA。DSP的優(yōu)勢源于多數(shù)信號處理算法的乘-累加運算(MAC)都是非常密集的。FPGA通過多極流水線架構也能夠用來實現(xiàn)MAC單元,并且FPGA技術可以通過一個芯片上的多級MAC單元來提供更多的帶寬,速度可以比數(shù)字信號處理芯片快,并且功耗較低。CORDIC算法完全由移位和加法操作完成,因此利用FPGA可以實現(xiàn)更高的運算速度。本文采用流水線結構在FPGA上實現(xiàn)基于CORDIC的對數(shù)變換,可以達到80MHz的處理速度。
CORDIC算法實現(xiàn)自然對數(shù)運算
算法初是用于計算三角函數(shù)的,后來由于其算法的簡單、硬件易于實現(xiàn)等多種優(yōu)勢,而被廣泛的用于多種初等函數(shù)的運算中(包括三角函數(shù)、乘除法運算、指數(shù)運算、對數(shù)運算等)。本文主要利用CORDIC算法的雙曲旋轉法實現(xiàn)自然對數(shù)運算。
迭代序列必須從n=1開始,為保證迭代序列收斂,因此迭代序列n的取值從第4項開始每隔3n+1項必須重復一次,即n=1,2,3,4,4,5,…,40,40,…。 實現(xiàn)方法
·預處理單元
欲利用CORDIC方法求自然對數(shù),必須對輸入進行初始化,經(jīng)迭代運算后才能得到對數(shù)運算值。該對數(shù)變換器的輸入為16位數(shù),在預處理單元中將輸入分別加減一,并將位寬擴大為40位,高位作為符號位覆值給第一次迭代的x0和y0,如圖1所示,圖中s代表符號位。擴大位寬可以提高輸出精度。
·CORDIC單元
CORDIC單元是實現(xiàn)對數(shù)變換器的核心。本文利用流水線結構實現(xiàn)CORDIC算法,其結構如圖2所示。在設計中,采用由28級CORDIC運算單元組成的流水線結構,為擴大輸入范圍,從n=-5開始迭代,移位序列為[7,6,5,4,3,2,1,2…28]。前6級根據(jù)(3)式進行迭代,后22級根據(jù)(4)式進行迭代。經(jīng)過28級流水線運算后,y變?yōu)?/font>0,z左移一位就是要求的對數(shù)值。每一級電路結構主要包括2個移位寄存器和3個加減法器,這些移位寄存器各自有不同的固定的移位次數(shù),加減法選擇由該級中y的高位(符號位)決定。θn為第n次迭代的旋轉角度,并作為常數(shù)直接連到了累加器上,不需要存儲空間和讀取時間。
·后處理單元
由CORDIC得到的z=1/2ln(t),因此將結果左移一位,并截取高16位作為的輸出。其中高位為符號位,大輸入值65535的對數(shù)值為11.0903,對應的輸出為7FFF,其余輸出均除以對應的值即得到相應的對數(shù)值。
實驗結果
在QuartusII5.1軟件環(huán)境下使用VerilogHDL語言完成了上述各算法,并在cyclone系列芯片EP1C6Q240C8上實現(xiàn)。圖3為對數(shù)運算時序仿真圖。表1為對數(shù)運算結果與理論值的比較。
由表1可看出,該對數(shù)運算器的輸出誤差為10-4數(shù)量級。由于采用流水線結構,能夠在執(zhí)行進程的同時輸入數(shù)據(jù),從而極大的提高了程序的運行效率。該設計需要30個時鐘周期獲取第一個計算結果,而只需要一個時鐘周期來獲取隨后的計算結果。利用QuartusⅡ5.1軟件進行時序分析,該運算器的高頻率可達到80MHz。該運算器適用于高速大數(shù)據(jù)量的數(shù)據(jù)處理。
結語
利用對數(shù)變換可以將乘除法變換為加減法實現(xiàn),有利于乘除法在硬件中的實現(xiàn)。由于CORDIC算法完全由移位和相加運算完成,降低了復雜性,易于硬件的實現(xiàn)。利用CORDIC算法在FPGA上設計了一種自然對數(shù)變換器。實現(xiàn)過程中采用流水線結構,提高了系統(tǒng)的運行效率。實驗結果表明該對數(shù)運算器的輸出誤差為10-4數(shù)量級,高頻率可達到80MHz。該運算器適用于高速大數(shù)據(jù)量的數(shù)據(jù)處理。