• 沒有找到結果。

第二章 對數算術單元

2.3 對數轉換器

前一章節中,介紹了對數算術單元的整體架構,並且了解到對數轉換器對於最 終輸出的結果有著重大影響,是整個架構中極為重要的角色。

- 4為對數轉換器的架構圖,在說明架構之前,首先要了解資料輸入端的格式,

也就是運算元的資料格式。輸入端的N(Q i.f )表示數值N的固定寬度格式為高位元前 i-bit為整數部分,其餘的部分(f-bit)則表示小數,如圖 2- 2。

2- 2:輸入項 N 固定寬度格式表示圖 [14]

這樣的設計讓我們可以經由不同的格式設定來調整小數點的位置,圖2- 3為格 式Q 6.26 的範例,表示資料的寬度總共為 32 位元,其中高位元處以 6 位元表示整數,

其餘的26 個位元則用來表示小數。舉例說明,有一筆 32 位元資料如下:

0011_0010_1000_0000_0000_0000_0000_00002,在此格式下其值為12.625。但若固 定寬度格式設為Q 8.24,則其值代表 50.5。

圖2- 3:log2(N)的固定寬度格式表示圖(Q6.26 範例) [14]

在固定寬度格式的設定上,本篇論文所提出的方法與其他參考文獻比較時所用 的格式皆是使用Q 6.26,皆在同樣格式下進行比較。使用固定寬度的系統取代浮點 數系統主要有兩個原因:第一,較浮點數系統易於在硬體上實現,因為固定寬度系 統只需使用整數的資料分析。第二,可在高時脈頻率下運算,因應各階段3D 圖形

管線化所需之數字寬度範圍來做精確度最佳化,因此隨著輸入寬度的要求而進行動 態變化是必須的。

圖2- 4:對數轉換單元架構圖[14]

對數轉換器包含了32-bit 前導零偵測計數器 CLZ(Count Leading Zero)、移位 器BSH、整數部分產生器 IntGen(Integer Generator)以及浮點數部分產生器 FPGen

(Fractional Part Generator)四個部分,以下將逐一介紹各個單元。

(1) 32-bit 前導零偵測計數器(CLZ)

此單元是用來計算運算元的前導零個數,所謂的前導零指的是從最高位元開始 算,在遇到第一個非零值之前共有幾個位元為零。在浮點數運算當中需要利用到這 個元件來偵測0 的個數以做正規化的動作。

舉例如下,運算元0001_1010_1000_0000_0000_0000_0000_00002從最高位元算 起共有3 個前導零,此為目測結果,實際做法如下說明。

在設計32 位元的前導零偵測計數器之前,先以 4 位元的LZD做為說明,其架構 如圖 2- 5。B3~0為輸入的運算元,P1~0表示前導零個數,V(valid)為有效值偵測,

0 表示目前仍未偵測到任何一個非零值,無法決定連續零值的數目,需要根據更低 位元的資料才能決定出正確的數量。

圖2- 5:4 位元 LZD 架構圖[16]

表 2- 2列出了 4 位元的前導零偵測計數器所可能發生的五種情況,即前導零的個數 分別為0 個至 3 個,以及 4 位元全為零的無效狀況。

表2- 2:4 位元 LZD 真值表[16]

Pattern(B3~0) Position Position(Binary) Valid 1011 0 00 Yes 0100 1 01 Yes 0011 2 10 Yes 0001 3 11 Yes

0000 ╳ ╳ No

經由4 位元的CLZ,我們可以逐步將其擴充。圖 2- 6為 16 位元CLZ的架構圖,

其中包含了8 位元的架構圖,並可依照使用兩組 8 位元CLZ結合成 16 位元CLZ的方 法擴充至32 位元。其中的LZD4 即為圖 2- 5的架構,LZD8 的運算流程稍後會做說 明。

圖2- 6:16 位元 LZD 架構圖[16]

以圖2- 6中左半部的LZD8為例,VV0=V0V1(表示logic-OR), PP0的最 高位元(PP0[2])為V0的反相,因為V0若為無效,則表示至少有4個前導零存在。PP0[1:0]

的輸出同樣由V0決定,當V0=1時表示在前四個位元之中已出現非零位元,這時不論 後頭還有多少個零值都不影響前導零的個數,因此PP0[1:0]=P0的值;而當V0為無效 狀況時,則P[1:0]=P1的值。

以下為執行範例,運算元為000011112,左邊的LZD4會輸出V0=0,P0=11;右邊 的LZD4會輸出V1=1, P1=00,LZD8接收兩端的輸入後,VV0=V0V1=1,PP0[2]=1

(V0的反相),因V0=0使得PP0[1:0]會輸出P1的值,最後得出的PP0=100表示運算元 有4個前導零。

(2) 移位器(BSH)

透過前一步驟所計算出的前導零個數,移位器將利用這項參數將運算元進行左 移位(left-shift)的動作,直到將第一個非零位元以前的零值全部移除為止,目的為 取得對數轉換小數部分初步的近似值。但要注意的是,第一個非零位元並不算在小 數部分之內,從此值右一位開始才屬於小數,依固定寬度格式的小數寬度來取值。

舉例如下,承上一步驟運算元0001_1010_1000_0000_0000_0000_0000_00002

1_1010_1000_0000_0000_0000_0000_0000_0002,排除第一個非零位元不算,依照固 定寬度格式的小數寬度取值,得到1010_1000_0000_0000_0000_0000_002

(3) 整數部分產生器(IntGen)

此單元為計算對數轉換的整數部分之值,與小數部分不同並不會產生任何誤 差。將固定寬度格式中的小數寬度轉為一補數,並將此值與前導零個數兩者相減即 為整數部分之值。

舉例如下,運算元同為0001_1010_1000_0000_0000_0000_0000_00002,固定寬 度格式為Q 6.26,前導零為 3 個,將固定寬度格式中的小數寬度 26 轉為一補數得到 5(110102 → 001012),再將此值與前導零個數相減得到整數部分之值為2(5 - 3)。

由於這個部分並不會產生誤差,因此我們在此進行簡易的驗算比對,固定寬度格式 整數寬度為6,從運算元中得到整數為 0001_102,此值大於22小於23,故取以二為 底的對數其整數部分為2。

(4) 浮點數部分產生器(FPGen)

此單元將移位器所產生的對數轉換小數部分的近似值做進一步的修正,得到更 為精確的小數部分近似值。

在整個對數轉換器中,除了此單元外其餘的三個單元做法皆大同小異,對整體 而言影響甚微,主要的差異點聚焦在會造成誤差的小數近似上。因此,關於浮點數 部分產生器的詳細介紹將於第三章以全章來說明,並在第四章提出我們的方法。

相關文件