梁 晨
(中國電子科技集團公司第二十研究所,陜西 西安 710068)
Turbo碼綜合了級聯(lián)碼、卷積碼、迭代譯碼及最大后驗概率的思想,考慮了C.E.Shannon信息速率達到信道容量可實現(xiàn)無差錯傳輸假設(shè)的3個基本條件,獲得了接近Shannon極限的優(yōu)異性能,因而被廣泛應用于各類無線通信協(xié)議中[1]。Turbo碼的編碼器結(jié)構(gòu)如圖1所示,主要包括交織器、分量編碼器、刪余矩陣和復用器。其中交織器的作用是改變輸入碼源的排列順序;分量編碼器的作用是對輸入碼源序列和交織后的碼源序列進行編碼;刪余矩陣的作用是根據(jù)規(guī)則對編碼后的校驗序列進行選擇性刪除,以控制碼率;復用器的作用是按要求對碼源和校驗序列重組輸出[2]。
圖1 Turbo碼編碼器結(jié)構(gòu)圖
在Turbo編碼器中,交織器是十分重要的組成部分,Turbo碼的交織器使得碼重分布合理,降低了數(shù)據(jù)序列的相關(guān)性,增大了輸出碼字的最小漢明距離,滿足了香農(nóng)信道編碼定理中的隨機性編碼條件[3]。LTE 中定義了一種二次置換多項式(QPP)交織器。對于交織器的實現(xiàn),哈爾濱工程大學的趙旦峰、雷李云和羅清華提出,如果將交織算法直接用硬件實現(xiàn),則會增加Turbo編譯碼器硬件實現(xiàn)復雜度,同時會增加編譯碼延時,所以采用將預先計算好的交織地址序列存入現(xiàn)場可編程門陣列(FPGA)的只讀存儲器中,保證了交織器的電路簡單和交織運算的零延遲[4]。這種方法的弊端是對于不同的碼塊長度需要存儲不同的交織地址表,當碼塊長度類型較多時會占用較多的存儲器資源。復旦大學專用集成電路與系統(tǒng)國家重點實驗室黃躍斌、陳赟和曾曉洋采用遞推公式的方案來進行QPP交織器設(shè)計[5],但未對遞推計算進行進一步的優(yōu)化改進。
本文在QPP交織器遞推公式的基礎(chǔ)上進行設(shè)計優(yōu)化,設(shè)計了一種零延時、資源友好的QPP交織器。QPP遞推公式涉及到取余運算,如果在FPGA中調(diào)用除法器實現(xiàn),時序上就不能保證交織器的零延時,則圖1中2路分量編碼器就不能同步工作,影響了編碼效率。本文通過比較器實現(xiàn)取余,簡化了取余運算,節(jié)約了乘法器資源。遞推算法的每一步都需要完成加法運算和比較運算,如果在FPGA的一拍時鐘完成2種運算,勢必會帶來時序緊張,使得編碼器不能在較高的時鐘頻率下工作,影響了編碼效率。本文通過對遞推公式進行改進,分別對交織地址的奇偶序列進行并行遞推,利用乒乓的方式輸出交織地址,將之前一拍時鐘完成的運算分為2個時鐘完成,簡化了每一拍時鐘的邏輯運算電路,使得交織器可以在較高的時鐘頻率下工作。在時序上,遞推運算實現(xiàn)了交織器的零延時。
(1)
輸出序號i和輸入序號ε(i)的關(guān)系滿足如下二次形式:
ε(i)=(f1·i+f2·i2)modK
(2)
參數(shù)f1和f2與碼塊長度K有關(guān),需要進行巧妙設(shè)計來確保QPP交織器避免沖突。在長期演進(LTE)中,總共設(shè)計了188種碼塊長度[6]。
交織地址可以通過遞推運算來實現(xiàn),遞推公式如下[6]:
ε(i+1)=[ε(i)+δ(i)]modK
(3)
δ(i+1)=[δ(i)+b]modK
(4)
容易得到初始值ε(0)=0,δ(0)=(f1+f2)modK。b是一個常量,b=(2f2)modK。該遞推公式只涉及加法、取余運算,可以相對容易在邏輯硬件上實現(xiàn)。但取余運算在硬件實現(xiàn)中需要用到除法器,時序上不能保證交織器的零延時,影響編碼效率。
在公式(3)中:
∵ε(i) ∴ε(i)+δ(i)<2K 因此遞推運算中取余運算可以用比較、選擇等簡單運算來實現(xiàn): (5) 同理可得: (6) 如公式(5)所示,在上一個時鐘周期計算出來的ε(i)和δ(i)首先進行加法運算。ε(i)和δ(i)相加得到的結(jié)果一方面與K進行比較,另一方面再減去K。比較的結(jié)果控制二選一選擇器,當ε(i)和δ(i)之和小于K時,選擇ε(i)+δ(i)作為ε(i+1);反之選擇ε(i)+δ(i)-K作為ε(i+1)的結(jié)果,邏輯電路實現(xiàn)示意圖如圖2所示。這個過程如果在同一個時鐘周期來完成,組合邏輯較為復雜,時序較為緊張,使得交織器不能在較高時鐘頻率下工作。如果分為2個時鐘節(jié)拍來完成,第1個時鐘完成ε(i)+δ(i)計算,第2個時鐘周期完成ε(i)+δ(i)求和值與K的比較,同時并行完成ε(i)+δ(i)求和值減去K,根據(jù)比較結(jié)果控制二選一選擇器給ε(i+1)賦值。邏輯電路實現(xiàn)示意如圖3所示,這樣時序較為寬松,交織器可以在較高的時鐘頻率下工作。 圖2 1個時鐘完成遞推計算邏輯電路示意圖 圖3 2個時鐘完成遞推計算邏輯電路示意圖 將公式(3)、(4)進行改進,得出: ε(i+k)=[ε(i)+δ(i)]modK (7) δ(i+k)=[δ(i)+b]modK (8) 式中:k是一個大于0、小于K的任意整數(shù),可以推算出初始值ε(0)=0,δ(0)=(f1·k+f2·k2)modK;b是一個常量,b=(2k2f2)modK。 為了實現(xiàn)不提高時鐘的條件下零延遲交織器設(shè)計,本文將交織地址序列分為奇偶2個序列進行并行遞推,并利用乒乓的方式輸出交織地址。 將k=2代入公式(7)、(8)得到: ε(i+2)=[ε(i)+δ(i)]modK (9) δ(i+2)=[δ(i)+b]modK (10) 初始值為ε(0)=0,δ(0)=(2f1+4f2)modK,ε(1)=(f1+f2)modK,δ(1)=(2f1+8f2)modK。b是一個常量,b=(8f2)modK。 遞推運算中取余仍可以用比較、選擇簡單運算來實現(xiàn): (11) 同理可得: (12) 基于改進后的遞推公式,QPP交織器設(shè)計架構(gòu)如圖4所示,主要包括碼源序列存儲雙口模塊、控制模塊、交織地址奇數(shù)序列遞推模塊、交織地址偶數(shù)序列遞推模塊和乒乓選擇模塊組成。其中原始碼序列存儲雙口模塊一端用來寫入編碼前的碼源序列,另一端按照交織地址讀出碼源數(shù)據(jù)完成交織功能??刂颇K輸入交織碼塊的類型和交織使能信號,根據(jù)輸入的交織碼塊類型得出不同碼塊大小對應的f1、f2、K值以及遞推公式中ε(0)、δ(0)、ε(1)、δ(1)和b的值;根據(jù)輸入的交織使能脈沖信號開始交織器的工作,交織器工作時間等于K個時鐘周期。交織地址奇數(shù)序列遞推模塊,利用初值ε(1)和δ(1),2個時鐘遞推出一個奇數(shù)序列的交織地址。交織地址偶數(shù)序列遞推模塊,利用初值ε(0)和δ(0),2個時鐘遞推出1個偶數(shù)序列的交織地址。乒乓選擇模塊根據(jù)交織工作計數(shù)器的奇偶交替,分別選擇輸出奇偶序列的交織地址。該交織器的輸出延時等于RAM IP核的讀延遲,同順序碼源序列讀延遲一致,實現(xiàn)了交織模塊的零延遲。 圖4 QPP交織器設(shè)計架構(gòu)圖 依照設(shè)計方案在FPGA上完成編程實現(xiàn),該交織器支持全部碼塊大小類型進行交織運算。功能仿真驗證時按照一種碼塊大小為例(K=264,f1=7,f2=66),邏輯運算結(jié)果如圖5所示。其中pi_odd和pi_even分別為交織地址的奇偶序列,經(jīng)乒乓選擇器選擇后合路的交織地址為信號addr2,可以看出addr2和順序序列地址addr1同步對齊,輸出順序序列c和交織序列c_i也同步對齊,交織器工作的零延時保證了編碼效率。交織地址和Matlab計算的交織地址波形如圖6所示,經(jīng)數(shù)值對比結(jié)果一一對應。交織器實現(xiàn)后資源使用情況如圖7所示,可以看出該交織器使用資源極少,實現(xiàn)了資源友好的設(shè)計目標。 圖5 QPP交織器邏輯軟件仿真時序圖 圖6 邏輯軟件和MATLAB仿真結(jié)果對比圖 圖7 交織器實現(xiàn)后資源使用情況圖 本文提出了一種零延時、資源友好的Turbo交織器優(yōu)化設(shè)計方案。該方案簡化了遞推公式中的復雜運算,通過奇偶序列進行并行遞推和乒乓輸出的方式,將遞推運算中的邏輯運算由1個時鐘完成改為2個時鐘完成,使得交織器時序?qū)捤?可在較高的時鐘頻率下工作。經(jīng)仿真驗證,交織結(jié)果準確無誤;經(jīng)工程驗證,該設(shè)計方案可在240 MHz時鐘工作頻率的Xilinx FPGA中穩(wěn)定工作。2 改進后的QPP交織器遞推公式
3 零延時QPP交織器模塊設(shè)計
4 QPP交織器功能驗證
5 結(jié)束語