在Virtex-5 FPGA芯片中使用CRC硬模塊
數據損壞是與數據傳輸和存儲有關(guān)的首要問(wèn)題。只要是在通道上傳輸數據,就總會(huì )有出現某些錯誤的有限概率。
關(guān)鍵是接收模塊要能區分無(wú)錯消息和有錯消息。檢錯有多種方法,其中大多數都是專(zhuān)門(mén)為此目的引入冗余位。數據通信中常用的檢錯方法包括奇偶碼、漢明碼和循環(huán)冗余校驗(CRC),其中CRC使用最廣泛。
CRC根據一個(gè)給定的數據位組算出,然后在傳輸或存儲之前附加到數據幀尾部。接收或檢索到幀后,對其內容重新計算CRC,以此來(lái)驗證其有效性,確保數據無(wú)誤。
本文簡(jiǎn)述CRC計算所依據的原理,并且探討用線(xiàn)性反饋移位寄存器實(shí)現其硬件的方法。然后,我們把注意力轉向Xilinx?VirtexTM-5 LXT/SXT 器件中存在的 CRC 硬模塊。
原理
加法和減法運算是用模2算法執行;也就是說(shuō),這兩種運算與“異或”(XOR)運算相同。除了沒(méi)有進(jìn)位,多項式算法中的兩數相加與普通二進(jìn)制算法中的多數相加相同。
例如:二進(jìn)制消息流11001011表達為x7+x6+x3+x+1。傳輸點(diǎn)與接收點(diǎn)約定一個(gè)固定多項式,稱(chēng)為生成器多項式;這是CRC計算的關(guān)鍵參數。
將數據解釋為一個(gè)多項式的系數,用一個(gè)給定的生成器多項式除這些系數。除得的余數就是CRC。假設有一個(gè)m位消息序列和一個(gè)r階生成器多項式,發(fā)射器創(chuàng )建一個(gè)n位 (n=m+r)序列,稱(chēng)為幀校驗序列 (FCS),使這個(gè)(m+r)位合成幀可以被一個(gè)預先確定的序列整除。
發(fā)射器將r個(gè)0位附加到m位的消息,并且用生成器多項式除所得 m+r-1階多項式。這樣可得到一個(gè)階數等于或小于(r-1)的余數多項式。該余數多項式有r個(gè)系數,這些系數形成校驗和。將商丟棄。傳輸的數據是原m位消息后附r位校驗和。
在接收器上,可以按以下兩種標準方法之一評估所接收數據的有效性:
對收到的前m個(gè)位再次計算校驗和,然后與收到的校驗和(收到的后r個(gè)位)進(jìn)行比較。
對收到的全部(m+r)個(gè)位計算校驗和,然后與一個(gè)0余數進(jìn)行比較。
為了說(shuō)明第二種方法如何得出 0余數,我們做如下約定:
M=消息的多項表達式
R=發(fā)射器上所算得余數的多項表達式
G=生成器多項式
Q=用G除M得到的商
傳輸的數據對應于多項式 Mxr–R。變量xr表示消息為容納校驗和而產(chǎn)生的一個(gè)r位移位。
我們知道:Mxr=QG+R
在發(fā)射器上將校驗和R附加到消息中相當于從消息中減去余數。于是,傳輸的數據變?yōu)镸xr-R=QG,這顯然是G的倍數。這就是我們在第二種情況下得到0余數的過(guò)程。
不過(guò),這一過(guò)程對所傳輸數據中首0位和尾0位的個(gè)數不敏感。換句話(huà)說(shuō),無(wú)論消息插入還是刪除尾0位,余數都保持為0,從而使錯誤漏檢,這表明不會(huì )復原成同樣的位序列。下面介紹一種克服這一缺點(diǎn)的變通辦法。
評論