卷積交織和解交織原理簡介
在DVB-C系統(tǒng)當中,實際信道中的突發(fā)錯誤往往是由脈沖干擾,、多徑衰落引起的,在統(tǒng)計上是相關的,,所以一旦出現(xiàn)不能糾正的錯誤時,,這種錯誤將連續(xù)存在。因此在DVB-C系統(tǒng)里,,采用了卷積交織來解決這種問題,。它以一定規(guī)律擾亂源符號數(shù)據(jù)的時間順序,使其相關性減弱,,然后將其送入信道,,解交織器按相反規(guī)律恢復出源符號數(shù)據(jù)。
DVB-C的卷積交織和解交織原理為:交織由I=12(I為交織深度)個分支構(gòu)成,。每個分支的延時逐漸遞增,,遞增的單元數(shù)M=n/I=204/12=17(M為交織基數(shù))。這里的數(shù)據(jù)單位為字節(jié),。0支路無延時,,1支路延時17個符號周期,11支路則延時l7×11個符號周期,。輸入端有一開關隨著時間推移依次連接各個延時支路,,輸出端有一開關與輸入端一一對應,同步連接各延時支路,。
圖1 解交織器的實現(xiàn)框圖
圖2 解交織器的Modelsim仿真圖
解交織器的實現(xiàn)
解交織器的FPGA實現(xiàn)原理
本文采用RAM分區(qū)循環(huán)移位
法來實現(xiàn),,因為RAM里面暫存一位數(shù)據(jù),只需要用一個邏輯門大小的資源,,比基本寄存器暫存一位數(shù)據(jù)需要12個邏輯門大小的資源要優(yōu)化很多,。用RAM分區(qū)循環(huán)移位法來實現(xiàn)解交織器,就是把RAM分成11個區(qū),。每個區(qū)的大小為(單位為字節(jié)):
Ni=M*(I-i-1)(i=0,,1,2, …,(I-1))
這里i為RAM所分區(qū)的區(qū)號。
因為11支路不需要延時,,所以 RAM的11分區(qū)大小即N11為0,。本文在RAM前面設置一個地址控制器,這是解交織器關鍵的一步,。RAM每區(qū)有一個首地址和區(qū)內(nèi)偏移地址,,分別用一個寄存器來存儲。在地址控制器里產(chǎn)生每區(qū)的首地址和區(qū)內(nèi)偏移地址,,從而進一步產(chǎn)生RAM的讀寫地址,。
解交織器的FPGA實現(xiàn)
把解交織器的深度I和基數(shù)M設成參數(shù),以增強程序的通用性。如果以后設計的解交織器的系數(shù)I和M需要改動,,只要把參數(shù)值重新設置一下就可以了,,不需要改動程序。由前面的計算可知,,解交織器總共需要延時的比特數(shù),,也就是RAM的大小應該為8976比特。
可以用下面一段程序?qū)崿F(xiàn)首地址的初始化:
FirstAddr[0]=0;
for(i=1;i<(I-1);i=i+1)
FirstAddr[i]=(I-i)*M+FirstAddr[i-1];
也就是說0~11支路的首地址在RAM中分別為0,,187,,357,510,,646,,765,867,,952,,1020,1071,,1105,。
RAM每區(qū)的字節(jié)數(shù)可以由參數(shù)來表示,即為(I-i-1)*M,,i為分支號,。
每區(qū)內(nèi)偏移地址SectAddr[i]初始化為0,每寫入一個數(shù)據(jù),,遞增1并與由參數(shù)表示的每區(qū)的字節(jié)數(shù)進行比較,,若兩數(shù)相等,則SectAddr[i]重新設為零,,保證區(qū)內(nèi)偏移地址在每區(qū)內(nèi)循環(huán)移動,。
由上可知,RAM每區(qū)的讀寫地址為:FirstAddr[i]+SectAddr[i](i為RAM分區(qū)號)
圖1所示的就是由Altera MegaWizard工具配置的雙口RAM,。RAM每區(qū)的讀寫地址相同,,也就是先讀出給定地址單元的數(shù)據(jù)后,再寫入新的數(shù)據(jù),。這里要同時發(fā)生讀寫操作,,所以要使用雙口RAM。每隔一個時鐘周期,,RAM讀寫指針就跳到下一個RAM區(qū),,這樣讀寫指針在RAM的11個區(qū)循環(huán)移動,實現(xiàn)解交織,。
圖2為解交織器在Mentor公司的Modelsim SE環(huán)境下的邏輯仿真圖,。Clk為時鐘信號,,Reset為異步復位信號,ClkEn為時鐘使能信號,,高電平有效,,F(xiàn)rameFirstIn為幀同步信號,高電平有效,。DeinterleaverIn為輸入數(shù)據(jù),。設計時要注意數(shù)據(jù)同步問題,要不然會造成數(shù)據(jù)錯位,,導致設計的失敗,。DeinterleaverIn為了在selector模塊輸入時和RAM的輸出數(shù)據(jù)q保持同步,,要作相應的延時,,同步延時后DataIn4,同理,,對應地RAM的輸入數(shù)據(jù)DataIn1,,selector模塊的使能信號ClkEn4等也是經(jīng)過同步處理得到。Flag為selector模塊的選擇控制信號,,當Flag信號為0~10時,,選擇RAM的輸出數(shù)據(jù)q作為輸出,而當Flag=11時,,則選擇DeinterleaverIn經(jīng)過同步處理后的數(shù)據(jù)DataIn4作為輸出,,從而保證在解交織器的11支路實現(xiàn)無延時輸出。在解交織器的最前面輸出的字節(jié)有些是無效的,,加一個DataEffect模塊是為了等全部字節(jié)都有效時,,才把FrameFirstOut信號置高,告訴后面的模塊數(shù)據(jù)開始全部有效,。
從資源利用方面考慮,,使用RAM分區(qū)循環(huán)移位法來實現(xiàn)DVB-C解交織器比全部用基本寄存器或用配置FIFO的方法來實現(xiàn)要優(yōu)化得多。
為了更好地驗證,,本文把設計在synopsys 公司的synplify pro軟件環(huán)境下進行綜合,,選用Altera公司的Cyclone EP1C12Q240C8器件。因為使用了軟核IP,,所以再把生成的*.vqm文件導入synopsys公司的QuartusII 軟件進行再綜合,,選擇同樣的器件類型和型號,結(jié)果說明采用雙口RAM設計所使用的邏輯單元較少,,而且使用的8976比特RAM資源占用了Cyclone器件中的3個M4K,,只有全部存儲資源的3%。
結(jié)語
雖然采用卷積交織會在剛開始傳輸數(shù)據(jù)的時候輸出一些無效數(shù)據(jù),,在系統(tǒng)中引入一定的延時,,但是它能把突發(fā)干擾造成的突發(fā)錯誤分散成隨機錯誤,,利于RS糾錯,這樣一權(quán)衡,,有延時也是很值得的,。本文利用EDA工具完成解交織器的設計,并且采用Verilog和原理圖協(xié)同輸入的設計方法,,大大提高了設計效率,。這里設計的解交織器具有通用性,如果要用不同深度I和基數(shù)M的解交織器,,只要重設程序里的參數(shù)值就可以
了,,非常方便。