• 沒有找到結果。

第二章 利用對數系統執行複數除法的運算與分析

2.2 對數系統架構

在前面所提到,要簡化複雜的運算就必須透過對數轉換,做完了對數轉換才 能簡化運算,所以對數轉換對所有的運算關係重大。

圖2-1 對數系統轉換架構[17]

圖2-1 為對數轉換的架構圖,其中包括了四個重要的單元,分別是 32-bit 的 前導零偵測計數器(Count Leading Zero)、移位器(BSH) 、整數部分產生器(Integer Part Generator)、小數部分產生器(Fractional Part Generator)。

在此對數架構中並非所有輸入數值都是整數,此對數架構沿用前人方法輸入 值固定寬度格式,輸入端的 N(Qk.v),N 代表數值固定寬度格式,k-bit 為整數部 分,v-bit 代表小數部分。

Bit Index

Nk · · · N1 N0 N-1 N-2 N-26

Value 25 21 20 2-1 2-2 2-26 Q(6,26) 6-bit Integer part 26-bit Fractional part

圖2-2 對數固定寬度格式 Q(6,26)[17]

圖2-2 為目前對數系統運算最常採用的資料格式,Q(6,26)的表示格式,輸入 值N 的最大值為 232,對數形式整數為6 個位元,其餘的 26 位元用來表示小數的 位元。

2.2.1 32-bit 前導零偵測計數器(Count Leading Zero)

此單位功能用來偵測 32 個位元中前導零的個數,在我們使用 Q(6,26) 格式 中,前導零從最高為元開始算起,在第一個不為零的數值前面有多少個連續的零,

在浮點數運算系統中透過此單元來正規化,舉例:

0000_0111_0001_0101_1100_0011_0000_00002中,前導零個數由最高為算起共有 5 個前導零,32-bit 的前導零偵測計數器是由 2 個 2 位元組成一個 4 位元,2 個 4 位元組成一個8 位元,2 個 8 位元組成一個 16 位元,最後由 2 個 16 位元組成一 個32 位元的 LZD,下面以 4 位元 LZD 的真值表舉例說明五種狀況。

表2-2 四位元 LZD 真值表[20]

Pattern(B3~0) Position Position(Binary) Valid

1001 0 00 Yes

0111 1 01 Yes

0010 2 10 Yes

0001 3 11 Yes

0000 No

Pattern 為輸入的值,Position 為前導零個數的數值,Valid 判斷數值是否有效,

4 位元皆為零的情況下設定為無效。

圖2-3 32 位元 LZD 架構[20]

圖為32 位元的 LZD 架構,利用 16 個 2 位元 LZD 來組成 8 個 4 位元 LZD,

再由8 個 4 位元組成 4 個 8 位元 LZD,接著由 4 個 8 位元組成 2 個 16 位元的 LZD,

最後用2 個 16 位元組成一個完整的 32 位元前導零偵測計數器。

2.2.2 移位器(BSH)

此單位功能根據剛剛前面介紹的前導零計數器計算出的前導零個數,利用移 位器將運算元進行左移的動作,將第一個不為零前的值全部移除,舉例:

0000_0111_0001_0101_1100_0011_0000_00002中,由32-bit CLZ 計算出前導零個 數共有5 個前導零,接著透過 BSH 將運算元左移五個位元:

111_0001_0101_1100_0011_0000_0000_0000_02

由於移位器的目的在於取得對數轉換爲浮點數部份的初步近似值,移位之後第一 個非零為元排除不算,取小數固定寬度取值,得到:

11_0001_0101_1100_0011_0000_00002

2.2.3 整數部分產生器(Integer Part Generator)

整數部分產生器用來計算對數轉換後的整數部分的值,整數部分的值不會產 生任何的誤差,將固定的寬度格式的小數寬度轉為補數,再將得到的值與前導零 的個數相減,相減得出的值就是整數部分,舉例:

舉例:

0001_1010_1000_1111_0000_0000_0000_00002中,固定寬度格式為Q6.26,前導 零個數為3,將固定寬度格式中的小數轉為 1 的補數得到:

2.2.4 小數部分產生器(Fractional Part Generator)

相關文件