• 沒有找到結果。

在上述關於 DVB-T 通道解碼器各個模組設計的介紹中可以得知,每個模組都須 用到相當數量的資料儲存單元,如何有效地設計這些儲存架構,對於解碼器的設 計相當重要。因此本計畫針對通道解碼器的設計將首重將所有的資料儲存以單埠 記憶體的架構來實現,各個模組在符合 DVB-T 系統標準規範下,從演算法、積體 電路架構以至於電路設計等各層面考量來實現 ASIC 最佳化之模組,朝單晶片之 方式來完成整個系統。至於不同模組之設計方法如下所述:

1.Inner deinterleaver

在 DVB-T 系統中的內部解交錯器主要包含了一個符號解交錯器及一個位元 解交錯器。本計畫所採取之設計方法如下所述:

1.1符號解交錯器(Symbol deinterleaver

符號解交錯為 DVB 接收器中通道解碼的一個主要部分,負責將傳送端所打 散的資料順序還原。符號解交錯器是採用區塊解交錯的方法,區塊大小(Nmax) 也就是一個符號大小包含了 1512 (2k mode) 或 6048 (8k mode) 筆資料。進入解 交錯符號的資料按輸入順序可以定義為一序列 Yin = ( yin0,yin1, yin2,... yinNmax-1),解 交 錯 後 的 資 料 之 輸 出 順 序 序 列 可 以 表 示 為 向 量 Yout = ( yout0, yout1, yout2,...

youtNmax-1),符號內之資料交錯前後之排列順序方式按照 DVB 標準定義如下:

youtq= yinH(q) 當 OFDM 的符號是偶數

youtH(q)= yinq當 OFDM 的符號是奇數

H(q)為一排列函數定義。按著以上的定義,在電路的運作上,可以針對偶數 符號按輸入資料順序寫入記憶體位置 0、1、2 …、Nmax −1,從記憶體讀出時則 按位置 H(0) 、H(1) 、 H(2) … 、H(Nmax −1) 的順序取出資料以達到解交錯的

目的;奇數符號的解交錯順序剛好相反,是以 H(q)順序寫入,以循序方式讀出。

由於奇偶的解交錯順序不同,因此某些符號解交錯器的架構設計乃使用兩個記憶 體,每個記憶體大小可以容納整個符號大小,一個負責儲存偶數符號資料,另一 個儲存奇數符號資料,各由一個 H(q)產生器來控制。然而,由於奇偶符號乃是 交替輸入,處理偶數符號的輸入可與處理先前奇數符號的輸出同時一併考量,此 時都是採用循序的位置;同樣的在處理奇數符號的輸入與偶數符號的輸出都按 H(q)的順序讀寫。既然讀寫位置一樣,就可以利用同樣的記憶體來處理奇偶符 號,而不須要使用到兩塊不同記憶體。

由以上的說明可知解交錯須要 H(q)產生器電路計算位址。若以查表方式儲 存 H(q)的方式設計電路,須要一個至少Nmax大小的記憶體。若按標準規格書提 供的方塊圖設計,只需很少的電路,但其缺點在於不一定每個週期都能產生 H(q) 值,如果當週期有資料輸入,得將資料先儲存在緩衝暫存器,此一緩衝暫存器的 數目會隨著 H(q)無法產生的週期數增加。

在本計畫針對附號解交錯的設計主要採用單埠記憶體來設計解交錯器,以降低其所須電路面積。

而由於單埠記憶體讀寫不能同時運作於同一塊記憶體上,因此須要使用多塊記憶體來達成解交錯 器運作時資料讀寫的需求。因此,本設計提出將解交錯記憶體分割成四個區塊來錯開讀寫衝突,

圖 9 所示。其中第一塊(2)與第二塊(3)記憶體大小為2048×W位元,第三 塊(4)與第四塊(5)記憶體大小為1024×W位元,其中 W 代表符號內每筆資料的位 元寛度。如果將符號資料按其輸入順序編號,則第一塊記憶體(2)負責存取小於2L 且偶數編號之資料,其中 L 在 2k 與 8k 模式下分別等於 2048 及 8192,第二塊(3) 負責存取小於2L且奇數編號之資料,第三塊(4)負責存取大於等於2L且偶數編號 之資料,第四塊(5)負責存取大於等於2L且奇數編號之資料。如此分四塊記憶體 的優點在於可以讓資料的讀寫發生在同一區塊的機率降到非常低。每次解交錯器 接受一筆新的輸入資料,同時也產生一筆輸出資料,因此每一週期資料須讀寫一 次。以循序讀寫來說明,由於連續兩個數必為一個奇數、一個偶數的特性,四塊

記憶體奇偶的分類,可以讓其中一塊負責讀取時,另一就負責寫入,不會導致衝 突。而以 H(q) 讀寫時,由於連續兩個 H(q)位址,在大部分的情況,一個會小於

2

L,另一個會大於L2,在此情況圖一的架構上單埠記憶體的讀寫不會有衝突。此 外,若有時連續兩個 H(q)都小於L2,若此兩個位址剛好為奇偶,則記憶體讀寫也 不會有衝突;但若不是,則可能會有讀寫同一區塊的問題發生。此時,寫入的資 料必須先儲存緩衝暫存器(10),以待稍後寫入。整個解交錯器在每一週期的運作 可以歸納為以下步驟:

1. 先設定讀寫資料之指標qR =0,qW =−1;

2. 判斷目前處理的輸入屬於偶數或奇數符號,來決定此周期讀出與寫入位址的 產生方式:

偶數符號:讀出位址RA =qR ,由Q1位址產生器(6) 產生。

寫入位址WA1=q ,由W Q2位址產生器(7) 產生。

寫入位址WA2=qW +1 ,由Q2位址產生器(7) 產生。

奇數符號:讀出位址RA =H(qR) ,由H1(Q)位址產生器(8) 產生。

寫入位址WA1=H(qw) ,由H2(Q)位址產生器(9)產生 寫入位址WA2=H(qw +1) ,由H2(Q)位址產生器(9)產生 3. 判斷每一個位址(RA, WA1, WA2) 所對應的記憶體:

由2.得知讀出位址至多一個,寫入位址至多兩個,將這些位址(Addr)由下列的 演算法判斷每一個位址所對應處理的記憶體區塊。

if (Addr<2L and Addr為偶數) block(Addr)=1;屬於第一塊記憶體(2);

if (Addr<2L and Addr為奇數) block(Addr)=2;屬於第二塊記憶體(3);

if (Addr≥ and Addr為偶數) block(Addr)=3;屬於第三塊記憶體(4); 2L if (Addr≥ and Addr為奇數) block(Addr)=4;屬於第四塊記憶體(5); 2L 4.判斷有無發生記憶體讀寫衝突,來決定此周期實際執行的記憶體讀寫動作。

依讀出位址 RA 從第 block(RA)塊記憶體讀取資料;

+1

周期 1: RA=H(qR =0)=0,讀出第一塊記憶體(2)中的偶數符號中第0筆資料。

周期 23:RA=H(qR =22)=1089,讀出第四塊記憶體(5)中的偶數符號中第1089

圖 9 Symbol deintereleaver 功能架構圖

由上述之步驟可知,解交錯的架構必須包含一個每週期產生一個 H(q)函數

一週期都能產生正確的 H(q)值,在設計上因此提出H1(Q)位址產生器的設計如 圖 10 所顯示之架構,其中主要乃是利用展開的方式,將標準所定如圖 10 所示之 展開,以產生二個R 值,將正確值當做輸出。同樣的,' H2(Q)位址產生器則是 展開循環移位暫存器更多次,以達到如圖 11 所示,產生四個R 值,再從中選出' 適當的两個值處理為兩個連續 H(q)輸出。

文獻中目前有的記載乃採用雙區塊的記憶體分別對單偶符號解交錯,因此,

本計畫的架構大幅地降低 symbol deinterleaver 所須的記憶體面積大小,也由於 symbol deinterleaver 記憶體佔了通道解碼器面積很高的比重,連帶讓通道解碼器 的面積大幅縮小。

' +1

Ri Ri'

圖 10 H1(Q)位址產生器

'

Ri Ri'+1 Ri'+2 Ri'+3

) (q

H H(q+1)

圖 11 H2(Q)位址產生器 1.2位元解交錯器(Bit deinterleaver

如前所述位元交錯的方式乃是採用區塊交錯的方法,由 v 條 126 位元通道所 組成,區塊大小為 126×v 位元(v 的值與調變的方式有關,最大值為 6),每次 接收 v 位元,依序分給 v 條通道,每條通道接收 126 位元的值後,依據不同的對 應函式輸出。因此位元交錯位元交錯器在 2k mode 時,每接收一個 OFDM 符號將 會重複執行 12 個循環,8k mode 時則執行 48 循環。關於位元解交錯器的設計,

可以很單純的由記憶體及適當的位址產生器構成,同樣的,在此一計畫也將採用 基於 single port 記憶體的設計方法來實現。由於位元交錯器乃以 126 個 bit 為 一組,共計六組,若採用記憶體實現,則每一組至少須 126 × 1 bits 的記憶體。

但因記憶體一個 word 最少需 4 bits,所以共需 128 × 4 bits 大小的記憶體,

且由於每一周期資料進入必須有讀與寫的動作,但由於 single port 記憶體不能

於一個周期中同時進行讀寫工作,因此,解決的方法為藉由位元 packing 的方式 來降低讀寫的頻率,也就是一個週期進行寫入記憶體兩筆資料動作,下一個週期 則讀出兩筆資料,依此使 single port 記憶體設計得以實現,也提高了記憶體使 用率,共需 64 × 4 bits 大小的記憶體。然而一開始先將六組 126 bits data 依 序寫入到記憶體位置,之後一個週期每個記憶體進行讀取後,下一個週期再對每 個記憶體相同位置進行寫入動作,當初藉由位元 packing 的方式來降低讀寫的頻 率,一次讀寫兩筆資料,故排列函數有所改變了,如下列改變

輸入向量: B (e) = (be.0,be.1,be.2... be.62) 其中 e = 0, 1, 2….. V-1 輸出向量: A (e) = (ae.0,ae.1,ae.2... ae.62) 其中 e = 0, 1, 2….. V-1 輸出入向量對應 be. He(w)= ae.w 其中 w = 0,1,2….. 62

I0:H0(w)=w

I1:H1(w)=(w + 31) mod 63 I2:H1(w)=(w + 52) mod 63 I3:H1(w)=(w + 21) mod 63 I4:H1(w)=(w + 10) mod 63 I5:H1(w)=(w + 42) mod 63

第 一 次 六 組 的 所 要 讀 取 的 資 料 起 始 位 址 依 序 如 下 ( I0,I1,I2,I3,I4,I5)=(0,31,52,21,10,42) ,然而對此位址進行讀取後,再對 此位址進行寫入資料的動作,然而當 126 bit 資料讀取完畢,且將更新的 126 bits 資 料 寫 入 到 記 憶 體 後 , 讀 取 的 資 料 起 始 位 址 依 序 如 下 ( I0,I1,I2,I3,I4,I5)=(0,62,41,42,20,21) ,其由上一次所計算的起始位址再 加上排列函數而得,如 I1 的起始位址為(31+31) mod 63 = 62,I2 的起始位址 為(52+52) mod 63 = 41,I3 的起始位址為(21+21) mod 63 = 42,I4 的起始位 址為(10+10) mod 63 = 20,I6 的起始位址為(42+42) mod 63 = 21,之後依序

如上述函式計算即可得每次記憶體所要讀取的起始位址,這樣就可以用 single port 來實現,且可以降低記憶讀寫的頻率。

圖 12 位元解交錯器的架構 2. Inner decoder

針對於 constraint 長度很大的 Viterbi 解碼器之設計,其關鍵問題包含 ACSU 如何在 state 數目很多的情況下有效率地完成每個 iteration 的 ACS 運算,以及更 重要的 survivor 路徑的尋找及解碼輸出。很明顯的 RE(Register Exchange)的設 計方式不適合於大 constraint 長度的應用,然而 TB(Traceback)的設計則需要考 量到如何提高有效的回溯運算,並且 Survivor Path 的記憶體不能太大,尢其記憶 體 RAM 的讀寫很耗費功率及時間。此外,這兩部分(ACSU 及 SMU)如何聯繫 溝通也非常重要,也影響到如何得到最佳化 Viterbi 解碼器設計。針對 DVB-T 的 Viterbi 解碼器之設計,由於所需的狀態數為 64,且其解碼速度需求頗高,因此,

本計畫乃先採用所謂的 state-parallel 方式來設計 ACSU,也就是每個階段各個狀 態的計算都由一專門的 ACS 計算單元來處理。此一單元從兩個 state metric 的加 法結果,選擇一個較小的數,並產生 decision bit。但由於 ACS 需累加 branch metric,則所使用的加法器必定終會溢位(overflow) ,這邊我們使用 [8]的模組正 規化 (Modulo Normalization) 方法來解決溢位問題。我們所設計的 ACSUcore 架

y0,w

構如圖 13 所示,可使用一個減法器產生 decision bit

而關於 SMU 之設計,如前所述,RE 和 TB 各有其優缺點,因此本計畫提出 一個類似混合式(hybrid)的架構,一方面是做局部的 RE,另一方面則是做整

而關於 SMU 之設計,如前所述,RE 和 TB 各有其優缺點,因此本計畫提出 一個類似混合式(hybrid)的架構,一方面是做局部的 RE,另一方面則是做整

相關文件