《一种基于硬件描述语言实现的通用CRC较验算法.pdf》由会员分享,可在线阅读,更多相关《一种基于硬件描述语言实现的通用CRC较验算法.pdf(5页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102820947 A (43)申请公布日 2012.12.12 C N 1 0 2 8 2 0 9 4 7 A *CN102820947A* (21)申请号 201110151422.5 (22)申请日 2011.06.08 H04L 1/00(2006.01) H03M 13/11(2006.01) (71)申请人重庆金美通信有限责任公司 地址 400030 重庆市沙坪坝区小杨公桥51 号 (72)发明人于进强 其他发明人请求不公开姓名 (54) 发明名称 一种基于硬件描述语言实现的通用CRC较验 算法 (57) 摘要 本发明公开了一种基于硬件描述语言的通用 CR。
2、C算法实现方法,该方法是根据系统设计的要 求,可以任意改变CRC的生成多项式,也可以采用 串行或者任意位宽的并行输入数据,其实现灵活, 调用简单。本发明的有益效果是通过该方法简化 了CRC算法设计,降低了CRC算法的实现难度。 (51)Int.Cl. 权利要求书1页 说明书2页 附图1页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 1 页 说明书 2 页 附图 1 页 1/1页 2 1.一种基于硬件描述语言的通用CRC算法实现方法,其特征在于采用硬件描述语言 (VHDL和Verilog语言)以函数的方式实现。 2.根据权利1所述的一种基于硬件描述语言的通用CRC算法。
3、实现方法,其特征在于适 合任意生成多项式。 3.根据权利1所述的一种基于硬件描述语言的通用CRC算法实现方法,其特征在于可 以采用串行数据输入。 4.根据权利1所述的一种基于硬件描述语言的通用CRC算法实现方法,其特征在于可 以采用任意位宽的并行数据输入。 权 利 要 求 书CN 102820947 A 1/2页 3 一种基于硬件描述语言实现的通用 CRC 较验算法 技术领域 0001 本发明涉及数据通信及网络传输领域,尤其涉及一种信息传输过程中的CRC错误 识别与检测处理方法。 背景技术 0002 在数据通信与网络传输信息过程中,信息的容错是一个非常重要的问题,循环冗 余位CRC(yclic。
4、 Redundancy Check)校验是常用的一种数据容错与检错方法,它在信息传 输、数据压缩等通信领域运用极其广泛。CRC较验的基本思想是利用线性编码理论,在发送 端根据要传送的k位二进制码序列,以一定的规则产生一个较验用的r位监督码(CRC码) 附在原始信息后边,构成一个新的二进制码序列共k+r位,然后发送出去。在接收端,根据 信息码和CRC码之间所遵循的“规则”(即生成多项式)进行检验,以确定信息在经过传输后 是否发生了错误。 0003 除了用于信息传输过程中的错误检测与识别外,CRC算法还可以用来实现简单的 “敌我识别”,系统设计者可以根据需要任意改变CRC的生成多项式来达到检测“敌。
5、方”信息 的目的,这种简单的措施可以起到一定保护知识产权的作用或者防止它人入侵的作用。 0004 常用的CRC生成多项式有多种,如:CRC-16、CRC-CCITT、CRC-32等,CRC较验的实 现有软件和硬件方法,在硬件实现方法中,根据系统的要求不同可以采用串行或者并行数 据输入实现。 0005 由于CRC的实现原理较为复杂,设计者需要具有较强的专业知识才能达到根据系 统需要采用并行或者串行方式实现,甚至改变随意CRC的生成多项式的目的。传统的CRC实 现算法一旦完成设计就不能再任意改变CRC的生成多项式,也不能任意改变输入数据的宽 度,设计人员采用时需要作相应的修改,而且需要具备较为深厚。
6、的专业知识,设计难度大。 发明内容 0006 为了解决设计人员在实现CRC算法时要求高,设计难度大的问题,本发明提供了 一种基于硬件描述语言的通用CRC算法,本算法不需要设计者具备高深的专业知识,设计 人员进行CRC设计时,只需要简单的调用即可,并且设计者调用时可以任意改变CRC的生成 多项式,也可以随意采用串行或并行(任意数据宽度)数据输入。本方法的有益效果是简单 易用,非常适用硬件实现,特别是适合在可编程逻辑器件(如FPGA、CPLD等)内实现。 附图说明 0007 图1为通用的CRC算法实现原理框图。 具体实施方式 0008 本发明以硬件描述语言(此处仅提供了VHDL代码)实现,提供了一。
7、个供设计人员调 用的可随意改变输入数据位宽及生成多项式的函数。 说 明 书CN 102820947 A 2/2页 4 0009 在函数中,参数“data”为需要进行CRC计算时输入的数据,输入数据既可 以是串行的,也可以是并行(位宽不限)的,函数会根据输入数据自动计算位宽。参 数“CRC”为本函数计算出的CRC结果,参数“CRC_ACCUM”为生成多项式,调用者可 以采用标准的生成多项式,也可以根据需要任意设计。如CRC-16的生成多项式为 ,那么CRC_ACCUM=X”1021”,调用非常简单。 0010 function Get_CRC( data : std_logic_vector; 。
8、CRC : std_logic_vector; CRC_ACCUM : std_logic_vector )return std_logic_vector is variable NewCRC : std_logic_vector(CRClength - 1 downto 0); variable OldCRC : std_logic_vector(CRClength - 1 downto 0); variable CRC_POLY : std_logic_vector(CRClength - 1 downto 0); begin OldCRC := CRC; CRC_POLY := CRC_。
9、ACCUM; for i in datalength - 1 downto 0 loop for j in 0 to CRC_POLYlength - 1 loop if j = 0 then if CRC_POLY(j) = 1 then NewCRC(j) := OldCRC(CRC_POLYlength - 1) xor data(i); else NewCRC(j) := data(i); end if; else if CRC_POLY(j) = 1 then NewCRC(j) := OldCRC(CRC_POLYlength - 1) xor data(i) xor OldCRC(j - 1); else NewCRC(j) := OldCRC(j - 1); end if; end if; end loop; OldCRC := NewCRC; end loop; return NewCRC; end Get_CRC; 说 明 书CN 102820947 A 1/1页 5 图1 说 明 书 附 图CN 102820947 A 。