LTE中卷積碼的譯碼器設(shè)計與FPGA實現(xiàn)
由于網(wǎng)格圖的蝶形結(jié)構(gòu),可以比較PMi-PMj和BMq-BMp(即如果PMi+BMp>PMj+BMq,可以將其寫為PMi-PMj>BMq-BMp),這樣對于每一對相關(guān)狀態(tài)可以重復使用這兩項,在這個過程中需要用到32個加法器。通過這種方法,可以明顯減少ACS模塊中的加法器數(shù)量。
更新路徑度量的操作設(shè)計如下,編碼器的狀態(tài)轉(zhuǎn)移過程如圖2中蝶形結(jié)構(gòu)所示,蝶形結(jié)構(gòu)中兩個相關(guān)狀態(tài)轉(zhuǎn)移到兩個新狀態(tài)。
兩個相關(guān)狀態(tài)對應的用狀態(tài)索引分別為i=OD5D4D3D2D1和j=1D5D4D3D2D1,兩個新狀態(tài)可以分別表示為m=D5D4D3D2D10和n=D5D4D3D2D11。即,狀態(tài)i=0D5D4D3D2D1,如果輸入比特0,轉(zhuǎn)移到狀態(tài)m=D5D4D3D2D10,如果輸入是比特1,轉(zhuǎn)移到狀態(tài)n=D5D4D3D2D11;狀態(tài)j=1D5D4D3D2 D1,如果輸入比特0,轉(zhuǎn)移到狀態(tài)m=D5D4D3D2D10,如果輸入比特1,轉(zhuǎn)移到狀態(tài)n=D5D4D3D2D11。根據(jù)上面的轉(zhuǎn)移狀態(tài)關(guān)系,更新狀態(tài)的路徑度量。
對于幸存分支的存儲表示,本文采取如下方法,狀態(tài)m=D5D4D3D2D10,如果由狀態(tài)i=0D5D4D3D2D1轉(zhuǎn)移而來,那么此幸存分支取狀態(tài)的最高有效比特0;如果由狀態(tài)j=1D5D4D3D2D1轉(zhuǎn)移而來,此幸存分支取狀態(tài)的最高有效比特1。同樣,狀態(tài)n=D5D4D3D2D11,如果由狀態(tài)i=0D5D4D3 D2D1轉(zhuǎn)移而來,此幸存分支用0表示;如果是由狀態(tài)j=1D5D4D3D2D1轉(zhuǎn)移而來,此幸存分支用1表示。每個時刻,經(jīng)過ACS選出64個狀態(tài)所對應的幸存分支,存入回溯存儲器。
3.3 BM模塊
回溯算法,由于已經(jīng)將每個時鐘下所有狀態(tài)的幸存分支存儲在回溯存儲器里,在達到譯碼深度DD后,開始對整個幸存分支進行回溯,如圖3所示。當達到回溯深度(Trace Back Depth)后,幸存路徑就開始合并,就開始輸出譯碼數(shù)據(jù)。
回溯指針是卷積碼編碼逆過程的狀態(tài)索引。回溯指針的具體建立過程如下:回溯開始時,由ACS中計算的最小度量狀態(tài)的狀態(tài)索引作為初始回溯指針,從回溯存儲器中讀出的所有64個狀態(tài)的幸存分支中,選出該回溯指針對應的幸存分支,形成下一個回溯指針,以此在回溯過程中循環(huán)向前,在每一時鐘中形成回溯指針。
由幸存分支的存儲表示可以得出,回溯指針m=D5D4D3D2D10,如果該指針對應的幸存分支為比特0,那么下一個回溯指針為i=0D5D4D3D2 D1,如果對應的幸存分支為比特1,那么下一個回溯指針為j=1D5D4D3D2D1;同理,回溯指針n=D5D4D3D2D11,如果幸存分支為比特0,下一個回溯指針為i=0D5D4D3D2D1,如果幸存分支為比特1,那么下一個回溯指針為j=1D5D4D3DzD1。
在該設(shè)計中,最重要的是譯碼深度(DD)的選擇,譯碼深度能夠決定所用的回溯存儲器得深度。結(jié)合數(shù)據(jù)前綴的固定延遲操作,采用一個單端口RAM(SPRAM),大小為96×128 b,如圖5所示。本文引用地址:http://www.butianyuan.cn/article/191081.htm
在一個譯碼周期里,數(shù)據(jù)前綴譯碼結(jié)束,從數(shù)據(jù)段(即圖3所示start state)開始,每2個時鐘往SPRAM里寫1次這兩個時鐘分別產(chǎn)生的幸存分支,共128 b,如圖5所示,即順序?qū)懭霐?shù)據(jù)R0R1,R2R3,R4R5,……,往SPRAM里寫數(shù)據(jù)共需192個時鐘。在達到譯碼深度后,開始回溯,讀出SPRAM里幸存分支,每個時鐘讀出兩個連續(xù)幸存分支,進行回溯指針的操作,在回溯深度后就會合并為一條幸存路徑,直到回溯完成,共需96個時鐘。在回溯的同時,如有數(shù)據(jù)輸入譯碼器,開始下一個周期的譯碼,在回溯操作從SPRAM讀數(shù)據(jù)的96個時鐘里,用來譯碼數(shù)據(jù)前綴,在數(shù)據(jù)段開始時往SPRAM里寫數(shù)據(jù),同時回溯操作的讀數(shù)據(jù)也已完畢。
從SPRAM里讀出的數(shù)據(jù)R(DL+5)~R6(DL為數(shù)據(jù)長度)中的幸存路徑,即為譯碼比特,輸出到輸出緩存中。根據(jù)系統(tǒng)需要,譯碼比特輸出到輸出緩存完成后,一次將最終的譯碼數(shù)據(jù)輸出。
4 FPGA驗證
該設(shè)計采用Verilog HDL語言編寫代碼,使用Quartus 9.0綜合,并在Altera公司的StratixⅢEP3SL340F151713型號的FPGA上驗證,該設(shè)計的譯碼器能達到135.78 MHz的速度,使用FPGA資源為4 992個ALUTs。
5 結(jié)語
本文設(shè)計的譯碼器,利用Tail-biting卷積碼的循環(huán)特性,采用固定延遲的算法與維特比算法結(jié)合,使其硬件實現(xiàn)更簡單,采用并行結(jié)構(gòu)以及簡單的回溯存儲器方法,顯著提高譯碼器速度。在設(shè)計各個子模塊時,優(yōu)化了硬件結(jié)構(gòu),減少占用資源和降低功耗,使其整體性能更優(yōu)。
本文設(shè)計的譯碼器在FPGA上實現(xiàn)和驗證,能達到135.78 MHz時鐘,該譯碼器達到了LTE系統(tǒng)所要求的122.88 MHz時鐘要求,達到了LTE系統(tǒng)所要求的整體性能,并已應用到ASIC芯片設(shè)計中。
評論