<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機與無線通信 > 設計應用 > 高速以太網(wǎng)CRC校驗的實現(xiàn)

          高速以太網(wǎng)CRC校驗的實現(xiàn)

          作者: 時間:2006-02-13 來源:網(wǎng)絡 收藏

          引言

          為了確保數(shù)據(jù)在計算機系統(tǒng)中傳輸和存儲中正確可靠,引入了信道編碼。對于信道編碼有兩個方面,一是要求編碼后的碼流頻譜適應信道頻率特性,二是檢測并糾正產(chǎn)生的誤碼。前者屬于譜成形技術(shù),后者為差錯控制技術(shù)。碼屬于后者。它是通過增加冗余信息,達到發(fā)現(xiàn)誤碼的目的。常見的冗余有奇偶,海明,循環(huán)冗余校驗。

          本文討論循環(huán)冗余校驗()的,及其在中的應用。

          循環(huán)冗余碼介紹

          1循環(huán)冗余碼是建立在近世代數(shù)基礎(chǔ)上的。編解碼電路簡單,檢錯能力強。在計算機系統(tǒng)的數(shù)據(jù)存儲及傳輸中得到廣泛應用。

          2編碼原理

          設待發(fā)送比特數(shù)據(jù)為Dx,生成多項式為Gx)。信息碼長k位,校驗碼長n-k位,則編碼后的碼長為n位。如圖1

          ,得到的多項式除以生成多項式Gx),最終得到的余式Rx)即為校驗碼。它跟在信息碼后一并發(fā)往信道。

          并不是所有的多項式都可以做位生成多項式G(x),常見的生成多項式有:

          CRC8=X8+X5+X4+1

          CRC-CCITT=X16+X12+X5+1

          CRC12=X12+X11+X3+X2+1

          CRC16=X16+X15+X5+1

          CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1

          3 CRC32

          信道編碼采用的是CRC32,所以在這里給出CRC32,它在一般CRC基礎(chǔ)上增加了些細節(jié)。

          介紹MAC幀結(jié)構(gòu)

          ,然后除以Gx),得到余式Rx)。

          (4) 對該比特位逐位求補,結(jié)果作為CRC。

          主要實現(xiàn)方式有串行和并行兩種:

          a)通過線性反饋移位寄存器串行實現(xiàn)(以CRC-CCITT為例),見圖2

          信息流由低位送入寄存器,當所有信息比特送入寄存器完畢后,寄存器中則為校驗碼。

          bCRC32的并行實現(xiàn)

          串行處理對于以太網(wǎng)如100M,10G等,顯然是不合適的,在此我門給出CRC的并行實現(xiàn)方法,以一個字節(jié)位處理單位。下面給出C語言實現(xiàn)的CRC32源程序:

          由于以太網(wǎng)CRC32要求對幀的前32bit取反,我門可以初始化寄存器為全1來達到此目的。

          Crcbuff中存放需要編碼的信息比特,最后計算出CRC校驗碼,跟隨信息碼一同發(fā)送出去。

          4總結(jié)

          本文是針對項目中嵌入式設備的聯(lián)網(wǎng)問題,設計的CRC32校驗算法,已經(jīng)在FPGA中成功實現(xiàn),由于用FPGA實現(xiàn)編碼相對簡單,這里就不再累述。

          作者Email: lijunshen148@sohu.com



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();