新一代移動(dòng)通信系統(tǒng)目前主要采用多載波傳輸技術(shù), 基帶傳輸速率較3G 有很大提高, 一般要求業(yè)務(wù)速率能達(dá)到30 Mb/ s 以上。約束長(zhǎng)度卷積碼以及Viterbi譯碼器由于其性能和實(shí)現(xiàn)的優(yōu)點(diǎn), 在新一代通信系統(tǒng)中仍然占有一席之地。這就要求進(jìn)一步提高Viterbi 譯碼器的譯碼速率, 同時(shí)優(yōu)化Viterbi 設(shè)計(jì)以減少由速率提高和約束長(zhǎng)度的增加帶來(lái)的硬件實(shí)現(xiàn)復(fù)雜度。
1 Viterbi 譯碼器基本結(jié)構(gòu)
Viterbi 譯碼器主要由分支度量計(jì)算( BMU ) , 度量累積存貯( PathMet ric) , 度量比較判斷( ACS) 以及回溯譯碼( T raceBack) 4 個(gè)模塊組成[ 1] , 如圖1 所示。本文優(yōu)化主要針對(duì)約束長(zhǎng)度為9 的1/ 2 卷積碼, 生成多項(xiàng)式為561( oct) , 753( oct) 。
BMU ( Branch Met ric Unit ) 模塊計(jì)算接收的2 個(gè)軟信息與4 種可能的編碼輸出的歐式距離, 作為分支度量送入ACS 模塊。ACS( Add_ Compar e_ Select ) 模塊根據(jù)編碼方式和狀態(tài)轉(zhuǎn)移將分支度量和256 狀態(tài)的度量分別進(jìn)行累積相加, 得到進(jìn)入下一時(shí)刻的新度量, 然后比較到達(dá)下一時(shí)刻同一狀態(tài)的2 種度量大小, 選擇小的度量, 同時(shí)生成各狀態(tài)的幸存比特輸出。Tr ace Back 回溯模塊由ACS 生成的當(dāng)前時(shí)刻的判決比特回溯L個(gè)時(shí)刻( L 為回溯深度) , 得到L 時(shí)刻前的狀態(tài)和譯碼輸出。
2 Xilinx Virtex II 的結(jié)構(gòu)和功能
Virtex II 是Xilinx 公司的高性能系列FPGA。最高規(guī)模能達(dá)到8 000 000 門, 內(nèi)部時(shí)鐘高達(dá)400 MHz。存貯單元具有高達(dá)到3 M 容量的真正雙端口Block Ram。運(yùn)算單元中包括最多168 b 的專用乘法器。Virtex II 中的可配置單元為CLB ( Config urable Log ic Bloccks) 。CLB 中的資源可以靈活配置成多種結(jié)構(gòu)。包括實(shí)現(xiàn)查找表, 移位寄存器等功能。在存貯資源不夠的時(shí)候, CLB 也可以配置為分布式的Ram[ 2] 。
雙口BlockRam 是Viterbi 譯碼器中實(shí)現(xiàn)回溯譯碼的主要模塊, 其端口如圖2 所示。可以看出Block-Ram 具有2 套獨(dú)立的地址和數(shù)據(jù)輸入、輸出線, 獨(dú)立的端口使能、寫使能控制線, 而且2 個(gè)端口各自的時(shí)鐘輸入可以不同。這些結(jié)構(gòu)保證了Blo ckRam 是一個(gè)完全真正雙端口操作的存貯器。Virtex II 系列中BlockRam 最多有168 個(gè), 每個(gè)容量為18 k。可以配置成不同的數(shù)據(jù)寬度和深度。同時(shí)BlockRam 的訪問(wèn)時(shí)間只有3. 3 ns, 能夠保證高速的存取要求。
3 基于Xilinx BlockRam 的回溯優(yōu)化方案
3. 1 回溯算法的原理和存在的問(wèn)題
在Viterbi 譯碼模塊中, ACS 和TraceBack 是最核心的模塊。ACS 需進(jìn)行大量的累積和比較運(yùn)算,TraceBack 需進(jìn)行多步回溯運(yùn)算。當(dāng)Viterbi 譯碼器譯碼狀態(tài)為256 時(shí), 這些運(yùn)算都需要占用大量的時(shí)間和資源。對(duì)于256 狀態(tài)的1/ 2 卷積碼的譯碼, 需要512 個(gè)加法器, 512 個(gè)比較器和選擇器來(lái)完成累加度量、比較度量大小, 并選擇小的度量作為該狀態(tài)新的度量。對(duì)一個(gè)狀態(tài)度量更新的操作如圖3 所示。
ACS 得出的256 位的判決比特送入回溯模塊進(jìn)行譯碼?;厮葑g碼通過(guò)尋找在一定深度范圍內(nèi)的最小度量的路徑來(lái)獲得最大似然譯碼。實(shí)現(xiàn)中采用截尾譯碼, 每一個(gè)時(shí)鐘到來(lái)的時(shí)候, ACS 模塊會(huì)送入當(dāng)前時(shí)刻各狀態(tài)的幸存比特( 如圖4 中的Sig n[ S] ) , 從這些幸存比特可以得到由當(dāng)前各狀態(tài)往回L 時(shí)刻的最小路徑上, 前一時(shí)刻經(jīng)過(guò)的狀態(tài)( 如圖4 中, Sig n[ S] =0, 最小路徑上前一時(shí)刻狀態(tài)為T 1, 否則為T 2) 。如果存貯了L 個(gè)時(shí)刻的256 位狀態(tài)幸存比特, 就可以從當(dāng)前時(shí)刻的某一狀態(tài)開(kāi)始回溯L 時(shí)刻得到對(duì)應(yīng)的最小路徑起始狀態(tài)( 如圖4 中從S 狀態(tài)回溯L 時(shí)刻得到初始的P 狀態(tài)) 。實(shí)際上無(wú)論從當(dāng)前的何種狀態(tài)開(kāi)始回溯, 當(dāng)回溯深度L 為5~10 倍的編碼寄存器數(shù)時(shí), 所得到的L 時(shí)刻前的初始狀態(tài)都是相同的( 當(dāng)采用約束長(zhǎng)度為9 的卷積碼, L 最少應(yīng)為40) [ 3] 。
按照上述的回溯方案對(duì)256 狀態(tài)的卷積碼進(jìn)行譯碼時(shí), 會(huì)占用大量的資源, 在Virtex II 系列中的Xc2v 3000 上綜合時(shí)如果對(duì)ACS 模塊也不做任何處理的話甚至?xí)a(chǎn)生資源不夠的情況。除此之外這種回溯要求在一個(gè)時(shí)鐘周期內(nèi)進(jìn)行L 步回溯操作, 結(jié)果導(dǎo)致速率達(dá)不到30 Mb/ s 的要求。
3. 2 基于Xilinx BlockRam 的回溯優(yōu)化方案
雖然一個(gè)時(shí)鐘周期回溯L 步在30 MHz 的時(shí)鐘速率下不能完成, 但是如果回溯前的開(kāi)始狀態(tài)已經(jīng)是確定的最小路徑中的狀態(tài), 那么每回溯一步就對(duì)應(yīng)一個(gè)譯碼輸出, 這樣的輸出速率就能達(dá)到高速率。最后只需對(duì)L 步的回溯譯碼輸出做一個(gè)L 深度的倒序( LIFO)就能得到正確順序的譯碼輸出。
Xilinx Virtex II 的雙端口BlockRam[ 2] 能夠真正地對(duì)2 個(gè)端口進(jìn)行不同的讀寫操作。這種結(jié)構(gòu)能很好的吻合改進(jìn)回溯算法的要求。應(yīng)用這種結(jié)構(gòu)可以存貯ACS 送入的幸存比特, 同時(shí)通過(guò)控制地址的讀寫來(lái)實(shí)現(xiàn)寫入幸存比特和回溯譯碼讀出同步進(jìn)行?;厮菽K存貯管理原理如圖5 所示。回溯模塊的實(shí)現(xiàn)結(jié)構(gòu)如圖6 所示。
在圖5 中, 1, 2, 3 分別為3 塊位寬為256, 深度為64 的雙端口BlockRam, 實(shí)現(xiàn)中將3 塊合為1 塊位寬256, 深度192 的Blo ckRam。Blo ckRam 的2 個(gè)口設(shè)為A 口和B 口。A 口為只讀口, 每個(gè)時(shí)鐘到來(lái)時(shí), 將地址T b_ add 指向的ACS 幸存比特讀出, 并回溯計(jì)算出前一時(shí)刻的狀態(tài)。B 口為讀寫口, 且讀操作優(yōu)于寫操作。當(dāng)時(shí)鐘到來(lái)時(shí), 先根據(jù)當(dāng)前的狀態(tài)和地址Dec_ add所讀出的幸存比特計(jì)算出前一時(shí)刻的狀態(tài)和譯碼輸出, 然后在相同的時(shí)鐘周期內(nèi)在同一地址處將ACS新產(chǎn)生的幸存比特寫入。
圖5 中細(xì)箭頭表示譯碼讀出和ACS 幸存比特寫入地址( Dec_ add) 的起始位置和方向, 粗箭頭表示回溯讀出前一時(shí)刻狀態(tài)的讀地址( T b_ add) 的起始位置和前進(jìn)方向。每64 個(gè)時(shí)鐘開(kāi)始時(shí), 回溯讀出的起始狀態(tài)設(shè)為0, 而譯碼讀出的初始狀態(tài)為上一個(gè)64 個(gè)時(shí)鐘結(jié)束時(shí)回溯得到的初始狀態(tài)( 虛線箭頭所示) 。每64 個(gè)時(shí)鐘開(kāi)始的時(shí)候, 雙端口BlockRam 的2 個(gè)讀寫地址的初始值按照?qǐng)D示的規(guī)律循環(huán)右移, 且前進(jìn)的方向每64 個(gè)時(shí)鐘反向一次。到64×6 個(gè)時(shí)鐘后恢復(fù)初始的地址值和方向。
由圖5 中可以看出, 64×3 個(gè)時(shí)鐘后, 將對(duì)塊2回溯得到的狀態(tài)作為初始狀態(tài)開(kāi)始對(duì)塊1 中的幸存比特進(jìn)行回溯譯碼, 這時(shí)才開(kāi)始真正的譯碼輸出。所以譯碼延時(shí)為192 個(gè)時(shí)鐘周期, 譯碼的回溯深度為64 個(gè)時(shí)鐘周期。
4 性能分析
本文的優(yōu)化方案在Xilinx ISE 5 集成環(huán)境下進(jìn)行Verilog 描述以及綜合和布局布線, 并使用Modelsim7 對(duì)約束長(zhǎng)度為9、回溯深度為64 的Viterbi 軟譯碼器在信噪比為2. 8 db 的高斯白噪聲信道中進(jìn)行了后仿真, 接收誤碼率小于10- 7。
采用不同約束長(zhǎng)度的譯碼器在ISE 5. 2 環(huán)境下進(jìn)行綜合和布局布線后, 速率和面積的比較結(jié)果如表1所示。仿真使用的FPGA 為Xilinx Virtex II 系列中的Xc2v 3000[ 2] 。
由表1 可以得出, 當(dāng)采用基于Xilinx 雙口Block-Ram 的優(yōu)化方案時(shí), 可以明顯地減少Viterbi 軟譯碼器的占用面積, 大大提高軟譯碼速率。在使用約束長(zhǎng)度為9 的卷積碼時(shí), 優(yōu)化后Viterbi 軟譯碼器的面積只占用Xc2v3000 的47%, 其速率能達(dá)到40 Mb/ s 以上。
本設(shè)計(jì)已經(jīng)成功下載于Xilinx Xc2v 3000 中, 正常運(yùn)行在30. 72 MHz 的系統(tǒng)譯碼時(shí)鐘下。
評(píng)論
查看更多