• 沒有找到結果。

4.2 組成元件設計

4.2.6 Viterbi 解碼器

在吾人的實作當中,吾人選擇了 Viterbi 演算法當作在 802.11n 中所使用的迴旋編 碼器的解碼器。一般而言,為了達到模組化及管線式處理,可以將解碼器的電路 分成四個主要的處理單元,如圖 4-15 所示。其中包括:分支計量值單元

BMU(Branch Metric Unit ;BMU)、相加-比較-選擇單元(add-Compare-Select Unit ; ACSU)、路徑計量值記憶單元(Path Metric Memory Unit ; PMMU)及存活路徑記憶 單元(Survivor Memory Unit ; SMU)。各單元的功能簡述如下:

I. 分支計量值單元(BMU):根據所收到的值計算在格狀圖(trellis)每一級的分支 計量值。

II. 相加-比較-選擇單元(ACSU):對每個狀態執行相加-比較-選擇運算,用來計算 所有狀態的存活計量值和產生決策位元(或存活路徑)

III. 路徑計量值記憶單元(PMMU):用來儲存存活計量值,以供下一級在 ACSU 中計算路徑計量值及存活計量值。

IV. 存活記憶單元(SMU):負責記錄 ACSU 所產生的決定位元,並找出存活路徑 中最早時間點的位元,而當作解碼輸出。

ACSU

BMU SMU Output

Input

PMMU

(Register or Memory )

圖 4-15 Viterbi 解碼器方塊圖

在本節的安排中,由於我們在前一章已先對 Viterbi 的原理做過介紹,所以僅針 對上述的四個單元一一做較詳細的介紹,並且將導入基數-4(Radix-4)之 Viterbi 解碼器架構。

4.2.6.1 分支計量值單元

分支計量值單元(BMU),是根據所收到的值計算在格狀圖(trellis)每一級的分 支計量值,也就是在計算在格狀圖上任二個節點之間的計量值。舉例說明,在圖 3-12 中,由節點 S1走到節點 S2的路徑是 01,所以假設我們收到的訊號是 r(t)=01,

則此二節點的計量值便是 0,如果 r(t)=11,則此二節點的計量值便是 1。而在這 個單元中的目的便是要計算出任二節點之間的計量值,而在圖 3-12 中,任二節 點之間的路徑只有 00、01、10、11 四種,所以只要計算所收到的訊號跟 00、01、

10、11 之間的距離,而任二個節點之間的計量值,便是這四個值的其中一個。

在 VLSI 中,BMU 主要有二個實現的架構: (1)由記憶體產生,也就是說 BMU 是 以查表的方式由 ROM 或 RAM 實現,而節省硬體面積。(2)由運算單元產生,將 接收訊號直接運算出在格狀圖中所需的計量值,而這種方法的硬體複雜度則根據 計量值的定義。在吾人的實作中是以絕對值,做為計算計量值的方法,且採用(2) 由運算單元產生計量值的架構。圖 4-16 便是吾人使用的 BMU 架構。

Bm00(t) Subtract

Subtract

Subtract

Subtract

abs

abs

abs

abs Received

codeword r(t)

Bm01(t)

Bm10(t)

Bm11(t)

圖 4-16 BMG 方塊圖

4.2.6.2 相加-比較-選擇單元(ACSU)

ACSU 是整個 Viterbi 解碼器的核心,在高速傳輸的應用中(如 WLAN),平行 架構的 ACSU 則是必要的,因此在格狀圖的每一節點,便代表著一個 ACS 處理 單元。

圖 4-17 為 ACSU 架構的例子,這是在 3.2 節中所使用(2,1,2)的架構。這 ACS 處理單元有四個輸入(2 個分支計量值及 2 個存活計量值)和 2 個輸出(下一級的存 活計量值及決定位元)。我們先由格狀圖畫分出有幾個蝴蝶模組,且決定各蝴蝶 模組的輸入輸出關係,而一個蝴蝶模組是由二個 ACS 所組成。在 ACS 中,其主 要功能有二:

1. 在路徑計量值中選擇最小的當作存活路徑值,並儲存之。

2. 產生存活路徑之決定位元,並送至存活路徑記憶單元(SMU)。

決定位元是在 ACS 中所產生最重要的資訊。它暗示了下一級的存活計量值 是由哪一組存活計量值及分支計量值之和所產生的。假設決定位元為 0,代表著 在 ACS 中上面那條是被選擇為下一級的存活路徑。反之決定位元為 1 的話,存 活路徑便是挑下面那條。代表著所有節點的 ACS 所產生的決定位元,將會被送 到 SMU 中做解碼而產生出最後的輸出。

然而在吾人的實作中,是使用 6 個移位暫存器的編碼器,這代表了格狀圖會 有 64 個狀態節點,便有 32 個蝴蝶模組、64 個 ACS,蝴蝶模組的目的為指示 ACS 應該抓取怎樣的路徑計量值及分支計量值,其架構如圖 4-18 所示。

S1

Present State Next State

Branch

Trellis diagram Butterfly unit of ACS unit

Detail of Butterfly unit Detial of ACS unit

圖 4-17 ACS 設計流程圖

然而當資料不斷的進來,因為存活計量值會一直累加,為避免溢位(overflow) 所造成的錯誤,我們必須對存活計量值做正規化,而正規化的方法有很多,最直 覺的想法是將所有狀態之存活計量值同減去一個固定的值,但這造成了額外的硬 體面積,於是在吾人的實作中採用[24]的修改過的模正規化(Modified Modulo Normalization),其架構如圖 4-19 所示。

2 's

Survivor m etric=

M in( PM 1+BM 1,PM 2+BM 2)

0

1

圖 4-19 模正規化架構方塊圖

在模(modulo)的技術中,所有的計量值(metric)m 都要依(4-19)被轉換為正規j 化過的計量值m 。 j

4.2.6.3 存活記憶單元

存活記憶單元(SMU)的目的最主要就是記錄從 ACS 中送來的決定位元或存 活路徑。再根據這些資料進行解碼。這是在 Viterbi 解碼器中,最具有討論設計 空間的地方。現存有二種著名的 SMU 做法,分別是暫存器交換方法

[25](register-exchange method ; REM)及後向追溯方法[26]-[28](trace back method ; TBM )。暫存器交換方法有著架構簡單、快速的優點,但使用的暫存器所增加的 面積卻是在設計中最需考量的地方。然而在另一方面後向追溯方法使用記憶體來 儲存由 ACS 送來的存活路徑,而使得所須的面積較暫存器交換方法小,但有著 較長的延遲及較複雜的控制電路,且所需要的功率(power)也較大。在吾人的實 作中,綜合考量高系統時脈(clock)及所需面積大小,吾人採用在[28]中所提出的 以記憶體實作 TBM 的其中一種,稱為“k pointer even"。底下則介紹這種方法。

首先我們先介紹在 TBM 中一定會被定義的三種動作:

1. 寫入(WR):從 ACSU 中所送過來的存活路徑將會被會寫入與狀態互相對應的 記憶體中,比如在吾人的實作中,ACSU 共有 64 個 ACS,代表著 64 狀態,

相對的也有 64 組存活路徑產生而需要被記錄。

2. 回溯讀取(Trace-back Read ; TB):TB 這動作主要是將讀取寫在記憶體中的存 活路徑,將讀出的值當作一個指標,而這指標指向上個狀態,而能找到上一 個狀態數。這動作的目的為希望能讓所有路徑重合。

3. 解碼讀取(Decode Read ; DC):這動作和 TB 相同,同樣讀出一個指標而找到 上個狀態。但是這個動作的對象是更舊的資料,而且是從已經作過完整的 TB 之後所找到的狀態數開始做 DC 這動作。在 DC 中,讀出的指標值除了 指向上一個狀態數之外,在搭配上現在的狀態數,便可以得到當初輸入而解 碼輸出了。

k=3 的 k point even 方法如圖 4-20 所示。在這方法中使用了 k 個讀取指標(包 括回溯讀取指標及解碼讀取指標),由 2k 塊大小為 M/2 的記憶體所組成,M 是指

截斷長度。寫入的指標是從左到右的,而讀取指標是由右而左的。在一個時間點 中,六塊記憶體中有一個是執行寫入、一個解碼讀取、二個回溯讀取及二個閒置。

第一個位元輸出是在當寫入指標寫到整個記憶體的最後時,所以全部的延遲為 3M。然而在因為解碼讀取是由右而左的,所以位元是以一個倒反的順序輸出的,

這需要另一塊記憶體當作 LIFO(Last In First Out)而讓輸出順序正確。

idle idle

DC

DC TB TB

TB WR

WR idle TB idle

idle TB WR DC idle TB

Block1 Block2 Block3 Block4 Block5 Block6

1

Path of Decode Read pointer Path of Traceback Read pointer

Path of write pointer

圖 4-20 TBM k point even 流程圖

4.2.6.4 Radix-4 之 Viterbi 解碼器架構

針對 Viterbi 解碼器,吾人使用 Radix-4 ACSU 搭配 Radix-4 之 BMU 及 Radix-4 之 Pre-SMU 和 Radix-16 之 SMU,以達到降低時脈速度或提昇資料的傳輸速度之 目的。而針對位元階層(bit level),吾人欲使用 8 level,也就是 3 位元的輸入位元 [19],來實現 Viterbi 解碼器,其模擬將在 4.3 節中介紹,至於在 bit level,如何 打斷關鍵路徑(critical path)來加快 Viterbi 解碼器的資料傳輸速度,在[20]-[21]有 較詳細的介紹,由於此部分牽涉到加法器的架構變動,吾人在此並不多做探討。

如何將前述的 Viterbi 解碼器架構轉換成 Radix-4 之 Viterbi 解碼器架構,其 實就是將原本兩級的路徑合而為一級的路徑,一個 8 個狀態(eight-state)的 Radix-2 trellis to equivalent Radix-4 trellis 的例子,如圖 4-21 所示。至於 trellis Radix 的大 小對資料的傳輸速度及計算複雜度的影響,如表 4-2 所示,由表 4-2 中,吾人 可發現 Radix-4 之 Viterbi 解碼器架構剛好位於計算複雜度對 trellis Radix 所造成 的指數增加曲線(exponentially increasing curve)以及傳輸速度對 trellis Radix 所造 成的理想線性增加曲線(ideal linear increasing curve)的交點,所以吾人可使用 Radix-4 之 Viterbi 解碼器架構當做 Viterbi 解碼器之硬體實現架構,再者,Radix-4 之 Viterbi 解碼器架構是唯一增加 throughput 而維持相同面積效率(area efficiency) 的架構。

Radix-4 之 BMU 即是將原本輸入訊號做一級延遲,用此延遲訊號輸入 Radix-2 之 BMU 所造成的 4 組輸出與原本輸入訊號輸入 Radix-2 之 BMU 所造成 的 4 組輸出做一組合,可得到

4 4 16 × =

組分支計量值,Radix-4 之 BMU 方塊圖 如圖 4-22 所示。將圖 4-21 中的 Radix-4 trellis 一般化,吾人可得知每個輸出狀 態都有 4 個前一級來的狀態,進而可知路徑計量值在 Radix-4 ACSU 裡,能用 4 路(four-way)的 ACS 來更新,而每一組決定位元乃由 2 個位元所組成,Radix-4 ACS 設計流程圖如圖 4-23 所示。而為了使 trace back 時都能回到狀態 0,吾人 將所有為零的輸入(all zero inputs)送至 Radix-4 之 Viterbi 解碼器,可得 64 個穩態

(steady-state)路徑計量值,並將此 64 個穩態路徑計量值當作初始狀態(initial state) 路徑計量值,64-state 初始狀態路徑計量值如表 4-3 所示。Radix-4 之 Pre-SMU 即是將兩級的決定位元,合而為一個由 4 個位元組成的決定位元,其設計流程圖

圖 4-21 Radix-2 trellis to equivalent Radix-4 trellis 示意圖

Radix- 2k COMPLEXITY SPEED MEASURES Radix k(No. of path

:Full Adder

Input Using Radix-2 branch metric calculation, we can get the same result. The calculation is as follow.

n-1

:time index n-1

圖 4-22 Radix-4 之 BMU 方塊圖

E.g. :00x represents state 00x, x is don't care and n-2 represents time index n-2

01

dn :decision bit at time index n and state x00

01 00x

λ

n :a branch metric which is a transient from state 00x to x00 at the time duration [n-2, n]

00 01x

64-STATE ACS INITIALIZATION and state 00x

4:1

dn n :combinednx00and previous state decisions which

00 x

dn selects

Radix-16 Composite

Decision

4-way pretrace-back unit

00

Decision

LIFO :Last In First Out , to time reverse the outputs

4

相關文件