一种循环冗余校验CRC实现方法、装置及网络设备与流程

文档序号:14914276发布日期:2018-07-11 00:17阅读:143来源:国知局
本申请涉及通信
技术领域
,尤其涉及一种循环冗余校验(CyclicRedundancyCheck,CRC)实现方法、装置及网络设备。
背景技术
:在现场可编程门阵列(Field-ProgrammableGateArray,FPGA)逻辑实现接口通信的过程中,为了提高数据传输的可靠性,普遍采用对数据添加校验位传输的方法。在现行的数据校验算法中最常用的是CRC算法。随着通信技术的发展和用户通信数据量的需求提升,通信接口速率要求越来越快,CRC装置在CRC计算时,CRC计算模块在一拍时序内的要求处理的待校验数据的比特位数越来越大,导致CRC计算模块的数据位宽越来越大。由于待校验数据中的有效数据不确定,导致最后一拍时序的有效字节数据(Mod)值不确定,存在多个种可能性,假设CRC装置处理的数据位宽采用的是1024比特,CRC结果采用CRC32码,即CRC结果为32个比特,待校验数据长度为1024比特,一种CRC实现方法为:如图1所示,CRC32_Mod0、CRC32_Mod1、...、CRC32_Mod127表示的是128个编号的计算模块,MUX1表示的是编号为1的选择模块,这128个计算模块需要在一拍内算出128种中间CRC结果,并且在最后一拍MUX1需要根据Mod值从128种中间CRC结果中选择出一种,作为最终CRC结果。另一种CRC实现方法为:如图2所示,CRC32_Modx、CRC32_Mody、CRC32_Modz、...、CRC32_Modn表示的是计算模块,MUX0和MUX1表示的是编号为0和1的选择模块,利用MUX0对计算模块CRC32_Modx和计算模块CRC32_Mody进行级联,使得计算模块数量n小于128个,可以减少计算模块的数量。但是,图1所示的CRC实现方法在数据位宽(例如位宽为1024比特)变大时,需要增加大量的计算模块进行CRC计算,而且使用组合逻辑实现128选1的逻辑,增加的计算复杂度导致了FPGA逻辑内部查找表(LookUpTable,LUT)级数的增加,从而影响CRC计算的时序性,导致CRC计算性能大幅下降;而图2所示的CRC实现方法虽然减少了计算模块的资源消耗,但FPGA逻辑的处理级数增加了,同样会影响CRC计算的时序性,使得CRC计算性能受到影响。技术实现要素:本申请提供了一种CRC实现方法、装置及网络设备,可以降低待校验数据的CRC计算复杂度,从而提升CRC计算性能。第一方面提供CRC实现方法,包括:CRC实现装置按照从低位到高位的顺序将待校验数据均分为K段子数据,所述待校验数据的比特位数等于所述CRC实现装置的数据位宽,K为大于等于2的偶数;所述CRC实现装置对所述K段子数据中每一段子数据分别进行CRC计算,得到K个CRC结果;所述CRC实现装置按照从高位到低位的顺序对所述K个CRC结果进行逆向修正,得到最终CRC结果。CRC实现装置计算得到待校验数据的CRC结果的过程中,先按照从低位到高位的顺序将待校验数据均分为K段子数据,而且待校验数据的比特位数等于CRC实现装置的数据位宽,K为偶数,例如CRC实现装置的数据位宽为1024比特,可以将待校验数据均分为2、4或6等偶数段的子数据,对每一段子数据分别进行CRC计算,得到对应的CRC结果,即进行CRC计算时,每段子数据的CRC结果不影响其他段子数据的CRC结果,得到的CRC结果总计为K个,由于K段子数据是按照从低位到高位的顺序均分的,那么K段子数据的顺序是已知的,再对K个CRC结果进行逆向修正时,是按照从高位到低位的顺序,具体操作为以第K段子数据的CRC结果为基础,修正第K-1段子数据的CRC结果,再以第K-1段子数据的修正后的CRC结果为基础,修正第K-2段子数据的CRC结果,依次类推,直到将第1段子数据的CRC结果进行修正,修正后的第1段子数据的CRC结果就是最终CRC结果。由于对待校验数据进行均匀分段,降低了CRC计算过程中组合逻辑实现的处理位宽,并且通过逆向修正每段的CRC结果得到最终CRC结果,例如1024比特的待校验数据均分为4段子数据后,单段子数据的组合逻辑实现的处理位宽由1024比特降低到256比特,而且逆向修正时只需要执行三次,即可得到最终CRC结果,从而降低了CRC实现装置的CRC计算复杂度,提升了CRC计算性能。结合第一方面,在第一方面的第一种可能的实现中,所述CRC实现装置对所述K段子数据中每一段子数据分别进行CRC计算,得到K个CRC结果,包括:所述CRC实现装置根据预设初值对第K段子数据进行CRC计算,得到第K段子数据的CRC结果;所述CRC实现装置根据全零初值对第1段子数据至第K-1段子数据分别进行CRC计算,得到所述第1段子数据的CRC结果至所述第K-1段子数据的CRC结果。由于CRC计算时,CRC实现装置设置了CRC码,例如8位比特的CRC8码或者32位比特的CRC32码等,并且预先设置了CRC计算的预设初值,根据国际电报电话咨询委员会(CCITT)所设的标准要求CRC8码的预设初值为0xFF,CRC32码的预设初值为0xFFFFFFFF,由于待校验数据均分为K段子数据,那么在CRC计算时,需要分别对每一段子数据分别进行CRC计算,在计算第K段子数据时,由于是第K段子数据是待校验数据的最高位的子数据段,那么计算第K段子数据的CRC结果时,采用的是预设初值,而第1段子数据至第K-1段子数据的CRC计算时,为了不影响其他段子数据,那么第1段子数据至第K-1段子数据分别进行CRC计算时采用全零初值。结合第一方面的第一种可能的实现,在第一方面的第二种可能的实现中,所述CRC实现装置按照从高位到低位的顺序对所述K个CRC结果进行逆向修正,得到最终CRC结果,包括:所述CRC实现装置将所述第1段子数据的CRC结果至所述第K-1段子数据的CRC结果输入预置CRC初值影响矩阵,得到所述第1段子数据至所述第K-1段子数据中每一段子数据的初值影响值;修正第M-1段子数据的CRC结果,其中,M大于等于2且小于等于K,包括:将第M段子数据的修正CRC结果作为第M-1段子数据的初值,其中,第K段子数据的修正CRC结果为所述第K段子数据的CRC结果;将第M-1段子数据的初值和第M-1段子数据的初值影响值的对应比特异或,得到第M-1段子数据的CRC结果修正值;将所述第M-1段子数据的CRC结果修正值与所述第M-1段子数据的CRC结果的对应比特异或,得到所述第M-1段子数据的修正CRC结果;当M-1等于1时,所述第M-1段子数据的修正CRC结果为最终CRC结果。预置CRC初值影响矩阵是一个x×x的矩阵,由常用的初值影响矩阵的运算公式迭代运算L次得到,x表示为CRC码的版本,例如采用CRC8码时,x为8,L为待校验数据的比特位数,CRC实现装置将K个CRC结果输入预置CRC初值影响矩阵,能够得到每一段子数据的CRC结果的初值影响值,其中,由于第K段子数据是最高位的子数据段,采用的又是逆向修正方法,那么第K段子数据的CRC结果不计算初值影响值,并作为第K-1段子数据的初值,而且由于初值影响值、CRC结果修正值和CRC结果都是以二进制表示的,将第K段子数据的CRC结果与第K-1段子数据的初值影响值的对应比特异或,得到第K-1段子数据的CRC结果修正值,将第K-1段子数据的CRC结果修正值与第K-1段子数据的CRC结果的对应比特异或,能够得到第K-1段子数据的修正CRC结果,设置M大于等于2且小于等于K-1,以修正第M-1段子数据的CRC结果的过程为例,将第M段子数据的修正CRC结果作为第M-1段子数据的初值,根据第M-1段子数据的初值影响值与第M-1段子数据的初值的对应比特异或,得到第M-1段子数据的CRC结果修正值,将第M-1段子数据的CRC结果修正值与第M-1段子数据的CRC结果的对应比特异或,得到第M-1段子数据的修正CRC结果,以此类推,直到M-1等于1的时候,由于第1段子数据是最低位的子数据段,那么第1段子数据的修正CRC结果就是最终CRC结果。结合第一方面的第二种可能的实现,在所述修正第M-1段子数据的CRC结果之前,还包括:获取所述待校验数据的有效字节数Mod值,所述Mod值用于指示所述待校验数据中的有效数据的分布状况;根据所述Mod值确定第M段子数据是否包含有效数据;当第M段子数据包含有效数据时,执行所述修正第M-1段子数据的CRC结果;当第M段子数据不包含有效数据时,不执行所述修正第M-1段子数据的CRC结果,所述第M-1段子数据的修正CRC结果为所述第M-1段子数据的CRC结果。如果在第M段子数据中不包含有效数据,那么根据第M段子数据的修正CRC结果对第M-1段子数据的CRC结果进行逆向修正是没有意义的,因此,在修正第M-1段子数据的CRC结果之前,还需要获取待校验数据的Mod值,由于Mod值用于指示待校验数据中的有效数据的分布状况,那根据Mod值可以确定第M段子数据是否包含有效数据,如果第M段子数据包含有效数据,进行第M-1段子数据的CRC结果的修正,如果第M段子数据不包含有效数据,那么第M-1段子数据的CRC结果不进行修正,并且在后续第M-2段子数据的修正中,第M-1段子数据的修正CRC结果为第M-1段子数据的CRC结果,作为第M-2段子数据的初值,当存在多段子数据不包含有效数据时,可以减少无用的计算,从而更加有利于CRC计算性能的提升。结合第一方面、第一方面的第一种可能的实现、第一方面的第二种可能的实现或第一方面的第三种可能的实现,第一方面的第四种可能的实现中,所述CRC实现装置按照从低位到高位的顺序将待校验数据均分为K段子数据之前,还包括:CRC实现装置获取输入数据;当所述输入数据的比特位数等于所述CRC实现装置的数据位宽时,所述输入数据为待校验数据;当所述输入数据的比特位数小于所述CRC实现装置的数据位宽时,根据所述CRC实现装置的数据位宽,在所述输入数据的尾部进行0比特填充,得到所述待校验数据,所述待校验数据的比特位数等于所述数据位宽。CRC实现装置无论是作为数据的发送方或者接收方,在通过通信接口接收到输入数据后,需要判断输入数据的比特位数是否与CRC实现装置的数据位宽一致,因为CRC实现装置的CRC计算的数据对象必须是符合位宽要求才能执行,如果输入数据的比特位数与CRC实现装置的数据位宽一致时,那么输入数据就是待校验数据;如果输入数据的比特位数与CRC实现装置的数据位宽不同,由于输入数据是以数据包的形式传输的,那么CRC实现装置的数据位宽在预先设置时是考虑到了通信系统的数据包的包长的,如果一个数据包有数据丢失,那么输入数据的比特位数将小于数据位宽,不会存在输入数据的比特位数大于数据位宽的情况,在输入数据的最高位之后进行0比特填充,使得输入数据的比特位数增加,直到输入数据的比特位数与CRC实现装置的数据位宽相等,保证了CRC计算正常执行,同时还在当第M段子数据不包含有效数据时,第M段子数据至第K段子数据中必定也不包含有效数据,为根据Mod值对CRC结果进行逆向修正提供了环境。第二方面提供一种CRC实现装置,包括:分段模块,用于按照从低位到高位的顺序将待校验数据均分为K段子数据,所述待校验数据的比特位数等于所述CRC实现装置的数据位宽,K为偶数;计算模块,用于对所述K段子数据中每一段子数据分别进行CRC计算,得到K个CRC结果;所述计算模块,还用于按照从高位到低位的顺序对所述K个CRC结果进行逆向修正,得到最终CRC结果。CRC实现装置计算得到待校验数据的CRC结果的过程中,分段模块先按照从低位到高位的顺序将待校验数据均分为K段子数据,而且待校验数据的比特位数等于CRC实现装置的数据位宽,K为偶数,例如CRC实现装置的数据位宽为1024比特,分段模块可以将待校验数据均分为2、4或6等偶数段的子数据,计算模块对每一段子数据分别进行CRC计算,得到对应的CRC结果,即进行CRC计算时,每段子数据的CRC结果不影响其他段子数据的CRC结果,得到的CRC结果总计为K个,由于K段子数据是按照从低位到高位的顺序均分的,那么K段子数据的顺序是已知的,计算模块再对K个CRC结果进行逆向修正,具体操作为以第K段子数据的CRC结果为基础,修正第K-1段子数据的CRC结果,再以第K-1段子数据的修正后的CRC结果为基础,修正第K-2段子数据的CRC结果,依次类推,直到将第1段子数据的CRC结果进行修正,修正后的第1段子数据的CRC结果就是最终CRC结果。由于对待校验数据进行均匀分段,降低了CRC计算过程中逻辑实现的处理位宽,并且通过逆向修正每段的CRC结果得到最终CRC结果,例如1024比特的待校验数据均分为4段子数据后,处理位宽由1024比特降低到256比特,而且逆向修正时只需要执行三次,即可得到最终CRC结果,从而降低了CRC实现装置的CRC计算复杂度,提升了CRC计算性能。结合第二方面,第二方面的第一种可能的实现中,所述计算模块包括:K个计算单元,其中一个计算单元对应一段子数据;第K计算单元,用于根据预设初值对第K段子数据进行CRC计算,得到第K段子数据的CRC结果;第1计算单元至第K-1计算单元,用于根据全零初值对第1段子数据至第K-1段子数据分别进行CRC计算,得到所述第1段子数据的CRC结果至所述第K-1段子数据的CRC结果。由于CRC计算时,CRC实现装置设置了CRC码,例如CRC8码或者CRC32码等,并且预先设置了CRC计算的预设初值,根据CCITT所设的标准要求CRC8码的预设初值为0xFF,CRC32码的预设初值为0xFFFFFFFF,而由于分段模块将待校验数据均分为K段子数据,那么在计算模块CRC计算时,计算模块中的K个计算单元需要分别对每一段子数据分别进行CRC计算,第K计算单元在进行第K段子数据的CRC计算时,由于第K段子数据是待校验数据的最高位的子数据段,那么计算第K段子数据的CRC结果时,采用的是预设初值,而分别对第1段子数据至第K-1段子数据中各段子数据进行CRC计算时,为了不影响其他段子数据,那么第1段子数据至第K-1段子数据分别进行CRC计算时采用全零初值。结合第二方面的第一种可能的实现,第二方面的第二中可能的实现中,所述计算模块包括:初值影响值计算单元,用于将所述第1段子数据的CRC结果至所述第K-1段子数据的CRC结果输入预置CRC初值影响矩阵,得到所述第1段子数据至所述第K-1段子数据中每一段子数据的初值影响值;第M-1计算单元,用于修正第M-1段子数据的CRC结果,其中,M大于等于2且小于等于K,包括:将第M段子数据的修正CRC结果作为第M-1段子数据的初值,其中,第K段子数据的修正CRC结果为所述第K段子数据的CRC结果;将第M-1段子数据的初值和第M-1段子数据的初值影响值的对应比特异或,得到第M-1段子数据的CRC结果修正值;将所述第M-1段子数据的CRC结果修正值与所述第M-1段子数据的CRC结果的对应比特异或,得到所述第M-1段子数据的修正CRC结果;当M-1等于1时,所述第M-1段子数据的修正CRC结果为最终CRC结果。预置CRC初值影响矩阵是一个x×x的矩阵,由现有的初值影响矩阵的运算公式迭代运算L次得到,x表示为CRC码的版本,例如采用CRC8码时,x为8,L为待校验数据的比特位数,初值影响值计算单元将K个CRC结果输入预置CRC初值影响矩阵,能够得到每一段子数据的CRC结果的初值影响值,其中,由于第K段子数据是最高位的子数据段,采用的又是逆向修正方法,那么第K段子数据的CRC结果不计算初值影响值,并作为第K-1段子数据的初值,第K-1计算单元将第K段子数据的CRC结果与第K-1段子数据的初值影响值计算得到第K-1段子数据的CRC结果修正值,而且由于CRC结果修正值和CRC结果都是以二进制表示的,那么第K-1计算单元将第K-1段子数据的CRC结果修正值与第K-1段子数据的CRC结果对应比特异或,能够得到第K-1段子数据的修正CRC结果,设置M大于等于2且小于等于K-1时,以修正第M-1段子数据的CRC结果的过程为例,第M-1计算单元将第M段子数据的修正CRC结果作为第M-1段子数据的初值,根据第M-1段子数据的初值影响值与第M-1段子数据的初值,计算得到第M-1段子数据的CRC结果修正值,将第M-1段子数据的CRC结果修正值与第M-1段子数据的CRC结果对应比特异或,得到第M-1段子数据的修正CRC结果,以此类推,直到M-1等于1的时候,由于第1段子数据是最低位的子数据段,那么第1段子数据的修正CRC结果就是最终CRC结果。结合第二方面的第二种可能的实现,第二方面的第三种可能的实现中,所述第M-1计算单元,还用于获取所述待校验数据的Mod值,所述Mod值用于指示所述待校验数据中的有效数据的分布状况;所述第M-1计算单元,还用于根据所述Mod值确定第M段子数据是否包含有效数据;所述第M-1计算单元,还用于当第M段子数据包含有效数据时,执行所述修正第M-1段子数据的CRC结果;所述第M-1计算单元,还用于当第M段子数据不包含有效数据时,不执行所述修正第M-1段子数据的CRC结果,所述第M-1段子数据的修正CRC结果为所述第M-1段子数据的CRC结果。如果在第M段子数据中不包含有效数据,那么根据第M段子数据的修正CRC结果对第M-1段子数据的CRC结果进行逆向修正是没有意义的,因此,第M-1计算单元在修正第M-1段子数据的CRC结果之前还需要获取待校验数据的Mod值,由于Mod值用于指示待校验数据中的有效数据的分布状况,那么第M-1计算单元根据Mod值可以确定第M段子数据是否包含有效数据,如果第M段子数据包含有效数据,第M-1计算单元可以将第M段子数据的修正CRC结果作为第M-1段子数据的初值,如果第M段子数据不包含有效数据,那么第M-1计算单元不对第M-1段子数据的CRC结果进行修正,并且在后续第M-2段子数据的修正中,第M-1段子数据的修正CRC结果为第M-1段子数据的CRC结果,作为第M-2段子数据的初值,当存在多段子数据不包含有效数据时,可以减少无用的计算,从而更加有利于CRC计算性能的提升。结合第二方面、第二方面的第一种可能的实现、第二方面的第二种可能的实现或第二方面的第三种可能的实现,本发明第二方面的第四种可能的实现中,所述装置还包括:数据填充模块,用于获取输入数据;所述数据填充模块,还用于当所述输入数据的比特位数等于CRC实现装置的数据位宽时,确定所述输入数据为待校验数据;所述数据填充模块,还用于当所述输入数据的比特位数小于所述CRC实现装置的数据位宽时,根据所述CRC实现装置的数据位宽,在所述输入数据的最高位之后进行0比特填充,得到待校验数据,所述待校验数据的比特位数等于所述数据位宽。CRC实现装置无论是作为数据的发送方或者接收方,在数据填充模块通过通信接口接收到输入数据后,数据填充模块需要判断输入数据的比特位数是否与CRC实现装置的数据位宽一致,因为CRC实现装置的CRC计算的数据对象必须是符合位宽要求才能执行,如果输入数据的比特位数与CRC实现装置的数据位宽一致时,那么输入数据就是待校验数据;如果输入数据的比特位数与CRC实现装置的数据位宽不同,由于输入数据是以数据包的形式传输的,那么CRC实现装置的数据位宽在预先设置时是考虑到了通信系统的数据包的包长的,如果一个数据包有数丢失,那么输入数据的比特位数将小于数据位宽,不会存在输入数据的比特位数大于数据位宽的情况,数据填充模块在输入数据的最高位之后进行0比特填充,使得输入数据的比特位数增加,直到输入数据的比特位数与CRC实现装置的数据位宽相等,保证了CRC计算正常执行,同时还在当第M段子数据不包含有效数据时,第M段子数据至第K段子数据中必定也不包含有效数据,为根据Mod值对CRC结果进行逆向修正提供了环境。第三方面提供了一种网络设备,包括:处理芯片和通信接口,所述处理芯片包括CRC实现装置;所述处理芯片用于接收从所述通信接口接收到待校验数据,CRC实现装置按照从低位到高位的顺序将所述待校验数据均分为K段子数据,对所述K段子数据中每一段子数据分别进行CRC计算,得到K个CRC结果,按照从高位到低位的顺序对所述K个CRC结果进行逆向修正,得到最终CRC结果,所述待校验数据的比特位数等于所述CRC实现装置的数据位宽,K为大于等于2的偶数。处理芯片计算得到通信接口接收到的待校验数据的CRC结果的过程中,先按照从低位到高位的顺序将待校验数据均分为K段子数据,而且待校验数据的比特位数等于CRC实现装置的数据位宽,K为偶数,例如CRC实现装置的数据位宽为1024比特,可以将待校验数据均分为2、4或6等偶数段的子数据,对每一段子数据分别进行CRC计算,得到对应的CRC结果,即进行CRC计算时,每段子数据的CRC结果不影响其他段子数据的CRC结果,得到的CRC结果总计为K个,由于K段子数据是按照从低位到高位的顺序均分的,那么K段子数据的顺序是已知的,再对K个CRC结果进行逆向修正,具体操作为以第K段子数据的CRC结果为基础,修正第K-1段子数据的CRC结果,再以第K-1段子数据的修正后的CRC结果为基础,修正第K-2段子数据的CRC结果,依次类推,直到将第1段子数据的CRC结果进行修正,修正后的第1段子数据的CRC结果就是最终CRC结果。与现有技术相比,由于对待校验数据进行均匀分段,降低了CRC计算过程中组合逻辑实现的处理位宽,并且通过逆向修正每段的CRC结果得到最终CRC结果,例如1024比特的待校验数据均分为4段子数据后,每段子数据的组合逻辑实现的处理位宽由1024比特降低到256比特,而且逆向修正时只需要执行三次,即可得到最终CRC结果,从而降低了CRC实现装置的CRC计算复杂度,从而提升CRC计算性能。附图说明为了更清楚地说明本发明实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍。图1为一种常用的CRC实现方法的示意图;图2为另一种常用的CRC实现方法的示意图;图3为本申请提供的CRC实现方法的一个实施例的流程示意图;图4为本申请提供的CRC实现装置的一个实施例的结构示意图;图5为本申请提供的CRC实现装置的另一个实施例的结构示意图;图6为本申请提供的CRC实现装置的又一个实施例的结构示意图;图7为本申请提供的网络设备的一个实施例的结构示意图。具体实施方式下面将结合附图,详细介绍本发明实施例提供的技术方案。首先简单介绍本发明实施例应用的系统构架或场景。本发明实施例主要应用于FPGA逻辑实现接口通信的场景中,为了提高数据传输的可靠性,普遍采用对数据添加校验位传输的方法。在现行的数据校验算法中最常用的是CRC算法。CRC算法是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,从而保证数据传输的正确性和完整性。因此,发送方在发送数据前,需要进行CRC计算,得到CRC结果,将CRC结果附在数据后面一起发送给接收方,接收方在接收到CRC结果和数据后,对数据进行CRC计算,得到待验证CRC结果,将待验证CRC结果与发送方发送的CRC结果进行对比,如果一致,则表示数据传送无误,反之,则表示数据传送有误。发送方与接收方都是通信系统中的网络设备,而进行CRC计算完成CRC实现方法的CRC实现装置可以是网络设备中的处理器,包括网络处理器(NetworkProcessor,NP)、专用集成电路(Application-specificIntegratedCircuit,ASIC)芯片或可编程逻辑器件,例如FPGA。为了解决图1所示的CRC实现方法在数据位宽变大时,CRC计算复杂度提升,导致CRC计算性能大幅下降的问题,以及图2所示的CRC实现方法在数据位宽变大时,CRC计算的处理级数增加,导致CRC计算性能受到影响的问题,本申请提出一种新的CRC实现方法,以下进行详细说明。请参阅图3,本发明实施例中CRC实现方法的一个实施例包括:301、CRC实现装置按照从低位到高位的顺序将待校验数据均分为K段子数据;本实施例中,CRC实现装置将获得的待校验数据均分为K段子数据,待校验数据的比特位数等于CRC实现装置的数据位宽,根据FPGA数据传输的特点,数据位宽都是2的整数次方,例如256比特、512比特或1024比特等,K是大于等于2的偶数。如果待校验数据的比特位数为1024位,将待校验数据按照从低位到高位的顺序均分为4段,即K=4,待校验数据从低位到高位的比特排列为0-1023比特,每1段子数据的比特位数为256位,第1段子数据为待校验数据的0-255比特,第2段子数据为待校验数据的256比特-511比特,第3段子数据为待校验数据的512比特-767比特,第4段子数据为待校验数据的768比特-1023比特。302、CRC实现装置对K段子数据中每一段子数据分别进行CRC计算,得到K个CRC结果;本实施例中,CRC实现装置对每一段子数据分别进行CRC计算,得到K个CRC结果,以待校验数据(数据长度1024比特)均分为4段子数据为例,CRC计算1024比特的待校验数据时,需要在一拍内算出128种情况,而本实施例对CRC计算每一段子数据时,只需要在一拍内算出32种情况。由于每一段子数据之间的CRC计算相互不影响,那么得到的K个CRC结果也是单独对应一段子数据。303、CRC实现装置按照从高位到低位的顺序对K个CRC结果进行逆向修正,得到最终CRC结果。本实施例中,例如,第1段子数据为待校验数据的0-255比特,第2段子数据为待校验数据的256比特-511比特,第3段子数据为待校验数据的512比特-767比特,第4段子数据为待校验数据的768比特-1023比特,根据第4段子数据的CRC结果对第3段子数据的CRC结果进行修正,得到第3段子数据的修正CRC结果,根据第3段子数据的修正CRC结果对第2段子数据的CRC结果进行修正,得到第2段子数据的修正CRC结果,根据第2段子数据的修正CRC结果对第1段子数据的CRC结果进行修正,得到第1段子数据的修正CRC结果,第1段子数据的修正后的CRC结果就是待校验数据的最终CRC结果。本发明实施例中,由于对待校验数据进行均匀分段,降低了CRC计算过程中组合逻辑实现的处理位宽,并且通过逆向修正每段的CRC结果得到最终CRC结果,例如1024比特的待校验数据均分为4段子数据后,单段子数据的组合逻辑实现的处理位宽由1024比特降低到256比特,而且逆向修正只需要执行三次,即可得到最终CRC结果,从而降低了CRC实现装置的CRC计算复杂度,从而提升CRC计算性能。上述实施例的待校验数据的比特位数要求是等于CRC实现装置的数据位宽,但是在数据传输过程中,如果出现掉包情况,那么CRC实现装置接收到的输入数据将无法满足CRC实现装置的数据位宽条件,下面就通过实施例说明如何将不满足数据位宽的输入数据处理为待校验数据。可选的,本发明的一些实施例中,按照从低位到高位的顺序将待校验数据均分为K段子数据之前,还包括:CRC实现装置获取输入数据;当输入数据的比特位数等于CRC实现装置的数据位宽时,输入数据为待校验数据;当输入数据的比特位数小于CRC实现装置的数据位宽时,根据CRC实现装置的数据位宽,在输入数据的最高位之后进行0比特填充,得到待校验数据,待校验数据的比特位数等于数据位宽。本发明实施例中,CRC实现装置无论是作为数据的发送方或者接收方,在通过通信接口接收到输入数据后,需要判断输入数据的比特位数是否与CRC实现装置的数据位宽一致,因为CRC实现装置的CRC计算的数据对象必须是符合位宽要求才能执行,如果输入数据的比特位数与CRC实现装置的数据位宽一致时,那么输入数据就是待校验数据;如果输入数据的比特位数与CRC实现装置的数据位宽不同,由于输入数据是以数据包的形式传输的,那么CRC实现装置的数据位宽在预先设置时是考虑到了通信系统的数据包的包长的,如果一个数据包有数丢失,那么输入数据的比特位数将小于数据位宽,不会存在输入数据的比特位数大于数据位宽的情况,在输入数据的最高位之后进行0比特填充,使得输入数据的比特位数增加,直到输入数据的比特位数与CRC实现装置的数据位宽相等,保证了CRC计算正常执行,例如,CRC实现装置的数据位宽为1024比特,而输入数据的数据长度为1020比特,那么需要在输入数据的第1019个比特位之后增加4个值为0的比特位,第1020比特,第1021比特,第1022比特和第1023比特,得到的就是1024比特的待校验数据。可选的,本发明的一些实施例中,对K段子数据中每一段子数据分别进行CRC计算,得到K个CRC结果,包括:CRC实现装置根据预设初值对第K段子数据进行CRC计算,得到第K段子数据的CRC结果;CRC实现装置根据全零初值对第1段子数据至第K-1段子数据分别进行CRC计算,得到第1段子数据的CRC结果至第K-1段子数据对应的CRC结果。本发明实施例中,CRC实现装置设置了CRC码协议,例如8位比特的CRC8码或者32位比特的CRC32码等,根据CCITT所设的标准要求CRC8码的预设初值为0xFF,CRC32码的预设初值为0xFFFFFFFF,由于待校验数据均分为K段子数据,那么在CRC计算时,需要分别对每一段子数据分别进行CRC计算,由于是逆向修正,那么待校验数据的最高位的子数据段(第K段子数据)在根据预设初值进行CRC计算得到CRC结果,而对第1段子数据至第K-1段子数据进行CRC计算时,为了每段子数据的CRC结果相互不影响,那么在CRC计算时采用全零初值,即,0x00。可选的,本发明的一些实施例中,按照从高位到低位的顺序对K个CRC结果进行逆向修正,得到最终CRC结果,包括:CRC实现装置将第1段子数据的CRC结果至第K-1段子数据的CRC结果输入预置CRC初值影响矩阵,得到第1段子数据至第K-1段子数据中每一段子数据的初值影响值;修正第M-1段子数据的CRC结果,其中,M大于等于2且小于等于K,以M取值从K至2,执行如下迭代过程:A、将第M段子数据的修正CRC结果作为第M-1段子数据的初值,其中,第K段子数据的修正CRC结果为第K段子数据的CRC结果;B、将第M-1段子数据的初值影响值与第M-1段子数据的初值的对应比特异或,得到第M-1段子数据的CRC结果修正值;C、将第M-1段子数据的CRC结果修正值与第M-1段子数据的CRC结果的对应比特异或,得到第M-1段子数据的修正CRC结果;D、当M-1大于1时,将所述第M-1段子数据的修正CRC结果作为第M-2段子数据的初值,M减去1,返回步骤B;E、当M-1等于1时,第M-1段子数据的修正CRC结果为最终CRC结果,迭代过程结束。本发明实施例中,预置CRC初值影响矩阵是一个x×x的矩阵,由已知的初值影响矩阵的运算公式迭代运算L次得到,x表示CRC码的版本,例如采用CRC8码时,x为8,L为待校验数据的比特位数,CRC实现装置将K个CRC结果输入预置CRC初值影响矩阵,预置CRC初值影响矩阵如表1所示,其中,M(i,k)为各段子数据的初值影响矩阵,i=0,1,...,x-1;k=0,1,2,...,x-1;L>0,当L=0时,有M(k,k,0)=1,M(k,notk,0)=0,L=0时,表示的是某段子数据的比特位数为0,即没有有效数据。表1kM(x-1,k)M(x-2,k)......M(1,k)M(0,k)x-11或01或0......1或01或0x-21或01或0......1或01或0....................................11或01或0......1或01或001或01或0......1或01或0将各段子数据对应的CRC结果输入以上CRC初值影响矩阵,得到每一段子数据的初值影响值,其中第K段子数据的CRC结果不计算初值影响值,即使将第K段子数据输入到初值影响矩阵也不导出初值影响值,因为第K段子数据是最高位的子数据段,而且由于本发明是使用逆向修正,那么第K段子数据的CRC结果无需进行修正,并第K段子数据的CRC结果将作为第K-1段子数据的初值。由于在之前的第1段子数据到第K-1段子数据分别CRC计算出CRC结果时,使用的是全零初值,那么第K-1段子数据的CRC结果与第K段子数据的CRC结果是独立的,但是从待校验数据的角度上,这两个CRC结果是相互影响的,那么就需要将第K段子数据的CRC结果作为第K-1段子数据的初值,执行上述迭代过程,直到M-1等于1,得到第1段子数据的修正CRC结果就是最终CRC结果。举例说明:待校验数据分为4段,第4段子数据的CRC结果“B”作为第3段子数据的初值“B”,将“B”与第3段子数据的初值影响值“A”的对应比特异或,得到第3段子数据的的CRC结果修正值“D”,将“D”与第3段子数据的CRC结果的对应比特异或,得到第3段子数据的修正CRC结果“E”。将第3段子数据的修正CRC结果“E”作为第2段子数据的初值,将“E”与第2段子数据的初值影响值“F”进行计算得到第2段子数据的的CRC结果修正值“G”,将“G”与第2段子数据的CRC结果的对应比特异或,得到第2段子数据的修正CRC结果“H”。将第2段子数据的修正CRC结果“H”作为第1段子数据的初值,将“H”与第1段子数据的初值影响值“I”进行计算得到第1段子数据的的CRC结果修正值“J”,将“J”与第1段子数据的CRC结果的对应比特异或,得到第1段子数据的修正CRC结果“R”,第1段子数据的修正CRC结果“R”就是最终CRC结果。可选的,本发明的一些实施例中,在修正第M-1段子数据的CRC结果之前,还包括:CRC实现装置获取待校验数据的Mod值,Mod值用于指示待校验数据中的有效数据的分布状况;根据Mod值确定第M段子数据是否包含有效数据;当第M段子数据包含有效数据时,执行修正第M-1段子数据的CRC结果;当第M段子数据不包含有效数据时,不执行修正第M-1段子数据的CRC结果,第M-1段子数据的修正CRC结果为第M-1段子数据的CRC结果。本发明实施例中,如果在第M段子数据中不包含有效数据,那么根据第M段子数据的修正CRC结果对第M-1段子数据的CRC结果进行逆向修正是没有意义的,因此,修正第M-1段子数据的CRC结果之前,还可以获取待校验数据的Mod值,由于Mod值用于指示待校验数据中的有效数据的分布状况,那么CRC实现装置根据Mod值可以确定第M段子数据是否包含有效数据,例如,Mod值的采用二进制表示为1111111,当Mod值的最高位为1时,表示有效数据为65字节~128字节,意思是有效数据处于待校验数据的520比特-1023比特,如果是分为4段,那么第3段子数据和第4段子数据中包含有效数据;当Mod值的最高位为0时,表示有效数据为1字节~64字节,表示有效数据处于待校验数据的0比特-511比特,那么第1段子数据和第2段子数据中包含有效数据。如果第M段子数据包含有效数据,将第M段子数据的修正CRC结果作为第M-1段子数据的初值,CRC实现装置将第M-1段子数据的初值影响值与所述第M-1段子数据的初值的对应比特异或,得到第M-1段子数据的CRC结果修正值,再将第M-1段子数据的CRC结果修正值与第M-1段子数据的CRC结果对应比特异或,得到第M-1段子数据的修正CRC结果;而当第M段子数据不包含有效数据时,CRC实现装置无需对第M-1段子数据的CRC结果进行修正,即,第M-1段子数据的CRC结果就是第M-1段子数据的修正CRC结果。当存在多段子数据不包含有效数据时,可以减少修正次数,例如,当Mod值的最高位为0时,第1段子数据和第2段子数据中包含有效数据,而第3段子数据和第4段子数据不包含有效数据时,第4段子数据的CRC结果原本就不需要修正。因为第4段子数据不包含有效数据,因此第3段子数据的CRC结果也不需要进行修正。由于第3段子数据不包含有效数据,那么第2段子数据的CRC结果也无需进行修正。第2段子数据的CRC结果(就是第2段子数据的修正CRC结果)直接作为第1段子数据的CRC结果的初值,计算出第1段子数据的修正CRC结果就是最终CRC结果,从而进一步简化CRC计算,提升CRC计算性能。上述实施例对CRC实现方法进行了说明,以下实施例对CRC实现装置进行说明。请参阅图4,本发明提供一种CRC实现装置,包括:分段模块401,用于按照从低位到高位的顺序将待校验数据均分为K段子数据,待校验数据的比特位数等于CRC实现装置的数据位宽,K为大于等于2的偶数;计算模块402,用于对K段子数据中每一段子数据分别进行CRC计算,得到K个CRC结果;计算模块402,还用于按照从高位到低位的顺序对K个CRC结果进行逆向修正,得到最终CRC结果。本发明实施例中,在现有的通信技术中,普遍采用FPGA逻辑实现接口通信,为了提高数据传输的可靠性,普遍采用对数据添加校验位传输的方法。在现行的数据校验算法中最常用的是CRC算法,而随着通信接口速率越来越快,数据位宽也越来越大,CRC计算也越来越复杂,为了降低CRC计算复杂度,本发明在CRC实现装置计算得到待校验数据的CRC结果的过程中,分段模块401先先按照从低位到高位的顺序将待校验数据均分为K段子数据,而且待校验数据的比特位数等于CRC实现装置的数据位宽,K为正整数,例如CRC实现装置的数据位宽为1024比特,可以将待校验数据均分为2、4或6等偶数段的子数据,计算模块402对每一段子数据分别进行CRC计算,得到对应的CRC结果,即进行CRC计算时,每段子数据的CRC结果不影响其他段子数据的CRC结果,得到的CRC结果总计为K个,由于K段子数据是按照从低位到高位的顺序均分的,那么K段子数据的顺序是已知的,计算模块402再对K个CRC结果进行逆向修正,具体操作为以第K段子数据的CRC结果为基础,修正第K-1段子数据的CRC结果,再以第K-1段子数据的修正后的CRC结果为基础,修正第K-2段子数据的CRC结果,依次类推,直到将第1段子数据的CRC结果进行修正,第1段子数据的修正CRC结果就是最终CRC结果。由于对待校验数据进行均匀分段,降低了CRC计算过程中组合逻辑实现的处理位宽,并且通过逆向修正每段的CRC结果得到最终CRC结果,例如1024比特的待校验数据均分为4段子数据后,单段子数据的组合逻辑实现的处理位宽由1024比特降低到256比特,而且逆向修正时只需要执行三次,即可得到最终CRC结果,从而降低了CRC实现装置的CRC计算复杂度,从而提升CRC计算性能。可选的,如图5所示,本发明的一些实施例中,计算模块402包括:K个计算单元501,其中一个计算单元501对应一段子数据;第K计算单元501,用于根据预设初值对第K段子数据进行CRC计算,得到第K段子数据的CRC结果;第1计算单元501至第K-1计算单元501,用于根据全零初值对第1段子数据至第K-1段子数据分别进行CRC计算,得到第1段子数据的CRC结果至第K-1段子数据的CRC结果。本发明实施例中,由于CRC计算时,CRC实现装置设置了CRC码,例如CRC8码或者CRC32码等,并且预先设置了CRC计算的预设初值,根据CCITT所设的标准要求CRC8码的预设初值为0xFF,CRC32码的预设初值为0xFFFFFFFF,而由于待校验数据均分为K段子数据,那么在CRC计算时,需要分别对每一段子数据分别进行CRC计算,第K计算单元在计算第K段子数据时,由于是第K段子数据是待校验数据的最高位的子数据段,那么计算第K段子数据的CRC结果时,采用的是预设初值,而第1段子数据至第K-1段子数据的CRC计算时,不影响其他段子数据,那么第1段子数据至第K-1段子数据分别进行CRC计算时采用全零初值。可选的,如图5所示,本发明的一些实施例中,计算模块402包括:初值影响值计算单元502,用于将第1段子数据的CRC结果至第K-1段子数据的CRC结果输入预置CRC初值影响矩阵,得到第1段子数据至第K-1段子数据中每一段子数据的初值影响值;第M-1计算单元501,用于修正第M-1段子数据的CRC结果,其中,M大于等于2且小于等于K,包括:将第M段子数据的修正CRC结果作为第M-1段子数据的初值,其中,第K段子数据的修正CRC结果为第K段子数据的CRC结果;将第M-1段子数据的初值和第M-1段子数据的初值影响值的对应比特异或,得到第M-1段子数据的CRC结果修正值;将第M-1段子数据的CRC结果修正值与第M-1段子数据的CRC结果的对应比特异或,得到第M-1段子数据的修正CRC结果;当M-1等于1时,第M-1段子数据的修正CRC结果为最终CRC结果。本发明实施例中,预置CRC初值影响矩阵是一个x×x的矩阵,由已知的初值影响矩阵的运算公式迭代运算L次得到,x表示为CRC码的版本,例如采用CRC8码时,x为8,L为待校验数据的比特位数,初值影响值计算单元502将K个CRC结果输入预置CRC初值影响矩阵,能够得到每一段子数据的CRC结果的影响值,其中,由于第K段子数据是最高位的子数据段,采用的又是逆向修正方法,那么第K段子数据的CRC结果不计算初值影响值,并作为第K-1段子数据的初值,设置M大于等于2且小于等于K-1,第M-1计算单元501修正第M-1段子数据的CRC结果的过程为,第M-1计算单元501将第M段子数据的修正CRC结果作为第M-1段子数据的初值,根据第M-1段子数据的初值影响值与第M-1段子数据的初值,计算得到第M-1段子数据的CRC结果修正值,将第M-1段子数据的CRC结果修正值与第M-1段子数据的CRC结果对应比特异或,得到第M-1段子数据的修正CRC结果,以此类推,直到M-1等于1的时候,由于第1段子数据是最低位的子数据段,那么第1段子数据的修正CRC结果就是最终CRC结果。可选的,如图5所示,本发明的一些实施例中,第M-1计算单元501,还用于获取待校验数据的Mod值,Mod值用于指示待校验数据中的有效数据的分布状况;第M-1计算单元501,还用于根据Mod值确定第M段子数据是否包含有效数据;第M-1计算单元501,还用于当第M段子数据包含有效数据时,执行修正第M-1段子数据的CRC结果;第M-1计算单元501,还用于当第M段子数据不包含有效数据时,不执行修正第M-1段子数据的CRC结果,第M-1段子数据的修正CRC结果为第M-1段子数据的CRC结果。本发明实施例中,如果在第M段子数据中不包含有效数据,那么第M-1计算单元501根据第M段子数据的修正CRC结果对第M-1段子数据的CRC结果进行逆向修正是没有意义的,因此,在第M-1计算单元501修正第M-1段子数据的CRC结果之前还需要获取待校验数据的Mod值,由于Mod值用于指示待校验数据中的有效数据的分布状况,那么第M-1计算单元501根据Mod值可以确定第M段子数据是否包含有效数据,如果第M段子数据包含有效数据,第M-1计算单元501可以将第M段子数据的修正CRC结果作为第M-1段子数据的初值,如果第M段子数据不包含有效数据,那么第M-1计算单元不对第M段子数据的CRC结果进行修正,当存在多段子数据不包含有效数据时,可以减少无用的计算,从而更加有利于CRC计算性能的提升。可选的,如图6所示,本发明的一些实施例中,还包括:数据填充模块601,用于获取输入数据;数据填充模块601,还用于当输入数据的比特位数等于CRC实现装置的数据位宽时,确定输入数据为待校验数据;数据填充模块601,还用于当输入数据的比特位数小于CRC实现装置的数据位宽时,根据CRC实现装置的数据位宽,在输入数据的最高位之后进行0比特填充,得到待校验数据,待校验数据的数据长度等于数据位宽。本发明实施例中,CRC实现装置无论是作为数据的发送方或者接收方,在数据填充模块601通过通信接口接收到输入数据后,需要判断输入数据的比特位数是否与CRC实现装置的数据位宽一致,因为CRC实现装置的CRC计算的数据对象必须是符合位宽要求才能执行,如果输入数据的比特位数与CRC实现装置的数据位宽一致时,那么输入数据就是待校验数据;如果输入数据的比特位数与CRC实现装置的数据位宽不同,由于输入数据是以数据包的形式传输的,那么CRC实现装置的比特位数在预先设置时是考虑到了通信系统的数据包的包长的,如果一个数据包有数丢失,那么输入数据的比特位数将小于数据位宽,不会存在输入数据的比特位数大于数据位宽的情况,数据填充模块601在输入数据的最高位之后进行0比特填充,使得输入数据的比特位数增加,直到输入数据的比特位数与CRC实现装置的数据位宽相等,保证了CRC计算正常执行,同时还在当第M段子数据不包含有效数据时,第M段子数据至第K段子数据中必定也不包含有效数据,为根据Mod值对CRC结果进行逆向修正提供了环境。上述实施例中介绍了CRC实现装置,下面通过实施例对CRC实现装置所处的网络设备进行说明,具体如下:请参阅图7,本发明实施例提供一种网络设备,包括:处理芯片701和通信接口702,处理芯片701和通信接口702通过总线或其他方式相互连接,处理芯片701包括CRC实现装置7011,CRC实现装置7011的结构和实现原理可以参考图4所示的实施例;处理芯片701用于通过通信接口702接收到待校验数据,提供给CRC实现装置7011,CRC实现装置7011按照从低位到高位的顺序将待校验数据均分为K段子数据,对K段子数据中每一段子数据分别进行CRC计算,得到K个CRC结果,按照从高位到低位的顺序对K个CRC结果进行逆向修正,得到最终CRC结果,待校验数据的比特位数等于CRC实现装置的数据位宽,K为大于等于2偶数。本发明实施例中,由于处理芯片701对待校验数据进行均匀分段,降低了CRC计算过程中组合逻辑实现的处理位宽,并且通过逆向修正每段的CRC结果得到最终CRC结果,例如1024比特的待校验数据均分为4段子数据后,每段子数据的组合逻辑实现的处理位宽由1024比特降低到256比特,而且逆向修正时只需要执行三次,即可得到最终CRC结果,从而降低了CRC实现装置的CRC计算复杂度,从而提升CRC计算性能。需要说明的是,在网络设备中处理芯片701可以是ASIC芯片,也可以是处理器,例如NP,还可以是可编程逻辑器件,例如FPGA。处理芯片701可以仅包括一个CRC实现装置7011,也可以包括多个CRC实现装置7011。具体地,处理芯片701包含的CRC实现装置7011的数量,由处理芯片701所支持的通信协议以及该通信协议使用的CRC码的版本确定。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1