CAN总线协议中CRC编码的VHDL实现

上传人:鲁** 文档编号:466221168 上传时间:2023-10-20 格式:DOC 页数:10 大小:338KB
返回 下载 相关 举报
CAN总线协议中CRC编码的VHDL实现_第1页
第1页 / 共10页
CAN总线协议中CRC编码的VHDL实现_第2页
第2页 / 共10页
CAN总线协议中CRC编码的VHDL实现_第3页
第3页 / 共10页
CAN总线协议中CRC编码的VHDL实现_第4页
第4页 / 共10页
CAN总线协议中CRC编码的VHDL实现_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《CAN总线协议中CRC编码的VHDL实现》由会员分享,可在线阅读,更多相关《CAN总线协议中CRC编码的VHDL实现(10页珍藏版)》请在金锄头文库上搜索。

1、CAN总线协议中CRC编码的VHDL实现CAN总线协议中CRC编码的VHDL实现2010-3-8 19:40:00 来源:中国自动化网 浏览:144 网友评论 条 点击查看摘 要:针对CAN协议中提出的串行CRC检验原理,给出其实现方法及硬件语言VHDL代码。为了提高CRC编码的生成速度和CRC检验的效率,介绍了CRC检验的并行原理。最后给出了为满足CAN协议的VHDL代码。经过测试,串、并行运算均满足设计要求。关键字:CAN、CRC、串行、并行The VHDL Implementation for CRC in CanBus ProtocolHou Dian-Hua Chen XingAbs

2、tract: In the light of Serial CRC examination principle which proposed in the CAN protocol,this paper introduces the implementation method and the VHDL code. In order to enhance the production speed of CRC code and the efficiency of CRC examination, introduces the CRC examination parallel principle.

3、 Finally introduces the VHDL code.Key words: CAN、CRC、Serial、Parallel1 引言信息在传递过程中,可能因某种原因使传输的数据发生错误。为减少和避免这类错误的发生,除提高硬件的可靠性外,在数据的编码上也应提供检错和纠错的支持。常见的校验码有奇偶校验码、海明校验码和循环冗余校验CRC(Cyclic Redundancy Check)码,它们都是将被校验的数据代码按k 位一组分组,每组添加r个校验位,形成n位一组的代码,故又称为(n,k)分组校验码。其中CRC码既可检错又可纠错(与生成多项式的选取有关),是以数据块为对象进行校验的一种高

4、效、可靠的检错和纠错方法,由于它的编解码简单、纠错能力强且误判概率很低,因而在工业测控及通信系统中得到了广泛的应用。CAN协议中,为了保证帧传输的可靠性和较高的检错效率,其采用了以下几种检错方式:位错误、填充错误、CRC错误、格式错误及应答错误检测。如果,用m表示报文受损率,那么通过以上检错方式,它对于受损报文检测不到其受损的概率为:,因而CAN总线极高的检错率使得它目前被广泛应用到工业控制、通信、汽车甚至军事等多个领域。CRC检验作为CAN协议中一种重要的且行之有效的检错方式,它的生成多项式可以检验7级,具有编码简单且误判率低的优点。2 CRC编码原理循环冗余码属于多项式生成码,编译码设备都

5、不太复杂,检(纠)错能力较强。它的规律在于编码后含n位码元的一个码组中有k位信息元和r=n-k位监督元,二者混合形成规律性,监督元是随着所传输的信息元而改变的。其工作原理如图1所示,图中P为输入数据,G为生成多项式对应的编码。图1 CRC校验原理图Fig.1The Schematic diagram of CRC假定需传输的数据P=110,也就是信息元,此时k=3,与它对应的多项式为n=7且对应的(其最低4位为零,以便拼装4位监督位)。用生成多项式g(x)去除,在运算中使用的均为模2的特殊运算。求CRC码所采用模2加减运算法则,即是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运

6、算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。如:。则有:取余数Q=101,所传输的数据为,n=7,该数据前三位是信息元,后四位是CRC序列。接收端收到数据时,为进行校验,仍用g(x)去除接收到信息所对应的多项式,由表达式(4)可以得到:两个相同的数的模2和为0,所以若接收数据无误时,应能被个g(x)整除。在此工作机制下,上述循环码不但可检查出n-k-1个独立错误,还可以检查出长度bN-K的突发错误。 3 CRC编码的硬件语言实现CRC编码的硬件语言实现,可以采用串行算法和并行算法两种实现方式。串行算法即是移位算法,有的文献称之为比特流算法,需编码的位流按位

7、逐位输入,位流输入完成后生成检验码,检验码紧随需检验的位流发出或接收到。并行方式中需检验的位流每k位输入到检验码生成电路中,因而检验码的生成效率大大高于串行方式。以下针对CAN协议中CRC编码的生成多项式进行阐述。3.1 CRC编码的串行实现由循环码的编码方法可知,循环码的编码可以由除法电路实现。除法电路的主体由多级移位寄存器和模2加法器组成。由循环码的译码与纠错方法可知,译码器主要由一个除法器和缓冲移位寄存器构成。若接收有误,可经过几次移位后,在相应的错码位上输出“1”作为检错,并可以通过与缓冲移位寄存器输出的错码模2 加后来纠正错误。CAN2.0A标准中,某数据帧(无数据场)前19位为11

8、001000,对于生成多项式g(x)可从有关资料上查阅取得,它必须满足下述要求:(1)任何一位发生错误都应使余数不为0;(2)不同位发生错误应使余数不同;(3)对余数继续作模2除时,应是余数循环本处取为完成求得CRC序列,可以使用一个15位移位寄存器CRC_RG(14:0)。若以NXTBIT标记该位流的下一位,它由从帧起始至数据场结束的无填充位的序列给定。CRC序列的计算如下:CRC_RG=0 /初始化寄存器REPEATCRCNXT = NXTBITE XOR CRC_RG(14);CRC_RG(14:1) = CRC_RG(13:0);/寄存器左移一位CRC_RG(0) = 0;IF CRC

9、NXT THENCRC_RG(14:0) = CRC_RG(14:0) EXOR (4599H);END IFUNTIL(CRC序列开始或者存在一个出错状态)得到CRC序列为:0101,发送/接收数据场的最后一位后,CRC_RG包含CRC序列,CRC序列后面是CRC界定符,它只包含一个隐位(高电平)1。串行算法的VHDL程序代码如下:Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity can_vhdl_crc isport (cl

10、k : in std_logic;data : in std_logic;enable : in std_logic;initialize : in std_logic;crc : out std_logic_vector(14 downto 0);End entity can_vhdl_crc;Architecture rtl of can_vhdl_crc isType xhdl_46 is array(0 ot 7) of std_logic_vector(7 downto 0);Signal crc_next : std_logic;Signal crc_tmp : std_logic

11、_vector(14 DOWNTO 0);Signal crc_xhdl1 : std_logic_vector(14 DOWNTO 0);begincrc = crc_xhdl1;crc_next = data xor crc_xhdl1(14) ;crc_tmp = crc_xhdl1(13 downto 0) & 0 ;process (clk)beginif (clkevent and clk = 1) thenif (initialize = 1) thencrc_xhdl1 = 0000;elseif (enable = 1) then thenif (crc_next = 1)

12、thencrc_xhdl1 = crc_tmp xor 1001;elsecrc_xhdl1 = crc_tmp ;end if;end if;end if;end if;end process;end Architecture rtl;3.2 CRC编码的并行计算目前已采用CRC并行算法是查表法及基于查表法而导出的一些方法。这些方法均需要存储长度较大的CRC余数表,随着并行度的增加,余数表的长度大大增加(按指数增加),其现实性亦随之大大降低。该算法事先把待校验的信息码P的所有CRC码全部计算出来,放在一个表里,编码时只要根据P从表中找出对应的值进行处理即可。其硬件实现示意框图如图 2所示。编

13、码解码前清零CRC寄存器。编码时待信息码P输入结束,CRC寄存器的值即为校验码Q;解码校验时待传送码P输入结束时,若CRC寄存器中的值为零,则表明传输无误。该算法执行速度快,适合于高速通信场合,但由于需要大容量的存储表,花费的硬件资源较串行算法要大得多。图2 并行算法示意图Fig.2 The Schematic drawing of Parallel Algorithm为使(n,k)码能具体指出数据在传输中出错的位,数据位数k和校验位数r之间应满足海明不等式:k+r0);mm=m_in&r;d:=mm(crc_wide downto(crc_wide-g_wide);for i in(crc_wide-g_wide-1)downto 0 loop

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业合同/协议

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号