用于循环冗余校验的有效计算方法及装置的制作方法

文档序号:7534899阅读:167来源:国知局
专利名称:用于循环冗余校验的有效计算方法及装置的制作方法
技术领域
本发明通常涉及数据通信,更具体地,涉及一种执行循环冗余校验的方法及设备。
可编程的微处理器和数字信号处理器(DSPs)常常用于计算比特流的循环冗余校验(CRC)。由于循环冗余校验是一种面向位的处理过程,由处理器执行的典型的循环冗余校验计算是基于位一位处理的。
而硬件位一位循环冗余校验处理是很有效的,软件位一位循环冗余校验处理则无效率的耗费处理器循环,因为大多数的微处理器和数字信号处理器被指定为面向字的处理(例如,十六或三十二位字)。
相应地,流循环冗余校验计算方法使用循环冗余校验计算的面向字的方法,通过使用查寻表来避免一次只处理一个位。查找表格方法允许微处理器或数字信号处理器一次处理一个字。由于循环冗余校验计算是线性变换,故这个方法是可能的。
在许多微处理器中,存储器读出访问采用流水线技术,导致在请求读访问到读出值可用于处理之间存在一定的延迟。在流水线处理器读出等待时间(而不是需要用来处理数据的可用处理器资源)决定了每个循环冗余校验循环迭代次数所需的最小指令周期。在使用查寻表的循环冗余校验计算情况下,直到获得了前面的查寻表中的循环冗余校验值,新的循环冗余校验地址计算才可以开始。这个等待时间设定了使用查寻表的循环冗余校验执行效率的下界。
因此便出现了对一种方法及设备的需要,用于减少在软件中循环冗余校验计算的有效的读出等待时间。
循环冗余校验是通过接收数据流并把数据流分为两个或更多的中间数据流,从而在软件中进行计算。中间循环冗余校验产生于每个中间数据流。最后的循环冗余校验产生自所述的中间循环冗余校验。
在第二个实施例中,多个循环冗余校验产生自多个独立的数据流。用于产生循环冗余校验的对查寻表的访问同时执行于每一个独立的数据流,至少是一部分。
本发明比以往的技术提供有显著的优点。尤其是,由于读出等待时间引起的加工周期的浪费的减少,用于数据流计算循环冗余校验的循环的有效数目大大地减少了。
为了更完全的了解本发明以及它的优点,请参考下列结合附图的描述,其中

图1a和1b图解了现有技术中软件循环冗余校验计算的解决办法;图2图解了使用多个中间数据流进行软件循环冗余校验计算的改良方法的方块图;图3图解了使用通过图2方法计算循环冗余校验的基本的处理器资源的方块图;图4图解了中间循环冗余校验值重叠计算的基本定时图;图5a和5b图解了用于多个中间数据流循环冗余校验的查寻表的生成;以及图6a和6b图解了用于计算多个独立循环冗余校验值的本发明的第二个实施例。
本发明可参照附图1至6被最好的理解,相同的数字被用于不同附图中的相同单元。
图1a和1b各自图解了通过使用一台微处理器或数字信号处理器,在软件中计算循环冗余校验的现有技术的方法及设备的方块图和流程图。为了图解的目的,图1a和1b的实例用八位字大小画出。然而,此处展示的方法可扩张至任何字长。
在图1a中,处理器10,在循环冗余校验计算时使用两个寄存器(1)输入寄存器12和循环冗余校验寄存器14。查寻表(LUT)16(典型地为在处理器中的大存储器的一部分)存储循环冗余校验值的表。输入寄存器12接收来自循环冗余校验计算所要的数据流的数据。该储存在输入寄存器12中的值指示为INPUT。循环冗余校验寄存器14接收读自查寻表16的循环冗余校验值。该储存在指数寄存器14的值指示为LASTCRC。异或运算(图中示为异逻辑电路块18)在输入寄存器12(INPUT)和循环冗余校验寄存器14(LASTCRC)的内容中使用模2加法执行。异门18的输出用于循环冗余校验计算程序对查寻表16进行寻址。异或门18的输出指示为INDEX。
在运算中,图1的电路通过图1b所示方法产生循环冗余校验。在块20中,电路被初始化,循环冗余校验寄存器14存储一个LASTCRC值“0000000”。在块22中,数据流被输入寄存器12接收并形成一个字(INPUT)。在块24,INPUT和LASTCRC通过使用模2加法而形成地址INDEX。在位置INDEX的查寻表16的值被访问,并随后被储存在块26中的循环冗余校验寄存器14。如果为了正在产生的循环冗余校验的在数据包中的数据在判定块28完成,接着计算完成,在循环冗余校验寄存器14中数据包的循环冗余校验是有效的。如果在数据包有更多的字要处理,则流程返回到块22,下一个输入字储存在输入寄存器12中。
在图1b中所示的方法在流水线结构中效率尤其低。在由于特殊的运算引起的等待时间里,通过执行附加的运算,流水线结构提供了高效的处理。然而,如同图1b的流程图所示,在步骤26中的读出等待时间期间,只有下一个数据字可以在步骤22中读出。因为步骤24对步骤26有从属性,直到步骤26完成之后步骤24才能开始。这个从属性产生了处理器运算的一个瓶颈。
图2图解了一张图表,该图表图解了改进的在数据流中产生循环冗余校验的效率的最佳实施例。在本实施例中,数据流被分成多个数据流。多个数据流的每一个在处理块30中都被分别地处理,以产生一个中间循环冗余校验结果。该中间循环冗余校验结果则通过使用模2加法器32结合起来,以产生最后的循环冗余校验结果。
图2的流程模型图比图1a和1b所示的现有技术的模型提供有显著的优点。在图1a和1b所示的现有技术方法中,查寻表的读操作只有在前面的查寻表16的读操作完成之后才可以开始,因为与读操作关联的地址依靠前面的读操作的结果。在图2的流程模型中,多个独立循环冗余校验生成在流水线技术中被交叉存取,以致于在该流水线技术中多个读操作连同多个独立的数据流交错执行。相应地,循环冗余校验的生成则更加效率高。
为描述数据流是怎样被分开的,应该说明的是查寻表是数据的线性变换。如果我们将查寻表的线性变换表示为T,同时一个数据包的输入字为do-dm,在此m是一个数据包字数目,循环冗余校验计算可以用下列的表达式描述(在这个文件中,”+”将被表示为模2加法)
CRC=T(…T(T(T(T(T(T(d0)+d1)+d2)+d3)+d4)+d5)…+dm),因为该循环冗余校验变换是线性的,T(T(dx)+dx+1)=T(T(dx)+T(dx+1)。定义U=T2(dx)=T(T(dx),上述的循环冗余校验值等式可以改写为CRC=U(…(U(U(U(do)+d2)+d4)d6)…)+T(…U(U(U(d1)+d3)+d5)…)上述等式的右侧包括两个独立的项(1)U(…(U(U(U(do)+d2)+d4)…)和(2)T(…U(U(U(d1)+d3)+d5)…)。这两个项的每一个项的中间循环冗余校验可以通过使用一个U(dx)查寻表与另一项独立地进行计算(即,一个中间循环冗余校验项的计算与另一中间循环冗余校验项的计算没有任何从属性)。U(dx)查寻表可以轻易地产生于T(dx)查寻表(图5a中显示有更多的细节)。相应地,在单个迭代期间两倍的数据字可以被处理。最后的T(dx)变换既可以用手(为保存存储器)也可以使用T(dx)查寻表。
应该说明的是,表示为U(dx)的变换一点也不比T(dx)查寻表需要的存储空间多。查寻表的大小决定于循环冗余校验多项式的阶数。
上述的等式可以被扩展为适用于超过两个的多个数据流。通过定义一个变换V(dx)=T3(dx)=T(T(T(dx))),上述的循环冗余校验值等式可以改写为CRC=V(…(V(V(d0)+d3)+…)+U(…V(V(d1)+d4)…)+T(V(V(d2)+d5)+…)从这个等式可以看出,循环冗余校验计算可以分解为三个独立的数据流,通过使用V(dx)查寻表,在一个循环迭代中被同时处理。再一次,该V(dx)查寻表不比T(dx)查寻表需要更多的存储器。单一的U(dx)和T(dx)变换可以不需要附加表而通过直接计算轻易地完成。
上述把循环冗余校验计算分为多个独立的过程,并在一台处理器的流水线同时地执行的方法,可以连同微处理器和数字信号处理器很高效地工作。
图3图解了一个处理器执行图2的循环冗余校验方法的结构。在本实施例中,处理器40,可以是一个微处理器或一个数字信号处理器,把数据流分为K个中间数据流,如同图2中所描述的那样。K个数据流的每一个的位在各自的输入寄存器42(或它的部分)中被组成字。相应地,来自数据流1的位在INPUT1被组为字,来自数据流2的位在INPUT2被组为字,等等。对于K个INPUT值的每一个,一个相应的循环冗余校验寄存器44存储一个LASTCRC值。一旦在输入寄存器12中形成一个字,处理器把这个字加到相应的LASTCRC值上(使用模2加法器45),以决定一个地址。这个地址用来从查寻表46中获得一个LASTCRC的新数值。
许多现代的数字信号处理器以及其他处理器包括存储器,可以接受每个时钟周期的地址。一些处理器拥有双端口存储器,可以接收每一个时钟周期的两个地址。因为与一个中间数据流联合的查寻表46的读操作的地址计算不依靠于连同另一个中间数据流执行的读操作的地址计算,与多个中间数据流联合的读操作在传输中可以交错,即,与一个数据流联合的读操作可以在与其他中间数据流联合的读操作完成之前开始。
如同图3所示,能够使用任何数量的独立的中间数据流。为了简单起见,在图3中,只显示了一个模2加法器。然而,在实际的微处理器和数字信号处理器中,可以同时运行许多这样的加法器。用于一种特定的执行的独立过程的数目,可以设置为能够最大限度的高效率地使用处理器流水线结构的数目。在特定的现代数字信号处理器结构中,已经找到可以支持直到四个的独立的数据流,而不影响处理器的其它运算的用法;然而,资源的有效性很依赖于特定的处理器体系结构,因此独立的数据流的最佳数目将随着处理器与处理器的不同而不同。
图4图解了中间循环冗余校验值重叠计算的基本定时图。从图4可以看出,虽然对于单个的中间数据流的查寻表地址的计算,不能在前面特定的中间数据流的读出完成之前开始,多个独立的中间数据流的处理形成了一个比现有技术系统大得多的吞吐量。
图5a提供了一张显示了U(dx)怎样从T(dx)表轻易地得到的图表。对于U(dx)表中的每一个位置,在T(dx)表中相应的位置被用作U(dx)循环冗余校验值的地址。同样地,如同图5b所示,V(dx)可以轻易地从T(dx)表中得到。对于V(dx)表中的每一个位置,T(dx)表中相应的位置指向V(dx)值的地址。
连同对图2-5的描述,本发明比现有技术提供了显著的优点。尤其是,由于读出等待时间及其从属性引起的处理周期的浪费的减少,用于数据流计算循环冗余校验的循环的有效数目大大地减少了。
图6a图解了本发明的第二个实施例。在本实施例中,一个从一个数据流中产生的循环冗余校验的程序,从多个独立的数据流中接收数据并产生多个循环冗余校验,与如同上面所述的,从单个数据流得到的多个独立的中间数据流来产生单个循环冗余校验成对比。这个方法允许对于多个输入数据字的平行循环冗余校验处理,而且可以结合从单个流产生多个中间数据流的方法(参见图6b)。
这个方法对于具有多个输入数据流,而需要分离循环冗余校验计算的系统是有用的。这样的系统包括利用单独的循环冗余校验保护不同的数据类的系统,以及允许同时进行传入和传出数据流处理的系统。这样的系统是基于调制解调器的国际电信联盟T1.413标准的,其中两个数据类(称为快速数据和交替数据)通过两个单独的循环冗余校验保护,其中每一个都与另一个无关。
如同图1a和1b所讨论的那样,当前基于一次处理一个字的计算循环冗余校验的方法对于处理器来说是低效的,因为读出等待时间对完成一个循环迭代的指令周期的数目设置了一个下界。
因为一个循环指令周期的最小的数目首先是由读出访问等待时间决定的,在每一个循环迭代期间都将有几个未使用处理器资源。然而,如果在每一个循环中有多于一个的独立的数据流被处理,循环冗余校验计算全部执行时间可以显著的减少。利用在一个迭代中,两个或更多的来自独立的数据流的字可以被读出和处理,而不影响任一个的读出等待时间的需要的事实,这个想法可以达成。
如同图6b所示,图6a的方法可以结合图2-5所述更进一步地在适当的地方优化流水线结构的使用。在这种方法中,多个数据流的每一个被分成多个中间数据流。对于每一个中间数据流都产生一个中间循环冗余校验值;关联的中间循环冗余校验被加在一起来产生最后的循环冗余校验值。
并行处理两个数据流的一个优点是函数调用开销被减半。这点对于超长指令字型微处理器,诸如,特别地,德克萨斯仪器TMS320C6xx,是很重要的。因为建立软件流水线的代码循环耗费大量处理器循环。
虽然本发明的详细描述已经直接表示为特定的模范实施例,对于本专业中的技术人员,建议可以做这些实施例的不同修改,以及替换的实施例。本发明包含落入权利要求范围内的任何修改或替换。
权利要求
1.一种在流水线处理器里计算循环冗余校验方法,包括以下步骤接收一个数据流;把该数据流分为两个或更多的中间数据流;在每一个中间数据流中计算中间循环冗余校验;从所述中间循环冗余校验产生循环冗余校验。
2.根据权利要求1的方法,其中,所述的在每一个中间数据流中计算中间循环冗余校验的步骤包括以下步骤在每一个中间数据流中同时计算中间循环冗余校验。
3.根据权利要求1的方法,其中,所述的产生步骤包括以下步骤使用模2加法将所述的间循环冗余校验相加。
4.根据权利要求3的方法,其中,所述计算步骤包括以下步骤对于每一个中间数据流,重复所述步骤从该中间数据流产生一个数据字;把所述的字加到储存在与中间数据流关联的第一个存储器中的当前循环冗余校验,以形成一个地址;从相应于所述地址的第二个存储器的位置检索一个新的循环冗余校验;以及利用所述新的循环冗余校验更换所述当前的循环冗余校验。
5.根据权利要求4的方法,其中,与所述中间数据流关联的产生和相加的步骤,是和与所述另一个中间数据流关联的所述检索步骤同时执行的。s.
6.根据权利要求4的方法,其中,与所述中间数据流关联的产生和相加的步骤,是和与所述另外的中间数据流关联的所述检索步骤同时执行的。
7.根据权利要求4的方法,其中,产生,加,检索和更换步骤重复执行,直到来自所述中间数据流的数据包的数据被处理。
8.根据权利要求1方法,其中,把所述数据分为两个或更多流的步骤包括以下步骤把数据流分为三个或更多的中间数据流。
9.一种在流水线处理器里计算循环冗余校验的方法,包括以下步骤接收多个独立的数据流;以及同时对于每一个独立的数据流,重复所述步骤从该独立的数据流产生一个数据字;把所述的数据字加到储存在中间数据流关联的第一个存储器中的当前循环冗余校验,以形成一个地址;从相应于所述地址的第二个存储器的位置检索一个新的循环冗余校验;以及利用所述新的循环冗余校验更换所述当前的循环冗余校验。
10.根据权利要求9的方法,其中,与所述独立的数据流关联的产生和相加的步骤,是和与所述另一个独立的数据流关联的所述检索步骤同时执行的。
11.根据权利要求9的方法,其中,与所述独立的数据流关联的检索的步骤,是和与所述另一个独立的数据流关联的所述检索步骤同时执行的。
12.一种产生循环冗余校验的电路,包括提供两个或更多独立的数据流的电路;以及通过使用流水线执行指令,在每一个中间数据流计算一个单独的循环冗余校验的电路,与一个所述独立的数据流关联的指令和与另外一个独立的数据流关联的指令同时执行。
13.根据权利要求12的产生循环冗余校验的电路,更进一步包括产生来自所述单独的循环冗余校验的循环冗余校验的电路。
14.根据权利要求13的产生循环冗余校验的电路,其中,产生一个来自所述单独的循环冗余校验的循环冗余校验的电路包括一个或更多模2加法器。
15.根据权利要求12的产生循环冗余校验的电路,以及更进一步的把单个数据流分为多个中间数据流的电路。
16.根据权利要求15的产生循环冗余校验的电路,其中,用于分离的电路包括用于存储来自每一个中间数据流的数据字的第一组寄存器。
17.根据权利要求16的产生循环冗余校验的电路,其中,所述计算电路包括用于存储每一个中间数据流的当前循环冗余校验值的第二组寄存器。
18.根据权利要求17的产生循环冗余校验的电路,其中,所述计算电路更进一步地包括把一个用于储存在所述第一组寄存器的数据加在储存在所述第二组寄存器数据上的模数2加法器。
19.根据权利要求17的产生循环冗余校验的电路,其中,所述计算电路更进一步地包括一个循环冗余校验查寻表。
全文摘要
在一个使用软件程序的流水线处理器上,对于独立的数据流(30)进行一个循环冗余校验计算,同时执行对循环冗余校验查寻表的访问。因为该循环冗余校验处理独立的数据流,从查寻表读出循环冗余校验值的等待时间被有效的减少。
文档编号H03M13/09GK1319801SQ00132908
公开日2001年10月31日 申请日期2000年9月27日 优先权日1999年9月27日
发明者达雷尔K·考克斯, 芒索A·基希泰 申请人:德克萨斯仪器股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1