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