洪向宇
【摘要】 循環(huán)校驗(yàn)碼具有良好的誤碼檢測和抗干擾能力,廣泛應(yīng)用于通信系統(tǒng)。本文從CRC原理探究串行算法,利用matlab對CRC串行算法進(jìn)行仿真,利用Verilog語言實(shí)現(xiàn)CRC校驗(yàn)?zāi)K,并最終驗(yàn)證設(shè)計(jì)的正確性。
【關(guān)鍵字】 循環(huán)校驗(yàn)碼 CRC
一、引言
循環(huán)校驗(yàn)碼(cyclic redundancy check, CRC)具有良好的誤碼檢測和抗干擾能力,可廣泛應(yīng)用于通信系統(tǒng)的編解碼技術(shù),提高通信系統(tǒng)的檢錯(cuò)能力。由于CRC為循化冗余檢驗(yàn)碼,因此CRC能夠檢出大部分突發(fā)長度錯(cuò)誤和所有奇數(shù)隨機(jī)錯(cuò)誤1。
在通信系統(tǒng)中,CRC編碼模塊常常作為通信系統(tǒng)的一部分出現(xiàn)的,因此CRC編碼模塊可使用硬件描述語言進(jìn)行設(shè)計(jì)實(shí)現(xiàn),利用可編程邏輯器件實(shí)現(xiàn)CRC模塊,既滿足了模塊對校驗(yàn)時(shí)鐘及速度的需求,也能夠直接簡便的實(shí)現(xiàn)CRC模塊的硬件電路。本文基于Verilog語言,利用串行算法實(shí)現(xiàn)了16位校驗(yàn)的CRC模塊并利用matlab對算法進(jìn)行驗(yàn)證。
二、CRC串行算法
CRC校驗(yàn)碼依據(jù)線性編碼原理2。對于信源為n位的二進(jìn)制數(shù)據(jù)序列,經(jīng)過算法處理,即輸入信源與生成多項(xiàng)式進(jìn)行模二除法,所得余數(shù)生成m位校驗(yàn)碼。將m位校驗(yàn)碼放在信源序列的后面進(jìn)行數(shù)據(jù)傳輸,接收端以相同算法對接收數(shù)據(jù)進(jìn)行校驗(yàn)。收到信源信息,如未發(fā)生誤碼,則接收到的校驗(yàn)位應(yīng)能夠被生成多項(xiàng)式模二整除。算法公式可表示為,
其中,xnD(x)為做n位移位運(yùn)算的信源序列,g(x)為生成多項(xiàng)式,P(x)|R(x)為模二除法的商和余數(shù)。
三、CRC算法的FPGA實(shí)現(xiàn)
由于并行插入16bit信源碼與串行的16bit信源碼序列是等效的,因此CRC串行與并行算法在電路級是等效的3。CRC算法中的模二除法可用硬件電路中的移位寄存器實(shí)現(xiàn)。
利用matlab可對算法進(jìn)行仿真,其中g(shù)為生成多項(xiàng)式,input為48bit測試向量,因?yàn)楸疚氖褂昧薈RC16校驗(yàn),因此測試向量需在幀尾補(bǔ)足16個(gè)0,變?yōu)?4bit串行數(shù)據(jù)。運(yùn)行代碼,生成測試校驗(yàn)碼R。
由于需對硬件電路進(jìn)行時(shí)序匹配,因此在verilog語言中分三個(gè)模塊實(shí)現(xiàn)CRC校驗(yàn),其中初始態(tài)idle對輸入進(jìn)行時(shí)序的匹配和對齊,shift狀態(tài)中設(shè)計(jì)移位寄存器,按照上述的算法實(shí)現(xiàn)移位計(jì)算,生成的校驗(yàn)位R(X)和din組成輸出,在信道中予以傳輸。
移位寄存器的代碼如下所示。其中g(shù)_sequence為生成多項(xiàng)式。
if shift_reg[15] <= shift_reg[14] ^ g_sequence[15];
……
shift_reg[0] <= dout_ram ^ g_sequence[0];
else shift_reg <= {shift_reg[14:0],dout_ram};
值得注意的是,由于硬件電路的時(shí)序特點(diǎn),在開始計(jì)算后的71個(gè)時(shí)鐘周期可輸出64bit數(shù)據(jù),這是由于計(jì)算16位CRC碼需要64個(gè)時(shí)鐘周期,輸出匹配會(huì)延遲3個(gè)時(shí)鐘周期。
利用modelsim對verilog代碼進(jìn)行仿真,如圖1所示,對比輸出的校驗(yàn)碼,為R=[1 1 0 0 1 0 1 1 1 0 1 1 1 1 1 0],與matlab代碼的輸出一致。
四、仿真與驗(yàn)證
一般的 CRC 校驗(yàn)碼生成器即可編碼又可解碼, 編碼用于對輸入數(shù)據(jù)計(jì)算 CRC 校驗(yàn)碼, 解碼用于驗(yàn)證接收到的數(shù)據(jù)是否正確, 其兩個(gè)過程對于CRC 校驗(yàn)碼生成器是一樣的4。
利用modelsim對Verilog代碼進(jìn)行仿真,測試的48bit信源序列通過CRC校驗(yàn)?zāi)K輸出64bit序列,如圖2所示。
將64bit數(shù)據(jù)導(dǎo)出,導(dǎo)入matlab CRC校驗(yàn)進(jìn)行驗(yàn)證,其中input為modelsim輸出的64bit序列。通過運(yùn)算得出一維0矩陣,有算法可知,本文設(shè)計(jì)的CRC校驗(yàn)?zāi)K能夠?qū)崿F(xiàn)誤碼校驗(yàn)功能。
參 考 文 獻(xiàn)
[1]現(xiàn)代通信原理 清華大學(xué)出版社
[2] CRC - 16算法與 FPGA實(shí)現(xiàn),羅志聰 ,孫奇燕 四川兵工學(xué)報(bào) 35-5
[3]基于Verilog的CRC并行實(shí)現(xiàn) 黃維超 劉橋 黃初華 微計(jì)算機(jī)信息 2009.25 10-3
[4] CRC 校驗(yàn)碼并行計(jì)算的 FPGA 實(shí)現(xiàn) 張樹剛, 張遂南, 黃士坦 計(jì)算機(jī)技術(shù)與發(fā)展,2007 2 2