CAN总线中循环冗余校验码的原理及其电路实现

合集下载

循环冗余校验原理及程序

循环冗余校验原理及程序
dtemp(8DOWNTO3):=dtemp(8DOWNTO3)XORPOLYNOMIAL;
ENDIF;
IFdtemp(7)='1'THEN
dtemp(7DOWNTO2):=dtemp(7DOWNTO2)XORPOLYNOMIAL;
ENDIF;
IFdtemp(6)='1'THEN
dtemp(6DOWNTO1):=dtemp(6DOWNTO1)XORPOLYNOMIAL;
rdata_r <=X"000";
dfinish_r <='0';
error01_r <='0';
ELSIFhrecv='1'THEN
rdatacrc <=datacrci;
rdtemp :=datacrci(16DOWNTO5);
IFrdtemp(11)='1'THEN
rdtemp(11DOWNTO6):=rdtemp(11DOWNTO6)XORPOLYNOMIAL;
while(--len>=0)

ch=*crcbuf++;ch<<=8;
for(i=0;i<8;i++)

crc<<=1;
if((ch&0x8000)!=0)crc|=1;
if(crc>=gx)crc∧=gx;
ch<<=1;


return((crc==0)?0∶1)

以上CRC编码和校验函数结构良好,调用接口清晰,执行效率很高,且具有良好的可
hsend<=hsend_r;
datacrco<=datacrco_r;

循环冗余校验码(crc)的基本原理

循环冗余校验码(crc)的基本原理

循环冗余校验码(CRC)的基本原理循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。

对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R 的多项式G(x)。

根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。

校验码的具体生成过程为:假设发送信息用信息多项式f(X)表示,将f(x)左移R位(则可表示成f(x)*X R),这样f(x)的右边就会空出R 位,这就是校验码的位置。

通过f(x)* X R除以生成多项式G(x)得到的余数就是校验码。

几个基本概念1、多项式与二进制数码多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。

可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。

多项式包括生成多项式G(x)和信息多项式f(x)。

如生成多项式为G(x)=X4+X3+X+1,可转换为二进制数码11011。

而发送信息位1111,可转换为数据多项式为f(x)=X3+X2+X+1。

2、生成多项式是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。

在发送方,利用生成多项式对信息多项式做模2除生成校验码。

在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。

应满足以下条件:a、生成多项式的最高位和最低位必须为1。

b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。

c、不同位发生错误时,应该使余数不同。

d、对余数继续做模2除,应使余数循环。

将这些要求反映为数学关系是比较复杂的。

但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:N K 码距d G(x)多项式G(x)7 4 3 x3+x+1 10117 4 3 x3+x2+1 11017 3 4 x4+x3+x2+1 111017 3 4 x4+x2+x+1 1011115 11 3 x4+x+1 1001115 7 5 x8+x7+x6+x4+1 11101000131 26 3 x5+x2+1 10010131 21 5 x10+x9+x8+x6+x5+x3+1 11101101 00163 57 3 x6+x+1 100001163 51 5 x12+x10+x5+x4+x2+1 10100001 101011041 1024 x16+x15+x2+1 110000000000 00101图9 常用的生成多项式3、模2除(按位除)模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。

循环冗余校验码的原理及应用

循环冗余校验码的原理及应用

循环冗余校验码的原理及应用循环冗余校验码(Cyclic Redundancy Check,简称CRC)是一种在数据传输中用于错误检测的校验码。

CRC的原理是通过在发送数据时附加一个校验值,接收端在接收数据时计算校验值,然后与发送端传递的校验值进行比较,如果两者一致,则说明数据传输没有错误,否则则存在数据错误。

CRC的应用非常广泛,包括网络传输、存储介质、通信等领域。

下面将详细介绍CRC的原理和应用。

1.原理:(1)生成多项式:CRC使用一个生成多项式进行计算。

该多项式可以是任意的,但在应用中通常使用一些标准的多项式。

生成多项式的位数确定了校验码的位数,通常为32位或64位。

(2)数据附加:在发送数据前,发送端会通过生成多项式对数据进行计算,生成一个校验码。

然后将校验码附加在原始数据的末尾。

(3)接收端计算:接收端在接收到数据后,通过与发送端使用同样的生成多项式对接收到的数据进行计算,生成一个接收端的校验码。

(4)校验比较:接收端的生成校验码与发送端传递的校验码进行比较,若一致,则说明数据传输没有错误;若不一致,则说明数据传输存在错误。

2.应用:(1)数据传输:CRC主要应用在网络传输领域,如以太网、Wi-Fi和蓝牙等。

在数据包发送前,发送端会对数据包进行CRC计算,然后将计算得到的校验码附加在数据包中。

接收端在接收到数据包后,再进行CRC计算,然后将计算得到的校验码与接收到的校验码进行比较,以判断是否存在传输错误。

(2)存储介质:CRC也应用在存储介质中,如硬盘驱动器、光盘等。

在数据存储时,CRC会被计算并存储在磁盘或光盘的头部或尾部。

在数据读取时,通过计算CRC来确保数据的完整性。

(3)通信:通信设备通常会使用CRC来检测数据的传输错误。

例如,调制解调器在发送数据前会计算CRC并将其附加在数据中,接收端在接收到数据后计算CRC,并与接收到的CRC进行比较。

(4)校验和验证:CRC也可以用于验证数据的完整性。

循环冗余检验的原理说明

循环冗余检验的原理说明

循环冗余检验的原理说明在数字通信和数据存储领域,为了确保数据的准确性和完整性,常常会使用各种校验方法。

其中,循环冗余检验(Cyclic Redundancy Check,简称 CRC)是一种被广泛应用的差错检测技术。

那什么是循环冗余检验呢?简单来说,它就像是数据的“质检员”,通过一系列复杂但又有规律的计算,来判断传输或存储的数据是否出现了错误。

要理解循环冗余检验的原理,我们先来看看它是怎么工作的。

假设我们要传输一段数据,比如说一串二进制数字。

在发送端,会根据预先设定好的一个生成多项式,对这串数据进行计算,得到一个余数,这个余数就是循环冗余码(CRC 码)。

然后,把这个 CRC 码附加在原始数据的后面,一起发送出去。

在接收端,收到数据后,同样根据那个生成多项式,对包括附加的CRC 码在内的整个数据进行计算。

如果计算得到的余数是零,那就说明数据在传输过程中没有出错;如果余数不是零,那就意味着数据出现了错误。

那这个神奇的生成多项式是怎么来的呢?它可不是随便选的。

生成多项式的选择直接影响到循环冗余检验的检错能力。

一般来说,生成多项式的阶数越高,检错能力就越强。

但同时,计算的复杂度也会增加。

为了更好地理解循环冗余检验的计算过程,我们来举个例子。

假设我们的生成多项式是 G(x) = x³+ x + 1,对应的二进制数是 1011。

要检验的数据是 1010。

首先,在数据后面补三个零,得到 1010000。

然后,用这个数除以生成多项式对应的二进制数1011。

计算过程就像我们平常做除法一样,只不过这里是二进制的除法。

通过计算,得到余数是 100。

这个 100 就是 CRC 码。

把它附加在原始数据 1010 后面,得到 1010100,发送出去。

接收端收到 1010100 后,再次除以 1011。

如果余数是零,说明数据没错;如果不是零,就说明数据出错了。

循环冗余检验之所以能够有效地检测错误,是因为它利用了数学上的多项式运算的特性。

循环冗余校验码的原理及应用

循环冗余校验码的原理及应用

循环冗余校验码的原理及应用循环冗余校验码(Cyclic Redundancy Check, CRC)是一种常见的错误检测技术,用于验证数据传输的准确性。

它通过在发送数据之前附加一个冗余的校验码,并在接收端对接收到的数据进行校验,以便快速检测并纠正传输中的错误。

1.将每个待发送的数据与一个固定的生成多项式进行除法运算。

2.将除法运算的余数作为校验码添加到发送的数据后面。

3.接收端在接收到数据后,同样使用相同的生成多项式进行除法运算。

4.若接收端得到的余数为0,则说明数据传输没有错误;否则,说明数据传输中出现了错误。

1.网络通信:在计算机网络中,常使用CRC校验码来验证数据包的完整性,防止在传输过程中数据被篡改或错误。

2.存储设备:在硬盘驱动器、固态硬盘等存储设备中,使用CRC校验码来检测存储数据的正确性,防止数据损坏。

3.移动通信:在移动通信中,如GSM、CDMA、LTE等系统中,使用CRC校验来保证无线信号的可靠传输。

4.协议栈:在各种网络协议中,如以太网、WiFi、TCP/IP等,CRC校验码被用于保证数据传输的正确性。

5.数据传输设备:在串行通信中,如串口通信、RS-232等,常使用CRC校验码来验证数据传输。

1.高检测准确率:使用CRC校验码可以有效检测常见的错误类型,如单个位错、双比特错等。

2.高效性能:CRC算法的计算速度快,在实际应用中对系统的性能要求较低。

3.算法简单:CRC算法的实现比较简单和高效,适用于各种硬件和软件平台。

4.容错能力强:CRC校验码可以检测出较长的比特序列错误,如在存储设备中检测大容量文件的正确性。

5.灵活性:通过选择不同的生成多项式,CRC校验码可以适用于不同的数据长度和校验要求。

然而,循环冗余校验码也有一些不足之处,如:1.无法纠正错误:CRC校验码只能检测错误,而无法对错误数据进行纠正。

2.相同残余:不同的错误数据可能会产生相同的CRC校验码,从而导致无法检测到错误。

基于CAN总线的CRC校验码的原理与实现

基于CAN总线的CRC校验码的原理与实现

基于CAN总线的CRC校验码的原理与实现CAN(Controller Area Network)总线是一种基于串行通信的网络协议,广泛用于汽车电子和工业控制领域。

CRC(Cyclic Redundancy Check)校验码是一种常用的错误检测技术,用于保证数据传输的可靠性。

在CAN总线中,CRC校验码用于检测数据在传输过程中是否发生了错误。

CRC校验码的原理是通过多项式除法来计算校验值。

假设要发送的数据为D,生成多项式为G,校验值为R。

发送端首先计算D和G的多项式除法,得到商S和余数R。

发送端将R作为校验值连同数据一起发送出去。

接收端接收到数据后,再次计算接收到的数据和G的多项式除法,得到接收端计算出的校验值R'。

如果R'与接收到的校验值R相等,则认为数据传输无误;如果不相等,则认为数据传输发生错误。

CAN总线使用多项式除法来计算CRC校验码。

多项式的形式为X^15 + X^14 + X^10 + X^8 + X^7 + X^4 + X^3 + X^0。

在CRC校验过程中,生成多项式是固定不变的,称为生成多项式(Generator Polynomial)。

接收端和发送端双方事先约定好这个生成多项式。

接收端和发送端的CRC校验码计算过程相同,只是计算的数据不同。

接收端将接收到的数据和接收到的校验值放入计算器中,然后进行多项式除法运算。

如果计算得到的余数为0,说明数据传输无误。

否则,说明数据传输发生错误。

具体的实现过程如下:1.定义生成多项式。

生成多项式是常数,已事先约定好。

2.初始化CRC寄存器。

CRC寄存器的初值可以是全0或者全1,事先也要约定好。

3.从CAN总线接收到一帧数据。

4.将接收到的数据和接收到的校验值放入CRC寄存器。

5.执行多项式除法运算。

将CRC寄存器中的数据和生成多项式进行异或运算,然后将结果作为新的CRC寄存器的值。

6.重复以上步骤,直至计算到剩余的数据位为0。

基于CAN总线的CRC校验码的原理与实现

基于CAN总线的CRC校验码的原理与实现

基于CAN总线的CRC校验码的原理与实现作者:王鹏来源:《赤峰学院学报·自然科学版》 2014年第4期王鹏(赤峰学院计算机与信息工程学院,内蒙古赤峰 024000)摘要:CAN总线又称为控制器局域网技术,属于工业现场总线,应用范围很广.CAN系统中通常采用反馈重发机制对通信过程进行差错控制.当接收端反馈给发送端出错信息后,发送端便自动重发,经此过程,只需要检错就可以了.循环冗余校验码实现简单,误判率比较低,还具有纠错功能,在通信系统中应用较为广泛.关键词:控制器局域网;差错校验;CRC循环校验中图分类号:TP393.1 文献标识码:A 文章编号:1673-260X(2014)02-0048-02CAN(Controller Area Network)全称控制器局域网,是工业现场总线的一种,是应用最广泛的开放式现场总线之一.与其它通信网的不同之处在于:第一,报文传送中不包含目的地址,而是以全网广播为基础,各接收站根据报文中的标识符过滤报文,以决定接收还是丢弃,其优点在于可在线上网下网、即插即用和多站接收;第二,强化了对数据安全性的要求,满足控制系统及其它较高数据安全要求的系统需求.CAN系统中通常采用反馈重发机制对通信过程进行差错控制,以保证报文能正确的传输.当接收端反馈给发送端出错信息后,发送端便自动重发,在此过程中,只需要检错就可以了.一般的检错码有两类:奇偶校验码和循环冗余校验码.奇偶校验码只具有检错能力,实现方法简单,不能纠错;循环冗余校验码也很简单,而且误判率比较低,还具有纠错功能,在通信系统中应用较为广泛.下面,通过实例,来说明CAN网络中循环冗余校验码的工作原理和实现方法.1 CRC检错码的工作原理一般情况,一个由二进制数位串组成的发送序列,可以用一个只含有0和1系数的多项表达式的系数表示出来,例如:代码1001011对应的多项式为X6+X3+ X+1,再如:代码为1010111,则对应的多项式X6+X4+X2+X+1.CRC检错码是采用多项式相除的运算方法实现的,如被处理报文的比特序列对应的多项式为P(X),收发双方约定的多项式为G(X),用P(X)除以G(X)后,求得余数多项式R(X),并将多项式R(X)附加到多项式P(X)的后边,生成M(X),这样能保证M(X)除以G(X)的余数为0.此时,可以将M(X)作为发送序列发给接收方.接收方用收到的报文N(X) 去除同样的G(X),如果余数等于0,则说明接收到的序列与发送的序列一致,接收到的数据没有错误;否则,说明传输过程中出错,由发送端重发,重新开始CRC校验,直到接收到的数据没有错误为止.2 运算规则(1)在进行CRC计算时,采用二进制模2运算规则,对两个操作数进行逻辑异或运算;即2个数据相同,结果为0;2个数据不同,结果为1.(2)在进行CRC 计算前先将多项式P(X)乘以Xn,其中n为生成多项式G(X)的最高幂值.对多项式除法来讲,P(X)*Xn就是将P(X)左移n位,用来存放余数R(X),所以实际发送的报文就变为P(X)*Xn+R(X);即M(X).(3)在进行基于模2运算的多项式除法时,如果部分余数首位为1,则商上1,否则商上0.再异或运算求得余数,余数最高位舍弃.按此方法,最终得到的余数比除数少一位.此余数即为R(X);添加在信息位后便构成CRC码字的发送序列.用此发送序列多项式再除以G(X)的余数一定为0,以方便接收方的校验.下面通过一个实例来说明CRC的运行过程.例如:假设待发送的信息位为1011001,则对应的多项式P(X)=X6+X4+X3+1,若选取G(X)=X4+X3 +1,其对应代码11001,则X4*P(X)=X10+X8+X7+X4,对应的代码为10110010000,首先由模2除法求余数多项式R(X),过程如下所示:得到余数1010,即R(X)=X3+X,对发送序列P(X)进行改造,生成M(X):M(X)=P(X)*X4+R(X)=X10+X8+X7+X4+X3+X,即发送序列为10110011010.也就是说信道上发送的码字为10110011010.若传输过程无错,则接收方收到的代码序列与发送方相同,所以接收端的校验过程就是将接收到的码字多项式除以G(X).若余数多项式为零则认为传输无差错;若余数多项式不为零则传输有差错.如果发送序列为10110011010,在接收端收到的是10100011010,对接收端来说,如何发现错误,是通过验证此时的余数多项式是否为0来的说明,运算如下:上式运算结果得到一个0111的余数多项式,即余数不为0,说明接收到的信息有错误,要求发送端重发;当然,一些特殊场合,可以进一步计算错误位是哪位,从而进行修正,这样的编码称为纠错码.CAN总线中要求生成多项式G(X)的首位和最后一位的系数必须为1,通常规定的G(x)有:CRC-4: x4+x3+x2+1CRC-8: x8+x2+x+1CRC-10: x10+x9+x5+x4+x2+1CRC-12: x12+x11+x3+x2+x+1CRC-16: x16+x15+x2+1CRC-CCITT: x16+x12+x5+1CRC-32: x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1CAN总线中的CRC校验采用的多项式比一般CRC校验要高很多,其检错能力更强,误判率极低,是提高数据传输质量的有效检错手段.参考文献:〔1〕杨春杰,王曙光.CAN总线技术[M].北京航空航天大学出版社,2011.〔2〕张培仁.CAN总线设计及分布式控制[M].清华大学出版社,2012.〔3〕饶运涛.现场总线CAN原理与应用技术(第2版)[M].北京航空航天大学出版社,2007.。

CAN总线中循环冗余校验码的原理及其电路实现

CAN总线中循环冗余校验码的原理及其电路实现

摘要:在can网络中传输摄文时,噪声干扰或传输中断等因素往往使接收端收到的报文出现错码。

为了及时可靠地把报文传输给对方并有效地检测错误,需要采用差错控制。

详细介绍了can总线中循环冗余校验码的差错控制原理及其实现方法。

关键词:循环冗余校验差错控制报文在can系统中为保证报文传输的正确性,需要对通信过程进行差错控制。

目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发送端便自动重发,此时的差错控制只需要检错功能。

常用的检错码两类:奇偶校验码和循环冗余校验码。

奇偶校验码是一种最常见的检错码,其实现方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低,所以在通信系统中获得了广泛的应用。

下面介绍can网络中循环冗余校验码(即crc码)的原理和实现方法。

1 crc码检错的工作原理crc码检错是将被处理报文的比特序列当作一个二进制多项式a(x)的系数,该系数除以发送方和接收方预先约定好的生成多项式g(x)后,将求得的余数p(x)作为crc校验码附加到原始的报文上,并一起发给接收方。

接收方用同样的g(x)去除收到的报文b(x),如果余数等于p(x),则传输无误(此时a(x)和b(x)相同);否则传输过程中出错,由发送端重发,重新开始crc校验,直到无误为止。

上述校验过程中有几点需注意:①在进行crc计算时,采用二进制(模2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异或运算;②在进行crc计算前先将发送报文所表示的多项式a(x)乘以xn,其中n为生成多项式g(x)的最高幂值。

对二进制乘法来讲,a(x)·xn就是将a(x)左移n 位,用来存放余数p(x),所以实际发送的报文就变为a(x)·xn+p(x);③生成多项式g(x)的首位和最后一位的系数必须为1。

图1为crc校验的工作过程。

目前已经有多种生成多项式被列入国际标准中,如:crc-4、crc-12、crc-16、ccitt-16、crc-32等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要:在can网络中传输摄文时,噪声干扰或传输中断等因素往往使接收端收到的报文出现错码。

为了及时可靠地把报文传输给对方并有效地检测错误,需要采用差错控制。

详细介绍了can总线中循环冗余校验码的差错控制原理及其实现方法。

关键词:循环冗余校验差错控制报文在can系统中为保证报文传输的正确性,需要对通信过程进行差错控制。

目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发送端便自动重发,此时的差错控制只需要检错功能。

常用的检错码两类:奇偶校验码和循环冗余校验码。

奇偶校验码是一种最常见的检错码,其实现方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低,所以在通信系统中获得了广泛的应用。

下面介绍can网络中循环冗余校验码(即crc码)的原理和实现方法。

1 crc码检错的工作原理crc码检错是将被处理报文的比特序列当作一个二进制多项式a(x)的系数,该系数除以发送方和接收方预先约定好的生成多项式g(x)后,将求得的余数p(x)作为crc校验码附加到原始的报文上,并一起发给接收方。

接收方用同样的g(x)去除收到的报文b(x),如果余数等于p(x),则传输无误(此时a(x)和b(x)相同);否则传输过程中出错,由发送端重发,重新开始crc校验,直到无误为止。

上述校验过程中有几点需注意:①在进行crc计算时,采用二进制(模2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异或运算;②在进行crc计算前先将发送报文所表示的多项式a(x)乘以xn,其中n为生成多项式g(x)的最高幂值。

对二进制乘法来讲,a(x)·xn就是将a(x)左移n 位,用来存放余数p(x),所以实际发送的报文就变为a(x)·xn+p(x);③生成多项式g(x)的首位和最后一位的系数必须为1。

图1为crc校验的工作过程。

目前已经有多种生成多项式被列入国际标准中,如:crc-4、crc-12、crc-16、ccitt-16、crc-32等。

can总线中采用的生成多项式为g(x)=x15+x14+x10+x8+x7+x4+x3+1。

可以看出,canu叫线中的crc校验采用的多项式能够校验七级,比一般crc校验(crc-4、crc-12、crc-16等)的级数(二~五级)要高许多,因而它的检错能力很强,误判率极低,成为提高数据传输质量的有效检错手段。


2 产生crc校验码的硬件电路
2 crc码的电路实现2.1 硬件电路的特点在can总线中为了产生crc码,硬件电路除了具有复位和时钟信号以外,还需要以下两个控制信号的参与:①填充位解除信号destuff,它的有效逻辑值是1;②crc检验的使能信号enable,有效逻辑也为1。

该硬件电路的特点是采用选择器和反相器代替传统设计中用的异或门,既实现了比较功能,又降低了生产成本,同时也为工程师们提供了一种新的设计思路。

2.2 硬件电路图图2即为实现crc码的硬件电路图。

图中需要说明的几点如下:①使能信号和填充位解除信号省略;②crcnxt代表的逻辑值为输入报文序列和crc寄存器的最高位异或的结果;③标号0~14所指示的为15位crc寄存器,上升沿触发;④标号1~6所指示的为选择器和反相器的组合逻辑,实现异或功能,该选择器的逻辑功能为y=ab+ac,具体结构如图3所示。

2.
3 电路工作过程从以上分析可知:①当enable=0时,crc清0;②当enable=1、destuff=1时,进行正常crc计算;③当enable=1而destuff=0时,正在解除填充时,数据暂停传送。

在各个控制信号均有效时,输入报文的每一位都是和crc寄存器的最高位相异和后移入最低位,同时寄存器的第13、9、7、6、3、2位均和其最高位异或,结果分别左移一位;其它未进行异或操作的寄存器位值也分别左移一位,直到报文的每一位都移入crc寄存器为止,此时寄存器中的值取为计算得到的crc码。

如果报文的比特序列长度为16,则需要左移16次才能对报文的每一位均进行处理。

如果以ck表示crc寄存器的第k位位值、ck'表示移位后的第k位位值(k=0,1,2,3……15),则移位规律见表1。

表 1 移位规律表c14'=c13^crcnxtc13'=12c12'=c11c11'=c10c10'=c9^crcnxtc9'=c8c8'=c7^crcnxtc7'=c6^cr cnxtc6'=c5c5'=c4c4'=c3^crcnxtc3'=c2^crcnxtc2'=c1c1'=c0c0'=crcnxt^datain 3 crc校
验码的软件实现crc校验用软件实现起来非常方便。

鉴于目前的资料中介绍的方法多使用c 语言、汇编语言等实现,而缺乏用硬件描述语言实现,这里给出crc码的verilog hdl之行为级描述程序。

本程序在verilog_xl下编译通过,同时在synopsis上成功进行了综合及优化。

//用verilog hdl实现crc码module crc(clk,rst,enable,destuff,datain,crc);input clk;input rst;input enable;input destuff;input datain;output[14:0]crc;reg[14:0]crc;wire crcnxt=datain^crc[14];always@(posedge rst or posedge clk)beginif(rst)crc=0;else if(enable &amp;&amp; destuff)beginif(crcnxt)crc&lt;=crc^15h'4599;elsecrc&lt;=&#123;crc[13:0],1'b0&#12 5;;endendendmodule
图4 crc仿真波形图
4 仿真波形假设发送的是一个标准格式的远程帧,需求的数据字节为8,标识符序列为10101011000,则对上述程序仿真后的波形如图4所示。

crc序列从第20位开始输出。

crc 校验码的检错能力很强,并且由于crc码检错的软件和硬件实现都很简单,因而被广泛地应用于各类数据校验中。

crc码检错是提高数据传输质量、高效检错的有力手段。

相关文档
最新文档