计算循环冗余校验码的方法和装置的制作方法

文档序号:7620225阅读:194来源:国知局
专利名称:计算循环冗余校验码的方法和装置的制作方法
技术领域
本发明涉及通信技术领域,具体是计算循环冗余(Cyclic Redundancy Check, CRC)校验码的方法和装置。
背景技术
在数据通信系统内部,由于数据帧较大,往往分成多拍并行传输。除最后一拍以 外,其他节拍都传输最大数据宽度。最后一拍的有效数据宽度在1字节到最大字节间变化。 如果数据帧只有一个节拍,等同于多拍数据的最后一拍。由于数据帧最后一拍的数据长度 不固定,使得计算数据帧CRC码的过程中,数据帧最后一拍的CRC计算存在多种可能,CRC校 验码的计算往往成为高速以太网电路设计中的频率瓶颈。数据帧的传输如图1所示,最大 数据宽度为M字节,最后一拍有效数据宽度为N字节。同时,在数据通信系统中,数据帧的 数据传输往往伴随着其他数据帧信息一起传输。常用的CRC值的算法有串行法和并行法两种。串行方法每个时钟周期只能处理1 比特数据,无法满足大数据量,高频率电路的计算要求。通常采用并行的CRC算法来提高CRC值校验码的计算的速度。大部分并行CRC值 校验码的算法的推导是从串行编码电路出发,推出编码器前一个状态与下一个状态的矩阵 运算关系,通过递推可以得到第N个状态和第零个状态的矩阵运算关系,用异或门实现此 矩阵,即可在一个时钟周期算出N位数据的CRC值。如果数据的宽度很宽,即使采用并行算法,芯片或者FPGA (Field-Programmab 1 e Gate Array,现场可编程门阵列)也无法达到要求的频率。此时可采用流水线式的CRC算 法设r = 32,即要计算CRC32 ;设m = 64,为每次并行计算的数据宽度;设C为前一级CRC32 的输入;设{A,B}为现在要并行计算的数据,A、B的位宽都是64。可以采用64位CRC32并 行计算电路,计算出A,B的CRC32的值;采用32位CRC32并行计算电路,计算C的CRC32的 值;将所得结果异或即可获得{A,B, C}的CRC32的值。数据帧最后一拍数据的CRC计算在高速以太网100(ibpS应用环境下,数据宽度往 往要采用较宽的256bit,512bit或者1024bit才能达到数据处理的速度要求。此时计算数 据帧CRC值,由于数据位宽较大,即使整拍数据的CRC计算也经常要采用流水线算法才能达 到频率要求;最关键的是,数据帧的最后一拍,有效数据的位宽可能从Ibyte到最大位宽, 有多种情况,数据帧最后一拍CRC计算需要用掉很多资源,而且难以达到频率要求。考虑需要计算的数据帧数据宽度为256bit,则对于最后一拍数据的CRC计算,可 能处理的情况达到32种。考虑这最后一拍数据的CRC计算在一个时钟周期内完成,现有技 术中,需要实现32个CRC运算模块,消耗较多的资源,而且由于输入信号的负载较大,该方 式无法达到较高的频率。较大的数据宽度和最后一拍数据的CRC值处理难题,使得CRC运算模块计算往往 成为高速以太网电路设计中的频率瓶颈。

发明内容
本发明的主要目的是提供一种计算循环冗余校验码的方法和装置,可以获得较高 的工作频率数据帧的计算,占用资源较少,而且可以推广到任意位宽的数据。本发明解决其技术问题所采用的技术方案是一种计算循环冗余校验码的方法,其包括通过一级流水或者多级流水计算整拍数据的循环冗余值;通过多级流水的分布计算方式计算出最后一拍数据的循环冗余值;根据所述整拍数据的循环冗余值和最后一拍数据的循环冗余值得到所述数据帧 的循环冗余值。优选地,所述通过一级流水或者多级流水计算所述整拍数据的循环冗余值后,进 一步包括保存所述整拍数据的循环冗余值。优选地,所述通过多级流水的分布计算方式计算出最后一拍数据的循环冗余值, 具体包括每一级流水只计算输入数据固定宽度的循环冗余值,如果输入数据的有效宽度小 于要计算的宽度,则将所述数据透传至下一级流水。优选地,在多级流水计算过程中,根据输入数据的宽度确定所述流水的级数。本发明还提供一种计算循环冗余校验码的装置,包括整拍数据计算单元,用于通过一级流水或者多级流水计算整拍数据的循环冗余 值;最后一拍数据计算单元,用于通过多级流水的分布计算方式计算出最后一拍数据 的循环冗余值;循环冗余计算单元,用于根据所述整拍数据的循环冗余值和最后一拍数据的循环 冗余值得到所述数据帧的循环冗余值。优选地,所述整拍数据计算单元,还用于保存所述整拍数据的循环冗余值。优选地,所述最后一拍数据计算单元,还用于在计算过程中,每一级流水只计算输 入数据固定宽度的循环冗余值,如果输入数据的有效宽度小于要计算的宽度,则将所述数 据透传至下一级流水。优选地,所述最后一拍数据计算单元或整拍数据计算单元,还用于在多级流水计 算过程中,根据输入数据的宽度确定所述流水的级数。实施本发明的技术方案,具有以下有益效果本发明提供的方法和装置即使在数 据位宽较大的情况下计算数据帧的CRC值,也可以实现较高频率的数据帧的CRC值的计算, 突破了高速以太网应用中CRC值计算的频率瓶颈。占用资源较少,而且可以推广到任意位 宽的数据。


图1为本发明实施例提供的方法流程图;图2为图1的步骤SllO采用一级流水的步骤SllO的流程图;图3为图1的步骤SllO采用一级流水时的第一级流水的实现结构图;图4为图1的步骤SllO采用一级流水时的第二级流水的实现结构图5为图1的步骤SllO采用多级流水时的步骤SllO的流程图;图6为图1的步骤SllO采用多级流水时的步骤S120的流程7为图1的步骤SllO采用多级流水时的第一级流水的实现结构8为图1的步骤SllO采用多级流水时的第二级流水的实现结构图;图9为本发明实施例提供的装置的结构示意图。本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。本发明实施例提供一种计算循环冗余校验码的方法,如图1所示,该方法包括步 骤S110、通过一级流水或者多级流水计算所述整拍数据的循环冗余(CRC)值;该步骤SllO中,如果满足频率要求,可以采用一级流水计算整拍数据的CRC值;如 果频率不满足要求,也可以采用多级流水算法,分几级计算整拍数据的CRC值。整拍数据的 实现方式灵活,可以根据器件性能进行选择。另外,在其他的实施例中,更进一步的,如果采 用多级流水计算过程,则根据输入数据的宽度确定所述流水的级数。如果采用多级流水算 法,分几级流水计算整拍数据的CRC值,则最后一拍数据在该步骤SllO中,也会有部分的最 后一拍数据被计算。该步骤SllO输出至步骤SllO中的数据的宽度也将减少,这样可以减 少步骤S120中流水的级数。在此情况下,该步骤SllO的最后一级流水不仅需要保存并计 算整拍数据的CRC值,还需要在最后一拍数据到达时,把最后一拍数据在该步骤110中参与 计算的数据的CRC值与之前整拍数据的CRC值一起计算,算出新的CRC值,并连同最后一拍 未计算的数据一起输出至步骤S120中。在其他的实施例中,进一步的,该步骤SllO还包括保存所述整拍数据的循环冗 余值。对于该步骤,需要保留上一拍整拍数据的CRC值,用于与当前输入的整拍数据一起计 算出新的CRC值。直至数据帧的最后一拍数据到达,把之前的CRC值与最后一拍数据都送 入步骤S120中。如果数据帧的最后一拍数据为整拍数据,则在步骤SllO就可以完成整个 数据帧的CRC值的计算,步骤S120的各级流水把输入的CRC值直接输出即可。S120、通过多级流水的分布计算方式计算出最后一拍数据的循环冗余值;在步骤S120的每级流水(最后一级除外),输入数据的宽度可以表示成
bit,只取输入数据高位的2114位数据与输入的CRC值计算出新的CRC值,把输入数据低位的 (2-^-8)位数据和新的CRC值输出至下一级流水;如果输入数据的有效数据宽度小于2"-1, 则本级流水不计算,把输入数据高位的Olri-S)位数据和输入的CRC值直接输出至下一级 流水。在步骤S120中,输入数据每经过一级流水,数据位宽就会减少。数据输入至最后 一级只有Ibyte数据位宽,此Ibyte数据若无效,则最后一级将输入的CRC值直接输出,得 到数据帧的CRC值;此Ibyte数据若有效,则与输入的CRC值一起计算出数据帧的CRC值。S130、根据所述整拍数据的循环冗余值和最后一拍数据的循环冗余值得到所述数据帧的循环冗余值。每一级流水只计算输入数据固定宽度的循环冗余值,如果输入数据的 有效宽度小于要计算的宽度,则将所述数据透传至下一级流水,直至计算出该最后一拍数 据的循环冗余值。上述实施例提供的方法在数据位宽较大的情况下计算数据帧的CRC值,可以实现 较高的频率数据帧的CRC值的计算,突破了高速以太网应用中CRC值计算的频率瓶颈。占 用资源较少,而且可以推广到任意位宽的数据。下面提供上述方法的具体应用的实施例如图2所示,步骤SllO采用一级流水计算出整拍数据的CRC值,则数据帧的CRC值 计算电路实现如图2所示,包括第一级流水处理(输入256bit数据)、第二级流水处理(输 入MSbit数据和CRC值)、第三级流水处理(输入120bit数据和CRC值)、第四级流水处 理(输入56bit数据和CRC值)、第五级流水处理(输入24bit数据和CRC值)、第六级流水 处理(输入8bit数据和CRC值)。图2中,第一个虚框表示上述实施例提供的步骤S120, 计算数据帧整拍数据;第二个虚框表示上述实施例提供的步骤S130,计算数据帧最后一拍 数据。步骤SllO的第一级流水处理256bit的实现过程如图3所示。图3中,ena表示 数据帧数据有效,SOP表示数据帧的开始,eop表示数据帧的结束,Vldbyte表示数据帧最后 一拍数据的有效数据数目,后缀in,out表示相应信号是模块的输入或者输出;crc_pre表 示数据帧已经参与CRC计算的若干拍数据计算出的CRC值,crcjnit表示数据帧第一拍数 据开始计算CRC值时,输入CRC计算电路的初始值,crc256并行运算电路301表示256位 CRC并行运算电路。对于数据帧的第一拍数据,CRC值的计算取初值32,hffff_ffff ;对于 数据帧的其他整拍,则取上一拍计算得到的CRC值crc_pre ;对于数据帧的最后一拍,如果 有效数据宽度为256bit,则在此部分crc256并行运算电路301和寄存器303即可完成对数 据帧CRC值的计算;如果最后一拍有效数据宽度小于256bit,则将最后一拍数据和此前得 到的CRC值crc_pre直接输出至下一级流水(选择器304),因此步骤SllO对步骤S120输 出数据的位宽,为MSbit即可。如果数据帧为单拍(即sopin与eopin在同一周期出现), 且有效数据宽度小于25m3it,则本级流水输出的CRC值(CRC_0UT)为32,hffff_ffff。图4中,ena表示数据帧数据有效,sop表示数据帧的开始,eop表示数据帧的结束, vldbyte表示数据帧最后一拍数据的有效数据数目,后缀iruout表示相应信号是模块的输 入或者输出;CRC_IN表示上一级流水计算出的CRC值,CRC_0UT表示本级流水计算出的CRC 值输出至下一级,crcl28并行运算电路401表示1 位CRC并行运算电路。在步骤S120 中,第二级流水“处理128bit”的实现过程如图4所示。如果输入数据的有效位宽大于等于 U8bit,则输入数据的高128bit数据到并行运算电路401参与CRC值计算,把输入 数据的低120bit和算出的CRC值输出至下一级流水(选择器40 ;否则把输入数据的高 120bit和输入的CRC值直接输出至下一级流水(选择器40;3)。图2中的步骤S120中,每 级流水的实现都与图4的实现方式一致,即输入数据的宽度为(2n-8)bit,如果输入数据的 有效宽度大于21^1,则高位的2114位数据参与CRC运算,把算出的CRC值和低位的Qlri-S)位 数据输出;如果输入数据的有效宽度小于2"-1,则把输入的CRC值和输入数据的高Qlri-S) 位数据直接输出。如果步骤SllO采用多级流水方式实现数据帧的整拍数据的CRC值计算,则步骤SllO的实现过程如图5所示,此时最后一拍会有部分数据在步骤SllO就算出了 CRC值,所 以步骤S120的实现过程如图6所示。图5中,步骤S120的第一级流水的实现如图7所示。图7中,ena表示数据帧数 据有效,sop表示数据帧的开始,eop表示数据帧的结束,Vldbyte表示数据帧最后一拍数据 的有效数据数目,后缀in,out表示相应信号是模块的输入或者输出;crcU8并行运算电路 701表示1 位CRC并行计算电路。第一级流水(选择器70 只计算输入数据中高1 位 的CRC值。如果输入数据的有效数据宽度小于U8bit,则选择器703将输入数据的高1 位直接输出,同时输出的CRC值为0。最后一拍数据经过此级流水,如果输入数据的有效数 据宽度大于U8bit,则高128bit的数据也会被计算CRC值。图5中,步骤SllO的第二级流水要完成整拍数据的CRC值的计算,其实现方式如 图8所示。图8中,ena表示数据帧数据有效,sop表示数据帧的开始,eop表示数据帧的结 束,vldbyte表示数据帧最后一拍数据的有效数据数目,后缀in,out表示相应信号是模块 的输入或者输出;CRC_IN表示上一级流水计算出的CRC值,CRC_0UT表示本级流水计算出 的CRC值输出至下一级,crcl28并行运算电路801表示128位CRC并行计算电路,crc256 并行运算电路805表示256位CRC并行计算电路;crc_pre表示数据帧已经参与CRC计算 的若干拍数据计算出的CRC值,crc_data表示1 位输入数据与CRC_IN通过并行 计算电路(即运算电路80 计算出的CRC值,crc_prel28表示crc_pre经过crcU8并 行运算电路801计算出的CRC值,crc_pre256表示crc_pre经过crc256并行运算电路805 计算出的CRC值。由流水线算法可知,对于数据帧的第一拍数据(假设数据帧有多拍数据 组成),用上级流水输入的数据和CRC_IN (CRC的输入值)算出这拍数据的CRC值,先通过选 择器808选择crc_pre的值为32,hffff_ffff,然后用crc_pre,CRC_IN和输入数据算出第 一拍数据的CRC_0UT (选择器806中对应的“其他情况”),并存于寄存器807 ;对于之后的每 个整拍数据,crc_pre即为上一拍数据算出的CRC_0UT (通过选择器808选择),先算出数据 的CRC值crc_data (运算电路803),同时算出crc_pre的计算结果crc_pre256 (通过运算 电路805运算),然后两者异或(通过运算电路804异或),即可得到新的CRC_0UT (通过选 择器806中对应的“其他情况”得到的),存于寄存器807。当最后一拍数据到达本级流水 时,如果最后一拍数据也为整拍数据,则处理方式与其他整拍数据相同;如果最后一拍数据 有效宽度小于U8bit,则最后一拍数据在第一级流水中未做处理,直接输出crc_pre至寄 存器807(对应选择器806中的“3’ bllO”情况)即可;如果最后一拍数据的有效宽度大于 等于128bit且小于256bit,则最后一拍数据有128bit在第一级流水中被计算过CRC值,此 时要先把crc_pre通过crcU8并行运算电路801得到crc_prel28,然后把crc_preU8与 CRC_IN异或(通过运算电路802进行异或),才能得到新的CRC值(对应选择器806中的 “3,blOl”情况),存于寄存器807。图6中各级流水的实现方式与图4中描述的实现方式类似。本发明实施例还提供一种计算循环冗余校验码的装置,如图9所示,该装置包括整拍数据计算单元210,用于通过一级流水或者多级流水计算所述整拍数据的循 环冗余值;最后一拍数据计算单元220,用于通过多级流水的分布计算方式计算出最后一拍 数据的循环冗余值;
循环冗余计算单元230,用于根据所述整拍数据的循环冗余值和最后一拍数据的 循环冗余值得到所述数据帧的循环冗余值。在其他的实施例中,进一步的,所述整拍数据计算单元210,还用于保存所述整拍 数据的循环冗余值。在其他的实施例中,进一步的,所述最后一拍数据计算单元220,还用于在计算过 程中,每一级流水只计算输入数据固定宽度的循环冗余值,如果输入数据的有效宽度小于 要计算的宽度,则将所述数据透传至下一级流水。在其他的实施例中,进一步的,所述最后一拍数据计算单元220或整拍数据计算 单元210,还用于在多级流水计算过程中,根据输入数据的宽度确定所述流水的级数。上述实施例提供的装置在数据位宽较大的情况下计算数据帧的CRC值,可以实现 较高的频率数据帧的CRC值的计算,突破了高速以太网应用中CRC值计算的频率瓶颈。占 用资源较少,而且可以推广到任意位宽的数据。以上仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和 原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种计算循环冗余校验码的方法,其特征在于,包括 通过一级流水或者多级流水计算整拍数据的循环冗余值;通过多级流水的分布计算方式计算出最后一拍数据的循环冗余值; 根据所述整拍数据的循环冗余值和最后一拍数据的循环冗余值得到所述数据帧的循 环冗余值。
2.如权利要求1所述方法,其特征在于,所述通过一级流水或者多级流水计算整拍数 据的循环冗余值后,进一步包括保存所述整拍数据的循环冗余值。
3.如权利要求1或2所述方法,其特征在于,所述通过多级流水的分布计算方式计算出 最后一拍数据的循环冗余值,具体包括每一级流水只计算输入数据固定宽度的循环冗余值,如果输入数据的有效宽度小于要 计算的宽度,则将所述数据透传至下一级流水。
4.如权利要求1所述方法,其特征在于,在多级流水计算过程中,根据输入数据的宽度 确定所述流水的级数。
5.一种计算循环冗余校验码的装置,其特征在于,包括整拍数据计算单元,用于通过一级流水或者多级流水计算所述整拍数据的循环冗余值;最后一拍数据计算单元,用于通过多级流水的分布计算方式计算出最后一拍数据的循 环冗余值;循环冗余计算单元,用于根据所述整拍数据的循环冗余值和最后一拍数据的循环冗余 值得到所述数据帧的循环冗余值。
6.如权利要求5所述装置,其特征在于,所述整拍数据计算单元,还用于保存所述整拍 数据的循环冗余值。
7.如权利要求5或6所述装置,其特征在于,所述最后一拍数据计算单元,还用于在计 算过程中,每一级流水只计算输入数据固定宽度的循环冗余值,如果输入数据的有效宽度 小于要计算的宽度,则将所述数据透传至下一级流水。
8.如权利要求5所述装置,其特征在于,所述最后一拍数据计算单元或整拍数据计算 单元,还用于在多级流水计算过程中,根据输入数据的宽度确定所述流水的级数。
全文摘要
本发明涉及一种计算循环冗余校验码的方法和装置,该方法包括通过一级流水或者多级流水计算整拍数据的循环冗余值;通过多级流水的分布计算方式计算出最后一拍数据的循环冗余值;根据所述整拍数据的循环冗余值和最后一拍数据的循环冗余值得到所述数据帧的循环冗余值。本发明提供的方法和装置即使在数据位宽较大的情况下计算数据帧的CRC值,也可以实现较高的频率数据帧的CRC值的计算,突破了高速以太网应用中CRC值计算的频率瓶颈。占用资源较少,而且可以推广到任意位宽的数据。
文档编号H04L1/00GK102130744SQ20111007346
公开日2011年7月20日 申请日期2011年3月25日 优先权日2011年3月25日
发明者姜爱鹏, 缪众林, 袁春 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1