位置:51电子网 » 技术资料 » 通信网络

高速以太网CRC校验的实现

发布时间:2008/5/26 0:00:00 访问次数:850

        

    

    一 引言

    为了确保数据在计算机系统中传输和存储中正确可靠,引入了信道编码。对于信道编码有两个方面,一是要求编码后的码流频谱适应信道频率特性,二是检测并纠正产生的误码。前者属于谱成形技术,后者为差错控制技术。crc码属于后者。它是通过增加冗余信息,达到发现误码的目的。常见的冗余校验有奇偶校验,海明校验,循环冗余校验。

    本文讨论循环冗余校验(crc)的实现,及其在以太网中的应用。

    

    二 循环冗余码介绍

    1循环冗余码是建立在近世代数基础上的。编解码电路简单,检错能力强。在计算机系统的数据存储及传输中得到广泛应用。

    2编码原理

    设待发送比特数据为d(x),生成多项式为g(x)。信息码长k位,校验码长n-k位,则编码后的码长为n位。如图1:

    

    

    

    编码步骤:信息数据d(x)乘以 ,得到的多项式除以生成多项式g(x),最终得到的余式r(x)即为crc校验码。它跟在信息码后一并发往信道。

    并不是所有的多项式都可以做位生成多项式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基础上增加了些细节。

    介绍以太网mac帧结构

    

    从数学上讲,相应给定帧的crc值由下述过程定义:

    (1) 对该帧的前32位作求补运算。

    (2) 然后,将该帧的n位看作为(n-1)阶多项式m(x)的系数。

    (3) m(x)乘以 ,然后除以g(x),得到余式r(x)。

    (4) 对该比特位逐位求补,结果作为crc。

    

    主要实现方式有串行和并行两种:

    (a)通过线性反馈移位寄存器串行实现(以crc-ccitt为例),见图2

    

    

    

    信息流由低位送入寄存器,当所有信息比特送入寄存器完毕后,寄存器中则为校验码。

    (b)crc32的并行实现

    串行处理对于高速以太网如100m,10g等,显然是不合适的,在此我门给出crc的并行实现方法,以一个字节位处理单位。下面给出c语言实现的crc32源程序:

    

    

    

    

    

    

    

    由于以太网crc32要求对帧的前32bit取反,我门可以初始化寄存器为全1来达到此目的。

    crcbuff中存放需要编码的信息比特,最后计算出crc校验码,跟随信息码一同发送出去。

    4总结

    本文是针对项目中嵌入式设备的联网问题,设计的crc32校验算法,已经在fpga中成功实现,由于用fpga实现编码相对简单,这里就不再累述。

    

    作者email: lijunshen148@sohu.com

    

    

        

    

    一 引言

    为了确保数据在计算机系统中传输和存储中正确可靠,引入了信道编码。对于信道编码有两个方面,一是要求编码后的码流频谱适应信道频率特性,二是检测并纠正产生的误码。前者属于谱成形技术,后者为差错控制技术。crc码属于后者。它是通过增加冗余信息,达到发现误码的目的。常见的冗余校验有奇偶校验,海明校验,循环冗余校验。

    本文讨论循环冗余校验(crc)的实现,及其在以太网中的应用。

    

    二 循环冗余码介绍

    1循环冗余码是建立在近世代数基础上的。编解码电路简单,检错能力强。在计算机系统的数据存储及传输中得到广泛应用。

    2编码原理

    设待发送比特数据为d(x),生成多项式为g(x)。信息码长k位,校验码长n-k位,则编码后的码长为n位。如图1:

    

    

    

    编码步骤:信息数据d(x)乘以 ,得到的多项式除以生成多项式g(x),最终得到的余式r(x)即为crc校验码。它跟在信息码后一并发往信道。

    并不是所有的多项式都可以做位生成多项式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基础上增加了些细节。

    介绍以太网mac帧结构

    

    从数学上讲,相应给定帧的crc值由下述过程定义:

    (1) 对该帧的前32位作求补运算。

    (2) 然后,将该帧的n位看作为(n-1)阶多项式m(x)的系数。

    (3) m(x)乘以 ,然后除以g(x),得到余式r(x)。

    (4) 对该比特位逐位求补,结果作为crc。

    

    主要实现方式有串行和并行两种:

    (a)通过线性反馈移位寄存器串行实现(以crc-ccitt为例),见图2

    

    

    

    信息流由低位送入寄存器,当所有信息比特送入寄存器完毕后,寄存器中则为校验码。

    (b)crc32的并行实现

    串行处理对于高速以太网如100m,10g等,显然是不合适的,在此我门给出crc的并行实现方法,以一个字节位处理单位。下面给出c语言实现的crc32源程序:

    

    

    

    

    

    

    

    由于以太网crc32要求对帧的前32bit取反,我门可以初始化寄存器为全1来达到此目的。

    crcbuff中存放需要编码的信息比特,最后计算出crc校验码,跟随信息码一同发送出去。

    4总结

    本文是针对项目中嵌入式设备的联网问题,设计的crc32校验算法,已经在fpga中成功实现,由于用fpga实现编码相对简单,这里就不再累述。

    

    作者email: lijunshen148@sohu.com

    

    

相关IC型号

热门点击

 

推荐技术资料

耳机的焊接
    整机电路简单,用洞洞板搭线比较方便。EM8621实际采... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!