




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 XingAbstract: 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. Finally introduces the VHDL code.Key words: CAN、CRC、Serial、Parallel1 引言信息在传递过程中,可能因某种原因使传输的数据发生错误。为减少和避免这类错误的发生,除提高硬件的可靠性外,在数据的编码上也应提供检错和纠错的支持。常见的校验码有奇偶校验码、海明校验码和循环冗余校验CRC(Cyclic Redundancy Check)码,它们都是将被校验的数据代码按k 位一组分组,每组添加r个校验位,形成n位一组的代码,故又称为(n,k)分组校验码。其中CRC码既可检错又可纠错(与生成多项式的选取有关),是以数据块为对象进行校验的一种高效、可靠的检错和纠错方法,由于它的编解码简单、纠错能力强且误判概率很低,因而在工业测控及通信系统中得到了广泛的应用。CAN协议中,为了保证帧传输的可靠性和较高的检错效率,其采用了以下几种检错方式:位错误、填充错误、CRC错误、格式错误及应答错误检测。如果,用m表示报文受损率,那么通过以上检错方式,它对于受损报文检测不到其受损的概率为:,因而CAN总线极高的检错率使得它目前被广泛应用到工业控制、通信、汽车甚至军事等多个领域。CRC检验作为CAN协议中一种重要的且行之有效的检错方式,它的生成多项式可以检验7级,具有编码简单且误判率低的优点。2 CRC编码原理循环冗余码属于多项式生成码,编译码设备都不太复杂,检(纠)错能力较强。它的规律在于编码后含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加减运算法则,即是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。如:。则有:取余数Q=101,所传输的数据为,n=7,该数据前三位是信息元,后四位是CRC序列。接收端收到数据时,为进行校验,仍用g(x)去除接收到信息所对应的多项式,由表达式(4)可以得到:两个相同的数的模2和为0,所以若接收数据无误时,应能被个g(x)整除。在此工作机制下,上述循环码不但可检查出n-k-1个独立错误,还可以检查出长度bN-K的突发错误。 3 CRC编码的硬件语言实现CRC编码的硬件语言实现,可以采用串行算法和并行算法两种实现方式。串行算法即是移位算法,有的文献称之为比特流算法,需编码的位流按位逐位输入,位流输入完成后生成检验码,检验码紧随需检验的位流发出或接收到。并行方式中需检验的位流每k位输入到检验码生成电路中,因而检验码的生成效率大大高于串行方式。以下针对CAN协议中CRC编码的生成多项式进行阐述。3.1 CRC编码的串行实现由循环码的编码方法可知,循环码的编码可以由除法电路实现。除法电路的主体由多级移位寄存器和模2加法器组成。由循环码的译码与纠错方法可知,译码器主要由一个除法器和缓冲移位寄存器构成。若接收有误,可经过几次移位后,在相应的错码位上输出“1”作为检错,并可以通过与缓冲移位寄存器输出的错码模2 加后来纠正错误。CAN2.0A标准中,某数据帧(无数据场)前19位为0110001000111001000,对于生成多项式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 CRCNXT THENCRC_RG(14:0) = CRC_RG(14:0) EXOR (4599H);END IFUNTIL(CRC序列开始或者存在一个出错状态)得到CRC序列为:000001000110101,发送/接收数据场的最后一位后,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 (clk : 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_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 = 000000000000000;elseif (enable = 1) then thenif (crc_next = 1) thencrc_xhdl1 = crc_tmp xor 100010110011001;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所示。编码解码前清零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 loopif d(g_wide)=0thenr:=d(r_wide downto 0);elsefor j in r_wide downto 0 loopr(j):=d(j)xor g(j);end loop;end if;d:=r&mm(i);end loop;if d(g_wide)=0thenr:=d(r_wide downto 0);elsefor j in r_wide downto 0 loopr(j):=d(j)xor g(j);end loop;end if;r_out=r;end process;end a;4 总结本文在分析了CRC计算原理的基础上,仔细运用VHDL的特点进行串、并行CRC算法建模从而实现的设计,不仅具备采用公式法设计所具有的优点,还能很好地适用于各种数据块大小不同、生成多项式选取不同的CRC编、解码运用场合,明显减轻设计开发工作量,大幅缩短产品的研发周期。此外,由于生成结果占用的硬件资源很少,只需利用系统集成芯片中剩余的少量资源即可实现,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年仓储物流RFID行业当前发展现状及增长策略研究报告
- 2025年超短波电台行业当前市场规模及未来五到十年发展趋势报告
- 2025年廊坊市文安县中考四模数学试题含解析
- 法律实务民事诉讼试题库(附答案)
- 2025年公共卫生知识培训试题及答案
- 2024年运动员(体育与健康)技能及理论知识考试题与答案
- 2024年大学生创业者“创业能力及风险意识”等知识考试题库与答案
- 陕西省渭南市韩城市2024-2025学年七年级下学期期末语文试题(解析版)
- 信息技术笔试题及答案
- 2025关于房屋租赁合同范本及注意事项
- 2025年燃气电厂笔试题库及答案
- 2025年科技咨询师考试题库
- 四川省凉山州2024-2025学年高一下册期末统一检测数学检测试卷
- 2025年道路运输两类人员安全员考试考核试题库答案
- 2025年历年医疗卫生卫健委面试真题及答案解析
- 2024-2025学年人教版七年级数学(下)期中试卷(考试范围:第7-9章)(含解析)
- 企业员工感恩培训课件
- 烟草专卖执法与案卷制作规范课件
- 索塔液压爬模施工方案
- 常用材料的标注方法
- 初中成绩单中英文通用模板(唯美型)(共2页)
评论
0/150
提交评论