第一章 對數系統的應用
1.2 對數轉換器架構
在前面所說,要化簡大量複雜的運算就必須透過對數轉換,做完對數轉換才 能夠化簡運算,所以對數轉換在這邊關係重大。對數架構主要是將二進位以一個 32 位元的方式數入值,將此輸入值設定為一個給予對數轉換運用的格式,格式 為 6 位元的整數和 26 位元的小數的專用格式,如果不是輸入此格式的話,計算 出來的答案將會有所不同。
圖 1-2:對數固定寬度格式 Q(6,26) [1]
圖 1-2 為對數轉換器的架構圖,其中包含了四個重要的部分,分別是32-bit 的前導零偵測計數器(Count Leading Zero)、移位器(BSH)、整數部份產生器(Integer Part Generator)、小數部分產生器(Fractional Part Generator)。
在前面提到過,此架構的輸入值的格式是使用整數 6 位元小數 26 位元的格 式,輸入端的N(k.v),N 代表數值的固定寬度格式,整數部分為 k-bit,小數分為 v-bit。
圖 1-3:對數固定寬度格式Q(6,26)[1]
圖 1-3 為目前對數系統最常使用的資料格式,Q(6,26)的表示格式,整數的 部分為 6 個位元,剩餘的 26 位元為小數的位元。
1.2.1 32-bit 前導零偵測計數器(Count Leading Zero)
此部分的功用是用來偵測數入值中 32 個位元的前導零個數,在使用數入值 時,從最高位元開始算起,在第一個不為零的數值前有多少個連續的零,在浮點 數運算系統中,透過此部分來進行正規化,例如:
0000_0101_0110_0000_0000_0000_0000_00002中,前導零的個數由最高位算起 共有 5 個前導零,32-bit 是由 2 個 2-bit 組成一個 4-bit,2 個 4-bit 組成一個 8-bit,2 個 8-bit 組成一個 16-bit,最後由這 2 個 16-bit 組成一個 32-bit 的 LZD,
下面以 4-bit LZD 的真值表舉例說明 5 種情況。
表 1-2:4-bit LZD 真值表[2]
Pattern 為輸入的值,Position 為前導零的個數數值,Valid 為判斷數值是否 有效,而在 4 個位元都為零的情況下設定為無效。
Pattern(𝐵3~0) Position Position(Binary) Valid
1111 0 00 Yes
0101 1 01 Yes
0011 2 10 Yes
0001 3 11 Yes
0000 No
圖 1-4:32-bit LZD 架構圖[2]
圖 1-4 為32-bit 的 LZD 架構,利用 16 個 2-bit LZD 來組成 8 個 4-bit LZD,再用 8 個 4-bit LZD,然後在由 4 個 8-bit 組成 2 個 16-bit LZD,最後再用 2 個 16-bit LZD 組成一個完整的 32 位元前導零偵測計數器。
1.2.2 移位器(BSH)
此部分功能是根據剛剛所介紹到的前導零計數器所計算出的前導零的個數,
使用移位器將運算位元進行左移這個動作,將第一個非零位元前的零值全部除去,
例如:
0000_0101_0110_1010_0010_0000_0000_00002中,在 32 位元前導零計數器所 計算出前導零有5 個,接著在移位器中將運算元左移 5 個位元:
101_0110_1010_0010_0000_0000_0000_0000_02
因為移位器的使用在於取得對數轉換為浮點數部分的初始近似值,移位後第一個 非零位元排除不算,取小數固定寬度的值,故得到:
01_0110_1010_0010_0000_0000_00002。
1.2.3 整數部分產生器(Integer Part Generator)
整數部分產生的部分是要用來計算對數轉換後整數部分的值,而在整數部分 的值並不會產生任何的誤差,只要將固定的寬度格式的小數寬度轉為補數,再將 得到的值與前導零的個數相減,相減之後的值就是整數部分,例如:
0001_1010_1110_1010_000_0000_0000_00002中,固定寬度的格式為Q6.26,而 前導零的個數為 3,將固定寬度格式的小數轉為 1 的補數後得到:
5(110102 001012) 得到的值再跟前導零的個數相減: = 2(5-3)
對照固定寬度格式整數部分為 6,運算元中得到的整數部分為0011_102,,此值 介於22與23之間,故取以 2 為底的對數其整數部分為 2。
1.2.4 小數部分產生器(Fractional Part Generator)
此部分主要是要將移位器所產生的對數轉換小數部分的近似值做進一步的