[0030] 为使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明实施例作进一步详细的说明。
[0031] 本发明实施例提供了一种CRC实现方法,如图2所示,包括:
[0032] 201、对输入数据进行修正,得到修正数据;
[0033] 本发明实施例中,所述CRC实现方法可以由CRC实现装置执行。所述CRC实现装置可以是处理器,包括网络处理器(network processor,简称NP),专用集成电路(application-specific integrated circuit,简称ASIC)芯片,或可编程逻辑器件,例如FPGA。
[0034] CRC实现装置根据所述CRC实现装置的数据位宽,对输入数据进行修正。在所述输入数据的长度不是所述CRC实现装置的数据位宽整数倍的情况下,根据所述CRC实现装置的数据位宽,在所述输入数据的尾部填充0得到所述修正数据;所述修正数据的长度为所述数据位宽的整数倍。这样,进行CRC计算的数据长度固定,可以保证MOD指示是固定的而不存在多种可能性,从而可以减少计算模块的数量。
[0035] 举例来说,所述数据位宽为256bit,若所述数据的长度为248bit,则在所述输入数据的尾部填充8bit的0,所得到的修正数据的长度为256bit,为所述数据位宽的整数倍。若所述输入数据的长度为376bit,则在所述输入数据的尾部填充136bit的0,得到修正数据的长度为2*256bit,为所述数据位宽的整数倍。
[0036] 202、对所述修正数据进行CRC计算,得到中间CRC结果;
[0037] 所述CRC实现装置将所述修正数据作为被除数,CRC多项式作为除数,进行CRC计算得到该中间CRC结果;即,用除数除尽被除数的所有比特位,得到的余数即为该中间CRC结果。这里的除法用的是异或算法而不是算术除法。其中,所述CRC多项式是预先设置或配置在所述CRC实现装置上,例如可以为CRC8多项式x8+x6+1,或者也可以为CRC16多项式x16+x12+x5+1。
[0038] 以所述CRC实现装置的数据位宽为16bit,CRC8多项式x8+x6+1,即,二进制数101000001为例。假设输入数据为0x12,则根据步骤201对所述数据进行修正,得到的修正数据为0x1200。进一步地,对该修正数据0x1200进行CRC计算,即,以该修正数据为0x1200为被除数,以该多项式x8+x6+1(二进制数101000001)为除数,得到的中间CRC结果为0xC6,具体可参见图3所示。
[0039] 203、对所述中间CRC结果进行逆向修正,得到所述输入数据对应的最终CRC结果。
[0040] CRC算法是可逆的,CRC计算过程也可逆。因此,可以将上述对修正数据计算出的中间CRC结果,通过逆向修正,得到该输入数据对应的最终CRC结果。形象的来说,将对该修正数据进行CRC计算得到上述中间CRC结果的过程翻转(这样所有数据的高低位均发生翻转),回退步骤201中对输入数据进行修正时所填充0的比特位数,例如将图2翻转,回退8位得到一个计算结果;由于所有数据的高低位,包括计算结果的高低位,均发生了翻转,因此还需要将该计算结果的高低位再翻转回来,得到该输入数据0x12的最终计算结果。
[0041] 具体地,对上述中间CRC结果进行逆向修正,得到该输入数据对应的最终CRC结果包括:所述CRC实现装置将该中间CRC结果的高低位翻转后作为被除数;将该CRC多项式,例如x8+x6+1(二进制数101000001)的高低位翻转后作为除数,然后进行CRC计算得到计算结果,再将该计算结果的高低位翻转后得到该最终CRC结果。
[0042] 继续步骤202中的例子,所述CRC实现装置对所述中间CRC结果0xC6进行逆向修正,可以将图3过程翻转180度来看。具体可参见图4所示,将所述中间CRC结果0xC6(二进制:00110110)的高低位翻转得到0x63(二进制:01100011)作为被除数,将CRC8多项式x8+x6+1(二进制数101000001)高低位翻转得到x8+x2+1(二进制数100000101)作为除数,进行CRC计算后得到0xEA(二进制:11101010),再将0xEA进行高低位翻转,得到最终CRC结果0x57(二进制01010111)。
[0043] 采用本发明实施例提供的CRC实现方法,通过对输入数据进行修正,可以保证MOD指示是固定的而不存在多种可能性,这样计算模块的数量不会随着数据位宽增加而增加。相比于现有技术中整体所需的计算资源随着数据位宽成几何级增长,采用本发明实施例提供的CRC实现方法,整体所需的计算资源基本上随数据位宽线性增加,显著降低了大数据位宽处理器消耗的计算资源,从而提高处理器计算效率和性能。
[0044] 图5为本发明实施例提供的一种CRC实现装置的结构示意图,所述CRC实现装置50包括数据修正模块501,CRC计算模块502和结果修正模块503,用于实现图2所示的CRC实现方法。
[0045] 所述数据修正模块501,用于对输入数据进行修正,得到修正数据;
[0046] 所述CRC计算模块502,用于对所述修正数据进行CRC计算,得到中间CRC结果;
[0047] 所述结果修正模块503,用于对所述中间CRC结果进行逆向修正,得到所述输入数据对应的最终CRC结果。
[0048] 所述数据修正模块501,具体用于根据所述CRC实现装置的数据位宽,对输入数据进行修正,得到所述修正数据。具体地,在所述输入数据的长度不是所述CRC实现装置的数据位宽整数倍的情况下,所述数据修正模块501根据所述CRC实现装置的数据位宽,在所述输入数据的尾部填充0得到所述修正数据,所述修正数据的长度为所述数据位宽的整数倍。具体示例可见上文,此处不再赘述。这样,进行CRC计算的数据长度固定,可以保证MOD指示是固定的而不存在多种可能性,从而可以减少计算模块的数量。
[0049] 所述CRC计算模块502,具体用于将所述修正数据作为被除数,CRC多项式作为除数,进行CRC计算得到该中间CRC结果;即,用除数除尽被除数的所有比特位,得到的余数即为该中间CRC结果。这里的除法用的是异或算法而不是算术除法。其中,所述CRC多项式是预先设置或配置在所述CRC实现装置上,例如可以为CRC8多项式x8+x6+1,或者也可以为CRC16多项式x16+x12+x5+1。
[0050] CRC算法是可逆的,CRC计算过程也可逆。因此,可以将上述对修正数据计算出的中间CRC结果,通过逆向修正,得到该输入数据对应的最终CRC结果。形象的来说,将对该修正数据进行CRC计算得到上述中间CRC结果的过程翻转(这样所有数据的高低位均发生翻转),回退所述数据修正模块501对输入数据进行修正时所填充0的比特位数,例如将图3翻转,回退8位得到一个计算结果;由于所有数据的高低位,包括计算结果的高低位,均发生了翻转,因此还需要将该计算结果的高低位再翻转回来,得到该输入数据0x12的最终计算结果。
[0051] 所述结果修正模块503具体用于将被该中间CRC结果的高低位翻转后作为被除数;将该CRC多项式,例如x8+x6+1(二进制数101000001)的高低位翻转后作为除数,然后进行CRC计算得到计算结果,再将该计算结果的高低位翻转后得到该最终CRC结果。
[0052] 举例来说,所述CRC实现装置的数据位宽为16bit,输入数据为0x12,得到的修正数据为0x1200;以CRC8多项式x8+x6+1,即,二进制数101000001为例,所述CRC计算模块502根据该多项式对该修正数据0x1200进行CRC计算,得到的中间CRC结果为0xC6,具体计可参见图3所示。所述CRC实现装置对所述中间CRC结果0xC6进行逆向修正,可以将图3过程翻转180度来看。具体可参见图4所示,将所述中间CRC结果0xC6(二进制:00110110)的高低位翻转后得到0x63(二进制:01100011)作为被除数,将CRC8多项式x8+x6+1(二进制数101000001)高低位翻转后得到x8+x2+1(二进制数100000101)作为除数,进行CRC计算后得到0xEA(二进制:11101010),再将0xEA进行高低位翻转,得到最终CRC结果0x57(二进制01010111)。
[0053] 本实施例中其他未尽细节可参考本发明图2所示实施例中所述。
[0054] 所述CRC实现装置50可以由处理器实现,所述处理器包括NP,ASIC芯片,或可编程逻辑器件,例如FPGA。
[0055] 本发明实施例提供的CRC实现装置,通过对输入数据进行修正,可以保证MOD指示是固定的而不存在多种可能性,这样计算模块的数量不会随着数据位宽增加而增加,可以减少计算CRC时所需计算模块数。相比于现有技术中整体所需的计算资源随着数据位宽成几何级增长,本发明实施例提供的CRC实现装置,整体所需的计算资源基本上随数据位宽线性增加,可以显著地减少CRC计算所占用的资源,提高计算效率和资源利用率,从而提高所述CRC实现装置的性能。
[0056] 参见图6,为本发明实施例提供的网络设备结构示意图,所述网络设备60包括转发芯片601和通信接口602;
[0057] 所述转发芯片601和所述通信接口602通过总线或其他方式相互连接;
[0058] 所述转发芯片601包括如CRC实现装置6011;所述CRC实现装置6011的结构和实现原理可以参加图5所示的实施例。所述转发芯片601,用于接收从所述通信接口602收到的第一数据报文,从所述第一数据报文中获取净荷作为第一输入数据,从所述第一数据报文的FCS字段获取第一校验值;将所述第一输入数据提供给所述CRC实现装置6011,并从所述CRC装置6011获取所述第一输入数据对应的最终CRC结果;根据所述第一校验值和所述第一输入数据对应的最终CRC结果对所述第一数据报文进行校验。具体地,所述转发芯片601通过比较所述第一校验值与所述第一输入数据对应的最终CRC结果相同是否相同来验证所述第一数据报文传输的正确性。若所述第一校验值与所述第一输入数据对应的最终CRC结果相同,校验通过,表示所述第一数据报文传输正确;否则,校验不通过,表示所述第一数据报文传输出错。
[0059] 具体地,所述CRC实现装置如6011,包括:数据修正模块,用于对所述输入数据进行修正,得到修正数据;CRC计算模块,用于对所述修正数据进行CRC计算,得到中间CRC结果;结果修正模块,用于对所述中间CRC结果进行逆向修正,得到所述输入数据对应的最终CRC结果。
[0060] 所述数据修正模块,具体用于根据所述CRC实现装置6011的数据位宽,对所述输入数据进行修正,得到所述修正数据。具体地,在所述输入数据的长度不是所述CRC实现装置的数据位宽整数倍的情况下,所述数据修正模块根据所述CRC实现装置6011的数据位宽,在所述输入数据的尾部填充0得到所述修正数据,所述修正数据的长度为所述数据位宽的整数倍。具体示例可见上文,此处不再赘述。这样,进行CRC计算的数据长度固定,可以保证MOD指示是固定的而不存在多种可能性,从而可以减少计算模块的数量。
[0061] 所述转发芯片601还用于从第二数据报文中获取净荷作为第二输入数据,将所述第二输入数据提供给所述CRC实现装置6011,并从所述CRC装置6011获取所述第二输入数据对应的最终CRC结果;将所述第二输入数据对应的最终CRC结果作为校验值插入所述第二数据报文的FCS字段中,用于验证所述第二数据报文传输的正确性;并从所述通信接口602发送所述插入了校验值的数据报文。
[0062] 所述转发芯片601可以仅包括一个CRC实现装置6011,也可以包括多个CRC实现装置6011。具体地,所述转发芯片601包含的CRC实现装置6011的数量,由所述转发芯片601所支持的通信协议以及该通信协议使用的CRC多项式确定。例如,所述转发芯片601支持以太网(IEEE 802.3)和点对点协议(point-to-point protocol,简称PPP),其中,以太网使用CRC32多项式:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1,而PPP使用CRC16多项式:x16+x12+x5+1,则所述转发芯片601包括两个CRC实现装置6011,一个使用上述CRC32多项式实现以太网报文的CRC计算,另一个使用上述CRC16多项式实现PPP报文的CRC计算。或者,又例如,所述转发芯片601支持PPP和蓝牙(Bluetooth),其中PPP和蓝牙(Bluetooth)均使用CRC16多项式:x16+x12+x5+1,则所述转发芯片601可以只包括一个CRC实现装置6011。
[0063] 本发明实施例中以所述网络设备包括一个所述转发芯片601为例,如图6所示,当然所述网络设备也可以包括多个所述转发芯片601,对此本发明实施例不做限定。本发明实施例提供的网络设备,在对收到的第一数据报文进行CRC计算,以便验证报文传输的正确性,或者对待发送的第二数据报文进行CRC计算,得到校验值以便插入FCS字段,使得对端验证报文传输的正确性时,通过对输入数据,即,第一数据报文或第二数据报文的净荷进行修正,可以保证MOD指示是固定的而不存在多种可能性,这样计算模块的数量不会随着数据位宽增加而增加,可以减少计算CRC时所需计算模块数。相比于现有技术中整体所需的计算资源随着数据位宽成几何级增长,本发明实施例提供的网络设备,整体所需的CRC计算资源基本上随数据位宽线性增加,可以大大减少CRC计算所占用的资源,提高计算效率和资源利用率,从而提高所述网络设备的性能。
[0064] 本领域技术人员可以理解的是,本发明实施例中仅示出了网络设备中与本发明相关的部分结构,还可以包括比图示更多的部件,或者不同的部件布置。
[0065] 本领域普通技术人员可以理解,实现上述各方法实施例中的全部或部分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于计算机可读存储介质中,上述存储介质可以是随机存取存储器,只读存储器,快闪存储器,硬盘,固态硬盘或光盘等。
[0066] 以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。