用塊RAM實(shí)現(xiàn)卷積交織解交織
關(guān)鍵詞: 卷積交織-解交織;FIFO移位寄存器;RAM
為了糾正數(shù)據(jù)在信道中傳輸時(shí)由于受到突發(fā)干擾而產(chǎn)生的突發(fā)錯(cuò)誤,常用的方法是采用交織-解交織措施,也就是通過(guò)在發(fā)射端將所要發(fā)射的數(shù)據(jù)通過(guò)交織將其順序打亂,接收后解調(diào)的時(shí)隙輸出經(jīng)過(guò)一次解交織的反向處理重新組合,使其變?yōu)樵瓉?lái)順序的序列,這樣就可以將相鄰的突發(fā)錯(cuò)誤分散到糾錯(cuò)解碼可以糾錯(cuò)的范圍。常用兩種方法來(lái)實(shí)現(xiàn)交織-解交織過(guò)程,分別被稱(chēng)為“分組交織”和“卷積交織”。但是“卷積交織-解交織”的總時(shí)延約為“分組交織-解交織”的一半,因此在現(xiàn)代的許多通信系統(tǒng)中,常常采用“卷積交織-解交織器”來(lái)對(duì)抗突發(fā)干擾。
在傳統(tǒng)的設(shè)計(jì)中,常常采用FIFO移位寄存器來(lái)完成“卷積交織-解交織器”的實(shí)現(xiàn)。但是當(dāng)交織-解交織的支路(branch)較多時(shí),使用FIFO移位寄存器就顯得雜亂和零散,時(shí)鐘管理比較繁瑣,更重要的是在芯片中會(huì)占用很多資源,不利于FPGA和ASIC的設(shè)計(jì)和制作。
本文詳細(xì)描述了一種用整塊RAM來(lái)代替多個(gè)FIFO移位寄存器實(shí)現(xiàn)卷積交織-解交織的方法。在此基礎(chǔ)上以J.83標(biāo)準(zhǔn)為例找出了用塊RAM實(shí)現(xiàn)卷積-解交織的一般規(guī)律,這樣就可以大大簡(jiǎn)化實(shí)現(xiàn)時(shí)的時(shí)鐘和數(shù)據(jù)管理,減小實(shí)現(xiàn)復(fù)雜程度,節(jié)省系統(tǒng)資源,降低成本。
FIFO移位寄存器的操作原理
下面以長(zhǎng)度為8的FIFO移位寄存器為例來(lái)說(shuō)明其操作原理。如圖1所示,兩邊的箭頭表示數(shù)據(jù)移動(dòng)的方向。A,B,C,D表示被處理的數(shù)據(jù),1,2..8表示FIFO移位寄存器中的存儲(chǔ)單元。在每一個(gè)時(shí)鐘上升沿到來(lái)時(shí),數(shù)據(jù)向右移動(dòng)一個(gè)存儲(chǔ)單元。這樣在時(shí)鐘的控制下,數(shù)據(jù)從左至右通過(guò)存儲(chǔ)單元。
使用RAM實(shí)現(xiàn)FIFO移位寄存器的處理過(guò)程
為了達(dá)到與FIFO移位寄存器處理的同樣結(jié)果,以便于數(shù)據(jù)和操作時(shí)鐘的管理,使用的RAM存儲(chǔ)單元的長(zhǎng)度等于FIFO移位寄存器中存儲(chǔ)單元的長(zhǎng)度加1。讀地址比寫(xiě)地址超前一個(gè)指針數(shù),即在第n個(gè)時(shí)鐘到來(lái)時(shí)向RAM中的第k-1個(gè)單元寫(xiě)數(shù)據(jù),同時(shí)從第k個(gè)單元讀數(shù)據(jù)。在第n+1個(gè)時(shí)鐘到來(lái)時(shí),向RAM中的第k個(gè)單元寫(xiě)數(shù)據(jù),同時(shí)從第k+1個(gè)存儲(chǔ)器單元讀數(shù)據(jù)。 讀寫(xiě)時(shí)鐘都是執(zhí)行同步操作。這樣在時(shí)鐘控制下執(zhí)行所有的操作。在系統(tǒng)開(kāi)始工作的第一個(gè)時(shí)鐘到來(lái)時(shí),此時(shí)寫(xiě)操作指針指向第一個(gè)RAM單元,同時(shí)的讀數(shù)據(jù)指針指向第二RAM單元(如圖2所示)。
用塊RAM代替FIFO移位寄存器實(shí)現(xiàn)卷積交織-解交織
圖1 FIFO移位寄存器的操作原理
圖2 用RAM代替FIFO移位寄存器的操作過(guò)程
圖3 J.83標(biāo)準(zhǔn)中用FIFO移位寄存器實(shí)現(xiàn)卷積交織-解交織結(jié)構(gòu)圖
圖4 卷積交織-解交織讀寫(xiě)地址產(chǎn)生圖
下面以J.83標(biāo)準(zhǔn)中的卷積交織和解交織器為例來(lái)說(shuō)明。圖3是J.83中用FIFO移位寄存器實(shí)現(xiàn)卷積交織和解交織的結(jié)構(gòu)圖。并行輸入數(shù)據(jù)比特的寬度為8bit。從圖中可以看出,交織-解交織器由I個(gè)分支構(gòu)成,從0到I-1,I=12。每個(gè)分支的延遲單元數(shù)為0、J、2J、......(I-1)J, J=17。每個(gè)分支延遲單元數(shù)相差為J,所以對(duì)所有輸入數(shù)據(jù)來(lái)說(shuō)每個(gè)分支的延遲數(shù)是不一樣的,結(jié)果造成對(duì)輸入數(shù)據(jù)的延遲不一樣,從而完成了交織過(guò)程。
通過(guò)上面的分析可以看出:用RAM來(lái)代替FIFO移位寄存器完成相同的功能。在FPGA和ASIC設(shè)計(jì)中就可以用單個(gè)塊RAM代替多個(gè)FIFO移位寄存器。根據(jù)J.83標(biāo)準(zhǔn)中的結(jié)構(gòu)圖可以看出,將整個(gè)塊RAM按照“FIFO移位寄存器的相應(yīng)存儲(chǔ)單元+1”的大小劃分成I個(gè)存儲(chǔ)小塊單元。第0個(gè)存儲(chǔ)小塊大小為1,第一個(gè)存儲(chǔ)小塊大小為J+1,第二個(gè)為2J+1,依此類(lèi)推,第I-1個(gè)存儲(chǔ)塊的大小為(I-1)J+1。在FIFO移位寄存器實(shí)現(xiàn)中,由于每隔一個(gè)時(shí)鐘周期,讀寫(xiě)指針都要跳到下一個(gè)FIFO移位寄存器分支,以實(shí)現(xiàn)相應(yīng)的功能,對(duì)于塊RAM的存儲(chǔ)小塊單元來(lái)說(shuō)就是從一個(gè)存儲(chǔ)小塊單元跳到另一個(gè)存儲(chǔ)小塊單元,以實(shí)現(xiàn)與FIFO移位寄存器相同的功能。
由J.83的例子可以看出,訪問(wèn)塊RAM的讀寫(xiě)指針由三個(gè)部分組成,第一部分為指示存儲(chǔ)小塊單元指針,第二部分為小塊單元內(nèi)偏移指針,將這兩部分指針相加,得到寫(xiě)數(shù)據(jù)操作的指針。第三部分是讀指針與寫(xiě)指針相比滯后一個(gè)時(shí)鐘周期,并且讀地址是寫(xiě)數(shù)據(jù)指針加1,產(chǎn)生RAM的相應(yīng)讀指針。以便循環(huán)讀取存儲(chǔ)器中的數(shù)據(jù)。塊RAM就根據(jù)這些相應(yīng)的讀寫(xiě)指針,寫(xiě)入和讀出相應(yīng)的數(shù)據(jù),從而完成了卷積交織。
根據(jù)同樣的道理可以構(gòu)造出卷積解交織的塊RAM實(shí)現(xiàn)方法。從而可以推廣到一般的卷積交織-解交織的實(shí)現(xiàn)方法,如圖4所示。此方法包括下面幾部分:小塊存儲(chǔ)單元切換控制、小塊內(nèi)偏移指針、讀時(shí)鐘延遲一個(gè)周期以及小塊內(nèi)偏移指針+1。
小塊存儲(chǔ)單元切換控制用來(lái)選擇需要進(jìn)入的塊RAM中的小塊存儲(chǔ)單元;
小塊內(nèi)偏移指針是用來(lái)產(chǎn)生在小塊存儲(chǔ)單元的偏移地址,它與小塊存儲(chǔ)單元切換控制所指示的地址相加,可以得到小塊內(nèi)存儲(chǔ)單元的寫(xiě)數(shù)據(jù)地址;
小塊內(nèi)偏移指針+1:將小塊存儲(chǔ)單元RAM寫(xiě)數(shù)據(jù)地址+1,就產(chǎn)生了讀數(shù)據(jù)的指針?!?/P>
參考文獻(xiàn)
1 ITU-T J.83 standardization
2 Xilinx datasheet. "synchronous FIFO".
3 Xilinx datasheet. “Dual-port Block Memory”
評(píng)論