劉 恒,鐘 俊,劉 輝
(安徽職業技術學院,安徽 合肥 230011)
在超越函數中,指數函數的應用十分廣泛。實現指數函數的方法有很多,包括查表法、旋轉迭代、泰勒展開等[1]。查表法需要較大存儲空間,特別是高精度情況下,資源耗費比較明顯。旋轉迭代依賴于流水線技術,精度要求較高時,需要較多的時鐘周期完成一次求解。泰勒展開涉及到大量的乘、除法器,運算速度不高。本文在切比雪夫多項式函數逼近的基礎上進行優化設計,進一步減少fpga資源消耗,提高運算速度。
切比雪夫逼近以切比雪夫多項式為基礎,切比雪夫多項式可以寫成如下形式[2]:

雖然Q k(x)是類三角函數形式,但經過變形之后,可以將式(1)變為多項式的標準形式,部分多項式可以寫成如下形式:

切比雪夫多項式符合如下迭代規則:

切比雪夫函數逼近可以寫成:

所有切比雪夫多項式具有相互正交的特點,因此得到的雙向變換都是獨一無二的。使用式(4)切比雪夫函數逼近要明顯優于使用泰勒函數逼近(式(5))。

原因如下:首先,式(4)是非常接近于(但不嚴格等于)函數逼近這一非常復雜問題的最優解,而且能夠保證最大誤差最小,也就是l∞范數的最大值max(f(x)-f(x))→min;其 次,式(4)的 剩 余 項M< 用切比雪夫系數計算的16位多項式量化應采用如下的公式: 需要保證0≤x≤1,如果輸入不在這一范圍之內,就需要用恒等式esx=(ex)s進行縮放。 其中s=2k是2的冪,在完成指數計算后還要繼續進行k次平方運算。 在具體的硬件設計過程中,積之和可以采用分布式算法來實現[3]。根據函數表達式,計算一個函數值需要N個mac(乘累加)。采用流水線技術能夠加快運算速度,但是也十分有限。如果速度優先,可以采用并行乘法器,其代價是占用大量的乘法單元,造成資源浪費。如果已知每一項的系數,乘積項就可以寫成常數乘法的形式。這是分布式算法的實現基礎。分布式算法實質上是用查找表取代乘法器。在速度與資源占用上,相比傳統的乘法器實現方式,分布式算法更勝一籌[4]。 分布式算法原理: 假設h(n)已知,x[n]未知。無符號分布式算法假設x[n]可以寫成下列表達式x a[n]∈[0,1],其中x a[n]是x[n]的第a位。 內積f可以表示為: 可以用一個LUT來實現f(h(n),x a(n))的相關運算。首先計算得到一個LUT,LUT由2N個元素構成。當輸入為一個N位的輸入向量x a=[xa[0],x a[1],...,x a[N-1]]時,可以用LUT查找到相應的輸出,輸出為f(h(n),x a(n))。每次查找的結果乘相應的權值并累加。在N次查詢結束之后,得到函數值f,如圖1所示。 圖1 無符號da原理圖 (1)LUT簡化設計 LUT的規模與輸入系數N成指數關系[5]。如果N過大,可以將單個N輸入的LUT拆分成多個規模較小的查找表相加。這一改進可以極大地降低資源消耗,并且幾乎沒有影響運算速度。假定內積的長度為LN,可以表示為: 拆分LN項的和,變為L個獨立并行的N階DA的LUT,結果如下: 如圖2所示,實現1個4N的DA設計,還需要3個加法器。表的規模從1個24N×A的LUT縮小為4個2N×A的表。考慮到fpga硬件資源,取L=2,N=3,或L=1,N=6。 圖2 簡化LUT原理圖 (2)并行運算 采用并行計算可以加快DA體系結構的運算速度,這一改進必然會占用更多的資源[6]。DA體系結構如果按照串行方式進行運算,在每個時鐘周期只能完成1bit數據的接收處理。采用并行計算可以同時接收處理Mbit數據,運算速度能夠加快M倍。圖3為實現最大速度所需的字并行體系結構。最大速度要求為每個位向量x a[n]準備一個單獨的LUT(各個LUT完全一樣)。速度提升M倍的代價是資源同等程度翻倍。在fpga硬件實現過程中,如果N為4個或8個,這一改進就極具意義。 圖3 并行運算原理圖 在本實驗中,采用quartus12.0進行綜合驗證,芯片為altera公司的CYCLONE系列。利用Modelsim 6.5軟件進行Verilog仿真。優化結果如表1所示。Modelsim仿真如圖4所示。 表1 優化前后性能比較(量化位數16bit) 圖4 Modelsim仿真結果 本文用切比雪夫多項式對指數函數進行了函數逼近,并用Modelsim對結果進行了仿真驗證。在函數的實現過程中,采用分布式算法進行優化。在優化過程中,通過采用多個低維度查找表和并行運算,達到減少芯片面積和提高運算速度的效果。這一方法同樣適用于其他超越函數的實現過程,具有普遍意義。
2 分布式算法及優化
2.1 分布式算法基礎



2.2 分布式算法優化




3 優化仿真結果


4 結語