一种循环冗余校验码在不同宽度总线上的实现方法

文档序号:7971509阅读:229来源:国知局
专利名称:一种循环冗余校验码在不同宽度总线上的实现方法
技术领域
本发明涉及一种循环冗余码CRC校验码的实现方法,具体涉及一 种循环兀余校验码在不同宽度总线上的实现方法,其能把从数据源得 到的并行数据流,通过循环冗余码CRC校验处理,验证其正确性,由 于本发明可以在比原始数据流更宽的数据线上进行数据分析操作,数 据分析的时钟可以比数据源的时钟频率更低,从而实现通过低频时钟 操作,降低功耗。
背景技术
循环冗余码CRC校验处理是通信协议中的常见技术,发送方在发 送数据时,对一组连续的数据流,逐个进行循环冗余编码,接受方在 接收这组数据的同时,也逐个进行循环冗余编码,每一组数据处理完 毕后,接受方把得到数据流的循环冗余校验码返回给发送方,发送方 通过比较返回的校验码和本身计算得到的校验码,就能得到数据是否 正确传送的结论。由于CRC的迭代算法简单,校验实现代价小,被广 泛应用于数据包的传送中。循环冗余校验码的本质是模/2除法的余数,采用的除数不同,实 现的类型也就不一样。循环冗余校验码的计算是使用移位寄存器和异 或运算实现的,两者分别是由初始种子数和生成多项式的算法决定 的,不断更新的数据流加载于移位寄存器中,同时移位寄存器中某些 二进制位是与将要移出的位做异或运算以后再更新相邻位。处理连续 的数据流时,CRC算法决定了其CRC值是由求解每个数值的CRC值的和 对CRC寄存器的值反复更新而得到计算一个数据段的CRC值的。循环冗余码校验的核心是生成多项式和初始种子数,对于一定位 宽的数据,其生成多项式和初始种子数是有特定要求的,不同位宽的 数据,不能直接使用传统的合并操作。这就要求数据发送方和接受方 的数据宽度应当一致才能使用共同的生成多项式和初始种子数得到 对应的校验码,但是当发送方和接受方的数据宽度不同时,传统的实 现方案使得数据流传送只能使用传输双方数据宽度的最小值来同步 进行操作,浪费了系统资源,增加了无端的功耗
发明内容
本发明的目的主要是为了实现不同带宽间的循环冗余码校验处理,而且,本发明提供的方法解决了常规算法中难以在不同宽度的数据流实现处理的不良后果,能够充分利用数据带宽,在保证正常数据吞吐速率的同时,降低工作的时钟频率,而且在实际应用中还可以多路复用,进一步共享硬件资源。本发明解决其技术问题所釆用的技术方案是结合硬件电路的实现特点,在不同带宽的发送方和接受方双方使用不同的校验码生成电 路,从而在不同的数据带宽上,对相同的数据流得到同样的校验码。更具体地说,本发明提供了一种从数据总线得到CRC校验码的实 现方法,其通过使用异步队列改变将要处理的数据宽度,再用新宽度 对应的初始种子数和生成多项式,得到对应的CRC校验码。即首先改变将要处理的数据宽度,保证低频状态下的带宽要求, 然后再使用新的初始化值和逻辑运算在低频下对比原始数据更宽的 数据进行CRC分析,最后得到和原有数据相一致的CRC校验码。在得到所需要的新数据宽度以后,以合适的时钟频率工作,进一 步使用对应新数据宽度的组合电路和时序电路,经过逻辑运算得到与 原有宽度数据流相同的CRC校验码。通过进一步对CRC算法的研究,我们发现 一个8位数据加到16 位累加器中去,只有累加器的高8位或低8位与数据相作用,其结果仅 有256种可能的组合值。因而,还可以考虑使用查表法来代替对应的 运算,这也同样适用于其他情况,如CRC32的计算。本发明提供的一种循环冗余校验码在不同宽度总线上的实现方 法的有益效果是发送与接受双方无需确认对方的具体位宽实现方 案,只要发送方在完成一组数据传送以后从接受方返回得到的校验码 和自身计算的校验码是一致的,就说明数据传送已经正确完成。发送 与接受双方的数据处理位宽越宽,正常工作所需要的时钟频率就越 低,可以降低功耗。下面,结合附图和实施例详细说明依据本发明提出方法的具体细 节及工作情况。關翻

图1是传统CRC算法实现方法的原理图,从多个16位宽的数据 data—in得到16位宽的CRC;图2是传统CRC16位算法的电路原理图,生成多项式为 g(X)=xlfi+x'5+x5+l,初始种子数为16,h4ABA;
图3是传统CRC算法实现方法的工作流程图,每次得到新的数据都要重新计算对应的CRC16;图4是本发明提供的CRC算法的基本原理图,先使用异步队列asyn—fifo把16位宽的数据data—in打包为32位宽的数据data—tmp,再作数^分析,得到16位的CRC;图5是图4中异步队列asyrufifo的基本工作原理图; 图6是本发明提供方法的电路原理图,选择合适的组合逻辑,从多个32bit宽的数据data—t即,结合适当的寄存器初值,得到16bit宽的CRC;图7是本发明提供的CRC算法实现方法的工作流程图,可以每来两 组数据才需要重新计算新的CRC。
具体实施方式
本发明提供的一种循环冗余校验码在不同宽度总线上的实现方法的具体步骤为使用异步队列改变将要处理的数据宽度,再用新数 据宽度对应的初始种子数和生成多项式,得到对应的CRC校验码;从 而实现在不同带宽的发送方和接受方双方使用不同的校验码生成电 路,在不同的数据带宽上,对相同的数据流得到同样的校验码。本发明更具体的描述特征是首先改变将要处理的数据宽度,保 证低频下的带宽要求,然后再是使用新的初始化值和逻辑运算在低频 下对比原始数据更宽的数据进行CRC分析;本发明所述的改变数据总 线宽度,可以先使用异步队列得到所需要的数据宽度,在这个过程中, 既可保证数据吞吐率而又降低了工作时钟频率;在得到所需要的新数据宽度以后,以合适的时钟频率工作,进一 步使用对应新数据宽度的组合电路和时序电路,经过逻辑运算得到与原有宽度数据流相同的CRC校验码。同理,本发明提供一种循环冗余校验码在不同宽度总线上的实现 方法不但可应用于双向纠错,也同样可用于单向纠错。下面,本发明通过优选实施例提供的一种循环冗余校验码在不同 宽度总线上的实现方法来对本发明作进行进一步的说明,其中均以接受方处理16位宽输入数据为例。在附图1-3中,其是传统CRC算法实现方法的原理图, 一般传统16 位的CRC实现方法,使用的生成多项式8 00=7+,+^+1,初始种子数 为16,h4ABA,对于一组连续数据流,每一个16位宽的输入数据,都会 和当前的CRC运算,得到新的CRC。其基本电路结构可参见附图2,其 基本工作流程可参见附图3,每次得到新的数据都要重新计算对应的 CRC16。
在附图4一7中,为本发明提供的一种循环冗余校验码在不同宽度 总线上的实现方法。如附图4-5所示,本发明提供的方法首先是使用异步队列 asyn—f ifo把16位的输入数据data jn (1)两两并接为32位的 data—t即,对应时钟域的切换是由clkl6到clk32,前者用于16位的输 入数^datajn,后者用于32位的输入数据data—tmp。 register(2) 的作用是把^前待处理的数据保存为dat—16(3),其间使用了一个标 记,用以判断当前的16位数据应该放在data—tmp的低16位还是高16 位,完成正确拼接。register(4)进一步把dat—16(3)和新输入的数据 data一in合并为dat一32(5),可见输入两组16位的数据datajn只会得 到一组32位的数据dat一32,尽管这组数据还是属于clkl6日;钟域。最 后由FIFO把这组数据转换为data—tmp(6),这已经是clk32的时钟域 了 。这样的结果是传送32位宽数据一的次数减少到传送16位宽数据所需 的一半,新的工作时钟频率clk32只需要用以前工作时钟频率clk16 的一半就可以得到相同的数据吞吐率。在得到32位数据data—tmp以后,组合逻辑Combinational Logic 部分,根据新的生成多项it结合当前的数据data一tmp和对应的时序 电路Register Device中储存的已有CRC信息,以clk32为工作时钟频 率,经过运算得到新的CRC数据。由于发送方是使用16位宽的数据进 行处理的,所以接受方也要从得到的数据中处理得到16位宽的CRC校 验码,以传回给发送方。图6是具体实现的本发明方法的基本电路方案,可以看出输入数 据信号,同样是经过组合电路运算后,被时序电路保存,得到输出的 CRC校验码。图7是本发明提供的CRC算法实现方法的工作流程图,其 可以每来两组数据才需要重新计算新的CRC。这种技术已经在Chipnuts的移动多媒体处理芯片验证平台上通 过测试。关于CRC的生成多项式,以G16(X)二xl6+xl2+x5+l为例,初始种子 数为16' h4ABA硬件设计实现代码如下:assignfl二 crc[O]crcout [15]assignf2二 crc[l]crcout[14]assignf3=crc[2]_ crcout[13]assignf4=crc[3]—crcout[12]assignf5=crc[4]~ crcout[11]-flassignf6二 crc[5]—crcout[10]-f2<formula>formula see original document page 8</formula>对应32位生成多项式的硬件设计实现代码如下(初始种子数为32,h6D5C4ABA)<formula>formula see original document page 8</formula>
assign crc—14—trap = feedback—t即[l] ~ feedback—tmp[6] feedback—tmp[13];assign crc—13—tmp 二 feedback—tmp[2] feedback—tmp[7] feedback一tmp[14];assign crc—12_tmp 二 feedback—tmp[3] feedback—trap[8] feedback一tmp[15];assign crc—11—tmp = feedback—tmp[4]feedback—tmp[9] ;assigncrc一JO一—tmp=feedback—tmp[5]feedback—tmp[10]assigncrc—一09一—t卿二 feedback—tmp[6]feedback—tmp[11]assigncrc——08——t即二 feedback—tmp[7]f eedback—tmp[12]assigncrc_—07——trap二 feedback—tmp[8]feedback—tmp[13]assigncrc一一06一一tmp二 feedback—t卿[9]feedback—tmp[14]assigncrc一—05——t即二 feedback—tmp[10]f eedback—tmp[15]assigncrc一—04_一tmp =feedback—tmp[11]assigncrc—一03一_tmp 二feedback—tmp[12]assigncrc——02—_tmp =feedback—tmp[13]assigncrc——oi一—tmp =feedback—tmp[14]assigncrc一—00—一t卿二feedback—tmp[15]assignfeedback—15—swp二data—high[15]crc一tmp[O]f eedback—04_一swp ~ feedback—11——swp ;assignfeedback—14_swp二data—high[14]crc一tmp[l]f eedback—03—一swp ' feedback—10——swp ;assignfeedback—13_swp=data—high[13]crc—tmp[2]feedback—02_一swp ~ feedback—09—一swp ;assignfeedback—12—swp二data—high[12]crc—tmp[3]feedback—01.一swp ' feedback—08—一swp ;assignfeedback—ll—swpdata—high[ll]crc—tmp[4]feedback—00.一swp ' feedback—07-—swp ;assignfeedback—10—swp二datajiigh[10] 一crc一tmp[5]feedback—06.—swp ;assignfeedback—09—swpdata—high[9] -crc一tmp[6]feedback—05一swp ;
assign feedback—08—swp feedback—04—swp ;assign feedback—07—swp feedback—03—swp ;assign feedback—06—swp feedback—02—swp ;assign feedback—05__swp feedback——01—swp ;assign feedback—04—swp feedback一00一swp ;assign feedback—03—swpassign feedback—02—swpassign feedback—01—swpassign feedback—00—swpdata—high[8] data—high[7] data—high[6]data—high[5] data—high[4]data一high[3] data—high[2] data—high[1] data—high
crc—tmp〔7]crc—tmp[8] crc—tmp[9]crc—tmp[lO] crc—tmp[ll]crc一tmp[12] crc—t,[13] crc—tmp[14] crc一tmp[15]assign crc—15—swp 二 feedback—swp
feedback——swp[12];assign crc—14—swp 二 feedback—swp[1] feedback—swp[13];assign crc一13一swp 二 feedback—swp[2] feedback—swp[14];assign crc—12—swp 二 feedback—swp[3] feedback一swp[15];assign crc—11—swp = feedback—swp[4]feedback—swp[9]assigncrc—茂_swp二 feedback—swp[5]feedback——swp [10]assigncrc一—09——swp二 feedback—swp[6]feedback一swp[ll]assigncrc一灵—swp二 feedback—swp[7]feedback——swp [12]assigncrc一—07—一swp=feedback—swp[8]feedback——swp [13]assigncrc_—06——swp二 feedback—swp[9]feedback——swp [14]assigncrc一—05—一swp=feedback—swp[10]feedback—-Swp[15]assigncrc一—04—_swp=feedback—swp[11].assigncrc__03—一swp二 feedback—swp[12]assigncrc一一02_—swp二 feedback—swp[13]feedback—swp[5] feedback—swp[6] feedback—swp[7] feedback—swp[8]assign crc—01__swp 二 feedback—swp[14]; assign crc—OO一swp 二 feedback—swp[15];最后得到的CRC校验码为crc32out 二 { crcl6tmp, crcl6swp }.在真实实际的应用中,位宽的改变不一定是16位改为32位,具体 的生成多项式和初始种子数是由数据宽度和一组数据的长度影响的, 并不唯一确定,发送方和接受方必须针对具体情况仔细分析,特定总 线宽度的生成多项式和初始种子数是由数字信号处理理论中的余数 定理决定的。事实上,在工程开发上的使用也只是按照需求,使用已 有的公式。同样,数据宽度在不同的应用场所也可能不同。举例如下4位的生成多项式gUW+X+l, 16位的生成多项式:g(X)二X'W+l或 者g(X)=X"'+,+X5+l都可以,而32位的生成多项式g(x)二x32+x加+x"'+x22+x'Vx'2+xi'+x'('+x8+x7+x5+xVx2+x+l。在具体的使用中,应用系统数据吞吐带宽要求一定的情况下,如果要求的时钟频率 越低,则对应的数据总线宽度也要越大,所需要的硬件资源也越多, 代价越大。对于特定的要求,应该在许可的最高频率下,使用对应数 据总线宽度最小需求的生成多项式和初始种子数设计。
权利要求
1. 一种循环冗余校验码在不同宽度总线上的实现方法,其特征在于该方法使用异步队列改变将要处理的数据宽度,再用新数据宽度对应的初始种子数和生成多项式,得到对应的CRC校验码;从而实现在不同带宽的发送方和接受方双方使用不同的校验码生成电路,在不同的数据带宽上,对相同的数据流得到同样的校验码。
2、 根据权利要求1所述的--种循环冗余校验码在不同宽度总线上的实现方法,其特征在于首先改变将要处理的数据宽度,保证低频状态 下的带宽要求,然后再使用新的初始化值和逻辑运算在低频下对比原始数据更宽的数据进行CRC分析,最后得到和原有数据相一致的CRC 校验码。
3、根据权利要求1所述的一种循环冗余校验码在不同宽度总线上的 实现方法,其特征在于在得到所需要的新数据宽度以后,以合适的时 钟频率工作,进一步使用对应新数据宽度的组合电路和时序电路,经 过逻辑运算得到与原有宽度数据流相同的CRC校验码。
4、根据权利要求1所述的一种循环冗余校验码在不同宽度总线上的 实现方法,其特征在于该方法不但可应用于双向纠错,也同样可用于 单向纠错。
5、根据权利要求l所述的一种循环冗余校验码在不同宽度总线上的实 现方法,其特征在于该方法是首先是使用异步队列asyn—fifo把16位的输入数据datajn(l)两 两并接为32位的data—t卿,对虽时钟域的切换是由clkl6到clk32,前 者用于16位的输入数^data—in,后者用于32位的输入数据data—tmp; register(2)的作用是把当前待处理的数据保存为dat—16(3), f间使 用了一个标记,用以判断当前的16位数据应该放在data—tmp的低16 位还是高16位,完成正确拼接;register(4:)进一步把dat—16(3)和新 输入的数据data—in合并为dat—32(5),这样,输入两组16位的数据 data—in只会得到一组32位的数据dat一32,尽管这组数据还是属于 clkl6时钟域;最后由FIFO把这组数据^换为data—t卿(6),这已经是 clk32的时钟域了;在得到32位数据data—tmp以后,组合逻辑Combinational Logic 部分,根据新的生成多项式,结合当前的数据data—top和对应的时序 电路Register Device中储存的已有CRC信息,以clk32为工作时钟频 率,经过运算得到新的CRC数据;由于发送方是使用16位宽的数据进 行处理的,所以接受方也要从得到的数据中处理得到16位宽的CRC校 验码,以传回给发送方。
全文摘要
本发明涉及一种循环冗余校验码在不同宽度总线上的实现方法,该方法使用异步队列改变将要处理的数据宽度,再用新数据宽度对应的初始种子数和生成多项式,得到对应的CRC校验码;从而实现在不同带宽的发送方和接受方双方使用不同的校验码生成电路,在不同的数据带宽上,对相同的数据流得到同样的校验码。本发明提供的方法解决了常规算法中难以在不同宽度的数据流实现处理的不良后果,能够充分利用数据带宽,在保证正常数据吞吐速率的同时,降低工作的时钟频率,而且在实际应用中还可以多路复用,进一步共享硬件资源。
文档编号H04L1/00GK101212276SQ20061014806
公开日2008年7月2日 申请日期2006年12月27日 优先权日2006年12月27日
发明者强 周, 林 李, 碧 王, 震 谢 申请人:智多微电子(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1