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