发明内容
本发明实施例提供了一种校验方法和装置,用于减少对多个字节的并行数据进行CRC计算时所需要的硬件资源。
为解决上述技术问题,本发明实施例提供以下技术方案:
第一方面,本发明实施例提供一种校验方法,包括:
通过芯片的数据总线获取并行数据,所述并行数据的报文长度为L个字节,所述数据总线的位宽为N个字节,所述L和所述N都为正整数;
判断所述L除以所述N得到的余数是否等于0;
若所述L除以所述N得到的余数不等于0,在所述并行数据的头部添加P 个字节的填充数据,得到新的并行数据,所述P等于所述N减去M,所述M为所述L除以所述N得到的余数的取值;
根据所述L除以所述N得到的余数计算与位宽为所述N相对应的循环冗余校验CRC电路的初始值,所述初始值使得用与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后输出的结果相等;
根据所述与位宽为所述N相对应的CRC电路的初始值对所述新的并行数据进行CRC计算。
结合第一方面,在第一方面的第一种可能的实现方式中,所述通过芯片的数据总线获取并行数据之后,还包括:
对所述并行数据的尾部和所述数据总线进行对齐。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述判断所述L除以所述N得到的余数是否等于0之后,还包括:
若所述L除以所述N得到的余数等于0,根据与位宽为所述N相对应的CRC电路的预置初始值对所述并行数据进行CRC计算。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,当所述L除以所述N得到的余数等于0时,对所述并行数据进行CRC计算所使用的CRC电路的预置初始值为N个字节的1或N个字节的0。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第四种可能的实现方式中,所述P个字节的填充数据为P个字节的0。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第五种可能的实现方式中,所述根据所述L除以所述N得到的余数计算与位宽为所述N相对应的循环冗余校验CRC电路的初始值,包括:
根据预置数据的每个比特信息和预置初始值获取与位宽为所述M相对应的CRC电路的每个比特的输出结果;
根据所述预置数据的每个比特信息和待定初始值获取与位宽为所述N相对应的CRC电路的每个比特的输出结果;
在与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC 电路分别进行CRC计算后每个比特的输出结果都相等的情况下,计算所述与位宽为所述M相对应的CRC电路的预置初始值、所述与位宽为所述N相对应的CRC电路的待定初始值组成的方程组,求解出所述待定初始值,所述待定初始值即为所述与位宽为所述N相对应的CRC电路的初始值。
结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述根据预置数据的每个比特信息和预置初始值获取与位宽为所述M相对应的CRC电路的每个比特的输出结果,包括:
通过如下方式计算与位宽为所述M相对应的CRC电路的第x个比特的输出结果next_crc_M[x]:
其中,所述d为8乘以所述M个比特的所述预置数据,所述i为8乘以T个比特的所述预置初始值,所述T为与位宽为所述M相对应的CRC电路的生成多项式的阶数,所述FdM_x(d)为对所述d中的比特信息进行异或的结果,所述FiM_x(i)为对所述i中的比特信息进行异或的结果,所述为异或符号,所述x为与位宽为所述M相对应的CRC电路的任意一个比特;
所述根据预置数据的每个比特信息和待定初始值获取与位宽为所述N相对应的CRC电路的每个比特的输出结果,包括:
通过如下方式计算与位宽为所述N相对应的CRC电路的第x个比特的输出结果next_crc_N[x]:
其中,所述d为8乘以所述M个比特的所述预置数据,所述c为8乘以T个比特的所述待定初始值,所述T为与位宽为所述N相对应的CRC电路的生成多项式的阶数,所述FdN_x(d)为对所述d中的比特信息进行异或的结果,所述FcN_x(c)为对所述c中的比特信息进行异或的结果,所述为异或符号,所述x为与位宽为所述N相对应的CRC电路的任意一个比特;
所述与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等,通过如下方式实现:
next_crc_M[x]=next_crc_N[x];
所述计算所述与位宽为所述M相对应的CRC电路的预置初始值、所述与位宽为所述N相对应的CRC电路的待定初始值组成的方程组,求解出所述待定初始值,包括:
通过对如下方程组的求解计算出待定初始值c:
FdM_x(d)=FdN_x(d)。
第二方面,本发明实施例还提供一种校验装置,包括:
数据获取模块,用于通过芯片的数据总线获取并行数据,所述并行数据的报文长度为L个字节,所述数据总线的位宽为N个字节,所述L和所述N都为正整数;
余数判断模块,用于判断所述L除以所述N得到的余数是否等于0;
数据添加模块,用于当所述L除以所述N得到的余数不等于0时,在所述并行数据的头部添加P个字节的填充数据,得到新的并行数据,所述P等于所述N减去M,所述M为所述L除以所述N得到的余数的取值;
初始值计算模块,用于根据所述L除以所述N得到的余数计算与位宽为所述N相对应的循环冗余校验CRC电路的初始值,所述初始值使得用与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后输出的结果相等;
CRC计算模块,用于根据所述与位宽为所述N相对应的CRC电路的初始值对所述新的并行数据进行CRC计算。
结合第二方面,在第二方面的第一种可能的实现方式中,所述校验装置,还包括:
对齐模块,用于在所述数据获取模块通过芯片的数据总线获取并行数据之后,对所述并行数据的尾部和所述数据总线进行对齐。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述CRC计算模块,还用于当所述余数判断模块判定所述判断所述L除以所述N得到的余数等于0时,根据与位宽为所述N相对应的CRC电路的预置初始值对所述并行数据进行CRC计算。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,当所述L除以所述N得到的余数等于0时,所述CRC计算模块对所述并行数据进行CRC计算所使用的CRC电路的预置初始值为N个字节的1或N个字节的0。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第四种可能的实现方式中,所述数据添加模块对所述并行数据添加的P个字节的填充数据为P个字节的0。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第五种可能的实现方式中,所述初始值计算模块,包括:
第一结果获取子模块,用于根据预置数据的每个比特信息和预置初始值获取与位宽为所述M相对应的CRC电路的每个比特的输出结果;
第二结果获取子模块,用于根据所述预置数据的每个比特信息和待定初始值获取与位宽为所述N相对应的CRC电路的每个比特的输出结果;
初始值计算子模块,用于在与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等的情况下,计算所述与位宽为所述M相对应的CRC电路的预置初始值、所述与位宽为所述N相对应的CRC电路的待定初始值组成的方程组,求解出所述待定初始值,所述待定初始值即为与位宽为所述N相对应的CRC电路的初始值。
结合第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述第一结果获取子模块,具体用于通过如下方式计算与位宽为所述M相对应的CRC电路的第x个比特的输出结果next_crc_M[x]:
其中,所述d为8乘以所述M个比特的所述预置数据,所述i为8乘以T个比特的所述预置初始值,所述T为与位宽为所述M相对应的CRC电路的生成多项式的阶数,所述FdM_x(d)为对所述d中的比特信息进行异或的结果,所述FiM_x(i)为对所述i中的比特信息进行异或的结果,所述为异或符号,所述x为与位宽为所述M相对应的CRC电路的任意一个比特;
所述第二结果获取子模块,具体用于通过如下方式计算与位宽为所述N 相对应的CRC电路的第x个比特的输出结果next_crc_N[x]:
其中,所述d为8乘以所述M个比特的所述预置数据,所述c为8乘以T个比特的所述待定初始值,所述T为与位宽为所述N相对应的CRC电路的生成多项式的阶数,所述FdN_x(d)为对所述d中的比特信息进行异或的结果,所述FcN_x(c)为对所述c中的比特信息进行异或的结果,所述为异或符号,所述x为与位宽为所述N相对应的CRC电路的任意一个比特;
所述与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等,具体为:
next_crc_M[x]=next_crc_N[x];
所述初始值计算子模块,具体用于通过对如下方程组的求解计算出待定初始值c:
FdM_x(d)=FdN_x(d)。
从以上技术方案可以看出,本发明实施例具有以下优点:
在本发明实施例中,通过芯片的数据总线获取到报文长度为L个字节的并行数据,其中数据总线的位宽为N个字节,计算L除以N得到的余数M,判断M是否等于0,当M不等于0时,在并行数据的头部添加P个字节的填充数据,得到新的并行数据,然后根据余数M计算与位宽为N相对应的CRC电路的初始值,其中该初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,最后就可以根据与位宽为N相对应的CRC电路的初始值对新的并行数据进行CRC计算了。本发明实施例中根据并行数据的报文长度和数据总线的位宽对并行数据的头部添加了P个字节的填充数据得到新的并行数据,添加完填充数据后的新的并行数据的报文长度为数据总线的位宽的整数倍,在对新的并行数据进行CRC计算时所使用的与位宽为N相对应的CRC电路的初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,故对于从数据总线获取到的并行数据就可以都使用与位宽为N的一个CRC电路完成CRC计算了,相对于现有技术中对位宽为多个字节的并行数据进行CRC计算需要的多个CRC电路的技术方案,本发明实施例提供的技术方案所需的硬件资源较少。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本发明的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
以下分别进行详细说明。
本发明校验方法的一个实施例,可应用于对于并行数据的CRC计算中,该方法可包括:通过芯片的数据总线获取并行数据,并行数据的报文长度为L个字节,数据总线的位宽为N个字节,L和N都为正整数;判断L除以N得到的余数是否等于0;若L除以N得到的余数不等于0,在并行数据的头部添加P个字节的填充数据,得到新的并行数据,P等于N减去M,M为L除以N得到的余数的取值;根据L除以N得到的余数计算与位宽为N相对应的循环冗余校验(Cyclic Redundancy Check,CRC)电路的初始值,初始值使得用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等;根据与位宽为N相对应的CRC电路的初始值对新的并行数据进行CRC计算。
请参阅图1所示,本发明一个实施例提供的校验方法,具体可以包括如下步骤:
101、通过芯片的数据总线获取并行数据。
其中,并行数据的报文长度为L个字节,数据总线的位宽为N个字节,L和N都为正整数。
在本发明实施例中,芯片内部部署是有数据总线的,数据总线的位宽通常以字节为单位,例如,以正整数N来表示芯片的数据总线的位宽的字节数,则数据总线的位宽为N个字节,即8×N个比特(bit),符号×表示相乘,在本发明后续实施例中,相乘也可以用符号*来表示,其中N的取值具体可以为1、2、3、4等。通过数据总线获取到并行数据,并行数据的报文长度通常以字节为单位,例如,以正整数L来表示获取到的并行数据的报文长度,则获取到的并行数据的报文长度为L个字节,即8×L个bit。
需要说明的是,在本发明一些实施例中,数据总线的位宽为N个字节,也可以描述为通过该数据总线获取到的并行数据的位宽为N个字节。对于步骤101中通过芯片的数据总线获取并行数据的实现方式,举例来说,可以通过如下方式得到:串并转换器对接收到的串行数据进行处理,转化为并行数据。
在本发明一些实施例中,步骤101通过芯片的数据总线获取到并行数据之后,本发明实施例提供的校验方法还可以包括如下步骤:
对并行数据的尾部和数据总线进行对齐。
也就是说,在本发明实施例中,通过芯片的数据总线获取到并行数据之后,芯片内部的数据总线根据包尾指示(EOP End Of Packet,EOP)获知当前拍的数据是否报文的最后一拍,即使用EOP就可以获知并行数据的包尾,若并行数据的尾部和总线没有对齐,则需要对并行数据的尾部和数据总线进行对齐,若并行数据的尾部和总线已经对齐了,则无再对并行数据的尾部和数据总线进行对齐。
102、判断L除以N得到的余数是否等于0。
在本发明实施例中,通过芯片的数据总线获取到并行数据之后,可以得到并行数据的报文长度L和数据总线的位宽N,计算L除以N得到的余数,以正整数M来表示余数,举例来说,计算通过M=MOD(L,N)计算余数,MOD为取余运算,MOD(L,N)等于L除以N的余数。在计算出L除以N得到的余数M之后,判断余数M是否等于0,若余数M不等于,触发执行步骤103。
在本发明实施例中,当L除以N的余数M不等于于0时,L不是N的整数倍,则并行数据的报文无法与数据总线对齐,即需要用MOD信息来表示数据总线上的报文的实际有效字节数,MOD是L除以N的余数。当数据总线上的报文为头对齐时,通常只有在报文的最后一拍MOD信息才有效,当数据总线上的报文为尾对齐时,通常只有在报文的第一拍MOD信息才有效。由于通过芯片的数据总线获取到的报文长度是随机的,以数据总线的位宽为N为例,则MOD信息的取值会有N种可能值,例如MOD信息的取值有1、2、3、…N种取值的可能,举例说明如下:以芯片的数据总线的位宽为64bit为例,则MOD信息的取值就可以表示64位数据中的有效字节数,当MOD信息的取值为0时,可以表示8个字节的数据有效,当MOD信息的取值为1时,可以表示1个字节的数据有效,当MOD信息的取值为2时,可以表示2个字节的数据有效,当MOD信息的取值为3时,可以表示3个字节的数据有效,当MOD信息的取值为4时,可以表示4个字节的数据有效,当MOD信息的取值为5时,可以表示5个字节的数据有效,当MOD信息的取值为6时,可以表示6个字节的数据有效,当MOD信息的取值为7时,可以表示7个字节的数据有效。
通常情况下对并行数据进行CRC计算时一般以字节为单位,对于位宽大于1字节的数据总线,在位宽为N的数据总线上计算并行数据的CRC时,就需要与N个不同位宽分别相对应的CRC电路来实现。请参阅如图2所示,为使用与N个不同位宽分别相对应的CRC电路进行CRC计算的实现过程示意图,其中,对于位宽为8个字节的并行数据,分别需要的CRC电路为:与位宽为1相对应的CRC电路、与位宽为2相对应的CRC电路、与位宽为3相对应的CRC电路、与位宽为4相对应的CRC电路、与位宽为5相对应的CRC电路、与位宽为6相对应的CRC电路、与位宽为7相对应的CRC电路、与位宽为8相对应的CRC电路,其中,1、2、3、4、5、6、7、8分别以字节为单位,即可以简述为共需要CRC8,CRC16,CRC24,CRC32,CRC40,CRC48,CRC56,CRC64共8套的CRC计算函数才能实现对并行数据的CRC计算,8、16、24、32、40、48、56、64分别以比特为单位,其中MOD代表输入数据的有效字节数,根据MOD选择当前需要使用的CRC电路进行CRC计算,然后输出计算结果,对于不同MOD取值就选取其中一个CRC电路来输出计算结果,例如:当数据总线送来的有效并行数据是3个字节时,那么就需要选择与位宽为3相对应的CRC电路进行CRC计算以输出计算结果。由于并行数据的报文长度的随机性,所以芯片需要能处理1~8字节分别有效的并行数据的CRC电路,故图2所示情况下会占用较多的CRC硬件资源,并且随着输入的并行数据的位宽增大,则需要更多的CRC电路,例如128bit位宽的数据总线,则会需要16个CRC电路,依此类推,会大大增加的硬件逻辑资源使用,同时数据总线的位宽增大,MOD模式种类也就越大,也会极大的增大组合电路的复杂度,不利于电路处理时钟频率的提升。
需要说明的是,在本发明的一些实施例中,步骤102判断L除以N得到的余数是否等于0之后,本发明实施例提供的校验方法还可以包括如下步骤:
若L除以N得到的余数等于0,根据与位宽为N相对应的CRC电路的预置初始值对并行数据进行CRC计算。
也就是说,在本发明实施例中,L除以N得到的余数等于0时,并行数据的报文长度为数据总线的位宽的整数倍,即MOD信息的取值为0,在数据总线的当前拍上的数据的有效字节数与其余所有拍上的数据的有效字节数相同,即并行数据报文的每一个拍上的有效字节数都相同,则可以使用一个CRC电路对并行数据进行CRC计算,即可以根据与位宽为N相对应的CRC电路的预置初始值对并行数据进行CRC计算,可以理解的是,按照本发明实施例此处的描述,如果L除以N的余数等于0,则不需要在对并行数据进行让任何添加处理,就可以直接采用与位宽为N相对应的一个CRC电路进行CRC计算。具体的,当L除以N得到的余数M等于0时,对并行数据进行CRC计算所使用的CRC电路的预置初始值为一个常数,例如为N个字节的1或0。
103、若L除以N得到的余数不等于0,在并行数据的头部添加P个字节的填充数据,得到新的并行数据。
其中,P等于N减去M,M为L除以N得到的余数的取值。
在本发明实施例中,当L除以N得到余数M不等于0时,可以在并行数据的头部添加P个字节的填充数据,从而得到新的并行数据。具体的,在并行数据的头部添加的填充数据为P个字节的0,即在并行数据的头部添加P个字节的全0,当然本发明实施例中为了CRC计算时计算的便捷性而选择填充P个字节的全0,当也可以在并行数据的头部添加P个字节其它常数作为填充数据,此处仅作说明,不做限定。
在本发明实施例中,则添加完填充数据后的新的并行数据的报文长度为数据总线的位宽的整数倍,若并行数据的尾部和数据总线对齐,在数据总线上的并行数据的第一拍中包含M个字节的数据,除了第一拍之外,其它拍的并行数据就都可以使用与位宽为N相对应的CRC电路进行CRC计算,按照通常的实现方式,则对于在数据总线上的第一拍的数据就需要使用与位宽为M相对应的CRC电路进行CRC计算。
举例说明如下:通过芯片的数据总线获取到的并行数据的报文长度L=18个字节,即144个比特,数据总线的位宽N=8个字节,即64个比特,对于并行数据的尾部和数据总线对齐的情况,在数据总线的第一拍上的并行数据为2个字节,在数据总线的第二拍上的并行数据为8个字节,在数据总线的第三拍上的并行数据为8个字节,则对于第二拍和第三拍的并行数据就可以使用与位宽为8个字节对应的CRC电路进行CRC计算,对于在数据总线的第一拍上的并行数据则需要使用与位宽为2个字节对应的CRC电路进行CRC计算,则按照通常的实现方式,就需要与位宽为2个字节对应的CRC电路、与位宽为8个字节对应的CRC电路两种CRC电路来实现CRC计算,并且对于并行数据的报文长度的随机性,则可能也需要与位宽为1个字节对应的CRC电路、与位宽为3个字节对应的CRC电路、与位宽为4个字节对应的CRC电路、与位宽为5个字节对应的CRC电路、与位宽为6个字节对应的CRC电路、与位宽为7个字节对应的CRC电路中的一个CRC电路、以及与位宽为8个字节对应的CRC电路来进行CRC计算,如此情况下就需要较多的CRC硬件逻辑资源。需要说明的是,在上述常用的CRC电路中都会使用固定不变的初始值,例如与位宽为3个字节对应的CRC电路使用的初始值为3个字节的全1,与位宽为2个字节对应的CRC电路使用的初始值为2个字节的全1等等,而本发明实施例中就与此不同,而是当L除以N得到的余数不等于0,在并行数据的头部添加P个字节的填充数据之后,触发执行步骤104根据余数M计算出与位宽为N相对应的CRC电路的初始值,详见步骤104中的描述。
104、根据L除以N得到的余数计算与位宽为N相对应的CRC电路的初始值,初始值使得用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等。
在本发明实施例中,当L除以N得到的余数不等于0时在并行数据的头部添加P个字节的填充数据得到新的并行数据之后,该新的并行数据的报文长度为数据总线的位宽的整数倍,为了是在数据总线上所有拍的并行数据都能够使用同一个CRC电路,即为了在数据总线上所有拍的并行数据都使用与位宽为N相对应的CRC电路进行CRC计算,则需要根据余数M来计算与位宽为N相对应的CRC电路的初始值,该初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,若并行数据的尾部和数据总线对齐,根据计算出的这个初始值在数据总线上的并行数据的第一拍中包含M个字节的数据就也可以使用与位宽为N相对应的CRC电路了,由于除了第一拍之外其它拍的并行数据都使用与位宽为N相对应的CRC电路进行CRC计算,故本发明实施例中就可以只使用一种CRC电路进行CRC计算,即可以只使用与数据总线的位宽相对应的一个CRC电路进行CRC计算了,因为步骤104中计算出的初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等。
需要说明的是,在本发明实施例中,对于通过并行数据的报文长度和数据总线的位宽计算出的余数M的取值不同,则步骤104中计算出的与位宽为N相对应的CRC电路的初始值也是不相同的,因为对于余数M的取值不同,计算出使得用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等的初始值也是不同的。
需要说明的是,在本发明的一些实施例中,步骤104根据L除以N得到的余数计算与位宽为N相对应的CRC电路的初始值,具体可以包括如下步骤:
A1、根据预置数据的每个比特信息和预置初始值获取与位宽为M相对应的CRC电路的每个比特的输出结果;
A2、根据预置数据的每个比特信息和待定初始值获取与位宽为N相对应的CRC电路的每个比特的输出结果;
A3、在与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等的情况下,计算与位宽为M相对应的CRC电路的预置初始值、与位宽为N相对应的CRC电路的待定初始值组成的方程组,求解出待定初始值,待定初始值即为与位宽为N相对应的CRC电路的初始值。
其中,步骤A1中,通过芯片的数据总线获取到的并行数据即为预置数据,该预置数据是一个确定的常数,则对于该预置数据的每个比特信息其取值也是确定的,例如预置数据可以为0x55,则该预置数据的每个比特信息的取值都是可以确定的,步骤A1和步骤A2中的预置数据是同一个数据,即通过设置相同的预置数据来计算与位宽为N相对应的CRC电路的待定初始值,并且步骤A1中为与位宽为M相对应的CRC电路的预置初始值也是一个确定的常数,例如与位宽为M相对应的CRC电路的预置初始值可以设定为M个字节的全1。步骤A3中另两种CRC电路分别进行CRC计算后每个比特的输出结果都相等的情况下,就可以建立由与位宽为M相对应的CRC电路的预置初始值、与位宽为N相对应的CRC电路的待定初始值组成的方程组,由于与位宽为M相对应的CRC电路的预置初始值是确定的已经常数,则通过对方程组的求解,进而可以计算出与位宽为N相对应的CRC电路的待定初始值,则该计算出的待定初始值就是步骤104中需要计算的与N相对应的CRC电路的初始值。
需要说明的是,在本发明实施例中,步骤A1至步骤A3给出了根据余数M计算与位宽为N相对应的CRC电路的初始值的计算方式,即通过对假设已知的预置数据和预置初始值来求解待定初始值,并通过联立方程组的方式可以求出待定初始值,可以理解的是,在本发明实施例中,根据余数M计算与位宽为N相对应的CRC电路的初始值的计算方式还可以有多种,例如还可以通过分别制定与位宽为M相对应的CRC电路进行CRC计算后输出计算结果的表格、与位宽为N相应的CRC电路进行CRC计算后输出计算结果的表格,进而通过查表的方式也可以计算出与位宽为N相对应的CRC电路的初始值。
具体的,在如上介绍的本发明实施例中,步骤A1根据预置数据的每个比特信息和预置初始值获取与位宽为M相对应的CRC电路的每个比特的输出结果,包括如下步骤:
A11、通过如下方式计算与位宽为M相对应的CRC电路的第x个比特的输出结果next_crc_M[x]:
其中,d为8乘以M个比特的预置数据,i为8乘以T个比特的预置初始值,T为与位宽为M相对应的CRC电路的生成多项式的阶数,FdM_x(d)为对d中的比特信息进行异或的结果,FiM_x(i)为对i中的比特信息进行异或的结果,为异或符号,x为与位宽为M相对应的CRC电路的任意一个比特。
需要说明的是,上述公式中FdM_x(d)和FiM_x(i)都是根据余数M计算与位宽为M相对应的CRC电路的第x个比特时所使用的函数,FdM_x(d)为对预置数据d的某些bit进行异或的结果,可以认为FdM_x(d)是d的函数,至于从预置数据d中选取哪些bit的异或,由CRC电路的生成多项式的阶数和获取到的并行数据的位宽确定,当生成多项式的阶数和获取到的并行数据的位宽选定了,从预置数据d中选择参与异或运算的bit也就是固定的。例如对于某个生成多项式,如果获取到的并行数据的位宽为8bit,FdM_x(d)=d[6]^d[0],即选择了预置数据d中的第0个比特和第6个比特进行异或运算,其中符号^也可以用于表示异或运算。同样的,FiM_x(i)为对预置初始值i的某些bit进行异或的结果,可以认为FiM_x(i)是i的函数,至于从预置初始值i中选取哪些bit的异或,由CRC电路的生成多项式的阶数和获取到的并行数据的位宽确定,当生成多项式的阶数和获取到的并行数据的位宽选定了,从预置初始值i中选择参与异或运算的bit也就是固定的。例如对于某个生成多项式,如果获取到的并行数据的位宽为8bit,FiM_x(i)=i[24]^i[30],即选择了预置初始值中的第24个比特和第30个比特进行异或运算,其中符号^也可以用于表示异或运算。
上述输出结果next_crc_M[x]用于表示与位宽为M相对应的CRC电路的任意一个比特x的输出结果,用T来表示与位宽为M相对应的CRC电路的生成多项式的阶数,则x的取值可以为从0、1、2、…、(T-1)中的任意一个值,则x取值从0、1、2、…、(T-1)依次变化时,输出结果next_crc_M[x]可以依次表述为:
其中,与位宽为M相对应的CRC电路的预置初始值是固定的,故FiM_0(i)、FiM_1(i)、FiM_T-1(i)都是常数。
具体的,步骤A2根据预置数据的每个比特信息和待定初始值获取与位宽为N相对应的CRC电路的每个比特的输出结果,包括如下步骤:
A22、通过如下方式计算与位宽为N相对应的CRC电路的第x个比特的输出结果next_crc_N[x]:
其中,d为8乘以M个比特的预置数据,c为8乘以T个比特的待定初始值,T为与位宽为N相对应的CRC电路的生成多项式的阶数,FdN_x(d)为对d中的比特信息进行异或的结果,FcN_x(c)为对c中的比特信息进行异或的结果,为异或符号,x为与位宽为N相对应的CRC电路的任意一个比特。
需要说明的是,上述公式中FdN_x(d)和FcN_x(c)都是根据余数M计算与位宽为N相对应的CRC电路的第x个比特时所使用的函数,FdN_x(d)为对预置数据d的某些bit进行异或的结果,可以认为FdN_x(d)是d的函数,至于从预置数据d中选取哪些bit的异或,由CRC电路的生成多项式的阶数和获取到的并行数据的位宽确定,当生成多项式的阶数和获取到的并行数据的位宽选定了,从预置数据d中选择参与异或运算的bit也就是固定的。例如对于某个生成多项式,如果获取到的并行数据的位宽为8bit,FdN_x(d)=d[6]^d[0],即选择了预置数据d中的第0个比特和第6个比特进行异或运算,其中符号^也可以用于表示异或运算。同样的,FcN_x(c)为对待定初始值c的某些bit进行异或的结果,可以认为FcN_x(c)是c的函数,至于从待定初始值c中选取哪些bit的异或,由CRC电路的生成多项式的阶数和获取到的并行数据的位宽确定,当生成多项式的阶数和获取到的并行数据的位宽选定了,从待定初始值中选择参与异或运算的bit也就是固定的。例如对于某个生成多项式,如果获取到的并行数据的位宽为8bit,FcN_x(c)=c[24]^c[30],即选择了待定初始值中的第24个比特和第30个比特进行异或运算,其中符号^也可以用于表示异或运算。
上述输出结果next_crc_N[x]用于表示与位宽为N相对应的CRC电路的任意一个比特x的输出结果,用T来表示与位宽为N相对应的CRC电路的生成多项式的阶数,则x的取值可以为从0、1、2、…、(T-1)中的任意一个值,则x取值从0、1、2、…、(T-1)依次变化时,输出结果next_crc_N[x]可以依次表述为:
其中,与位宽为N相对应的CRC电路的预置初始值是固定的,故FcN_0(c)、FcN_1(c)、FcN_T-1(c)中的待定初始值c就是未知量。
具体的,步骤A3中,与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等通过如下方式实现:
next_crc_M[x]=next_crc_N[x];
计算与位宽为M相对应的CRC电路的预置初始值、与位宽为N相对应的CRC电路的待定初始值组成的方程组,求解出待定初始值,包括:
A33、通过对如下方程组的求解计算出待定初始值c:
FdM_x(d)=FdN_x(d)。
其中,预置数据d为已知的常数,根据前述对FdM_x(d)、FdN_x(d)的描述可知,故函数FdM_x(d)=FdN_x(d),例如数据总线的位宽有8字节,但是在数据总线上的并行数据的第一拍实际有效数据只有1字节,则需要在该并行数据的第一拍添加7个字节的全0作为填充数据。
x的取值可以为从0、1、2、…、(T-1)中的任意一个值,则x取值从0、1、2、…、(T-1)依次变化时,故可以依次表述为:
FiM_0(i)=FcN_0(c);
FiM_1(i)=FcN_1(c);
…
FiM_T-1(i)=FcN_T-1(c)。
通过对如上方程组的联合求解,就可以基础当MOD信息为M时的待定初始值c,则计算出的待定初始值c就是步骤104中计算出的与位宽为N相对应的CRC电路的初始值。
105、根据与位宽为N相对应的CRC电路的初始值对新的并行数据进行CRC计算。
在本发明实施例中,计算出与位宽为N相对应的CRC电路的初始值之后,就可以根据与位宽为N相对应的CRC电路的初始值对新的并行数据进行CRC计算了,可见本发明实施例中对新的并行数据进行CRC计算只需要使用与位宽为N相对应的一个CRC电路即可对通过芯片的数据总线获取到的并行数据进行CRC计算了。
需要说明的是,在本发明实施例中根据与位宽为N相对应的CRC电路的初始值对新的并行数据进行CRC计算主要可以通过硬件电路来实现,举例来说,102的执行主体可以是硬件电路,例如通过专用集成电路(Application-Specific Integrated Circuit,ASIC)或者现场可编程门阵列(Field-Programmable GateArray,FPGA)来实现。
通过以上本发明实施例的描述可知,通过芯片的数据总线获取到报文长度为L个字节的并行数据,其中数据总线的位宽为N个字节,计算L除以N得到的余数M,判断M是否等于0,当M不等于0时,在并行数据的头部添加P个字节的填充数据,得到新的并行数据,然后根据余数M计算与位宽为N相对应的CRC电路的初始值,其中该初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,最后就可以根据与位宽为N相对应的CRC电路的初始值对新的并行数据进行CRC计算了。本发明实施例中根据并行数据的报文长度和数据总线的位宽对并行数据的头部添加了P个字节的填充数据得到新的并行数据,添加完填充数据后的新的并行数据的报文长度为数据总线的位宽的整数倍,在对新的并行数据进行CRC计算时所使用的与位宽为N相对应的CRC电路的初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,故对于从数据总线获取到的并行数据就可以都使用与位宽为N的一个CRC电路完成CRC计算了,相对于现有技术中对位宽为多个字节的并行数据进行CRC计算需要的多个CRC电路的技术方案,本发明实施例提供的技术方案所需的硬件资源较少。
为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。
请参阅如图3所示,为本发明实施例中校验方法的实现框架示意图,具体举例说明如下:
数据总线的位宽N字节,获取到的并列数据的报文长度为L字节,图3中以并列数据的位宽为8个字节为例,如果输入的并列数据为头对齐,则将并列数据处理为并列数据的尾部和数据总线对齐,即尾对齐,如果输入的并列数据是尾对齐则无需该处理。
判断L除以N得到的余数M是否为0,当余数M不为0时,在并行数据的头部添加P个字节的填充数据,例如添加的填充数据为P个字节的全0,其中P=N-M,使得每一拍的并列数据尾部和数据总线对齐,也就是L+P是N的整数倍。
则并列数据尾对齐后,除了第一拍的并列数据,其余拍的并列数据都可以使用与位宽为N相对应的CRC电路来进行CRC计算,即可以使用CRC8*N计算模块来计算。
对于第一拍的并列数据的MOD有N种可能,以N等于8为例,根据余数计算与位宽为8相对应的CRC电路的初始值。对于MOD=1,计算出特定的初始值init_1,使得CRC8*N计算结果等效于CRC8*1。依此类推,计算出int_2,int_3,…,int_N。这样,第一拍的并列数据进行CRC计算时也可以使用CRC8*N来计算,故在这种情况下,整个并列数据的CRC计算可以统一的使用一个CRC8*N计算模块来计算,即只需要一个CRC电路就可以完成。
本发明实施例中,特定的初始值的可以预先求解,可以利用CRC并行运算展开式建立方程组求解,通过计算出的特定的初始值,可以使得原始的并列数据的有效位宽的变动可以用计算出的特定的初始值的变动来等效。
同时根据MOD选择对应的初始值,和尾对齐的并列数据一起输入与位宽为8相对应的CRC电路进行CRC计算处理,输出CRC计算结果,
接下来以余数为1为例,对初始值的预先求解方法简要说明如下:
CRC运算有其特定CRC的生成多项式G(x),以生成多项式的阶数为4字节为例,可以用CRC展开式建立如下方程组。
对于并列数据的第一拍,即MOD=1的情况,通过如下方式计算与位宽为M相对应的CRC电路的第x个比特的输出结果next_crc_M[x],以M等于1为例,展开式可以表述为:
next_crc_1[0]=Fd1_0(d)^Fi1_0(i);
next_crc_1[1]=Fd1_1(d)^Fi1_1(i);
…
next_crc_1[31]=Fd1_31(d)^Fi1_31(i)。
其中,符号^也可以表示异或符号,d为8个比特的预置数据,i为32比特的预置初始值,CRC运算初始值固定,所以Fi1_x(i)是常数,x属于0~31。
通过如下方式计算与位宽为N相对应的CRC电路的第x个比特的输出结果next_crc_N[x]以N等于8为例,展开式可以表述为:
next_crc_8[0]=Fd8_0(d)^Fc8_0(c);
next_crc_8[1]=Fd8_1(d)^Fc8_1(c);
…
next_crc_64[31]=Fd8_31(d)^Fc8_31(c)。
其中,符号^也可以表示异或符号,d为8个比特的预置数据,c为32比特的待定初始值,Fc8_x(c)是常数,x属于0~31。由于并列数据的第一拍添加的是全0,则Fd8_x(d)=Fd1_x(d)。
令next_crc_64[x]=next_crc_8[x],则有如下以c为未知数的方程组:
Fc8_0(c)=Fi1_0(i);
Fc8_1(c)=Fi1_1(i);
Fc8_31(c)=Fi1_31(i)。
对如上的方程组进行求解,就可以得到MOD=1对应的待定初始值c。
依此类推,可得MOD=2,3,…7的待定初始值。
通过以上的举例说明可知,对于8*N bit位宽的数据总线上的并行数据的CRC计算,可以用于对任意报文长度的尾对齐并行数据,使用特定的初始值,统一使用8*N CRC计算函数等效替换各种MOD取值对应的CRC计算函数,实现任意报文长度的多字节并行CRC的芯片实现方法,相比原有方案,显著降低了任意长度的并行数据的多字节并行CRC运算的复杂度,能明显降低芯片实现的资源消耗并改善时序,减少成本,同时大幅提高了时钟主频,数据总线位宽越大改善效果越显著。实现了使用少量逻辑硬件资源就可以处理超大流量数据的CRC计算。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图4-a所示,本发明实施例提供的一种校验装置400,可以包括:数据获取模块401、余数判断模块402、数据添加模块403、初始值计算模块404、CRC计算模块405,其中,
数据获取模块401,用于通过芯片的数据总线获取并行数据,所述并行数据的报文长度为L个字节,所述数据总线的位宽为N个字节,所述L和所述N都为正整数;
余数判断模块402,用于判断所述L除以所述N得到的余数是否等于0;
数据添加模块403,用于当所述L除以所述N得到的余数不等于0时,在所述并行数据的头部添加P个字节的填充数据,得到新的并行数据,所述P等于所述N减去M,所述M为所述L除以所述N得到的余数的取值;
初始值计算模块404,用于根据所述L除以所述N得到的余数计算与位宽为所述N相对应的循环冗余校验CRC电路的初始值,所述初始值使得用与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后输出的结果相等;
CRC计算模块405,用于根据所述与位宽为所述N相对应的CRC电路的初始值对所述新的并行数据进行CRC计算。
请参阅如图4-b所示,在本发明的一些实施例中,校验装置400,还可以包括:
对齐模块406,用于在所述数据获取模块401通过芯片的数据总线获取并行数据之后,对所述并行数据的尾部和所述数据总线进行对齐。
在本发明的一些实施例中,CRC计算模块405,还用于当所述余数判断模块402判定所述判断所述L除以所述N得到的余数等于0时,根据与位宽为所述N相对应的CRC电路的预置初始值对所述并行数据进行CRC计算。
在本发明的另一些实施例中,当所述L除以所述N得到的余数等于0时,所述CRC计算模块405对所述并行数据进行CRC计算所使用的CRC电路的预置初始值为N个字节的1或N个字节的0。
在本发明的一些实施例中,数据添加模块403对所述并行数据添加的P个字节的填充数据为P个字节的0。
请参阅如图4-c所示,在本发明的一些实施例中,初始值计算模块404,还可以包括:
第一结果获取子模块4041,用于根据预置数据的每个比特信息和预置初始值获取与位宽为所述M相对应的CRC电路的每个比特的输出结果;
第二结果获取子模块4042,用于根据所述预置数据的每个比特信息和待定初始值获取与位宽为所述N相对应的CRC电路的每个比特的输出结果;
初始值计算子模块4043,用于令与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等的情况下,计算所述与位宽为所述M相对应的CRC电路的预置初始值、所述与位宽为所述N相对应的CRC电路的待定初始值组成的方程组,求解出所述待定初始值,所述待定初始值即为与位宽为所述N相对应的CRC电路的初始值。
在本发明的一些实施例中,具体的,所述第一结果获取子模块4041,具体用于通过如下方式计算与位宽为所述M相对应的CRC电路的第x个比特的输出结果next_crc_M[x]:
其中,所述d为8乘以所述M个比特的所述预置数据,所述i为8乘以T个比特的所述预置初始值,所述T为与位宽为所述M相对应的CRC电路的生成多项式的阶数,所述FdM_x(d)为对所述d中的比特信息进行异或的结果,所述FiM_x(i)为对所述i中的比特信息进行异或的结果,所述为异或符号,所述x为与位宽为所述M相对应的CRC电路的任意一个比特;
所述第二结果获取子模块4042,具体用于通过如下方式计算与位宽为所述N相对应的CRC电路的第x个比特的输出结果next_crc_N[x]:
其中,所述d为8乘以所述M个比特的所述预置数据,所述c为8乘以T个比特的所述待定初始值,所述T为与位宽为所述N相对应的CRC电路的生成多项式的阶数,所述FdN_x(d)为对所述d中的比特信息进行异或的结果,所述FcN_x(c)为对所述c中的比特信息进行异或的结果,所述为异或符号,所述x为与位宽为所述M相对应的CRC电路的任意一个比特;
所述与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等,具体为:
next_crc_M[x]=next_crc_N[x];
所述初始值计算子模块4043,具体用于通过对如下方程组的求解计算出待定初始值c:
FdM_x(d)=FdN_x(d)。
在本发明实施例中,数据获取模块通过芯片的数据总线获取到报文长度为L个字节的并行数据,其中数据总线的位宽为N个字节,余数判断模块计算L除以N得到的余数M,判断M是否等于0,数据添加模块当M不等于0时,在并行数据的头部添加P个字节的填充数据,得到新的并行数据,然后初始值计算模块根据余数M计算与位宽为N相对应的CRC电路的初始值,其中该初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,最后CRC计算模块就可以根据与位宽为N相对应的CRC电路的初始值对新的并行数据进行CRC计算了。本发明实施例中根据并行数据的报文长度和数据总线的位宽对并行数据的头部添加了P个字节的填充数据得到新的并行数据,添加完填充数据后的新的并行数据的报文长度为数据总线的位宽的整数倍,在对新的并行数据进行CRC计算时所使用的与位宽为N相对应的CRC电路的初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,故对于从数据总线获取到的并行数据就可以都使用与位宽为N的一个CRC电路完成CRC计算了,相对于现有技术中对位宽为多个字节的并行数据进行CRC计算需要的多个CRC电路的技术方案,本发明实施例提供的技术方案所需的硬件资源较少。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明前述所示的方法实施例中的叙述,此处不再赘述。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质存储有程序,该程序执行包括上述方法实施例中记载的部分或全部步骤。
接下来介绍本发明实施例提供的另一种校验装置,请参阅图5所示,校验装置500包括:
输入装置501、输出装置502、处理器503和存储器504(其中校验装置500中的处理器503的数量可以一个或多个,图5中以一个处理器为例)。在本发明的一些实施例中,输入装置501、输出装置502、处理器503和存储器504可通过总线或其它方式连接,其中,图5中以通过总线连接为例。
其中,处理器503,用于执行如下步骤:
通过芯片的数据总线获取并行数据,所述并行数据的报文长度为L个字节,所述数据总线的位宽为N个字节,所述L和所述N都为正整数;
判断所述L除以所述N得到的余数是否等于0;
若所述L除以所述N得到的余数不等于0,在所述并行数据的头部添加P个字节的填充数据,得到新的并行数据,所述P等于所述N减去M,所述M为所述L除以所述N得到的余数的取值;
根据所述L除以所述N得到的余数计算与位宽为所述N相对应的循环冗余校验CRC电路的初始值,所述初始值使得用与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后输出的结果相等;
根据所述与位宽为所述N相对应的CRC电路的初始值对所述新的并行数据进行CRC计算。
在本发明的一些实施例中,处理器503,还用于执行如下步骤:
对所述并行数据的尾部和所述数据总线进行对齐。
在本发明的一些实施例中,处理器503,还用于执行如下步骤:所述判断所述L除以所述N得到的余数是否等于0之后,还包括:
若所述L除以所述N得到的余数等于0,根据与位宽为所述N相对应的CRC电路的预置初始值对所述并行数据进行CRC计算。
在本发明的一些实施例中,处理器503,还用于执行如下步骤:当所述L除以所述N得到的余数等于0时,对所述并行数据进行CRC计算所使用的CRC电路的预置初始值为N个字节的1或N个字节的0。
在本发明的一些实施例中,处理器503,还用于执行如下步骤:对并行数据进行添加的P个字节的所述填充数据为P个字节的0。
在本发明的一些实施例中,处理器503,具体用于执行如下步骤:
根据预置数据的每个比特信息和预置初始值获取与位宽为所述M相对应的CRC电路的每个比特的输出结果;
根据所述预置数据的每个比特信息和待定初始值获取与位宽为所述N相对应的CRC电路的每个比特的输出结果;
在与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等的情况下,计算所述与位宽为所述M相对应的CRC电路的预置初始值、所述与位宽为所述N相对应的CRC电路的待定初始值组成的方程组,求解出所述待定初始值,所述待定初始值即为与位宽为所述N相对应的CRC电路的初始值。
在本发明的一些实施例中,处理器503,具体用于执行如下步骤:
通过如下方式计算与位宽为所述M相对应的CRC电路的第x个比特的输出结果next_crc_M[x]:
其中,所述d为8乘以所述M个比特的所述预置数据,所述i为8乘以T个比特的所述预置初始值,所述T为与位宽为所述M相对应的CRC电路的生成多项式的阶数,所述FdM_x(d)为对所述d中的比特信息进行异或的结果,所述FiM_x(i)为对所述i中的比特信息进行异或的结果,所述为异或符号,所述x为与位宽为所述M相对应的CRC电路的任意一个比特;
通过如下方式计算与位宽为所述N相对应的CRC电路的第x个比特的输出结果next_crc_N[x]:
其中,所述d为8乘以所述M个比特的所述预置数据,所述c为8乘以T个比特的所述待定初始值,所述T为与位宽为所述N相对应的CRC电路的生成多项式的阶数,所述FdN_x(d)为对所述d中的比特信息进行异或的结果,所述FcN_x(c)为对所述c中的比特信息进行异或的结果,所述为异或符号,所述x为与位宽为所述N相对应的CRC电路的任意一个比特;
所述与位宽为所述N相对应的CRC电路和与位宽为所述M相对应的CRC电路分别进行CRC计算后每个比特的输出结果都相等通过如下方式实现:
next_crc_M[x]=next_crc_N[x];
通过对如下方程组的求解计算出待定初始值c:
FdM_x(d)=FdN_x(d)。
在本发明实施例中,通过芯片的数据总线获取到报文长度为L个字节的并行数据,其中数据总线的位宽为N个字节,计算L除以N得到的余数M,判断M是否等于0,当M不等于0时,在并行数据的头部添加P个字节的填充数据,得到新的并行数据,然后根据余数M计算与位宽为N相对应的CRC电路的初始值,其中该初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,最后就可以根据与位宽为N相对应的CRC电路的初始值对新的并行数据进行CRC计算了。本发明实施例中根据并行数据的报文长度和数据总线的位宽对并行数据的头部添加了P个字节的填充数据得到新的并行数据,添加完填充数据后的新的并行数据的报文长度为数据总线的位宽的整数倍,在对新的并行数据进行CRC计算时所使用的与位宽为N相对应的CRC电路的初始值可以保证用与位宽为N相对应的CRC电路和与位宽为M相对应的CRC电路分别进行CRC计算后输出的结果相等,故对于从数据总线获取到的并行数据就可以都使用与位宽为N的一个CRC电路完成CRC计算了,相对于现有技术中对位宽为多个字节的并行数据进行CRC计算需要的多个CRC电路的技术方案,本发明实施例提供的技术方案所需的硬件资源较少。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。