新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > FAE講堂:如何加快處理器的正弦計算

        FAE講堂:如何加快處理器的正弦計算

        作者: 時間:2011-05-06 來源:電子產品世界 收藏

         

        本文引用地址:http://www.104case.com/article/119301.htm

          圖 2 — d 值的正弦與余弦表,范圍介于0到360/16度之間

          實際上, 我們在每個表格中都使用了1 , 0 2 4 個值。X的最小值為360/1024=0.3515625 度。d 的所有值都將小于等于該值。該方法可以減少存儲的占用,因為完整的查找表需要 4,096個條目(每條目 4 個字節)。

          使用這種方案,我們能夠實現的自變量總體精度為:

          360/(1024*1024) = 0,000343 degree

          而且這個精度非常好。計算充分利用了MicroBlaze FPU。

          真正的計算會占用一些時鐘周期,具體來說,需要進行兩次fmul運算和一次fadd運算。不過,我們還需要進行一些其它計算。首先,我們必須把自變量 xi拆分成兩個值,對應x和d;然后,我們將這兩個值從表格中讀出;最后,我們必須使用新的算法才能計算結果。

          我們在軟件中實現算法并對其進行測試時,我們耗用的時鐘周期總數為6,520個。

          為了進一步提高分辨率,我們可以使用下列的象限關系:

          第一象限

          sin(x) = sin(x)

          第二象限

          sin(x) = sin(π - x)

          第三象限

          sin(x) = -sin(π + x)

          第四象限:

          sin(x) = -sin(2* π - x)

          這在保持表格大小不變的同時還可將總體分辨率提高4倍。另一方面,我們需要進行更多的計算才能找出我們必須進行計算的象限是哪一個。仍然需要改進算法或縮小表格的大小(縮小四分之幾)。我們還沒有進行到這一步。

          步驟三:優化算法

          由于我們的解決方案到目前為止,速度還不能滿足我們客戶的需要,因而我們需要稍做算法優化,不過仍然完全采用運行在 MicroBlaze 上的軟件。這是一種簡單的優化方案,不過會降低部分精度。因此,我們創建了軟件模型(在PC上運行以提升運行速度)以運行所有可能的值,同時使用 sin()計算出的原始雙精度值與使用我們的軟件算法計算出的正弦值進行比較。我們決定在標準的PC上運行算法,因為在MicroBlaze上進行比較和計算需要花較長的時間(注意,我們的MicroBlaze運行速度遠低于PC)。

          現在我們開始優化計算以獲得正弦值:

          sin(x+d) = sin(x)*cos(d) +cos(x)*sin(d)

          由于在每個表格中我們都使用了1,024個值,這意味著d始終小于360度/1,024個步進,即:

          cos(2* π /1024) = 0.99998

          而且該值約等于1.0。對較小的d值,適用下列等式:

          cos(d) = ~1.0

          這樣可以將我們的公式簡化為如下等式:

          sin(x+d) = sin(x) + cos(x)*sin(d)

          在我們在MicroBlaze上實現新等式之前,我們使用PC模式對新等式的精度進行了檢驗,發現最大誤差仍然低于我們客戶的目標。

          現在我們將該算法當作軟件算法在MicroBlaze上實現,仍然使用每張帶有1,024個條目的表。新的算法只需要三個表,比之前的實現方案少一個。這樣既節省了存儲空間,也為更多的計算留出了時間。

          我們在我們的硬件上測量了算法。一次正弦計算需要6,180個周期。

          步驟四:進一步優化

          另一種看似可行的優化方式是轉換正弦計算的浮點值,并在此使用整數自變量。我們使用的算法使我們能夠創建~1E6 個不同的值 (1,024*1,024)。整數自變量足以處理這個數量的值。

          這種優化方式使我們能夠使用簡單得多的計算來將 xi 值拆分為 x 和 d。拆分只是一種簡單的“與”運算加上部分10 位的移位。我們參數角的上10位是xi,下10位是 d。

          我們再次在PC上創建了一個軟件模型,并對其進行檢驗,然后在MicroBlaze系統上實現模型,這需要5,460個周期才能完成一次正弦計算。

          步驟五:考慮硬件實現

          雖然與數學庫的原始計算相比,算法的速度有了明顯的改善,但客戶需要的是速度快得多的實現。不過前文所述的最后一步給我們提供了一種能夠輕松轉向硬件實現的方法。

          這種實現方法需要某些用于拆分 xi值的運算。要在硬件中做到這一點,只需將所需的位進行連接即可。然后我們需要三個表;我們使用以我們的PC模型計算出的預定義值推導出ROM,然后將其轉入IP的VHDL代碼中。該IP能夠一次讀取所有三個表,從而能夠再度節省時間。最后,我們需要進行一次浮點MUL和一次浮點ADD運算。

          對于該任務,我們發現用于浮點運算的CORE GeneratorTM模塊非常適合。

          

         

          圖 3 — 無流水線功能的加速器 IP



        關鍵詞: Xilinx 處理器 FAE

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 永寿县| 通榆县| 昌都县| 海阳市| 建始县| 怀仁县| 嘉祥县| 绥化市| 公主岭市| 志丹县| 珲春市| 长垣县| 松桃| 大丰市| 郯城县| 九寨沟县| 门头沟区| 汝城县| 巩义市| 达州市| 汕尾市| 固始县| 方正县| 铁力市| 军事| 泸水县| 阆中市| 玉林市| 漳浦县| 乐亭县| 曲松县| 慈溪市| 来宾市| 富川| 云安县| 岳普湖县| 和平县| 平泉县| 汝州市| 桂阳县| 竹溪县|