成都理工大學(xué)信息科學(xué)與技術(shù)學(xué)院 周 亮 余小平
基于FPGA的循環(huán)冗余校驗(yàn)碼設(shè)計(jì)
成都理工大學(xué)信息科學(xué)與技術(shù)學(xué)院 周 亮 余小平
本文主要介紹了循環(huán)冗余校驗(yàn)碼的模塊設(shè)計(jì)及其基本原理,并利用Verilog HDL設(shè)計(jì)循環(huán)冗余校驗(yàn)碼,給出了基于FPGA的可編程邏輯器件的實(shí)現(xiàn)方法及其仿真結(jié)果.同時闡述了循環(huán)冗余校驗(yàn)碼的應(yīng)用前景。
循環(huán)冗余校驗(yàn)碼;Verilog;FPGA
在現(xiàn)代數(shù)字通信中,要求信息在傳輸過程中所造成的數(shù)字差錯必須足夠低。但由于通信信道里存在的噪聲和通信信道不理想的傳輸特性造成了信號的碼間串?dāng)_,從而導(dǎo)致了信息在傳輸過程產(chǎn)生了差錯。所以為了最大限度的保證通信過程中信息的完整性,就需要采用信道編碼技術(shù)對可能發(fā)生的差錯進(jìn)行有效的控制,而循環(huán)冗余校驗(yàn)碼就是其中一個最有效的編碼技術(shù)。
循環(huán)冗余校驗(yàn)碼是一種校錯能力很強(qiáng)且使用非常廣泛的差錯檢驗(yàn)方法。其通用的構(gòu)成可以描述為:K位的有效信息數(shù)據(jù)串和R位的循環(huán)冗余校驗(yàn)碼并在一起傳輸。
1.1 循環(huán)冗余校驗(yàn)碼生成基本原理
循環(huán)冗余校驗(yàn)碼在通信信號校錯里廣泛使用。其基本原理是在發(fā)送端:將要發(fā)送的數(shù)據(jù)串序列當(dāng)作一個多項(xiàng)式T(x)的系數(shù)(比如,多項(xiàng)式為T(x)=x5+x3+x+1,則此多項(xiàng)式的系數(shù)就為101011,同時可以自定義一個k次冪的稱為生成多項(xiàng)式的多項(xiàng)式G(x),為了使原來的數(shù)據(jù)串序列在后面加入校驗(yàn)碼,就必須使其向左移,所以用Xk乘以T(x),根據(jù)對二進(jìn)制乘法的理解,得到的T(x)Xk,就是起到把T(x)原有數(shù)據(jù)串序列向左移動k位之后的結(jié)果。為了得到校驗(yàn)碼,用G(x)去作除數(shù),T(x)Xk作被除數(shù),相除得到一個余數(shù)多項(xiàng)式R(x).然后將余數(shù)多項(xiàng)式R(x)并在數(shù)據(jù)串序列后面,把這串新的數(shù)據(jù)串序列作為發(fā)送序列發(fā)送。在接收端:再次使用自定義的生成多項(xiàng)式G(x)去除接收到的數(shù)據(jù)串序列多項(xiàng)式,如果相除所得到的余數(shù)多項(xiàng)式和在發(fā)送端計(jì)算得到的余數(shù)多項(xiàng)式相同,則表示信號傳輸正常,沒有出現(xiàn)差錯;反之,就表明信號傳輸錯誤。為了更直觀的說明循環(huán)冗余校驗(yàn)碼的生成過程、校驗(yàn)過程,以8位的有效信息數(shù)據(jù)串和4位的循環(huán)冗余校驗(yàn)碼并在一起傳輸為例。
生成過程:
(1)假設(shè)要發(fā)送的數(shù)據(jù)串序列為11011101。自定義的生成多項(xiàng)式G(x)=x4+x3+x+1,其中k=4,相對應(yīng)的序列為11011。
(2)把待發(fā)送的數(shù)據(jù)串序列向左移動4位,后面補(bǔ)0,從而得到新的數(shù)據(jù)串序列為110111010000。
(3)使用模2除法,用生成多項(xiàng)式序列去除新生成的數(shù)據(jù)串序列。即:
這樣得到了余數(shù)多項(xiàng)式R(x)對應(yīng)序列為1010。
(4)將余數(shù)多項(xiàng)式R(x)對應(yīng)序列并到新數(shù)據(jù)串序列后面,得到帶有循環(huán)冗余校驗(yàn)碼的數(shù)據(jù)串序列:110111011010。
校驗(yàn)過程:
假如信息傳輸正常,接收到的帶有循環(huán)冗余校驗(yàn)碼的數(shù)據(jù)串序列必定可以被在發(fā)送端所自定義的生成多項(xiàng)式整除,也就是:
2.1 Verilog HDL實(shí)現(xiàn)循環(huán)冗余校驗(yàn)碼的生成代碼
其中polynomial表示生成多項(xiàng)式
if(dtemp[11]) dtemp[11:6] = dtemp[11:6]?polynomial;
if(dtemp[10]) dtemp[10:5] = dtemp[10:5]?polynomial;
if(dtemp[9]) dtemp[9:4] = dtemp[9:4]?polynomial;
if(dtemp[8]) dtemp[8:3] = dtemp[8:3]?polynomial;
if(dtemp[7]) dtemp[7:2] = dtemp[7:2]?polynomial;
if(dtemp[6]) dtemp[6:1] = dtemp[6:1]?polynomial;
圖1
2.2 循環(huán)冗余校驗(yàn)碼的校驗(yàn)代碼
對循環(huán)冗余校驗(yàn)碼的生成和校驗(yàn)進(jìn)行了功能仿真,結(jié)果如圖1所示。
由于循環(huán)冗余校驗(yàn)碼強(qiáng)大的校驗(yàn)?zāi)芰?在不同領(lǐng)域,循環(huán)冗余校驗(yàn)碼的生成多項(xiàng)式位數(shù)也不同,根據(jù)IEEE官方文件顯示,為了更好地保證校驗(yàn)可靠度,現(xiàn)在的位數(shù)越來越大,目前最長的己達(dá)到160位的循環(huán)冗余校驗(yàn)碼。下面簡單介紹幾種常見的循環(huán)冗余校驗(yàn)碼及其應(yīng)用領(lǐng)域。
(1)USB接口用CRC5。
對應(yīng)的標(biāo)準(zhǔn)生成多項(xiàng)式:
P(x) = x5+ x2+ 1
(2)ATM協(xié)議等用CRC8。
對應(yīng)的標(biāo)準(zhǔn)生成多項(xiàng)式:
P(x) = x8+ x2+ x + 1
(3)文件傳輸通信協(xié)議,X25協(xié)議等用CRC16。
對應(yīng)的標(biāo)準(zhǔn)生成多項(xiàng)式:
P(x) = x16+ x12+ x5+ 1
(4)IEEE802.3標(biāo)準(zhǔn)用CRC32。
對應(yīng)的標(biāo)準(zhǔn)生成多項(xiàng)式:
循環(huán)冗余校驗(yàn)碼己經(jīng)成為各行各業(yè)通信校驗(yàn)中最普遍的校驗(yàn)方式。本設(shè)計(jì)將循環(huán)冗余校驗(yàn)碼的生成與校驗(yàn)過程進(jìn)行細(xì)致的分析,最終采用Altera公司開發(fā)的FPFA芯片EP1C12Q240C8進(jìn)行結(jié)果驗(yàn)證。實(shí)驗(yàn)表明FPGA在實(shí)現(xiàn)循環(huán)冗余校驗(yàn)碼方面有著簡單高效優(yōu)勢。在未來實(shí)現(xiàn)更多位的循環(huán)冗余校驗(yàn)有著更深遠(yuǎn)的用途。
[1]樊昌信,曹麗娜.通信原理[M].北京:國防工業(yè)出版社,2008.
[2]Volnei A.Pedroni.Circuit Design with VHDL[M].BeiJing:Publishing House of Electronics Industry,2005.
[3]蔣立平.?dāng)?shù)字邏輯電路與系統(tǒng)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2008.
[4]閻石.?dāng)?shù)字電子技術(shù)基礎(chǔ)(第四版)[M].北京:高等教育出版社,2008.
[5]花漢兵,付文紅.EDA技術(shù)與實(shí)驗(yàn)(第2版)[M].北京:機(jī)械工業(yè)出版社,2013.
[6]周立功.EDA實(shí)驗(yàn)與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2006.
余小平(1970—),四川鄰水人,成都理工大學(xué)副教授,主要從事測試計(jì)量技術(shù)及儀器科研與教學(xué)工作。
周亮(1990—),江蘇沭陽人,碩士研究生,研究方向:電子技術(shù)及通信。