• 沒有找到結果。

當 SIU 掌管資料的流向之後,運算單元便只需專注於資料運算方面的工 作。在這樣的分工下,選擇何種算數運算的運算單元和 SIU 無關,只要運 算單元間彼此協調好就行了。在本節中將介紹一些算數運算及其分類。

在 DSP 計算中,必需要先將類比的信號量化才能做數位的處理。在量 化的過程中用來表示信號的有效位數的多少直接影響到運算品質的誤差。

因此在計算的過程中數值比例的選擇即為 DSP 運算誤差的主因,選的太小 計算時會造成溢位(overflow),選得太大會造成有效位數不足或過小 (underflow) 。在比率的選擇的方法上可大致區分成兩類:動態比率

(dynamic scaling)和靜態比率(static scaling) 。動態比率顧名思義就 是在計算過程中依照數字實際的大小決定其指數項的值。因此,一般而言 動態比率的有效位數會比較高。然而動態比率在計算上必需一邊計算,一 邊控制位移量還要同時考慮溢位,借位的問題。因此它計算量的負擔相當 重。然而,在 DSP 的應用上誤差值的高底並非決定 DSP 好壞的因素,當誤 差值滿足一個規定值以下時,更精確的運算其實並非必要的。因此在極度 要求計算速度的 DSP 設計上,設計者往往會考慮用其他計算量較輕的靜態 比率的方法來做 DSP 運算。靜態比率的優點在於:數值的指數項,在實際 運算前就已經使用統計、分析或其他數學方法規劃固定。在運算中只需計 算對數值,所有該位移的值也都由事先預測和安排。因此在計算中靜態比 率的速度要比動態比率快得多,但相對的,使用靜態規劃的算數在位元的 利用率上當然比不上動態的判斷,因此付出的代價就是計算的精確度。

„ 動態比率

在動態比率的算數上目前主要有兩種方法:浮點數和區域浮點 數(Block floating-point;簡稱 BFP)

‹ 浮點數

浮點數(floating-point;簡稱 FP)是最直覺,也是目前 公認精確度可以達到最高的算數。以 32 位元的浮點數而言,

在 IEEE754 單精確度浮點數的格式如下:(圖 2-15)

圖 2-15 IEEE754 single precision floating point format 用來表示 (-1)s * F * 2E 的數值。

當兩個浮點數做加法時,至少必需有以下步驟:

z 先把兩個指數項相減

z 以相減所得到的數值將指數項較小數值的對數項向右位 移

z 把位移後的對數項(含正負號)相加

z 辨斷結果是否需要正規化(normalize)並把結果正規化 就以上的步驟而言,兩個浮點數的加法就至少需要做二或 三次的加法 (指數項、對數項和正規化時的對數項)和一或二 次的位移(計算前的小數點對齊時和正規化)。而做浮點數的乘 法時必需要有:

z 指數相加

z 對數項有號數相乘

z 正規化及取概數(rounding)

因此就必需要有二次加法、一次乘法及一次正規化。

s Exponent (E) Mantissa (F)

31 30 2322 0

1bit 8 bits 23 bits

驟因果的相依性高。所以一般在支援浮點的運算中大多使用浮 點運算加速器分成多級管線化來處理。浮點數的數值方法可以 直接套用在 DSP 理論的運算中實數的計算,不必做任何修改,

且運算所得的值直接就是運算的結果。但,就如一般所認知 的,處理浮點數需要額外花費的硬體成本相當高,速度也慢。

唯一的好處是不論任何情形下,都可達到 23 位元的精確度,

誤差的比值始終保持在 2-24 的範圍內。

圖 2-16 BFP Arithmetic

‹ 區域浮點數

區域浮點數的有別於浮點數之處在於指數項的共用。區域 浮點數將整個 DSP 運算劃分為數個區域(block) ,在區域內 的數值的指數項控制成相等且共用。如此在區域內的運算就只 有對數項的運算。只有當整個區域運算完要將數值傳到下個區 域之前才會對這些數值中的最大值做正規化,並更新指數項。

BFP 的流程如圖 2-16 所示,BFP 會根據區域中的出現的極 值,動態地位移並更新區域指數項。相較於 FP 計算的複雜度,

BFP 以一定的比率減少指數項更新的次數。

„ 靜態比率

靜態比率中最經典的為整數比率(integer scaling) ,而其他 方法大多以其為出發點向動態比率方向修正如:非條件式區域浮點 數和靜態浮點數。

圖 2-17 整數運算的溢位情形

+)

Carry-out Result N bits

(N+1) bits

*)

Result 2N bits

N bits

Overflow

Next Block Current Block

(Integer Arithmetic) BFP

Pre-scaling

BFP Pos-caling Exponent of block

Previous Block

‹ 整數比率

整數比率在運算的過程中全部使用整數的算數運算。當資 料的數值在進入運算前就必需預留一些保護位元(guard bits) 給運算時可能發生的溢位之用(圖 2-17)。因此整個整數的位 元就只有一部分能用來表示信號的有效位元。舉例來說,以 24 位元的整數比率算術來實現將 256 灰階的圖片通過以參數 為[-0.0645, -0.0407, 0.4181, 0.7885]的 7-tap symmetric FIR filter 時 , 必 需 考 慮 輸 入 的 最 大 值 為 255( 即 使 用 8bits) ,假設預留 3bit 為保護位元。 則還剩下的 13bit 即 為此整數運算指數項的準位(即 213)。因此原來的參數在取樣 後的數值即為[-528, -333, 3425, 6459](即乘以 213後再取概 數)。 如此運算的雜訊則會固定在 2-13以內的數值。對於運算 路徑中最大的數值而言(211),雜訊比的比值為 2-24,但是對輸 入的最大值而言(28)雜訊的比值為 2-19,而對輸入的最小值而 言(20)雜訊的比值就只有 2-13。整數的數值方法會因為要預留 保護位元而使得誤差值被限制在整個 DFG 中會可能出現的最 大值的 2-24。 對於數值較小的數字而言,差訊的比值就會因為 位元數中有效的位數變少而相對增加。

當實際運算並沒有溢位的情形發生時,那麼先前預留的保 護位元就會因為沒有利用到而浪費了。另一方面,如果輸入的 信號最大值和最小值相差很多,則對於數值較小的信號有效的 位數也會相對的減少,甚至產生過小(under flow)無法表示的 情形。這些是靜態比率的無法避免的缺點。因此就產生由整數 比率向動態比率方向改進的其他輕量型算數,其主要的目的都 是希望能在計算的過程中加入適當的位移,以減少需要預留保 護位元的位元數,增加有效位元的使用率。

‹ 非條件式的區域浮點數

其運作模式是將 BFP 中需要以動態更新的指數項部分改 為靜態的規化。先用靜態的分析求出區域間位移的關係,當資 料由一個區域進入另一個區域時再利用位移器(shifter)調整 成目標區域的小數點準位。舉例而言:在 16 點的 FFT 運算中,

運算路徑中最大值為輸入信號的 32 倍,所以如果用整數運算 時就必需先預留 5 個保護位元。然而這 5 個保護位元並非一 次計算就會成長到 32 倍,整個 FFT 運算可以先劃分成四層 butterfly 的運算,每一層 butterfly 運算都當成一個區域。

經由分析,butterfly 運算的輸入到輸出的數值,最大為 2.4 倍的成長 (Rabiner and Gold,1975)[13] 。因此使用非條件 式 BFP 時,一開始只需預留 2 個保護位元即可,當運算完一 層 butterfly 後再把所有的數值向右位移出一個保護位元,再 進入下一層 butterfly(圖 2-18) 。如此在運算中,一開始保 護位元的個數為 2 位元。比起整數比率,BFP 計算精確度上可 以多出三個有效位元。

圖 2-18 FFT using unconditional BFP arithmetic

‹ 靜態浮點數[20]

靜態浮點數(static floating-point;簡稱 SFP)運算是以 估算計算過程中,每個節點中可能出現的最大值做為指數項的

言:0.8 表示為[0.8,0],而 0.3 則表示成[0.6,-1](即 0.6*2-1 之意)。圖 2-11 顯示 0.8 和 0.3 使用純小數運算做加法和乘 法的過程。在做加法運算前要先做位移讓指數項相同,在做完 運算後必需再位移,調整指數項的大小。在此,定義新的純小 數運算的運算子如下:

0.6 (+,101) 0.8 = 0.55 和 0.6 (*,1) 0.8 = 0.96

其中(+,101)中參數 101 的意義為第一個運算子和結果運 算子都向左位移一個位元。而(*,1)中的 1 表示乘法的結果運 算子要向右位移一個位元。因此,從硬體的角度來看,如圖 2-19 所示,要使用這樣具有位移參數的計算必需要在傳統的 加法器的前後和乘法器後面都加上位移器。

(a) 0.3 + 0.8 = 1.1

(b) 0.3 * 0.8 = 0.24

(c) Fractional number multiplier 圖 2-19 純小數運算

在此以圖 2-20 的實例解說 SFP 計算在 DSP 中的運作,並

[0.8,0]

[0.6,-1] [0.3,0]

[1.1,0] [0.55,1]

>>

>>

[0.8,0]

[0.6,-1]

[0.48,-1] << [0.96,-2]

*)

Fractional Number Multiple Result

N bits

Integer Multiple Result

需要。圖 2-20 為一個 8 點 DCT 的 DFG (Data flow graph)。

圖 2-20 Peak-value estimation result of 8x1 DCT data flow

在硬體成本和計算效率的考量下,靜態比率的運算因為能以靜

第3章 指令集規劃

在本章將介紹本論文所提出的對 SIU 資料流向的控制機制和指令集的 規劃。最後以實際的例子介紹利用指令集合成 SIU 運算路徑的方法。

相關文件