楊衛(wèi)平
摘要 本文討論一種通用CRC計算實現(xiàn)方法。該方法采用純硬件方法實現(xiàn)CRC計算,可靈活配置、計算速度快,無需CPU計算,適用于任意CRC類型、任意CRC生成多項式時的快速CRC計算。
【關(guān)鍵詞】CRC 快速 類型可選
1 CRC 計算算簡介
循環(huán)冗余校驗碼(CRC)的基本原理是:在K位信息碼后再拼接R位的校驗碼,整個編碼長度為N位,因此,這種編碼又叫(N,K)碼,它是一類重要的線性分組碼。對于一個給定的(N,K)碼,可以證明存在一個最高次冪為N-K=R的多項式G(x)。根據(jù)G(x)可以生成K位信息的校驗碼,而G(x)叫做這個CRC碼的生成多項式。校驗碼的具體生成過程為:假設(shè)發(fā)送信息用信息多項式c(x)表示,將C(x)左移R位,則可表示成C(x)*2的R次方,這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。通過C(x)*2的R次方除以生成多項式G(x)得到的余數(shù)就是校驗碼。通信過程中,發(fā)送方將K位信息碼在前、R位校驗碼在后拼接的共N位數(shù)據(jù)發(fā)送。
接收方己知接收的數(shù)據(jù)包含K位DATA信息碼與R位CRC校驗碼。接收方將收到的數(shù)據(jù)同樣處理:假設(shè)前K位數(shù)據(jù)用信息多項式D(X)表示,將D(x)左移R位,則可表示成D(x)+2的R次方,這樣D(x)的右邊就會空出R位,這就是校驗碼的位置。通過Dfx)*2的R次方除以生成多項式G(x)得到的余數(shù)就是校驗碼,用R(x)表示。將接收的后R位數(shù)據(jù)與CRC校驗結(jié)R(x)系數(shù)比較,如果有不一致則說明該筆數(shù)據(jù)傳輸有誤。
CRC編碼和解碼方法簡單,檢錯和糾錯能力強,在通信領(lǐng)域廣泛地用于實現(xiàn)差錯控制。
2 CRC計算方法分析
同時,本文給出一種CRC計算硬件系統(tǒng)結(jié)構(gòu),主要包括五個模塊。
(1) CONFIG模塊。該模塊獲取配置的信息,包括CRC類型選擇配置、生成多項式的配置、CRC初始值的配置、CRC輸入數(shù)據(jù)、輸入數(shù)據(jù)翻轉(zhuǎn)處理配置、CRC計算輸出結(jié)果異或與翻轉(zhuǎn)處理配置等。該模塊的配置與選擇,使得電路支持多種多樣的CRC計算需求。
(2)CRC JUDGE模塊。該模塊處理當(dāng)前CRC類型配置, 如CRC7,CRC8,CRC16,CRC32等,并準備好選定CRC類型的配置數(shù)據(jù)。
(3) CRC CRTL模塊。該模塊針對具體選定的CRC類型產(chǎn)生配置數(shù)據(jù),并產(chǎn)生時序控制信號。不同CRC類型需要使用不同位寬的CRC移位電路實現(xiàn),時序控制主要根據(jù)n值產(chǎn)生。
(4) SHIFTCALC模塊。該模塊是數(shù)字組合邏輯,實現(xiàn)CRC計算迭代推理,輸出迭代計算結(jié)果。該模塊主要功能如上圖2所示,可以實現(xiàn)一個時鐘周期內(nèi)完成多位數(shù)據(jù)的CRC移位計算,是整個CRC計算硬件電路的核心部分。
(5) RESULT GEN模塊。該模塊抓取迭代計算結(jié)果,并根據(jù)配置要求做異或與翻轉(zhuǎn)等處理,最終輸出CRC計算結(jié)果。該模塊完成后,會將計算完成的狀態(tài)顯示出來。
軟件使用該硬件系統(tǒng)結(jié)構(gòu)進行CRC計算,操作流程需要與硬件配合。軟件操作流程依次為:
(1)配置CONFIG模塊以完成CRC初始化:
(2)寫入CRC計算輸入數(shù)據(jù);
(3)觸發(fā)CRC計算;
(4)等待中斷或狀態(tài)確認CRC計算完成標志;
(5)讀取CRC計算結(jié)果。
4 實際仿真結(jié)果及分析
運用本文推薦快速CRC計算方法與電路,可在一個時鐘周期內(nèi)完成CRC計算,效果如圖3所示。在圖中,對硬件電路初始化配置后一個時鐘周期后便輸出RESULT OUT。因此在實際使用過程中,由于硬件電路CRC計算速度之快,軟件可以連續(xù)寫入CRC計算輸入數(shù)據(jù),或直接使用DMA連續(xù)寫入CRC計算輸入數(shù)據(jù),直至CRC計算需求結(jié)束,軟件直接讀取CRC計算結(jié)果即可。
5 結(jié)論
本文通過公式推理,提出一種CRC計算硬件實現(xiàn)方法,可以靈活、快速的計算得出CRC校驗的余數(shù),適用于任意CRC類型、任意C,RC生成多項式時的快速CRC計算。利用該方法,仿真結(jié)果顯示最快可以在一個時鐘周期內(nèi)完成多bit輸入時的并行CRC計算。
參考文獻
[1]俞迅.32位CRC校驗碼的并行算法及硬件實現(xiàn)[J],信息技術(shù),2007 (04): 0071-04.
[2]石林艷,羅漢文.CRC循環(huán)冗余校驗碼并行算法的FPGA實現(xiàn)[J].通信技術(shù)及應(yīng)用,2005 (08).
[3]王新梅,糾錯碼與差錯控制[M].北京:人民郵電出版社,1989.