藺吉順,劉東華
(內蒙古民族大學機械工程學院,內蒙古 通遼 028000)
?
CCSDS標準Turbo碼編碼器的FPGA設計與實現*
藺吉順*,劉東華
(內蒙古民族大學機械工程學院,內蒙古 通遼 028000)
Turbo碼因其具有優異的編譯碼性能而成為國際空間數據咨詢委員會(CCSDS)建議的衛星通信和深空通信編碼標準。針對CCSDS標準Turbo碼結構,設計了支持多碼率、多幀長的優化編碼器FPGA實現結構并在Altera Stratix Ⅲ系列FPGA芯片上進行了驗證,在資源占用很小的情況下達到了100 MHz以上的處理速率,該編碼器已應用于某衛星上實現10 Mbit/s以上速率的數據編碼。
Turbo碼;編碼器;CCSDS;FPGA
Turbo碼[1-2]是1993年由法國不列顛通信大學的兩位教授Berrou C和Glavieux A提出的,它因為很好地符合了Shannon有噪信道編碼定理的隨機性編譯碼條件而獲得了接近Shannon理論極限的性能。Turbo碼通過迭代譯碼提高性能,通常譯碼延時較大,不適合實時通信系統應用。但對于通信距離較遠、傳輸延時和信號衰減都比較大的通信系統,Turbo碼具有非常好的應用潛力[3]。因此,CCSDS將Turbo碼作為衛星通信和深空通信的編碼標準[4]并在遙測應用中得到了很好的應用。在遙測系統中,Turbo碼編碼器運行在航天器上,因此對穩定性和片上資源使用規定較為嚴格。此設計研究了一種優化的Turbo編碼器的FPGA實現結構,支持CCSDS標準Turbo碼的多碼率、多幀長編碼。
CCSDS標準建議的Turbo碼編碼結構如圖1所示。

圖1 CCSDS建議的Turbo碼編碼器
該編碼器采用系統并行級聯編碼形式,由兩個狀態數為16(4個移位寄存器)的遞歸系統卷積碼(RSC碼)組成。編碼時每個輸入幀的k個信息比特保存在一個幀緩存器中,然后按照不同的順序讀出送到兩個分量編碼器。分量編碼器1的輸入是未置亂順序的信息比特(用a表示),而分量編碼器2接收相同的信息比特,但是順序是經過交織器置亂之后的(用b表示)。a的讀出尋址是一個簡單的計數器,而b的讀出尋址由后面定義的交織算法確定。
編碼時兩個分量碼都初始化為寄存器全零,且均運行k+4比特次,得到長度為(k+4)/R的編碼符號,其中k是編碼信息塊長度,R是規則化碼率。對于前面的k比特次,輸入開關在下面位置,接收輸入數據。對于最后4比特次,開關移到上面位置,接收移位寄存器的反饋,實現編碼網格圖歸零。在編碼器網格圖歸零期間,編碼器繼續輸出非零編碼符號。特別地,“系統的未編碼”輸出(out 0a)包括4個來自反饋線的附加比特,補充到k個信息比特之后。
該Turbo碼支持1/2、1/3、1/4和1/6規則化碼率,通過校驗輸出的取舍實現。支持的編碼數據幀長度包括1784、3568、7136和8920。交織器采用固定形式,通過給定算法計算實現。編碼時根據選擇的碼率,編碼符號從上到下復用輸出線,得到Turbo碼的碼塊,為通信同步,在每個Turbo碼碼塊前面添加輔助同步標記(ASM),幀同步器通過檢測ASM實現同步。添加了ASM的Turbo碼碼塊結構如圖2所示。

圖2 添加了ASM的Turbo碼碼塊結構
其中添加的ASM對于每種碼率長度不同,但取值是固定的。
分量碼采用遞歸系統卷積碼的形式,其編碼輸出不僅與當前時刻的輸入有關,還與當前編碼器中移位寄存器的內容有關,在每個輸入比特編碼完成后還要更新移位寄存器的狀態[5]。傳統編碼過程包括以下幾步:
①獲取輸入信息比特的值u和各移位寄存器的內容Di,i=0,1,2,3;
②計算x=u+D2+D3;
③計算校驗輸出:1a=x+D0+D2+D3;
2a=x+D1+D3;3a=x+D0+D1+D2+D3;
④更新寄存器狀態:D2→D3;D1→D2;D0→D1;x→D0;D2→D3;
在每幀編碼結束時還要考慮對結尾比特的編碼,使編碼器狀態歸零。
上述編碼過程中,涉及多個模2加法運算,不利于硬件實現。
考慮到分量碼編碼器的移位寄存器狀態數有限,且輸入僅有“0”和“1”兩種情況,編碼輸出與寄存器狀態有關,而寄存器狀態變化與當前輸入和D2、D3兩個移位寄存器的輸出有關,輸入和寄存器狀態之間的關系是確定的,因此考慮建立查找表,通過查表實現編碼過程。建立二維查找表EnOuti[2][NSTATE],i=1,2,3,其中第1維表示輸入比特的0、1值,第2維表示編碼器的狀態,共16個值。具體地,
EnOut1[2][NSTATE]={ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0};
EnOut2[2][NSTATE]={ 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0;1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1};
EnOut3[2][NSTATE]={ 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0;1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1};
同樣,建立編碼器狀態查找表
NextState[2][NSTATE]={0,8,9,1,2,10,11,3,4,12,13,5,6,14,15,7;8,0,1,9,10,2,3,11,12,4,5,13,14,6,7,15};
從而編碼過程就完全根據當前輸入和編碼器的狀態通過查表得到編碼輸出和編碼器狀態更新,對結尾比特的編碼也只需要通過查表各表的第1行實現。整個編碼過程不需要任何計算。
3.1 總體設計
根據CCSDS建議的Turbo碼編碼器結構,設計的編碼器要支持1/2、1/3、1/4、1/6碼率和1784、3568、7136、8920和16384等信息塊長度編碼,其控制比較復雜[6-8]。圖3給出了編碼器的FPGA總體設計框圖。

圖3 CCSDS標準Turbo碼編碼器FPGA總體結構
其中輸入信號clk為系統時鐘,Din為待編碼數據,Ilen[1:0]為數據幀長(取值00、01、10、11分別對應幀長1784、3568、7136和8920),Dclk為數據速率,rate[1:0]為編碼速率(取值00、01、10、11分別對應碼率1/2、1/3、1/4和1/6)。輸出Dout為編碼輸出,Flag為數據準備好信號。
編碼器工作時,數據Din以Dclk頻率進入編碼器,由于Turbo碼的編碼是基于數據塊(幀)的,因此首先將數據緩存。為實現同步控制,這里假設輸入數據信息塊之間存在間隔,間隔持續時間滿足以Dclk速率輸出編碼結果,若設數據時鐘Dclk頻率為fMHz,待編碼信息塊長度為k,編碼碼率為r,則輸入待編碼信息塊之間的間隔為
(1)
其中(k+4)/rf是以數據時鐘頻率輸出一幀編碼數據的時間,32/rf是輸出ASM的時間。
輸入數據存儲器的長度設置為最大待編碼信息塊長度,單比特位寬。編碼控制模塊根據輸入控制計數器,并與根據參數Ilen計算得到的幀長比較,完成一幀數據存儲時控制RSC編碼模塊開始編碼,RSC編碼模塊每時刻輸出4個編碼比特(out0a、out1a、out2a和out3a)。刪余模塊根據碼率參數rate的值從輸出中進行保留的校驗比特存入輸出存儲器,第1個分量碼編碼完成后反饋控制信號給編碼控制模塊。編碼控制模塊控制再次讀取輸入存儲器中的待編碼數據,先按順序讀取交織映射模塊的值(交織映射模塊按解交織順序輸出待編碼比特位置),然后根據交織映射模塊的輸出值作為地址讀取輸入存儲器的數據,即實現輸入信息塊的交織,然后與第1個分量碼的編碼過程相同,結果寫入輸出緩存,由于數據時鐘低于系統時鐘,因此在一幀待編碼信息塊送入輸入存儲器的時間內可以完成兩次RSC編碼,因此這里兩個RSC分量編碼器重用一個模塊,節省資源。一幀數據編碼完成后,輸出控制模塊根據編碼參數rate的值和碼塊結構,輸出預存在輸出存儲器中的ASM,通過輸出存儲地址選擇依次輸出編碼結果。
3.2 分量編碼器設計
如前所示,分量編碼器編碼過程通過查找表實現,編碼時兩個分量碼不能同時編碼,這是因為在信息序列開始輸入時即可進行分量碼1的編碼,而分量碼2的編碼必須等到整個信息序列輸入后根據交織映射關系讀取信息數據進行編碼,兩個分量碼的編碼是順序進行的,可以共用一組查找表。
分量編碼器的功能仿真結果如圖4所示。

圖4 分量碼編碼仿真結果
3.3 交織器設計
Turbo碼編碼器中交織器的作用是對輸入信息塊中比特位置進行置亂,進而改善Turbo碼的輸出碼重。CCSDS建議中給出了交織算法,其中使用了大量的乘除和取模運算,如果直接用硬件實現,電路則過于龐大和復雜,鑒于在Turbo碼編譯碼過程中,交織映射關系是不變的,因此可以用交織映射表來實現。將按照交織算法得到的映射表存儲在FPGA芯片的ROM中,編碼時先讀取該ROM中的值,即得到交織后信息塊比特的位置值,然后以位置值作為地址,從輸入存儲器中讀取信息塊比特進行編碼。
實現時支持4種長度信息塊的交織,考慮到Stratix Ⅲ系列芯片提供M9K和M144K兩種類型的存儲器,為實現資源優化使用,將兩個或多個映射表合并成一個映射表,使用時根據編碼參數Ilen選擇不同的初始讀地址。若將多個映射表合并,則ROM存儲器的地址寬度為
AddrWidth=|log2N1+N2+…|+1
(2)
數據寬度為
DataWidth=|log2(max(N1,N2,…)|+1
(3)
其中Ni,i=1,2,3,4表示數據幀長。
圖5給出了交織器的功能仿真結果。

圖5 交織器功能仿真結果
編碼控制模塊的主要功能是從輸入存儲器中順序或按交織順序讀取待編碼信息比特送入RSC分量編碼器。編碼控制模塊主要由計數器和選擇器組成,電路結構框圖如圖6所示。

圖6 編碼控制模塊電路結構框圖
選擇器由兩個開關電路組成。第1個分量碼編碼時,開關1連接到節點a,開關2打開,直接將計數器的值送到輸入存儲器地址總線,按輸入數據順序讀出;第2個分量碼編碼時,開關1連接到節點b,開關2閉合,即先將計數器的輸出送到存儲交織映射表的ROM地址總線,再將從ROM讀出的交織地址送到輸入存儲器地址總線,按交織順序讀出。
刪余模塊實際上就是選擇器,根據編碼參數rate選擇保留分量編碼器輸出的校驗比特。考慮到對保留校驗比特最多的1/6碼率的支持,為簡化設計,將分量編碼器輸出的1個系統比特序列和3個校驗比特序列全部保存,然后在輸出控制模塊根據Rate參數選擇信息比特和校驗比特串行輸出。輸出控制通過選擇器實現,根據編碼參數rate,從輸出緩存中選擇編碼比特串行輸出,另外,在每幀編碼比特輸出之前還要輸出ASM。ASM數據可以采用類似交織映射表的處理方式,存儲在FPGA芯片的ROM中,不同碼率條件下ASM數據長度和值不同,為節省存儲資源,可以將4種碼率下的ASM數據依次寫入一個ASM數據表,編碼輸出時根據rate參數選擇讀取的初始地址和讀取長度。輸出控制模塊的電路結構框圖如圖7所示。

圖7 輸出控制模塊電路結構框圖
編碼輸出以數據時鐘Dclk為周期,根據碼率參數rate的值選擇輸出數據。根據頂層模塊給出的一幀編碼結束標記開始輸出,首先輸出ASM,開關1根據參數rate的值選擇連接點,開關2連接到節點1,并根據計數器的值讀取ASM串行送到Dout。ASM輸出完成后,開關2根據參數rate的值依次選擇節點2~7中的若干個依次輸出。以1/2碼率Turbo碼的編碼為例,開關1連接到節點1,開始編碼輸出時,開關2斷開,開關3連接到節點1,前64個Dclk周期通過計數器尋址從1/2碼率ASM中依次串行輸出ASM數據,然后開關2連接到節點1,開關3連接到節點2,輸出分量編碼器1的第1個系統比特(out0a[0]),即系統比特;下一時刻開關3連接到節點3,輸出分量編碼器1的第1個校驗比特(out1a[0]);下一時刻開關3連接到節點2,輸出分量編碼器1的第2個系統比特(out0a[1]);下一時刻開關2連接到節點2,開關3連接到節點6,輸出分量編碼器2的第2個校驗比特(out1b[1])。依此類推,即完成編碼數據的串行輸出。
以信息塊長為3568、碼率為1/4的Turbo碼編碼器為例,其編碼輸出的功能仿真結果如圖8所示。

圖8 Turbo碼編碼輸出功能仿真結果
圖8(a)給出的是一幀編碼結束后開始輸出ASM的功能仿真結果,其中計數器counter的初始地址為160,這是因為將4種碼率條件下的ASM依次寫入了一個存儲器,1/2、1/3、1/4和1/6碼率下ASM的長度分別為64、96、128和192,因此對于1/4碼率,讀取ASM的初始地址為64+96=160。DoutRdy為編碼輸出使能信號,輸出標記在第1個輸出比特時刻置位高電平。圖8(b)給出的是ASM讀完后開始輸出編碼信息比特和校驗比特,通過輸出控制,實現了編碼輸出的校驗比特選擇和串行化輸出。
對所設計的CCSDS標準Turbo編碼器在Altera Stratix Ⅲ系列FPGA芯片上進行了實現驗證,RTL圖如圖9所示。

圖9 Turbo編碼器RTL圖
資源使用情況如圖10所示。

圖10 Turbo編碼器占用資源統計
Turbo碼第1次在實踐中證明了接近Shannon限的好碼的存在,CCSDS將Turbo碼作為衛星通信和深空通信的信道編碼方案建議進一步證明了Turbo碼的應用潛力。此Turbo編碼器的設計完全符合CCSDS標準,并已成功應用于某衛星通信系統中,證明了其可用性和穩定性。后續將繼續研究通用Turbo碼編碼器的設計和實現方法,使其具有更廣泛的參考意義和工程應用價值。
[1]Berrou C,Glavieux A,Thitimajshima P. Near Shannon Limit Error-Correcting Coding and Decoding:Turbo-Codes(1)[C]//Proc ICC’93. Geneva,Switzerland. 1993:1064-1074.
[2]祁棟升,陳自力,白勇博. Turbo碼編碼器的FPGA設計與實現[J]. 鄭州輕工業學院學報(自然科學版),2010,25(6):115-117.
[3]Divsalar D,Pollara F. Turbo Codes for Deep-Space Communications[R]. JPL TDA Progress Report,42-120. Feb. 1995.
[4]CCSDS. TM Synchronization and Channel Coding-Summary of Concept and Rationale[R]. Report Concerning Space Data System Standards. June 2006.
[5]王新梅,肖國鎮. 糾錯碼——原理與方法[M]. 西安:西安電子科技大學出版社,2001:4.
[6]劉東華,梁光明. Turbo碼設計與應用[M]. 北京:電子工業出版社,2011:4.
[7]S. Benedetto and G. Montorsi. Unveiling turbo codes:Some results on parallel concatenated coding schemes[J]. IEEE Trans Inform Theory,1996,42(2):409-428.
[8]張凱. CCSDS標準Turbo碼譯碼器設計及實現[D]. 北京:北京郵電大學,2012.

藺吉順(1980-),男,漢族,吉林蛟河人,內蒙古民族大學講師,碩士,主要從事機電一體化、信息論與編碼、通信系統設計,計算機圖形學以及虛擬現實技術等方面的研究,linjishun66@163.com。
FPGADesignandImplementationofTurboEncoderDefinedbyCCSDS*
LINJishun*,LIUDonghua
(College of Mechanical Engineering,Inner Mongolia University for the Nationalities,Tongliao Inner Mongolia 028000,China)
Turbo code has been recommended error control standard for satellite and deep space communication by Consultative Committee for Space Data Systems(CCSDS)because of its excellent performance. An optimal implementation method on FPGA for CCSDS standard Turbo encoder that supports multiple code rate and length of frame is carried out and verified on Altera Stratix Ⅲ FPGA chip. The encoder can reach 100 MHz process speed with very small resource and has been used on some satellite to encoding data with speed larger than 10 Mbit/s.
turbo code;encoder;CCSDS;FPGA
項目來源:國家863計劃基金項目(2012AA0758)
2013-04-30修改日期:2013-05-08
TN911.22
:A
:1005-9490(2014)06-1162-06
10.3969/j.issn.1005-9490.2014.06.031