可左右滑动选省市

一种生成校验和的方法、装置及电子设备实用新型专利

更新时间:2024-07-01
一种生成校验和的方法、装置及电子设备实用新型专利 专利申请类型:实用新型专利;
地区:福建-福州;
源自:福州高价值专利检索信息库;

专利名称:一种生成校验和的方法、装置及电子设备

专利类型:实用新型专利

专利申请号:CN202210015683.2

专利申请(专利权)人:锐捷网络股份有限公司
权利人地址:福建省福州市仓山区金山大道618号桔园州工业园19#楼

专利发明(设计)人:陈坚

专利摘要:一种生成校验和的方法、装置及电子设备。在本申请中将待处理报文拆分为多个子数据,每个子数据由单独的校验和累加单元进行累加计算,得到累加结果,对得到的所有累加结果进行累加合并,得到待处理报文对应的校验和。通过该方法实现了硬件设备对待处理报文拆分累加得到校验和,不仅可以节约CPU资源,而且还可以满足大带宽要求。

主权利要求:
1.一种计算校验和的方法,其特征在于,包括:
在获取到第一待处理报文时,按照预设字节数对所述第一待处理报文进行数据拆分,得到多个第一子数据;
将多个第一子数据分发至各个校验和累加单元,并获得各个校验和累加单元对第一子数据进行累加计算得到的累加结果;
对得到的所有累加结果进行累加合并,得到所述第一待处理报文对应的校验和;
其中,将多个第一子数据分发至各个校验和累加单元,包括:判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据;
若存在,根据所述待处理报文的总字节数以及每个第一子数据的字节数,确定第二子数据中的无效字节位以及有效字节;
对所述第二子数据中的无效字节位添加指定数值,得到第三子数据;
将所述第一子数据中的有效字节以及所述第三子数据发送至校验和累加单元;
其中,所述判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据,包括:获取每个第一子数据中的有效字节数,判定每个第一子数据中的有效字节数是否小于预设字节数;
所述将多个第一子数据分发至各个校验和累加单元,并获得各个校验和累加单元对第一子数据进行累加计算得到的累加结果的步骤之后,所述方法还包括:将所述累加结果传输至第一级加法器,所述第一级加法器将所述累加结果分别相加合并,得到第一级累加结果,并将第一级累加结果分别传输至第二级加法器;
所述第二级加法器将所述第一级累加结果拆分为高位位和低位位,并将所述高位位和低位位相加合并,得到第二级累加结果,并将第二级累加结果分别传输至第三级加法器;
所述第三级加法器将第二级累加结果的低位位相加合并。
2.如权利要求1所述的方法,其特征在于,所述获得各个校验和累加单元对第一子数据进行累加计算得到的累加结果,包括:检测是否存在指示所述第一待处理报文的数据结束的结束标识;
若存在,则输出所述累加结果,并将缓存的累加结果清除;
若不存在,则对所述第一待处理报文的第一子数据继续进行累加计算。
3.如权利要求1所述的方法,其特征在于,所述获得各个校验和累加单元对第一子数据进行累加计算得到的累加结果,包括:检测当前是否存在第二待处理报文的报文标识;
若是,则输出所述累加结果,并将缓存的累加结果清除;
若否,则继续对第一子数据进行累加计算。
4.一种计算校验和的装置,其特征在于,所述装置包括:数据拆分单元、校验和累加单元以及合并单元,所述校验和累加单元包括多个校验和累加模块,其中,数据拆分单元,用于拆分在获取到第一待处理报文时,按照预设字节数对所述第一待处理报文进行数据拆分,得到多个第一子数据,将多个第一子数据分发至各个校验和累加模块;具体还用于判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据;
若存在,根据所述待处理报文的总字节数以及每个第一子数据的字节数,确定第二子数据中的无效字节位以及有效字节;对所述第二子数据中的无效字节位添加指定数值,得到第三子数据;将所述第一子数据中的有效字节以及所述第三子数据发送至校验和累加单元;
校验和累加单元,用于获得各个校验和累加模块对第一子数据进行累加计算得到的累加结果;
合并单元,用于对得到的所有累加结果进行累加合并,得到所述第一待处理报文对应的校验和;
其中,所述校验和累加单元还用于将所述累加结果传输至第一级加法器,所述第一级加法器将所述累加结果分别相加合并,得到第一级累加结果,并将第一级累加结果分别传输至第二级加法器;
所述第二级加法器将所述第一级累加结果拆分为高位位和低位位,并将所述高位位和低位位相加合并,得到第二级累加结果,并将第二级累加结果分别传输至第三级加法器;
所述第三级加法器将第二级累加结果的低位位相加合并。
5.如权利要求4所述的装置,其特征在于,所述数据拆分单元,具体用于判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据;若存在,根据所述待处理报文的总字节数以及每个第一子数据的字节数,确定第二子数据中的无效字节位以及有效字节;
对所述第二子数据中的无效字节位添加指定数值,得到所述第三子数据;将所述第一子数据中的有效字节以及所述第三子数据发送至校验和累加单元。
6.如权利要求5所述的装置,其特征在于,所述数据拆分单元,具体用于获取每个第一子数据中的有效字节数,判定每个第一子数据中的有效字节数是否小于预设字节数。
7.如权利要求4所述的装置,其特征在于,所述校验和累加单元,还用于检测是否存在指示所述第一待处理报文的数据结束的结束标识;若存在,则输出所述累加结果,并将缓存的累加结果清除;若不存在,则对所述第一待处理报文的第一子数据继续进行累加计算。
8.一种电子设备,其特征在于,包括:
存储器,用于存放计算机程序;
处理器,用于执行所述存储器上所存放的计算机程序时,实现权利要求1‑3中任一项所述的计算校验和的方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1‑3中任一项所述的计算校验和的方法。 说明书 : 一种生成校验和的方法、装置及电子设备技术领域[0001] 本申请涉及计算机技术领域,尤其涉及一种生成校验和的方法、装置及电子设备。背景技术[0002] 当前,设备与设备之间的通信基于数据传输来完成,为了这保证数据传输过程中数据的完整性以及准确性,因此就需要使用校验和checksum,checksum是在数据通信领域中用于校验目的地一组数据项的和,通常以十六进制为数制表示的形式。[0003] 具体来讲,基于传输控制协议(TransmissionControlProtocol,TCP)的网络报文中的checksum是一个端到端的checksum,由发送端计算,然后由接收端验证。目的是为了发现TCP首部数据在发送端到接收端之间发生的任何改动。[0004] 当前,对于checksum的计算主要是通过CPU直接进行计算,也就是在组装报文时,将报文中的checksum字段设置为0,将需要校验的数据作为16位为单位的数字组成,依次进行二进制循环求和累加,进位也要进行累加。将得到的16位结果取反后放入到checksum字段中。[0005] 举例来讲,如计算下面一段数据的checksum,数据为16进制;[0006] 4500003c0000000040116d36c0a82bc30808080811[0007] 字段6d36为checksum字段,先把checksum设0,数据分组,补0,整理完后数据如下,中间checksum设置为0,最后补1byte0;[0008] 4500003c0000000040110000c0a82bc3080808081100[0009] 计算:4500+003c+0000+0000+4011+0000+c0a8+2bc3+0808+0808+1100=192C8;[0010] 高低16bit相加:1+92C8=92C9;[0011] 取反:~92C9=6D36;[0012] 最后所得数据为:4500003c0000000040116d36c0a82bc30808080811;[0013] 通过上述的方案,CPU可以直接完成checksum计算,对于低带宽情况下,可以依靠CPU直接进行报文的checksum计算,但是在带宽需求较大的情况下,直接依靠CPU直接进行报文的checksum计算将占用大量的CPU资源,导致CPU负载加大,降低了checksum计算速度。发明内容[0014] 本申请提供了一种生成校验和的方法、装置及电子设备,在硬件电路上实现对待处理报文拆分累加得到校验和。[0015] 第一方面,本申请提供了一种计算校验和的方法,包括:[0016] 在获取到第一待处理报文时,按照预设字节数对所述第一待处理报文进行数据拆分,得到多个第一子数据;[0017] 将多个第一子数据分发至各个校验和累加单元,并获得各个校验和累加单元对第一子数据进行累加计算得到的累加结果;[0018] 对得到的所有累加结果进行累加合并,得到所述第一待处理报文对应的校验和。[0019] 在本申请中,通过上述方法,可以在硬件电路中将待处理报文拆分为多个子数据,每个子数据由单独的校验和累加单元进行累加计算,得到累加结果。通过硬件设备对待处理报文被拆分累加,不仅可以节约CPU资源,而且还可以满足大带宽要求。[0020] 在一种可能的实施方式中,将多个第一子数据分发至各个校验和累加单元,包括:[0021] 判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据;[0022] 若存在,根据所述待处理报文的总字节数以及每个第一子数据的字节数,确定第二子数据中的无效字节位以及有效字节;[0023] 对所述第二子数据中的无效字节位添加指定数值,得到所述第三子数据;[0024] 将所述第一子数据中的有效字节以及所述第三子数据发送至校验和累加单元。[0025] 在一种可能的实施方式中,判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据,包括:[0026] 获取每个第一子数据中的有效字节数,判定每个第一子数据中的有效字节数是否小于预设字节数。[0027] 在一种可能的实施方式中,所述获得各个校验和累加单元对第一子数据进行累加计算得到的累加结果,包括:[0028] 检测是否存在指示所述第一待处理报文的数据结束的结束标识;[0029] 若存在,则输出所述累加结果,并将缓存的累加结果清除;[0030] 若不存在,则对所述第一待处理报文的第一子数据继续进行累加计算。[0031] 在一种可能的实施方式中,所述获得各个校验和累加单元对第一子数据进行累加计算得到的累加结果,包括:[0032] 检测当前是否存在第二待处理报文的报文标识;[0033] 若是,则输出所述累加结果,并将缓存的累加结果清除;[0034] 若否,则继续对第一子数据进行累加计算。[0035] 第二方面,本申请提供了一种计算校验和的装置,所述装置包括:数据拆分单元、校验和累加单元以及合并单元,所述校验和累加单元包括多个校核和累加模块,其中,[0036] 数据拆分单元,用于拆分在获取到第一待处理报文时,按照预设字节数对所述第一待处理报文进行数据拆分,得到多个第一子数据,将多个第一子数据分发至各个校验和累加模块;[0037] 校验和累加单元,用于获得各个校验和累加模块对第一子数据进行累加计算得到的累加结果;[0038] 合并单元,用于对得到的所有累加结果进行累加合并,得到所述第一待处理报文对应的校验和。[0039] 在一种可能的实施方式中,所述数据拆分单元,具体用于判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据;若存在,根据所述待处理报文的总字节数以及每个第一子数据的字节数,确定第二子数据中的无效字节位以及有效字节;对所述第二子数据中的无效字节位添加指定数值,得到所述第三子数据;将所述第一子数据中的有效字节以及所述第三子数据发送至校验和累加单元。[0040] 在一种可能的实施方式中,所述数据拆分单元,具体用于获取每个第一子数据中的有效字节数,判定每个第一子数据中的有效字节数是否小于预设字节数。[0041] 在一种可能的实施方式中,所述校验和累加单元,还用于检测是否存在指示所述第一待处理报文的数据结束的结束标识;若存在,则输出所述累加结果,并将缓存的累加结果清除;若不存在,则对所述第一待处理报文的第一子数据继续进行累加计算。[0042] 第三方面,本申请提供了一种电子设备,包括:[0043] 存储器,用于存放计算机程序;[0044] 处理器,用于执行所述存储器上所存放的计算机程序时,实现上述的校核和生成的方法步骤。[0045] 第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述校验和生成的方法步骤。[0046] 上述第二方面至第四方面中的各个方面以及各个方面可能达到的技术效果请参照上述针对第一方面或第一方面中的各种可能方案可以达到的技术效果说明,这里不再重复赘述。附图说明[0047] 图1为本申请提供的一种生成校验和的方法流程图示意图;[0048] 图2为本申请提供的硬件电路结构示意图之一;[0049] 图3为本申请提供的待处理报文拆分结果示意图;[0050] 图4为本申请提供的子数据累加计算示意图;[0051] 图5为本申请提供的硬件电路中累加结果合并单元的结构示意图;[0052] 图6为本申请提供的计算校验和的时序过程示意图;[0053] 图7为本申请提供的硬件电路结构示意图之二;[0054] 图8为本申请提供的硬件电路结构示意图之三;[0055] 图9为本申请提供的电子设备的结构示意图。具体实施方式[0056] 为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。方法实施例中的具体操作方法也可以应用于装置实施例或系统实施例中。需要说明的是,在本申请的描述中“多个”理解为“至少两个”。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。A与B连接,可以表示:A与B直接连接和A与B通过C连接这两种情况。另外,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。[0057] 当前,对于checksum的计算主要是通过CPU直接进行计算,也就是在组装报文时,将报文中的checksum字段设置为0,将需要校验的数据作为16位为单位的数字组成,依次进行二进制循环求和累加,进位也要进行累加。将得到的16位结果取反后放入到checksum字段中。[0058] 举例来讲,如计算下面一段数据的checksum,数据为16进制;[0059] 4500003c0000000040116d36c0a82bc30808080811[0060] 字段6d36为checksum字段,先把checksum设0,数据分组,补0,整理完后数据如下,中间checksum设置为0,最后补1byte0;[0061] 4500003c0000000040110000c0a82bc3080808081100[0062] 计算:4500+003c+0000+0000+4011+0000+c0a8+2bc3+0808+0808+1100=192C8;[0063] 高低16bit相加:1+92C8=92C9;[0064] 取反:~92C9=6D36;[0065] 最后所得数据为:4500003c0000000040116d36c0a82bc30808080811;[0066] 通过上述的方案,CPU可以直接完成checksum计算,对于低带宽情况下,可以依靠CPU直接进行报文的checksum计算,但是在带宽需求较大的情况下,直接依靠CPU直接进行报文的checksum计算将占用大量的CPU资源,导致CPU负载加大,降低了checksum计算速度。[0067] 为了解决上述问题,本申请提供了一种生成校验和的方法,该方法可以应用到现场可编程逻辑门阵列电路(FieldProgrammableGateArray,FPGA)或者是特殊应用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)中,当然也可以应用到其他硬件设备或者是硬件电路中,此处就不在一一举例说明。[0068] 在上述硬件设备中设置了多个校验和累加模块,因此可以将待处理报文拆分为多个子数据,每个校验和累加模块都可以分别对待处理报文的子数据进行累加计算,得到累加结果。通过硬件设备对待处理报文被拆分累加,不仅可以节约CPU资源,而且还可以满足大带宽要求。[0069] 下面通过附体以及实施例对本申请技术方案做详细描述。[0070] 如图1所示为本申请实施例中一种生成校验和的方法流程图,该方法包括:[0071] S1,在获取到第一待处理报文时,按照预设字节数对第一待处理报文进行数据拆分,得到多个第一子数据;[0072] 首先来讲,该方法应用到一硬件电路中,比如FPGA电路或者ASIC电路,如图2所示,该硬件电路包括数据拆分单元、校验和累加单元以及累加结果合并单元,校验和累加单元包括多个校验和累加模块。[0073] 该数据拆分单元用于在获取到第一待处理报文时,按照预设字节数对第一待处理报文进行数据拆分。比如,第一待处理报文是512字节的数据,按照预设字节数为64字节进行拆分时,该512字节的第一待处理报文将被拆分为8个64字节的子数据,也就是每个64字节的子数据都是第一子数据。[0074] 当然,并不是每个待处理报文的字节数都可以拆分为预设字节数的子数据,比如是报文总长度是265字节,前4个时钟是64字节,每个64字节都可以拆分成8个64bit的子数据计算,数据全部有效,子数据的mod都为8。第5个时钟时,剩下9个字节(265‑256=9),最高的那个子数据mod为8,数据全部有效;第2高的有效字节位数mod为1,此时剩余7位为无效字节位数,因此数据补7个byte的0;剩下的子数据mod都为0。[0075] 因此,在本申请实施例中,除了将第一待处理报文拆分为多个第一子数据之外,还需要对拆分出来的第一子数据进行有效性的验证,也就是判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据,若不存在,则直接将第一子数据分发至各个校验和累加单元;若存在,根据述待处理报文的总字节数以及每个第一子数据的字节数,确定第二子数据中的无效字节位以及有效字节;将无效字节位添加指定数值,根据有效字节数以及所述指定数值,得到第三子数据,并将第一子数据的有效字节以及第三子数据发送至校验和累加单元。[0076] 举例来说,如图3所示,一个265字节的数据,按照64字节进行拆分时,前面4个子数据都是64字节,但是第五个子数据的字节数是9。前面4个时钟根据原始的有效字节数mod=8,解码的mod[7]到mod[0]都是8,也就是每个单元对应的8个64bit都是有效的。最后一个时钟,原始mod=9,由于设计中按照大端模式,有效数据按照从高位到低位存放,因此有效字节数mod_decode[7]=8,代表第7个单元数据全部有效,mod_decode[6]=1代表第6个单元的只有最高8bit的数据时有效的,其他mod_decode全为0,说明输入数据都无效。[0077] 通过上述的方式,可以将第一子数据中无效字节为添加0,从而保证后续可以准确对第一子数据进行累加计算。[0078] 在完成第一待处理报文的拆分以及对第一子数据的有效性判定之后,将通过步骤S2完成累加计算。[0079] S2,将多个第一子数据分发至各个校验和累加单元,并获得各个校验和累加单元对第一子数据进行累加计算得到的累加结果;[0080] 在得到第一子数据以及添加了指定数值得到的第三子数据之后,将第一子数据以及第三子数据分发至各个校验和累加单元,如图4所示,在图4中被拆分完成的第一待处理报文得到的第一子数据若是64字节,则将被直接传输到校验和累加单元的锁存器中进行累加计算,从而得到第一子数据的累加结果。但是参与计算的数据并不总是64bit对齐,因此在最后一个数据期,mod_decode指示了该校验和累加单元的最后一个时钟的有效字节数,其他无效的字节位使用0填补。[0081] 例如,图4中,若mod_decode=8,此时8个字节全部有效,那么最高字节data[63:56]有效,最低字节data[55:0]也全部有效,因此可以直接进行累加计算。[0082] 若是mod_decode=1,那么最高字节有效,即:data[63:56]有效,而后续的低字节data[55:0]用0填补参与累加计算。[0083] 若是mod_decode=2,此时2个字节全部有效,那么data[63:48]有效,data[47:0]用0填补参与累加计算。[0084] mod_decode的其他取值情况可以按照上述的方法来完成无效字节的替代,此处就不再一一举例说明。[0085] 在完成第一子数据的有效性验证之后,对第一子数据或者是第三子数据进行累加计算,具体累加计算的方式是按照2字节进行相加,在前述内容中已经详细描述,此处就不再赘述。[0086] 进一步,在本申请实施例中该校验和累加单元中设置了锁存器,该锁存器具体可以保存每一次对第一子数据进行累加的累加结果,比如在累加计算完一个第一子数据之后,保存该累加结果,然后在累加计算第二个第一子数据时,将锁存器中保存的累加结果进行累加,也就是每次累加结果作为下一次累加计算的输入。[0087] 在存在该锁存器的情况下,为了保证每次累加计算的准确性,因此每次需要对第一子数据进行累加计算之前,都需要检测是否存在指示第一待处理报文的数据结束的结束标识。若存在该结束标识,则说明第一待处理报文的数据已经结束,此时输出累加结果,并将缓存的累加结果清除;若是不存在该结束标识,则继续对第一待处理报文的第一子数据进行累加计算。通过该方式,可以准确的确定每次累加结果的输出时刻,保证了累加结果输出的准确性。[0088] 另外,在本申请实施例中,由于在锁存器中保存了每次累加计算得到的累加结果,因此在有新其他待处理报文需要处理时,需要对锁存器中的累加结果进行清0处理。[0089] 具体来讲,在获得累加结果之后,需要检测当前是否存在第二待处理报文的报文标识,该报文标识可以是第一子数据中携带的标识,当然也可以是通过其他方式获取该报文标识。若是检测到第二待处理报文的报文标识,则得到并输出累加结果,并将缓存的累加结果清除;若是未检测到第二待处理报文的报文标识,则继续对第一子数据进行累加计算。通过该方式可以保证每次完成待处理报文的累加计算之后,可以及时将累加结果清除,避免对其他待处理报文的累加计算造成干扰。[0090] 在这里需要说明是,在本申请实施例中,校验和累加单元的输出位宽为32bit,因此直到64Kbytes个16bit最大数据相加才会出现溢出,也就是报文长度小于128Kbytes字节时校验和累加单元都不会出现溢出,在一般情况下TCP报文长度最长在64Kbytes,因此拆分后在以太网传输一般在1500字节,因此校验和累加单元不会出现溢出。[0091] S3,对得到所有累加结果进行累加合并,得到第一待处理报文对应的校验和。[0092] 在本申请实施例中,由于校验和累加单元有多个,每个校验和累加单元所得到的累加结果并不能作为最终的校验和,因此需要对所有校验和累加单元得到的累加结果进行累加。[0093] 如图5所示,在图5中累加结果合并单元包括第一级加法器、第二级加法器以及第三级加法器。[0094] 在本申请实施例中的校验和累加单元中包含了多个校验和累加单元,因此每个校验和累加单元进行累加计算得到累加结果之后,将累加结果传输至第一级加法器。以265字节的报文来讲,在第一级加法器中就需要完成8个32bit的累加结果相加,为了保证时序要求,可以拆分为2个并行的加法器来完成累加结果相加。相当于每个加法器实现4个32bit的数据相加。[0095] 第二级加法器将所有数据的累加结果拆分为高位16bit和低位16bit相加,这里的高位16bit为data[31:16],低位16bit为data[15:0],在第二级加法器进行累加计算将产生进位。[0096] 第三级加法器将第二级加法器的低位16bit进行相加,由于第二级加法器的两个16bit相加最大结果不会超过0x1FFFE,也就是两个16bit都为最大输入值情况下:0xFFFF+0xFFFF=0x1FFFE,低16位是0xFFFE,进位C是1。因此第三级加法器中低位16bit和进位C相加后不会超过0xFFFF,也就是可以得到最终的校验和,并且不会出现溢出的情况。[0097] 另外,在本申请实施例中,如图6所示为计算校验和的时序过程示意图,在图6中,校验和的计算在9个时钟内完成,也就是clk1~clk9,在每个时钟下执行对应的过程,比如在clk1~clk5完成待处理报文的拆分,在clk6完成第一次累加,在clk7完成累加结果的第一次合并计算,在clk8完成第二次合并计算,最终在clk9得到校验和。[0098] 通过图6所示的流水线计算方式,可以有效的解决校验和计算过程中的时序问题,可以使硬件电路主频具有更高的计算效率,提升校验和计算速度。[0099] 进一步,在图6所示的时序过程中,由于在clk6时已经完成了待处理报文的校验和累加计算,在clk6的位置可以进行下一个待处理报文的校验和计算,而不需要等到clk9的位置才进行下一个待处理报文的校验和计算,这样可以提升校验和的累加计算效率。[0100] 基于上述的方法,在本申请中将待处理报文拆分为多个子数据,每个子数据由单独的校验和累加单元进行累加计算,得到累加结果。通过硬件设备对待处理报文被拆分累加,不仅可以节约CPU资源,而且还可以满足大带宽要求。[0101] 对应本申请实施例所提供的方法,本申请还提供了一种计算校验和的装置,通过该装置可以对待处理报文进行拆分计算,再将拆分计算的累加结果进行合并处理,得到最终的校验和。如图7所示,该装置包括:数据拆分单元701、校验和累加单元702以及合并单元703,校验和累加单元702包括多个校验和累加模块,合并单元703包括多个加法器。[0102] 数据拆分单元701,用于拆分在获取到第一待处理报文时,按照预设字节数对所述第一待处理报文进行数据拆分,得到多个第一子数据,将多个第一子数据分发至各个校验和累加模块;[0103] 校验和累加单元702,用于获得各个校验和累加模块对第一子数据进行累加计算得到的累加结果;[0104] 合并单元703,用于对得到的所有累加结果进行累加合并,得到所述第一待处理报文对应的校验和。[0105] 具体来讲,数据拆分单元701按照预设字节数对第一待处理报文进行数据拆分。比如,第一待处理报文是512字节的数据,按照预设字节数为64字节进行拆分时,该512字节的第一待处理报文将被拆分为8个64字节的子数据,也就是每个64bit的子数据都是第一子数据。[0106] 进一步,在本申请实施例中,该数据拆分单元701包括数据拆分模块以及解码模块,数据拆分模块对第一待处理报文进行数据拆分,而解码模块用于对拆分出来的第一子数据进行有效性的验证,也就是判定每个第一子数据中是否存在字节数小于预设字节数的第二子数据,若不存在,则直接将第一子数据分发至各个校验和累加模块;若存在,根据述待处理报文的总字节数以及每个第一子数据的字节数,确定第二子数据中的无效字节位以及有效字节;将无效字节位添加指定数值,根据有效字节数以及所述指定数值,得到第三子数据,并将第一子数据的有效字节以及第三子数据发送至校验和累加模块。[0107] 举例来说,如图3所示,一个265字节的数据,按照64字节进行拆分时,前面4个子数据都是64字节,但是第五个子数据的字节数是9。前面4个时钟根据原始的mod=8,解码的mod[7]到mod[0]都是8,也就是每个单元对应的8个64bit都是有效的。最后一个时钟,原始mod=9,由于设计中按照大端模式,有效数据按照从高位到低位存放,因此mod_decode[7]=8,代表第7个单元数据全部有效,mod_decode[6]=1代表第6个单元的只有最高8bit的数据时有效的,其他mod_decode全为0,说明输入数据都无效。[0108] 进一步,在本申请实施例中,在数据拆分单元701拆分得到第一子数据以及添加了指定数值得到的第三子数据之后,数据拆分单元701将第一子数据以及第三子数据分发至各个校验和累加模块。如图4所示,在图4中被拆分完成的第一待处理报文得到的第一子数据若是64字节,则将被直接传输到校验和累加单元的锁存器中进行累加计算,从而得到第一子数据的累加结果。但是参与计算的数据并不总是64bit对齐,因此在最后一个数据期,mod_decode指示了该校验和累加单元的最后一个时钟的有效字节数,其他无效的字节位使用0填补。[0109] 例如,图4中,若mod_decode=8,那么最高字节data[63:56]有效,最低字节data[55:0]也全部有效,因此可以直接进行累加计算。[0110] 若是mod_decode=1,那么最高字节有效,即:data[63:56]有效,而后续的低字节data[55:0]用0填补参与累加计算。[0111] 若是mod_decode=2,那么data[63:48]有效,data[47:0]用0填补参与累加计算。[0112] 进一步,在本申请实施例中,该校验和累加单元702还包括锁存器,该锁存器具体可以保存每一次对第一子数据进行累加的累加结果,比如在累加计算完一个第一子数据之后,保存该累加结果,然后在累加计算第二个第一子数据时,将锁存器中保存的累加结果进行累加,也就是每次累加结果作为下一次累加计算的输入。[0113] 在存在该锁存器的情况下,为了保证每次累加计算的准确性,因此每次需要对第一子数据进行累加计算之前,都需要检测是否存在指示第一待处理报文的数据结束的结束标识。若存在该结束标识,则说明第一待处理报文的数据已经结束,此时输出累加结果,并将缓存的累加结果清除;若是不存在该结束标识,则继续对第一待处理报文的第一子数据进行累加计算。通过该方式,可以准确的确定每次累加结果的输出时刻,保证了累加结果输出的准确性。[0114] 另外,在本申请实施例中,由于在锁存器中保存了每次累加计算得到的累加结果,因此在有新其他待处理报文需要处理时,需要对锁存器中的累加结果进行清0处理。[0115] 具体来讲,在锁存器得到累加结果之后,检测当前是否存在第二待处理报文的报文标识,该报文标识可以是第一子数据中携带的标识,当然也可以是通过其他方式获取该报文标识。若是检测到第二待处理报文的报文标识,则得到并输出累加结果,并将缓存的累加结果清除;若是未检测到第二待处理报文的报文标识,则继续对第一子数据进行累加计算。通过该方式可以保证每次完成待处理报文的累加计算之后,可以及时将累加结果清除,避免对其他待处理报文的累加计算造成干扰。[0116] 进一步,如图8所示,在本申请实施例中合并单元703包括第一级加法器81,第二级加法器82,第三级加法器83,以265字节的报文来讲,在第一级加法器81中就需要完成8个32bit的累加结果相加,为了保证时序要求,可以拆分为2个并行的加法器来完成累加结果相加。相当于每个加法器实现4个32bit的数据相加。[0117] 第二级加法器82将所有数据的累加结果拆分为高位16bit和低位16bit相加,这里的高位16bit为data[31:16],低位16bit为data[15:0],在第二级加法器82进行累加计算将产生进位。[0118] 第三级加法器83将第二级加法器82的低位16bit进行相加,由于第二级加法器82的两个16bit相加最大结果不会超过0x1FFFE,也就是两个16bit都为最大输入值情况下:0xFFFF+0xFFFF=0x1FFFE,低16位是0xFFFE,进位C是1。因此第三级加法器83中低位16bit和进位C相加后不会超过0xFFFF,也就是可以得到最终的校验和,并且不会出现溢出的情况。[0119] 另外,在本申请实施例中,如图6所示为计算校验和的时序过程示意图,上述的计算校核的装置将按照图6所示的时序过程执行校验和的计算,校验和的计算在9个时钟内完成,也就是clk1~clk9,在每个时钟下执行对应的过程,比如在clk1~clk5数据拆分单元701完成待处理报文的拆分,在clk6第一级加法器81完成第一次累加,在clk7第二级加法器82完成累加结果的第一次合并计算,在clk8第三级加法器83完成第二次合并计算,最终在clk9得到校验和。[0120] 通过图6所示的流水线计算方式,可以有效的解决校验和计算过程中的时序问题,可以使硬件电路主频具有更高的计算效率,提升校验和计算速度。[0121] 进一步,在图6所示的时序过程中,由于在clk6时已经完成了待处理报文的校验和累加计算,在clk6的位置可以进行下一个待处理报文的校验和计算,而不需要等到clk9的位置才进行下一个待处理报文的校验和计算,这样可以提升校验和的累加计算效率。[0122] 基于同一发明构思,本申请实施例中还提供了一种电子设备,所述电子设备可以实现前述落脚区域的输出装置的功能,参考图9,所述电子设备包括:[0123] 至少一个处理器901,以及与至少一个处理器901连接的存储器902,本申请实施例中不限定处理器901与存储器902之间的具体连接介质,图9中是以处理器901和存储器902之间通过总线900连接为例。总线900在图9中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线900可以分为地址总线、数据总线、控制总线等,为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。或者,处理器901也可以称为控制器,对于名称不做限制。[0124] 在本申请实施例中,存储器902存储有可被至少一个处理器901执行的指令,至少一个处理器901通过执行存储器902存储的指令,可以执行前文论述的计算校验和的方法。处理器901可以实现图7所示的装置中各个模块的功能。[0125] 其中,处理器901是该装置的控制中心,可以利用各种接口和线路连接整个该装置的各个部分,通过运行或执行存储在存储器902内的指令以及调用存储在存储器902内的数据,该装置的各种功能和处理数据,从而对该装置进行整体监控。[0126] 在一种可能的设计中,处理器901可包括一个或多个处理单元,处理器901可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器901中。在一些实施例中,处理器901和存储器902可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。[0127] 处理器901可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的计算校验和的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。[0128] 存储器902作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器902可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(RandomAccessMemory,RAM)、静态随机访问存储器(StaticRandomAccessMemory,SRAM)、可编程只读存储器(ProgrammableReadOnlyMemory,PROM)、只读存储器(ReadOnlyMemory,ROM)、带电可擦除可编程只读存储器(ElectricallyErasableProgrammableRead‑OnlyMemory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器902是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器902还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。[0129] 通过对处理器901进行设计编程,可以将前述实施例中介绍的计算校验和的方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行图1所示的实施例的计算校验和的方法的步骤。如何对处理器901进行设计编程为本领域技术人员所公知的技术,这里不再赘述。[0130] 基于同一发明构思,本申请实施例还提供一种存储介质,该存储介质存储有计算机指令,当该计算机指令在计算机上运行时,使得计算机执行前文论述计算校验和的方法。[0131] 在一些可能的实施方式中,本申请提供的计算校验和的方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在装置上运行时,程序代码用于使该装置执行本说明书上述描述的根据本申请各种示例性实施方式的计算校验和的方法中的步骤。[0132] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。[0133] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0134] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。[0135] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[0136] 显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

专利地区:福建

专利申请日期:2022-01-07

专利公开日期:2024-06-18

专利公告号:CN114499757B

电话咨询
读内容
搜本页
回顶部