<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 大約束度Viterbi譯碼器中路徑存儲單元的設計

大約束度Viterbi譯碼器中路徑存儲單元的設計

作者: 時(shí)間:2007-08-15 來(lái)源:網(wǎng)絡(luò ) 收藏

1 引言

Viterbi譯碼算法是一種最大似然譯碼算法,目前廣泛應用于各種數據傳輸系統,特別是衛星通信和移動(dòng)通信系統中。近年來(lái)隨著(zhù)FPGA技術(shù)的迅速發(fā)展,使得基于FPGA實(shí)現Viterbi譯碼的算法成為研究的熱點(diǎn)。

由于Viterbi譯碼器的復雜性隨約束長(cháng)度k成指數增加,大約束度不但使Viterbi譯碼器復雜度大為增加,同時(shí)也限制了譯碼速度。而其中以加比選(Add Compareselect,ACS)運算為最主要的瓶頸,的遞歸運算使流水線(xiàn)結構的應用變得困難。本文以(2,1,9)碼為例,用FPGA實(shí)現大約束度Viterbi譯碼器,其中ACS設計采用串并結合的方法來(lái)兼顧面積和速度,并用流水線(xiàn)結構來(lái)提高譯碼速度,對路徑度量存儲則采用同址存儲方法,實(shí)現了在占用少量資源的前提下,提高譯碼速度。

2 算法簡(jiǎn)述及系統結構分析

Viterbi譯碼原理詳見(jiàn)文獻[1,2],下面僅作簡(jiǎn)要說(shuō)明。

圖1為(2,1,9)碼的2個(gè)狀態(tài)之間的狀態(tài)轉移圖。根據輸入路徑的不同(圖中實(shí)線(xiàn)表示輸入為0,虛線(xiàn)表示輸入為1),僅僅首位不同的兩個(gè)狀態(tài)可轉移到僅僅末位不同的兩個(gè)狀態(tài)。將所有狀態(tài)的狀態(tài)轉移圖按時(shí)間往前衍生,即可得到(2,1,9)碼的網(wǎng)格(Trellis)圖。Viterbi譯碼過(guò)程就是:根據接收,按照最大似然法則,分段地在網(wǎng)格圖上計算尋找有最大度量的路徑的過(guò)程。一般來(lái)說(shuō),維特比澤碼器主要有4個(gè)單元所組成,其結構框圖如圖2所示。

分支度量單元(BMU) 主要是計算分支度量值。所謂分支度量值就是碼字與接收碼之間的距離。

加-比較-選擇單元(ACSU) 主要是做路徑度量值與分支度量值的疊加,并決定幸存路徑度量值及決定位元(decision bit)。

路徑度量存儲單元(PMMU) 主要用來(lái)存儲幸存路徑度量值。

幸存路徑存儲單元(SMU) 主要用來(lái)存儲決定位元。

如圖2所示,接收先通過(guò)分支度量單元計算出各狀態(tài)所有分支度量,然后經(jīng)過(guò)ACS單元,將上一時(shí)刻的路徑度量值與當前時(shí)刻的分支度量值作加-比較-選擇等運算,計算出當前時(shí)刻的幸存路徑和路徑度量值,并找出決定位元(decision bit),把新的路徑度量值存儲到路徑度量存儲單元(PMMU),并把相應的幸存路徑的決定位元(de-cision bit)存儲到幸存路徑存儲單元(SMU),當譯碼到譯碼深度后,判決輸出單元輸出譯碼。由此可見(jiàn):

(1) 每計算一接收序列,所有狀態(tài)的路徑度量都要更新一次。若這些路徑度量存儲于一塊RAM中,則RAM讀寫(xiě)的次數為待譯卷積碼的狀態(tài)數,當卷積碼的約束度比較大時(shí),對RAM的讀寫(xiě)要求將會(huì )很高,很可能成為限制譯碼速度的瓶頸;

(2) 在A(yíng)CS單元,要完成路徑度量的累加,比較并選擇有最大度量的路徑,是算法實(shí)現的關(guān)鍵電路,也是資源耗費最大的部分。所以ACS單元的數目太多會(huì )大大增加譯碼器的硬件規模,太少則影響譯碼速度。因此,合理安排ACS單元與路徑度量RAM是提高譯碼速度,減少硬件消耗的關(guān)鍵所在。

針對問(wèn)題(1),本文從改進(jìn)Viterbi譯碼算法和路徑度量RAM分塊兩方面同時(shí)人手。首先,表示Viterbi算法過(guò)程的網(wǎng)格圖可以進(jìn)行分解與折疊。圖3所示為(2,1,9)卷積碼的部分網(wǎng)格圖的分解與折疊??梢钥闯稣郫B后,ACS計算時(shí)由讀寫(xiě)狀態(tài)路徑度量,得出一步后的更新結果,變?yōu)樽x寫(xiě)四狀態(tài)路徑度量,得出兩步后的更新結果。省去了中間路徑度量的讀寫(xiě),減少了RAM的讀寫(xiě)次數。

當然,這種分解與折疊很容易擴展為基8或基16的網(wǎng)格圖,RAM的讀寫(xiě)次數將進(jìn)一步減少,但此時(shí)ACS要同時(shí)處理8個(gè)或16個(gè)路徑度量,復雜性幾乎成指數增加,其計算速度也可能成為新的瓶頸。綜合考慮,本文采用4個(gè)基4算法,每次同時(shí)處理16個(gè)狀態(tài)。在基于4個(gè)基4算法的16個(gè)狀態(tài)路徑度量讀寫(xiě)中,本文將路徑度量RAM分為16塊,每塊存儲16個(gè)狀態(tài)的路徑度量。16塊RAM并行工作時(shí),對每塊RAM的讀寫(xiě)要求降為原來(lái)的1/16。

針對問(wèn)題(2),綜合考慮資源占用與譯碼速度,并兼顧基4算法的實(shí)現,決定采用4個(gè)基4蝶形單元并行工作,每個(gè)蝶形單元(ACS)串行處理16個(gè)狀態(tài)的串并結合方式。

在Viterbi譯碼器的實(shí)現過(guò)程中,計算當前時(shí)刻的路徑度量需用到前一時(shí)刻的路徑度量,所以必須對路徑度量加倍緩存。本文提出了一種同址的路徑度量存儲方法,可以減少存儲單元數量,而不影響譯碼速度。下面將詳述該方法的原理及實(shí)現過(guò)程。

3 路徑度量同址存儲的原理與實(shí)現

Viterbi譯碼器的復雜性及所需存儲器容量隨著(zhù)約束長(cháng)度K成指數增加,Viterbi譯碼器每解碼一位信息位就需對2K-1=28=256個(gè)寄存器進(jìn)行路徑度量,并對相應的存儲單元進(jìn)行讀寫(xiě),這樣度量路徑的存儲管理就成了提高譯碼速度的一個(gè)重要環(huán)節。

通常,計算出來(lái)的度量路徑可以存儲在RAM中或者是寄存器中。對于約束度很大的Viterbi譯碼器而言,在VLSI應用中使用RAM來(lái)存儲比使用寄存器更節省芯片面積,所以本文采用RAM存儲的方式。狀態(tài)度量的更新有兩種模式,一種是ping-pong模式,即乒乓模式,一種是同址存儲模式。乒乓模式是使用兩塊存儲器,一塊存儲前一時(shí)刻的路徑度量,另一塊則存儲更新后的路徑度量。當前時(shí)刻ACS從一塊存儲器中讀取前一時(shí)刻的路徑度量,然后進(jìn)行加比選運算,更新完的路徑度量存入另一塊存儲器中。這種模式的缺點(diǎn)是需要兩塊路徑度量存儲器,優(yōu)點(diǎn)是控制電路比較簡(jiǎn)單。另一種同址存儲模式只需要一塊路徑度量存儲器來(lái)進(jìn)行度量的更新,每一次的更新度量都覆蓋前一時(shí)刻的路徑度量。因此這種模式所需的存儲器容量只是乒乓模式的一半。

在維特比算法中,譯碼狀態(tài)的轉移導致路徑度量的讀出和寫(xiě)人狀態(tài)不同,這樣在用FPGA實(shí)現時(shí),可以用雙口RAM來(lái)實(shí)現。同時(shí),為配合4個(gè)基4蝶形單元同時(shí)讀出和寫(xiě)入16個(gè)路徑度量的需要,應將各個(gè)路徑狀態(tài)分組,因此,我們采用16塊雙口Block RAM。

根據上面分析結果,16塊RAM的RAM1~RAM16分別存儲狀態(tài)的路徑度量,這里以狀態(tài)來(lái)代替其相應的路徑度量。設第n時(shí)刻路徑度量在各RAM的存儲示意如表1所示。

(1) 從n時(shí)刻到n+1時(shí)刻路徑度量更新過(guò)程如下:

首先,讀表1中RAM1,5,9,13,RAM2,6,10,14,RAM3,7,11,15,RAM4,8,12,16的數據,對應第1~第4個(gè)基4;例如從RAM1,5,9,13中讀取第0位的狀態(tài)0,64,128,192,經(jīng)過(guò)第1個(gè)基4單元運算后,得到狀態(tài)0,1,2,3,存入原來(lái)的狀態(tài)0,64,128,192的位置(如表2所示)。這樣從第1~16位依次讀取數據,經(jīng)過(guò)相應的基4蝶形單元運算,寫(xiě)入RAM1~RAM16中相應的位置,這樣,從n時(shí)刻到n+1時(shí)刻的所有狀態(tài)的路徑度量都得到了更新,但存儲于各RAM中的狀態(tài)位置發(fā)生了變化,其路徑度量如表2所示。

(2) 從n+l時(shí)刻到n+2時(shí)刻的路徑度量的更新

此時(shí),讀表2中RAM1,2,3,4,RAM5,6,7,8,RAM9,10,11,12,RAM13,14,15,16的數據,對應第1~第4個(gè)基4。例如讀RAM1~4的第0,4,8,2位的狀態(tài)0,64,128,192,經(jīng)過(guò)第一個(gè)基4單元運算后,得到數據0,1,2,3,存入原來(lái)的狀態(tài)0,64,128,192的位置(如表3所示)。讀寫(xiě)的過(guò)程與寫(xiě)回RAM時(shí)的原理同上(同址存儲),不同之處是讀寫(xiě)RAM時(shí)的地址廁序,其讀寫(xiě)地址如表5所示。更新后的n+2時(shí)刻的路徑度量存儲于各RAM的示意圖如表3所示。

(3) 從n+2時(shí)刻到n+3時(shí)刻的路徑度量的更新

此時(shí),讀表3中RAM1,2,3,4,RAM5,6,7,8,RAM9,10,11,12,RAM13,14,15,16的數據,對應第1~第4個(gè)基4。例如讀RAM1~4的第0,1,2,3位的狀態(tài)0,64,128,192,經(jīng)過(guò)第一個(gè)基4單元運算后,得到狀態(tài)0,1,2,3,存入原來(lái)的狀態(tài)0,64,128,192的位置(如表4所示)。讀寫(xiě)的過(guò)程與寫(xiě)回RAM時(shí)的原理同上(同址存儲),不同之處是讀寫(xiě)RAM時(shí)的地址順序,其讀寫(xiě)地址如表6所示。更新后的n+3時(shí)刻的路徑度量存儲于各RAM的示意圖如表3所示。

同理,從n+3時(shí)刻到n+4時(shí)刻的路徑度量的更新可得到如表1所示的形式??梢园l(fā)現,表4運算后的路徑度量在各RAM的存儲結構與表1完全相同。也就是說(shuō)以后的過(guò)程只是上面四步的循環(huán)而已。

本文在FPGA實(shí)現時(shí),路徑度量RAM采用了FPGA內的雙口Block RAM,故可在同一時(shí)間內對存儲器執行讀和寫(xiě)操作,因此可有效地降低讀寫(xiě)次數和提高譯碼速度。RAM讀寫(xiě)地址的產(chǎn)生:RAM1~RAM16的讀地址用查找表產(chǎn)生。而RAM1~RAM16的寫(xiě)地址分別為讀地址延時(shí)1個(gè)時(shí)鐘得到,用FPGA實(shí)現非常簡(jiǎn)單。

4 仿真與實(shí)現

根據本文提出的結構,用Verilog語(yǔ)言完成上述結構設計,用ModelSim 6.0a對其進(jìn)行波形仿真,地址產(chǎn)生的波形如圖4所示。

選擇Xilinx spartan3為目標器件,利用ISE軟件完成設計的綜合及布局布線(xiàn)等設計流程,圖5列出了XilinxISE對本設計提供的綜合布線(xiàn)參數。

5 結 語(yǔ)

本文重點(diǎn)從FPGA實(shí)現的角度對Viterbi譯碼器的路徑度量進(jìn)行了討論,從譯碼速度和硬件資源消耗兩方面考慮,探討了Viterbi譯碼器的優(yōu)化,提出了一種串并行結構和同址路徑度量存儲的方法,顯著(zhù)提高了譯碼器速度和減小了電路規模,并以(2,1,9)卷積碼為例給出了實(shí)現過(guò)程。該譯碼器通過(guò)了ModelSim 6.0a的功能仿真,并已在ISE 7.1i環(huán)境中,用Xilinx的spartan3實(shí)現。對實(shí)現的結果進(jìn)行了復雜度分析,發(fā)現資源的利用相當合理,其不足之處就是連線(xiàn)較多。



關(guān)鍵詞: 卷積 序列 周期 硬件

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>