資源描述:
《crc16校驗(yàn)碼移位算法及vhdl實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、CRC16校驗(yàn)碼移位算法及VHDL實(shí)現(xiàn) 摘要在數(shù)據(jù)輸出過(guò)程中,為保證數(shù)據(jù)的可靠性,通常會(huì)在數(shù)據(jù)的末尾加上校驗(yàn)信息。CRC校驗(yàn)技術(shù)編碼和解碼過(guò)程簡(jiǎn)單,糾錯(cuò)能力強(qiáng),被廣泛應(yīng)用于通信領(lǐng)域。本文介紹一種移位產(chǎn)生CRC校驗(yàn)碼的方法,并給出了其VHDL實(shí)現(xiàn)及仿真分析?! 娟P(guān)鍵詞】CRC校驗(yàn)移位CRC16VHDL 在數(shù)據(jù)傳輸過(guò)程中,由于信道干擾,往往使得發(fā)送和接收的數(shù)據(jù)不一致。為了降低誤碼率,保證傳輸數(shù)據(jù)的可靠性,通常會(huì)改進(jìn)信道的傳輸質(zhì)量或在傳輸?shù)臄?shù)據(jù)中加入校驗(yàn)信息。在各種校驗(yàn)方法中,循環(huán)冗余校驗(yàn)CRC(CyclicRedundancyCheck)是一種最常用的方法。C
2、RC校驗(yàn)技術(shù)是一種十分有效的數(shù)據(jù)傳輸錯(cuò)誤檢測(cè)技術(shù),由于其編碼和解碼過(guò)程簡(jiǎn)單,檢錯(cuò)和糾錯(cuò)能力強(qiáng),廣泛應(yīng)用于通信領(lǐng)域用于實(shí)現(xiàn)差錯(cuò)控制。串行通信普遍應(yīng)用于工業(yè)通信控制領(lǐng)域,如何提高數(shù)據(jù)的傳輸可靠性尤為重要,現(xiàn)有的串口在數(shù)據(jù)傳輸過(guò)程中加入CRC校驗(yàn)可提高數(shù)據(jù)傳輸?shù)目煽啃?。普通串行口不自帶CRC校驗(yàn)功能,大多數(shù)應(yīng)用中都是通過(guò)軟件編程計(jì)算CRC碼后再附加在數(shù)據(jù)末尾傳輸?shù)?,由于軟件?zhí)行耗費(fèi)時(shí)間長(zhǎng),影響數(shù)據(jù)的傳輸速度。現(xiàn)場(chǎng)可編程門陣列FPGA(Field-ProgrammableGateArray)在數(shù)字系統(tǒng)設(shè)計(jì)中已被廣泛使用。用硬件描述語(yǔ)言(VHDL)實(shí)現(xiàn)CRC校驗(yàn)碼的計(jì)算,
3、然后下載到FPGA芯片中,硬件實(shí)現(xiàn)CRC校驗(yàn),與軟件實(shí)現(xiàn)相比,對(duì)數(shù)據(jù)的傳輸速度影響較小。本文介紹一種CRC16校驗(yàn)碼串行產(chǎn)生的方法,并給出了其VHDL實(shí)現(xiàn)及仿真分析。 1CRC校驗(yàn)原理 在發(fā)送方要發(fā)送的K位數(shù)據(jù)碼后,以一定的規(guī)則產(chǎn)生一個(gè)r位用于校驗(yàn)的監(jiān)督碼,附加在原數(shù)據(jù)后面,構(gòu)成的信息碼為n=k+r位,因此,這種編碼又叫(n,k)碼。接收方根據(jù)通信雙方約定的規(guī)則進(jìn)行校驗(yàn),確定數(shù)據(jù)是否出錯(cuò)。這個(gè)規(guī)則即“生成多項(xiàng)式”。K位數(shù)據(jù)碼表示為M(x),選擇合適的CRC生成多項(xiàng)式G(x),G(x)的最高次冪為r。把M(x)左移r位,即M(x)*xr對(duì)G(x)做不借位除法(
4、即異或運(yùn)算),所得余數(shù)為CRC校驗(yàn)碼,即: 其中R(x)為CRC校驗(yàn)碼。發(fā)送方以上述原理生成校驗(yàn)碼附加在數(shù)據(jù)末尾發(fā)送出去,接收方接收到的數(shù)據(jù)也對(duì)同樣的G(x)做除法,如果余數(shù)為0,則認(rèn)為數(shù)據(jù)傳送無(wú)誤,否則按出錯(cuò)處理?! ?CRC16校?實(shí)現(xiàn)原理圖 常用的生成多項(xiàng)式有多種,如CRC4、CRC8、CRC16和CRC32等。計(jì)算CRC校驗(yàn)碼可以用串行和并行的方法實(shí)現(xiàn)。串行實(shí)現(xiàn)電路結(jié)構(gòu)簡(jiǎn)單,但比較耗時(shí),位數(shù)越多越費(fèi)時(shí)。并行實(shí)現(xiàn)電路結(jié)構(gòu)復(fù)雜,但節(jié)省時(shí)間。本文介紹一種采用CRC16生成多項(xiàng)式串行移位產(chǎn)生校驗(yàn)碼的計(jì)算過(guò)程。生成多項(xiàng)式為G(x)=g16x16+g15x15+
5、……+g1x+g0,在實(shí)際使用中,并不需要考慮最高位,它總是被舍棄的,因此只要考慮余下16個(gè)數(shù)據(jù)位。在串行通信中實(shí)現(xiàn)移位計(jì)算CRC16校驗(yàn)碼的原理如圖1所示。 圖1中為乘法,?為異或?! D1所示為CRC16校驗(yàn)原理圖由D觸發(fā)器、與門和異或門構(gòu)成?! ?shí)現(xiàn)原理:發(fā)送一個(gè)字節(jié)數(shù)據(jù),末尾加入16位校驗(yàn)碼。CRC16寄存器初始化為0,串行移入數(shù)據(jù),CRC16寄存器左移1位,檢查移除位,如果為1,CRC16寄存器與生成多項(xiàng)式異或,結(jié)果存入CRC16寄存器,如果不為0,則僅僅移位,不做異或。循環(huán)進(jìn)行24次后,C15……C0為所求校驗(yàn)碼。用Cik表示上一次移位后CRC的值
6、,Cik+1表示本次移位CRC的值,其關(guān)系如式2所示。式2中i=1,2,3,4,……,15?! ∮肅RC16產(chǎn)生校驗(yàn)碼由于G(x)并不是所有位都為1,因此其具體實(shí)現(xiàn)要簡(jiǎn)單得多。G(x)=x16+x15+x2+1是CRC16生成多項(xiàng)式中最常用形式,舍棄掉最高位,編碼為1000000000000011,由式2可知,Cik和Cik+1的關(guān)系如式3所示。式3中i=2,15,j=1,3,4……14?! ∮迷撋啥囗?xiàng)式產(chǎn)生校驗(yàn)碼,由于只有第15、2和0位為1,因此每次移位產(chǎn)生的CRC值中只要C15、C2及C0位和移出的位和對(duì)應(yīng)的g值有關(guān),CRC的其它位值都等于上次移位的CR
7、C值中對(duì)應(yīng)低一位的值。其產(chǎn)生校驗(yàn)碼的原理圖只要在圖1中保留D寄存器及C15、C2和C0對(duì)應(yīng)的異或門,其它位對(duì)應(yīng)的乘法和異或可以全部省去,大大簡(jiǎn)化了電路?! ?CRC校驗(yàn)在FPGA中的實(shí)現(xiàn)和仿真 在FPGA中進(jìn)行系統(tǒng)設(shè)計(jì),可采用硬件描述語(yǔ)言(HDL)設(shè)計(jì)也可以采用原理圖的設(shè)計(jì)方法。本文采用兩者結(jié)合形式進(jìn)行,采用自下而上的設(shè)計(jì)方法,先模塊化設(shè)計(jì)產(chǎn)生1位數(shù)據(jù)的CRC16校驗(yàn)碼,然后頂層文件調(diào)用以上的模塊產(chǎn)生8位數(shù)據(jù)的CRC16校驗(yàn)碼。頂層文件的實(shí)體定義為: LIBRARYieee; USEieee.std_logic_1164.all; LIBRARYwork
8、; ENTITYCRC