曹型兵,楊高進,余利成
(1.重慶郵電大學(xué)通信應(yīng)用研究所,重慶400065;2.重慶郵電大學(xué)重慶市移動通信技術(shù)重點實驗室,重慶400065)
TD-LTE無線終端測試平臺中基帶板以DSP+ARM+FPGA為核心,DSP主要負責(zé)處理物理層軟件中的部分內(nèi)容,F(xiàn)PGA完成系統(tǒng)定時和物理層算法的部分內(nèi)容。在下行物理信道一般處理流程中,從高層下來的數(shù)據(jù)需要經(jīng)過如圖1所示的幾個階段,包括CRC添加、碼塊分割以及碼塊CRC添加、信道編碼、速率匹配、碼塊級聯(lián)等一系列的處理流程[1]。最后實現(xiàn)基帶信號的生成,通過天線端口將數(shù)據(jù)信號發(fā)送出去。
圖1 下行物理信道一般處理流程
在測試儀表的基帶板開發(fā)中,前期對于CRC的添加以及碼塊分割的過程采用了DSP進行其過程的實現(xiàn)。在采用DSP實現(xiàn)時,由于首先要對一組數(shù)據(jù)進行全數(shù)據(jù)的CRC添加,其次對于數(shù)據(jù)量超過一定位數(shù)時進行碼塊分割操作再做CRC添加。當(dāng)高層發(fā)送下來的數(shù)據(jù)量過大時,采用DSP實現(xiàn)時需要內(nèi)存空間進行清理,預(yù)留出一定的空間確保數(shù)據(jù)量能夠完整地存儲,以便進行后續(xù)的運算處理。并且采用DSP實現(xiàn)需要消耗大量的時鐘周期進行運算處理。
本文根據(jù)實際情況需要,在DSP實現(xiàn)的基礎(chǔ)上提出了采用FPGA來實現(xiàn)其相應(yīng)的運算過程。FPGA通常用來實現(xiàn)較為固定的計算過程,在該設(shè)計方案中CRC校驗碼的添加,以及模塊的分割均采用FPGA來實現(xiàn),而DSP則用來進行數(shù)據(jù)以及控制信號的配置。從而可以更好地發(fā)揮FPGA與DSP的優(yōu)點。
經(jīng)過多次的仿真以及實際平臺測試,實現(xiàn)了FPGA快速的生成CRC校驗碼,為后續(xù)的數(shù)據(jù)信號處理提供了可靠的保證,適用于TD-LTE無線綜合測試儀中。
在實際的傳輸信道中傳輸數(shù)字信號時,由于信道的傳輸特性不理想以及一些噪聲帶來的影響,從而導(dǎo)致接收端收到的信號不可避免地會發(fā)生錯誤,導(dǎo)致接收信號的失敗。因此,為了保證傳輸?shù)目煽啃?,就需要對傳輸過程進行差錯控制,循環(huán)冗余校驗CRC是一種高效率的差錯控制方案。其具有編碼及錯誤檢測簡單,容易實現(xiàn)且誤判概率低、檢錯能力強等優(yōu)點,在通信系統(tǒng)中得到了廣泛的應(yīng)用。
采用CRC校驗時,發(fā)送方和接收方均采用同一個生成多項式g(D)(根據(jù)不同的需要選擇不同的生成多項式),將最后的余數(shù)作為CRC校驗碼。根據(jù)3GPP[2]相關(guān)協(xié)議LTE中采用的校驗比特由如下循環(huán)生成多項式之一產(chǎn)生。
對于物理下行共享信道采用gCRC24A(D)生成多項式,而對于下行廣播信道則采用gCRC16(D)生成多項式。CRC校驗碼的編碼原理是采用待發(fā)送的二進制數(shù)據(jù)a(x)除以生成多項式g(D),將其最終的余數(shù)作為CRC校驗碼。在FPGA中,實現(xiàn)CRC編碼實際上是一個循環(huán)移位的模2運算。通過反復(fù)的移位和進行CRC的除法,最后得到的數(shù)據(jù)就是所需的余數(shù)。將所得到的余數(shù)放置在原始序列的尾部即實現(xiàn)了 CRC 的編碼過程[3]。
對于CRC的解碼過程,即采用與編碼相同的生成多項式,同時也采用循環(huán)移位的模2運算,當(dāng)計算出的結(jié)果為0時,譯碼正確,即完成了CRC解碼過程,否則判為譯碼錯誤,則向發(fā)射端反饋NACK,請求數(shù)據(jù)重傳。
在LTE系統(tǒng)中,CRC的處理的具體長度由高層(MAC層)根據(jù)傳輸信道所承載的業(yè)務(wù)通過信令來通知傳輸信道,每個傳輸塊的CRC校驗的計算都要用到整個傳輸塊(TB)的數(shù)據(jù)信息。當(dāng)整個傳輸塊的數(shù)據(jù)信息較長時,需要對TB進行分段處理。對于TB的分段,第一種可以選擇先對整個TB進行CRC處理,然后進行分段處理,如圖2(a)所示;第二種方法是先進行編碼塊(CB)分段處理,然后對每個CB分別添加CRC比特,如圖2(b)所示;還有一種方法可以同時采用TB-CRC處理和CB-CRC處理,如圖2(c)所示[4]。
經(jīng)過研究發(fā)現(xiàn),在原有的TB-CRC處理的基礎(chǔ)上,在每個CB上分別添加CRC校驗信息可以降低譯碼的復(fù)雜度,減小所需的譯碼延時及緩存器的大小,從而提高接收機連續(xù)傳輸處理能力,支持LTE系統(tǒng)的高速率傳輸,并且可以加快接收機的處理速度,實現(xiàn)快速的HARQ。因此,最后采用TBCRC和CB-CRC處理的方式[4]。
圖2 3種CRC處理方式
CRC處理過程可以表述為:先在TB上添加24 bit CRC,然后如果進行碼塊分段(當(dāng)傳輸塊長于6144 bit時,此處選擇6144 bit是因為在后續(xù)的),再在每個CB上添加24 bitCRC,如圖3所示。
圖3 CRC處理過程
采用這種雙層CRC結(jié)構(gòu),接收端就可以在發(fā)現(xiàn)1個CB譯碼錯誤后停止譯碼,馬上要求重傳,而不需要等待整個TB譯碼完畢再反饋NACK,從而不僅避免了后續(xù)CB譯碼的無謂功率消耗,而且節(jié)省了處理時間,減小了HARQ重傳時延,可以提高單位時間內(nèi)的系統(tǒng)吞吐量。
而24bitTB-CRC則可以進一步減小CB CRC漏檢的幾率,防止1個CB上的漏檢導(dǎo)致整個TB漏檢,從而保證了整個TB上的漏檢概率在6×10-8以下。
此方法還可以有效降低高速率傳輸時譯碼的平均迭代次數(shù),減小接收機硬件的復(fù)雜度,降低對緩存空間的要求。另外,當(dāng)進行多碼字(Code Word,CW)MIMO信號的譯碼時,也可以利用CB-CRC實現(xiàn)CW之間的串行干擾消除(SIC)操作。
采用上述雙層CRC結(jié)構(gòu)需要考慮對TB-CRC和CBCRC是采用相同的CRC生成多項式,還是不同的生成多項式。經(jīng)過仿真研究發(fā)現(xiàn),使用不同多項式可以獲得更低的漏檢概率,因此確定采用不同的CRC生成多項式分別生成TB-CRC和CB-CRC。
CRC 計算模塊的輸入比特為 a0,a1,a2,a3,…,aA-1,校驗比特為 p0,p1,p2,p3,…,pL-1。A 是輸入比特的長度,L 是校驗比特的數(shù)目。將生成的校驗比特添加至CRC的尾部。添加過的 CRC 之后的比特為:b0,b1,b2,b3,…,bB-1,添加后的比特數(shù)為B=A+L。ak和bk的關(guān)系為:
當(dāng)輸入的比特流比特數(shù)B大于最大碼塊大小Z(Z=6144)時,輸入的比特流則需要分割,并且需要在每個CB上添加一個長度為24的CRC序列。具體的碼塊分割步驟可以采用如下圖4所示的流程圖進行實現(xiàn)。
圖4 碼塊分割及碼塊CRC添加流程圖
本設(shè)計中FPGA選擇XILINX公司的VIRTEX-5(XC5VSX95T)芯片,軟件環(huán)境為Xilinx10.1,仿真軟件采用Modelsim SE 6.5。
首先設(shè)置一個data_reg寄存器,當(dāng)進行CRC-24校驗時,先往寄存器中輸入24bit數(shù)據(jù),輸入完成后首先判斷data_reg最高位是否為1,如果為1,則data_reg=data_reg^gCRC24A(D);否則data_reg左移一位,讀入一個新的數(shù)據(jù),當(dāng)原有數(shù)據(jù)輸入完成后繼續(xù)往其中輸入1bit數(shù)據(jù)0,當(dāng)輸入的數(shù)據(jù)0達到25個時,此時data_reg的高24bit數(shù)據(jù)即為所求的CRC碼塊。具體的流程圖如圖5所示。
圖5 CRC校驗碼計算流程圖
通過仿真可以得到如圖6所示的計算結(jié)果圖。此處采用CRC-24A校驗,當(dāng)數(shù)據(jù)接收完成后,開始進行計算過程data_reg=30’h65996659,當(dāng) crc_zero_cnt計數(shù)到 25 時即可輸出結(jié)果,在光標處看到輸出的crc_data=24’h0a633a,并將此結(jié)果附在原有數(shù)據(jù)尾部輸出crc_out=54’h659966590a633a。其計算結(jié)果與MATLAB計算結(jié)果相同。由于輸入的數(shù)據(jù)位數(shù)有不同的情況,可以采用雙端口RAM進行數(shù)據(jù)的存儲,通過從RAM中讀數(shù)據(jù),做運算,并將運算后的結(jié)果存入RAM中,從而降低FPGA內(nèi)部LUT-FF資源使用率。
碼塊的分割過程可以參照圖4碼塊分割及碼塊CRC添加流程圖進行其過程的實現(xiàn)。在實現(xiàn)的過程中,當(dāng)采用分組查表法查出滿足條件的K+時,我們需要將188種Turbo編碼參數(shù)存儲在一個ROM中;在查表時,若每次都從頭開始查找則會大大降低查找速度。我們可以通過分組將其分為有相同的條件的幾個小組,首先確定數(shù)據(jù)所在的地址范圍,再通過對內(nèi)部數(shù)據(jù)比較即可以找到所需的K+值,找到K+值后,即可以進一步計算出K-的值。通過F=C+·K++C-·K--B’計算出填充比特的數(shù)目,如圖7所示。當(dāng)進行的傳輸塊比特長度為9500時,首先通過TB-CRC,碼塊長度變?yōu)?524,通過計算得到 K+值為4800,K-值為4736,但是此時長度為K+的碼塊數(shù)目為2,長度為K-的碼塊數(shù)目為0,通過計算得到填充比特長度為F_TIANCHONG_BIT=27,與實際計算結(jié)果相同。
對于填充比特則需要添加至傳輸塊的頭部,完成填充比特的添加后,根據(jù)不同的K-與K+值,取出相應(yīng)的數(shù)據(jù)長度進行碼塊的CRC添加過程,此時采用的生成多項式為gCRC24B(D)計算過程采用圖8 CRC校驗碼計算流程圖所示過程進行計算。將計算出的數(shù)據(jù)添加至原始碼塊的尾部。從而完成了碼塊的分割以及分割后碼塊的CRC添加過程。
圖6 CRC校驗實現(xiàn)波形圖
圖7 碼塊分割實現(xiàn)波形圖
圖8 碼塊分割后CRC添加實現(xiàn)波形圖
對于CRC的校驗過程仍然可以采用CRC校驗碼生成過程的流程來實現(xiàn),對于尾部添加了CRC校驗碼的比特流,與生成多項式進行除法運算,當(dāng)計算出的結(jié)果為0時,即完成了正確的校驗過程,否則認為接收到的數(shù)據(jù)出現(xiàn)錯誤,此時需要向高層發(fā)出請求重傳標志信息。從圖9中可以看出當(dāng)crc_out_decode_buff=25’h1864cfb與crc_24相等時,計算的結(jié)果為0,此時crc_decode_right信號拉高,標志校驗結(jié)束,crc_decode_wrong與data_repeat信號保持為低。
圖9 CRC校驗成功實現(xiàn)波形圖
通過對程序進行綜合、布局布線,將生成的BIT文件加載到硬件平臺后能夠正常運行,通過ChipScope軟件,可以進一步從實際情況驗證CRC模塊以及碼塊分割模塊的正確性和穩(wěn)定性。使得該程序設(shè)計能夠用在實際的開發(fā)應(yīng)用中。
本文在采用DSP實現(xiàn)碼塊分割與CRC添加的基礎(chǔ)上,對其在實現(xiàn)的過程中對資源的利用以及處理時間的消耗基礎(chǔ)上,提出了采用基于FPGA[9]的CRC校驗與碼塊分割的相關(guān)研究,詳細地介紹了CRC校驗的原理,碼塊分割及碼塊CRC添加原理以及各個系統(tǒng)模塊之間的通信。經(jīng)過軟件仿真和代碼調(diào)試對于高層傳輸?shù)臄?shù)據(jù)信息,F(xiàn)PGA能夠正確的進行處理。此設(shè)計處理模式已應(yīng)用于測試儀表系統(tǒng)中,通過實驗證明,其工作可靠,達到了設(shè)計要求。
[1]3GPP TS 36.212 V9.1.0:Downlink Transport Channels and Control Information(Release9)[S].2010(3):40 -43.
[2]3GPP TS 36.212 V9.1.0:CRC Calculate on(Release 9)[S].2010(3):8 -9.
[3]3GPP TS 36.212 V9.1.0:Code Block Segmentation and Code Block CRC Attachment(Release 9)[S].2010(3):9-10.
[4]沈嘉,索士強,全海洋,等.3GPP長期演進(LTE)技術(shù)原理與系統(tǒng)設(shè)計[M].北京:人民郵電大學(xué)出版社,2008:1-20.
[5]任君玉,黃良玉.TD-SCDMA中CRC算法的研究與設(shè)計[J].移動通信,2011(18):51 -53.
[6]金素梅,王家禮.基于 FPGA的 CRC編碼器的實現(xiàn)[J].儀器與儀表,2005(24):18 -22.
[7]蘇明,姚冬蘋.專用異步串口通信電路的FPGA實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2011,5(5):65 -67.
[8]田佳,王一平.基于FPGA的帶CRC校驗的異步串口通信[J].現(xiàn)代電子技術(shù),2010,33(20):17 -19.
[9]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].第2版.北京:北京航空航天大學(xué)出版社,2008.
[10]吳厚航.深入淺出玩轉(zhuǎn)FPGA[M].北京:北京航空航天大學(xué)出版社,2010:51-52.