循環(huán)冗余校驗碼CRC(Cyclic Redundancy Check)是數據通信領(lǐng)域中最常用的一種差錯校驗碼,其特征是信息字段和校驗字段的長(cháng)度可以任意選定。 為了完成信號傳輸過(guò)程中誤碼檢測,獲得正確無(wú)誤的傳輸數據,LTE(Long Term Evolution)系統針對不同的數據傳輸采用了多種格式的循環(huán)冗余碼,以適應系統高速率高性能的需求。 1 LTE系統中的循環(huán)冗余碼 LTE作為準4G技術(shù),以正交頻分復用OFDM(Orthogonal Frequency Division Multiplexing)和多輸入多輸出MIMO(Multiple-Input Multiple-Out-put)技術(shù)為基礎,下行采用正交頻分(OFDM)多址技術(shù),上行采用單載波頻分(SC-FDMA)多址技術(shù),在20 MHz頻譜帶寬下能夠提供下行100 Mb/s與上行50 Mb/s的峰值速率。 LTE TDD(亦稱(chēng)TD-LTE)系統采用了4種格式的CRC:CRC24A、CRC24B、CRC16、CRC8。其生成多項式如下: 其中長(cháng)度為24的CRC24A和CRC24B主要用于共享信道數據傳輸,長(cháng)度為16的CRC16主要用于下行控制信道和廣播信道數據傳輸,長(cháng)度為8的CRC8主要用于CQI(Control quality information)信息的傳輸。 2 CRC算法分析及選擇 CRC的校驗原理非常簡(jiǎn)單,它要求發(fā)送方和接收方采用同一個(gè)生成多項式g(x),且g(x)的首位和末位的系數必須為l。編碼時(shí)將待發(fā)送的數據t(x)除以g(x),得到的余數作為CRC校驗碼添加到t(x)的后面;譯碼時(shí)將接收到的數據r(x)除以g(x),如果余數為0,則說(shuō)明校驗正確,否則校驗失敗,從而判斷數據幀是否出錯。在工程應用中,常用的CRC校驗算法主要有兩種:查表生成法和塊異或長(cháng)除法。 這種算法的優(yōu)點(diǎn)是運算量小、速度快、效率高;缺點(diǎn)是可移植性較差,且要事先計算出余式表,而不同長(cháng)度的生成多項式的余式表不同,因此余式表會(huì )占用系統較大的存儲空間,增大系統資源開(kāi)銷(xiāo)。 2.2 塊異或長(cháng)除法 塊異或長(cháng)除法是依據CRC校驗碼的產(chǎn)生原理實(shí)現的。算法描述如下: (1)初始化,將寄存器初始化為0。 (2)在信息比特后添加CRC長(cháng)度個(gè)0,最終作為CRC添加的空間。 (3)讀取一個(gè)數據塊(塊的大小由處理器的字的單位長(cháng)度決定)。 (4)判斷塊的最高位是否為‘1’,若為‘1’則數據塊與生成多項式做一次異或操作。 (5)將數據左移一位,如果當前塊的剩余比特等于CRC生成多項式的長(cháng)度,則轉入步驟(3);否則轉入步驟(4)。 (6)如果所有數據都已經(jīng)操作完畢,則計算結束,寄存器中的值為最終求得的CRC。 這種算法的優(yōu)點(diǎn)是算法簡(jiǎn)單、容易實(shí)現、修改靈活、可移植性好,對任意長(cháng)度的生成多項式都適用;但因為它一次只能處理一位數據,因此計算效率低,運算量大。 如前所述,在TD-LTE系統中采用了4種格式的CRC,如果采用查表算法,則需要建立4張查找表,會(huì )占用系統較大的存儲空間,且程序移植性差;如果采用塊異或長(cháng)除法,則又會(huì )出現計算效率低,運算量大的問(wèn)題。 綜上分析,結合項目需求及系統硬件配置,考慮到系統所采用的高效DSP處理器——TMS320C64x(主頻最高可達到1.2 GHz)可以彌補塊異或長(cháng)除法的低效性,系統最終采用塊異或長(cháng)除法來(lái)實(shí)現。 3 CRC算法的DSP實(shí)現 3.1 硬件簡(jiǎn)介 TMS320C6000系列DSP是TI公司1997年2月推向市場(chǎng)的高性能DSP,綜合了目前DSP性?xún)r(jià)比高、功耗低等優(yōu)點(diǎn)。TMS320C64x系列在TMS320C6000 DSP芯片中處于領(lǐng)先水平,它不但提高了時(shí)鐘頻率,而且在體系結構上采用了VelociTI甚長(cháng)指令集VLIW(Very Long Instruction Word)結構,片內有8個(gè)獨立功能單元的內核,每個(gè)周期可以并行執行8條32 bit指令,最大峰值速度4 800 MIPS,2組共64個(gè)32 bit 通用寄存器,32 bit 尋址范圍,支持8/16/32/40位的數據訪(fǎng)問(wèn),片內集成大容量SRAM,最大可達8 Mbit。由于其出色的運算能力、高效的指令集、大范圍的尋址能力,使其特別適用于無(wú)線(xiàn)基站、測試儀表等對運算能力和存儲量有高要求的應用場(chǎng)合。 3.2 CRC校驗的DSP實(shí)現 因為系統采用了4種格式的CRC,如果對每種格式進(jìn)行單獨實(shí)現,不僅任務(wù)繁瑣,而且增加了系統的代碼量,更給代碼測試和維護增加了難度。因此本實(shí)現采用統一實(shí)現,即同一個(gè)程序,支持系統中的所有CRC格式,僅需在程序頭部增添一點(diǎn)格式判斷的代碼即可。 雖然TMS320C64x DSP處理器的字長(cháng)為32 bit,但是為了兼容4種格式的CRC,最終決定數據的分塊長(cháng)度為半字,即16 bit,這樣做的目的就是為了支持CRC24,因為T(mén)MS320C64x DSP的寄存器在用作邏輯移位寄存器使用時(shí),其有效長(cháng)度為40 bit。 根據LTE協(xié)議,輸入數據按大端模式輸入。為了處理方便,每次讀入半字都將其倒序,采用低端對齊的方式進(jìn)行CRC除法,因此,CRC多項式也必須經(jīng)過(guò)倒序。最后生成的CRC也是倒序的,需要再次倒序,然后進(jìn)行加擾(如果必要的話(huà)),最后添加到輸入數據后面。倒序可使用指令“BITR”,簡(jiǎn)單易行。 輸出數據仍為大端模式。由前面所述可知:CRC8的生成多項式倒序值為0x1b3;CRC16的生成多項式倒序值為0x10811;CRC24A的生成多項式倒序值為0x1be64c3;CRC24B的生成多項式倒序值為0x18c0003。 值得注意的是:輸入數據后面應該多寫(xiě)入一個(gè)字的0,因為每次取半字處理,當剩余比特為最大15 bit且CRC為最長(cháng)24 bit時(shí),組合起來(lái)也不會(huì )超過(guò)40 bit,避免特殊性的出現,以便統一處理。同時(shí)完成CRC計算過(guò)后,可以直接將CRC添加到原數據之后,而不擔心其會(huì )覆蓋系統中的其他數據,引起不必要的錯誤。 圖1為CRC計算及添加的程序實(shí)現流程。當CRC格式為CRC16、CRC24A、CRC24B時(shí),讀取的第一個(gè)數據塊(半字)在第一次內循環(huán)中將只作16次的移位,而沒(méi)有異或操作,表面上看在這里應該加一個(gè)判斷,如果是這種情況則直接將數據右移16 bit,然后接著(zhù)處理第二個(gè)數據塊。但這樣會(huì )對后續的數據塊造成麻煩,因為每個(gè)數據塊到達此處都需判斷一次,當數據量比較大時(shí),會(huì )帶來(lái)更大的開(kāi)銷(xiāo),因此在程序流程中可以忽略此問(wèn)題。 在接收端,CRC的校驗與發(fā)送端的計算基本相同,只是由于LTE系統的特殊性,如果在發(fā)送端CRC曾被加擾過(guò),則在接收端校驗之前,應先從接收到的數據末尾截取出CRC進(jìn)行解擾,然后再將解擾后的CRC添加回去,最后對整個(gè)接收數據進(jìn)行CRC校驗。如果CRC校驗正確,則接收數據正確;否則接收數據錯誤,在此程序流程不再贅述。 4 性能分析 在DSP軟件實(shí)現中,通過(guò)指令并行,盡量?jì)?yōu)化程序循環(huán)體,減少或消除程序中的“NOP”指令。對于不同格式的CRC,根據它們所用的環(huán)境以及數據的大致長(cháng)度,通過(guò)程序仿真運行,可以得到統計結果如表1。 表1的數據長(cháng)度僅為個(gè)別舉例,但不失一般性。從表中可以看出,雖然塊異或長(cháng)除法的運算量較大,但是當運用TMS320C64x芯片實(shí)現時(shí),由于處理器的超高主頻,其計算速率也非?,完全可以忽略它的計算量。因此,本實(shí)現采用塊異或長(cháng)除法不僅簡(jiǎn)化了程序實(shí)現方法,還減少了模塊程序代碼,節約了系統存儲空間。 本文從理論分析出發(fā),根據TD-LTE系統特性,選擇了一種最優(yōu)的CRC校驗算法,并在TMS320C64x芯片上加以實(shí)現,詳細講述了塊異或長(cháng)除法在DSP中的實(shí)現方法。程序運行結果表明,本實(shí)現能夠滿(mǎn)足LTE系統的需要,具有可行性和高效性。 |