CN111597239B - 数据对齐的方法及装置 - Google Patents
数据对齐的方法及装置 Download PDFInfo
- Publication number
- CN111597239B CN111597239B CN202010280520.8A CN202010280520A CN111597239B CN 111597239 B CN111597239 B CN 111597239B CN 202010280520 A CN202010280520 A CN 202010280520A CN 111597239 B CN111597239 B CN 111597239B
- Authority
- CN
- China
- Prior art keywords
- data
- block
- storage unit
- data block
- array
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
Abstract
本发明提供了一种数据对齐的方法及装置,属于数据处理技术领域。可以获取第一数据包的第一数组的第一数据块及第一序号及第二数据包的第二数组的第二数据块;将第一数据块存储到第一存储单元中并将第二数据块存储到第二存储单元中;判断第一数据块是否为数据包的结束数据块;如果是,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号;如果不是,则判断第二数组当前的存储单元是否存满;如果存满,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号;如果未存满,则输出第一存储单元的数据、第一存储单元的字节序号。采用本发明,可以实现数据对齐。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种数据对齐的方法及装置。
背景技术
在数据库中,数据类型非常丰富,包括char,varchar,text,binary,tinyint,int,decimal等数据类型。不同数据类型在内存或硬盘存储中所占用存储空间大小不同,并且在数据库中数据表格中有很多可变长度的属性列,各属性列中数据块所占用的存储空间也不相同,例如,数据块的位宽可以由2位、8位等。
在进行数据库专用处理器设计时,经常需要不同数据格式之间进行转换。不同位宽数据所占用的物理存储地址,往往也不是对齐的,通常不同数据格式之间对齐是非常耗时和耗费资源的操作。因此,亟需一种数据对齐的方法。
发明内容
本申请实施例的目的在于提供一种数据对齐的方法及装置,可以提高服务器的稳定性。具体技术方案如下:
第一方面,提供了一种数据对齐的方法,所述方法包括:
获取第一数据包的第一数组的第一数据块、所述第一数据块的第一序号、和第二数据包的第二数组的第二数据块,其中,所述第一数组中每个数据块的第一长度大于所述第二数组中每个数据块的第二长度;
根据所述第一序号,将所述第一数据块存储到第一存储单元中,并根据所述第一序号,将所述第二数据块存储到第二存储单元中,其中,一个第一存储单元用于存储一个第一数组的数据块;第一数据包中第一数据块和第二数据包中第二数据块的连续性一致;
判断所述第一数据块是否为第一数据包的结束数据块;
如果是,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;
如果不是,则判断第二数组当前的第二存储单元是否存满;
如果存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;如果未存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号。
可选的,所述根据所述第一序号,将所述第一数据块存储到第一存储单元中,包括:
如果所述第一数据块是所述第一数组的首个数据块,则将所述第一序号对4取余,得到第一余数;
如果所述第一余数为0,则将所述第一数据块存储到字节序号为所述第一序号的目标存储单元中;
如果所述第一余数不为0,则确定所述目标存储单元所属的目标存储单元组,将所述第一数据块存储到所述目标存储单元组的下一个存储单元组的第一个存储单元中,其中,一个存储单元组包含4个存储单元。
可选的,所述方法还包括:
如果所述第一数据块不是所述第一数组的首个数据块,则按照字节序号顺序,将所述第一数据块存储到下一个存储单元中。
可选的,所述方法还包括:
如果所述第一数据块是所述第一数组的首个数据块,则确定第二存储单元的前一个存储单元中,是否存储有未输出的数据块;
如果是,则输出所述前一个存储单元包含的数据块。
可选的,所述方法还包括:
判断所述第一数据块的序号、与上一次获取到的所述第一长度的数据块的序号是否连续;
如果连续,则确定所述第一数据块不是所述第一数组的首个数据块;
如果不连续,则确定所述第一数据块是所述第一数组的首个数据块。
可选的,所述每个第二存储单元包含4个子单元,一个子单元用于存储一个第二数组的一个数据块;
所述根据所述第一序号,将所述第二数据块存储到第二存储单元中,包括:
如果所述第二数据块是所述第二数组的首个数据块,则将所述第一序号对4取余,得到第二余数;
如果所述第二余数为0,则将所述第二数据块存储到子单元序号为所述第一序号的目标子单元中;
如果所述第二余数不为0,则将所述第二数据块存储到所述目标子单元所属存储单元的下一个存储单元的第一个子单元中。
可选的,所述方法还包括:
如果所述第二数据块不是所述第二数组的首个数据块,则按照子单元序号顺序,将所述第一数据块存储到下一个子单元中。
可选的,所述方法还包括:
获取对齐后的第一数组的第三数据块,其中,所述第三数据块的长度为所述第一长度;
确定所述第三数据块对应的存储块,并将所述第三数据块存储到所述存储块中,其中,一个存储块的位宽包括512位;
判断所述第三数据块是否为数据包的结束数据块;
如果是,则输出所述存储块的数据和所述存储块的序号;
如果不是,则判断所述存储块是否存满;
如果存满,则输出所述存储块的数据和所述存储块的序号;如果未存满,则继续获取对齐后的数据块。
可选的,所述确定所述第三数据块对应的存储块,并将所述第三数据块存储到所述存储块中,包括:
判断所述第三数据块的序号与上一次获取到的数据块的序号是否连续;
如果连续,则根据上一次获取到的数据块在存储块中的存储位置,将所述第一数据块顺序存储;
如果不连续,则将所述第三数据块存储到一个新的存储块中。
可选的,所述输出所述存储块的数据和所述存储块的序号之后,还包括:
针对每个数据包,将输出的包含该数据包的数据的存储块和所述存储块的序号存储到预设缓存队列中,并统计已输出的存储块所构成的数组数目;
判断当前存储块对应的数据包结束信号是否有效;
如果有效,则将统计出的数组数目与所述数据包的第一数组的第一个数据块的序号进行拼接,得到该数据包的配置信息,并将所述配置信息存储到所述预设缓存队列中;
如果无效,则继续获取下一个存储块。
第二方面,提供了一种数据对齐的装置,所述装置包括:
获取单元,用于获取第一数据包的第一数组的第一数据块、所述第一数据块的第一序号、和第二数据包的第二数组的第二数据块,其中,所述第一数组中每个数据块的第一长度大于所述第二数组中每个数据块的第二长度;
存储单元,用于根据所述第一序号,将所述第一数据块存储到第一存储单元中,并根据所述第一序号,将所述第二数据块存储到第二存储单元中,其中,一个第一存储单元用于存储一个第一数组的数据块;第一数据包中第一数据块和第二数据包中第二数据块的连续性一致;
第一判断单元,用于判断所述第一数据块是否为第一数据包的结束数据块;
第一输出单元,用于如果是,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;
第二判断单元,用于如果不是,则判断第二数组当前的第二存储单元是否存满;
第二输出单元,用于如果存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;如果未存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号。
可选的,所述装置是基于FPGA或ASIC实现。
第三方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述方法步骤。
第四方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面任一所述的方法。
本申请实施例提供的一种数据对齐的方法及装置,可以获取第一数据包的第一数组的第一数据块、第一数据块的第一序号、和第二数据包的第二数组的第二数据块,其中,第一数组中每个数据块的第一长度大于第二数组中每个数据块的第二长度;根据第一序号,将第一数据块存储到第一存储单元中,并根据第一序号,将第二数据块存储到第二存储单元中,其中,一个第一存储单元用于存储一个第一数组的数据块;第一数据包中第一数据块和第二数据包中第二数据块的连续性一致;判断第一数据块是否为第一数据包的结束数据块;如果是,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号;如果不是,则判断第二数组当前的第二存储单元是否存满;如果存满,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号;如果未存满,则输出第一存储单元的数据、第一存储单元的字节序号。基于上述处理过程,可以将上述第一数据块和第二数据块都以存储单元为单位进行输出(即1个字节),从而实现是数据的对齐输出。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种结构示意图;
图2为本申请实施例提供的一种数据对齐的方法的流程图;
图3为本申请实施例提供的一种数据存储的示意图;
图4为本申请实施例提供的一种数据对齐的示例的流程图;
图5为本申请实施例提供的一种数据存储的示意图;
图6为本申请实施例提供的一种字节转换的示例的流程图;
图7为本申请实施例提供的一种数据缓存的示例的流程图;
图8为本申请实施例提供的一种数据对齐的装置的结构示意图;
图9为本申请实施例提供的一种电子设备的结构示意图;
图10为本申请实施例提供的一种数据对齐的方法的流程图;
图11为本申请实施例提供的一种数据对齐的方法的流程图;
图12为本申请实施例提供的一种数据对齐的方法的流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种数据对齐的方法,可以应用于电子设备。其中,该电子设备可以是具有数据处理和存储功能的电子设备。在应用于数据库领域时,数据管理复杂程度高,需要存储的数据量大,位宽多,多数通信数据的传输方式为串行传输,串行传输就是使用一根数据线,将输入数据一位一位地依次传输,每一位数据占用一个固定的时间长度,但数据库中数据量巨大以这种方式传输速度比较低,非常耗时,故在方案中采用串并转换,将一组数据的各个数据位在多条数据线上同时传输,实现并行传输,以这种方式传输速度快,效率极大提高。本发明可以在串并转换的基础上,将待处理的两种不同位宽数据,统一成一个字节(即八位位宽)的数据,再在一个字节的基础上对每组数据进行多字节的缓存输出,以便后续使用。
为了实现这一方案,实现整个装置是由AddAlign(可称为对齐装置)、Abyte2Aword(可称为字节转字装置)和DataTransBuffer(可称为数据缓存装置)组成,如图1所示,为本发明里提供的一种结构示意图。其中,每个Abyte2Aword对应一种类型的数组。各数组的类型可以按照数组中数据块的长度(位宽)进行划分,位宽可以有8位、2位等。
下面将结合具体实施方式,对本发明实施例提供的一种数据对齐的方法进行详细的说明,如图2所示,具体步骤如下。
步骤201,获取第一数据包的第一数组的第一数据块、第一数据块的第一序号、和第二数据包的第二数组的第二数据块。
其中,第一数组中每个数据块的第一长度(数据位宽)大于第二数组中每个数据块的第二长度。例如,第一数组中各数据块为8位,第二数组中各数据块为2位。在其他实施例中,第一数组中各数据块和第二数组中各数据块可以为其他位数,例如,第一数组中各数据块为32位,第二数组中各数据块为8位,再例如,第一数组中各数据块为64位,第二数组中各数据块为8位。
在实施中,对齐装置可以并行接收多路数据,从而实现多个数组的并行输入。具体的,针对每个数组(数据组),输入内容包括:数组的数据块、数据块的序号、数据包结束信号、输入数据有效信号等。本发明实施例以对齐装置接收两个数组的数据、一个数据的位宽为8位(即1个字节),另一个数组的位宽为2位为例进行说明,其他情况与之类似。为了便于描述,将第一数组记为D组,将第二数据组记为F组。
如图1所述,对齐装置可以接收D组的数据、以及F组的数据。不同组的数据(如D组的数据和F组的数据)属于不同的数据包。每个数据包可划分为多个数组,而数组的划分可由序号以及结束信号决定,数据包划分是由结束信号决定。每个数组可包含多个相同长度的数据块。不同组的数据的数据块的长度不同,如D组的数据块的长度(数据的位宽)可以为8,F组的数据块的长度(数据的位宽)可以为2。
对于D组,D组输入的每个数据块为一个字节,位宽为8,对应输入的用于确定起始位置的a值(可记为d_a),以及数据包结束信号(下文称eop)。本实施例中,将D组输入的第一个数据块对应的序号记为a。在同一数组中,数据块对应的序号是连续的,数值相差为1,即后续数据块的序号依次为:a、a+1、a+2……。若连续输入的数据对应的序号不是相差1连续时,则确定数据块不连续,表示两者分别来自不同数组,并且后输入的数据是下一个数组的第一个数据。当输入某数据块的eop信号置位为1时,表示数据包结束信号有效,该数据块为当前输入的数据包的最后一个数组的最后一个数据。当输入某数据块的eop信号置位为0时,表示数据包结束信号无效,该数据块不是当前输入的数据包的最后一个数组的最后一个数据。也即,通过序号可以判断数据块是否属于同一个数组,通过 eop可以判断是否属于同一个数据包。
另外,在对齐模块中,以4个字节为一组存放D组数据,每个字节即一个存储单元,用于存储一个D组的数据块,4个字节所形成的组可称为存储单元组。
对于F组,F组输入的每个数据块的位宽为2,4个F组的数据块构成1个字节。与D组的数据块类似,每个F组的数据块也对应也输入有用于确定起始位置的a值(可记为f_a)、以及数据包结束信号(下文称eop)。其中,将F组输入的第一个数据块对应的序号记为a值。在同一数组中,数据块对应的序号是连续的,数值相差为1,即后续数据块的序号依次为:a、a+1、a+2……。若连续输入的数据对应的序号不是相差1连续时,则确定数据块不连续,表示两者分别来自不同数组,并且后输入的数据是下一个数组的第一个数据。当输入某数据块的eop信号置位为1时,表示数据包结束信号有效,该数据块为当前输入的数据包的最后一个数组的最后一个数据块。当输入某数据块的eop信号置位为0时,表示数据包结束信号无效,该数据块不是当前输入的数据包的最后一个数组的最后一个数据。
可以理解,每存放一个F组的数据块(2位数据),则对应存放一个D组的数据块(8位数据,即一个字节的数据)。也就是说,每四个字节D组数据d_in,对应F组一个字节数据,F组的每一个字节又分成四份,每一份分别对应一个D组的数据块。
对齐模块的功能是让D组、F组数据整齐排列输出。就是让具有连续性的D组数据从四个字节的第一个字节开始存放数据,其中,对应的F组的数据也是从一个字节的最高两位开始存放,从而实现对齐输出。
需要说明的是,对齐模块中进行保持和缓存操作都是在hold_d和hold_f保持信号为低电平情况下进行。一旦有保持信号拉高,整个执行操作暂停任何处理操作,同时向外部发出等待请求,拉高等待信号。外部接收等待信号理应不再发送数据,但为了不对外部输入数据依赖性太强,暂设两个FIFO进行缓存数据。在等待信号拉高的情况下,外部还可能会输入数据,故两个FIFO分别存放输入的D组和F组的数据,包括输入数据以及对应的序号和eop。如果对齐模块的FIFO中有数据,则首先要处理FIFO中数据,直到FIFO 中没有数据。当对齐模块需要读取数据时,对齐模块再对外部输出等待信号为低电平,一旦得到了数据,即向外部发出等待信号为高电平,进行数据处理阶段。
步骤202,根据第一序号,将第一数据块存储到第一存储单元中,并根据第一序号,将第二数据块存储到第二存储单元中。
其中,一个第一存储单元用于存储一个第一数组的数据块。第一数据包中第一数据块和第二数据包中第二数据块的连续性一致。其中,连续性一致所包含的意义可包括:第一数据包中数组(第一数组)的数量和第二数据包中数组(第二数组)的数量相同,第一数组中数据块(第一数据块)的数量和第二数组中数据块(第二数据块)的数量相同,第一数组在第一数据包中的分布位置与第二数组在第二数据包中的分布位置相同,主要区别在于第一数据块和第二数据块的位数不同。
第二数据块可以有自己的序号,如第二序号,该第二序号可以根据第一序号按设定规则计算得到。由于第一数据块的连续性和第二数据块的连续性一致,所以,可以依据第一数据块的序号(第一序号)确定第二数据块的存储位置。
在实施中,对齐模块中采用两个FIFO(First in First out,先入先出队列)分别存放输入的D组和F组的数据,包括数组的数据块、数据块的序号、数据包结束信号、输入数据有效信号。其中,D组输入数据可以先寄存之后输出,而F组输入数据是赋值给子单元。
对于第一数据包的第一数组,存储过程可以为:如果第一数据块是第一数组的首个数据块,则将第一序号对第一数据块的第一长度除以第二数据块的第二长度的商取余,得到第一余数;如果第一余数为0,则将第一数据块存储到字节序号为第一序号的目标存储单元中;如果第一余数不为0,则确定目标存储单元所属的目标存储单元组,将第一数据块存储到目标存储单元组的下一个存储单元组的第一个存储单元中,其中,一个存储单元组包含数量为第一数据块的第一长度除以第二数据块的第二长度的商的存储单元。
例如,针对D组,具体的存储过程可以为:如果第一数据块是第一数组的首个数据块,则将第一序号对4取余,得到第一余数;如果第一余数为0,则将第一数据块存储到字节序号为第一序号的目标存储单元中;如果第一余数不为0,则确定目标存储单元所属的目标存储单元组,将第一数据块存储到目标存储单元组的下一个存储单元组的第一个存储单元中,其中,一个存储单元组包含4个存储单元。
在实施中,当有数据输入时,首先要确定该数据块是否为数组的首个数据块。具体的,如果是输入的第一个数据块,则认为是首个数据块,或者,可以根据连续性进行判断,具体的处理过程后续会进行详细说明。
如果第一数据块是首个数据块,则需要确定第一数据块的最初位置。因为D组的数据块是4个为一组存放,根据输入的a值(即第一数据块的序号),对a值对4取余,得到第一余数;如果第一余数为0,则将第一数据块存储到字节序号为第一序号的目标存储单元中。该情况下,目标存储单元是其所属目标存储单元组中的第一个存储单元。
如果第一余数不为0,则将第一数据块存储到目标存储单元组的下一个存储单元组的第一个存储单元中,其中,一个存储单元组包含4个存储单元。
另外,如果第一数据块不是第一数组的首个数据块,则按照字节序号顺序,将第一数据块存储到下一个存储单元中。具体的,如果输入的数据块的序号连续,那么第一数据块不是D组的首个数据块,D组数据紧接着前一个数据块的字节序号进行顺序存放。
针对第二数据包的第二数组,存储过程可以为:如果第二数据块是第二数组的首个数据块,则将第一序号对第一数据块的第一长度除以第二数据块的第二长度的商取余,得到第二余数;如果第二余数为0,则将第二数据块存储到子单元序号为第一序号的目标子单元中;如果第二余数不为0,则将第二数据块存储到目标子单元所属存储单元的下一个存储单元的第一个子单元中。其中,每个第二存储单元包含数量为第一数据块的第一长度除以第二数据块的第二长度的商的子单元,一个子单元用于存储一个第二数组的一个数据块。
例如,针对F组,具体的存储过程可以为:如果第二数据块是第二数组的首个数据块,则将第一序号对4取余,得到第二余数;如果第二余数为0,则将第二数据块存储到子单元序号为第一序号的目标子单元中;如果第二余数不为0,则将第二数据块存储到目标子单元所属存储单元的下一个存储单元的第一个子单元中。
其中,每个第二存储单元包含4个子单元,一个子单元用于存储一个第二数组的一个数据块。
在实施中,如果第二数据块是首个数据块,可以根据输入的第二数据块的a值,将a值对4取余,得到第二余数。如果第二数据块是第二数组的首个数据块,则将第一序号对4取余,得到第二余数。如果第二余数为0,则将第二数据块存储到子单元序号为第一序号的目标子单元中(即当前字节的高两位);如果第二余数不为0,则将第二数据块存储到目标子单元所属存储单元的下一个存储单元的第一个子单元中(即下一个字节的高两位)。
另外,如果第二数据块不是第二数组的首个数据块,则按照子单元序号顺序,将第二数据块存储到下一个子单元中。具体的,如果输入的数据块的序号连续,那么第二数据块不是F组的首个数据块,可以按照顺序,将第二数据块存储在紧接着前一个数据块的后两位中。
如图3所示,假设首先输入的数据对应的a值为5,其值对4取余余1,理应输入数据存放在A处,而对应输入的F组数据存放在C处,但是为了让两者对齐输出,D组输入数据存放在下一个存储单元组中的第一组即B处,同理,F组输入数据存放在下一个字节中的最高两位即D处。
在确定数据存放输出的起始位置后,对齐模块根据D组数据和F组数据的a值、以及结束信号eop的值来得到输出的f_out(8),从而实现2位数据到8位数据的串并转换功能,同时,修改F组数据中各数据块的序号,使其与字节序号对应,即第几个8位字节输出f_out。同理,对于D组数据,如果是全部是顺序存储(即0~N),则d_out的中数据块的序号,如果不是顺序存储(比如余数不为0),则将序号修改为存储单元实际的字节序号。
参见图3,如果输入的数据为连续数据,那么D组数据紧接着B处的字节序号进行存放输出,F组数据紧接着D处的2位数据位置进行存放输出。若输入数据不连续则重新确定起始位置,再进行存放输出。以上实现数据统一输出相同位宽。
步骤203,判断第一数据块是否为第一数据包的结束数据块。
在实施中, 可以根据数据块对应的eop判断第一数据块是否为数据包的结束数据块。
步骤204,如果是,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号。
在实施中,如果第一数据块为数据包的结束数据块,则进一步判断8位F组输出数据(第二数据块当前所在的存储单元)是否填满,如果未填满,则其余位补0,然后输出第一数据块和第二数据块,并输出数据包结束信号为1,同时,对应的数据有效信号输出为1。输出后回到初始状态获取新数据,重新确定起始位置。
步骤205,如果不是,则判断第二数组当前的第二存储单元是否存满。
在实施中,如果第一数据块不是数据包的结束数据块,则进一步判断第二数组当前的存储单元是否存满。即f_out是否填满了统一位宽即8位位宽。
步骤206,如果存满,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号。如果未存满,则输出第一存储单元的数据、第一存储单元的字节序号。
对于第一数组而言,输出的第一存储单元的字节序号可以是根据输入的第一存储单元的字节序号叠加得到的,具体地,例如,如果余数为0,则输出的存储单元的字节序号为输入的存储单元的字节序号本身,如果有余数,则输出的存储单元的字节序号为输入的存储单元的字节序号加4减余数。而对于第二数组而言,输出的字节序号可以是,如果余数为0,则为第二存储单元的字节序号本身,如果有余数,则为第二存储单元的字节序号加1。
在实施中,如果存满,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号。如果未存满,则只输出第一存储单元的数据、第一存储单元的字节序号。
可选的,如果第一数据块是第一数组的首个数据块,则确定第二存储单元的前一个存储单元中,是否存储有未输出的数据块;如果是,则输出前一个存储单元包含的数据块。
在实施中,在某一数组结束后,应输出该数组的全部数据块。由于D组输入数据可以先寄存之后输出,而F组输入数据是赋值给子单元,待满了统一位宽即8位位宽后再输出。因此,在确定数据块的序号不连续(即确定当前输入的是一个新数组的数据)时,需要确定第二存储单元的前一个存储单元中,是否存储有未输出的数据块;如果是,则先输出前一个存储单元包含的数据块,然后再对当前接收到的数据块进行 存储。
可选的,判断是否为首个数据块的过程具体为:判断第一数据块的序号、与上一次获取到的第一长度的数据块的序号是否连续;如果连续,则确定第一数据块不是第一数组的首个数据块;如果不连续,则确定第一数据块是第一数组的首个数据块。
在实施中,可以判断当前输入的第一数据块的序号、与上一次获取到的第一长度的数据块的序号是否连续;如果连续,则说明第一数据块与上一个数据块属于同一数组,第一数据块不是第一数组的首个数据块。如果不连续,则确定第一数据块是新数组的第一个数据块,即首个数据块。
基于上述处理,对齐模块可以将统一将位宽为8的数据输出给字节转换模块,字节转换模块再进行一个字节转换多个字节的操作。整个功能的实现支持保持、缓存和数据处理等操作。其中,可以针对每个数组,分别设置一个字节转换模块,用于对该数组的数据进行字节转换。
本申请实施例还提供了一种数据对齐的示例,如图4所示,具体过程如下。
步骤401,获取外部输入的第一个D组的数据块d1、以及第一个F组的数据块f1、以及d1的序号a。
步骤402,判断a对4取余的余数是否为0。
如果是,执行步403。如果否,执行步骤404。
步骤403,在D组对应的存储空间中,用当前存储单元组中的第一个字节存储d1、在F组对应的存储空间中,用该字节的高2位存放f1,计数器加1。
步骤404,在D组对应的存储空间中,用下一个存储单元组中的第一个字节存储d1、在F组对应的存储空间中,用下一个字节的高2位存放f1。
其中,d1寄存起来待输出,将f1赋值给高2位的数据。
步骤405,判断数据包是否结束。
如果是,执行步骤406,如果否,执行步骤407。
步骤406,输出d1和f1所属的字节。
其中,如果f1所属的字节未填满,则补0。
步骤407,判断f1所属的字节是否填满。
如果是,执行步骤408。否则,执行步骤409。
步骤408,输出d1和f1所属的字节。
步骤409,输出d1,获取d2和f2,并判断是否与之前数据块连续。
如果连续,执行步骤410。如果不连续,执行步骤413。
步骤410,判断字节是否填满。
如果是,执行步骤411,否则,执行步骤412。
步骤411,d2存储到下一字节;f2存放到下一字节的高2位
步骤412,d2存储到下一字节;f2存放到原字节。
步骤413,输出f1所属的字节。
本发明实施例提供了一种字节转换的方法,具体过程为:获取对齐后的第一数组的第三数据块,其中,第三数据块的长度为第一长度;确定第三数据块对应的存储块,并将第三数据块存储到存储块中,其中,一个存储块的位宽包括512位;判断第三数据块是否为数据包的结束数据块;如果是,则输出存储块的数据和存储块的序号;如果不是,则判断存储块是否存满;如果存满,则输出存储块的数据和存储块的序号;如果未存满,则继续获取对齐后的数据块。
其中,一个存储块的位宽可以是为第一数据块的第一长度的整数倍的位宽数值,例如,一个存储块的位宽可以为512位,再例如,一个存储块的位宽例如可以为1024。
在实施中,字节转换模块是将一个字节数转换成多个字节并行输出。在具体实施中,是将8位位宽数据输入转换成512位位宽输出。其中,输入的数据块的序号表示同一数组的性质与对齐模块中表示同一数组的性质一致。若输入的序号连续则表示为数据包中同一数组,将此同一数组中的数据转换成512位进行输出,不同数组数据不可通过同一个512位数据输出,因此,需要将不同数组数据寄存在不同512位数据(即存储块)再输出。
以对齐模块输出的D组数据进行转换为512位数据为例,其整个操作都是在保持信号为低电平情况下进行,一旦保持信号拉高,整个执行操作暂停任何处理操作,同时向外部发出等待请求,拉高等待信号。因本装置与对齐模块装置类似,不想太依赖上层模块数据输出时序,当输入数据有效时,将输入一个字节的待转换数据,数组结束信号eop寄存起来,对数组起始位置表征数据即序号进行处理。同时一检测到数据有效信息,先进行对这一输入数据的处理,此时拉高等待信号对外部表示外部需等待发送数据,外部理应不再发送数据,但避免数据流失。将在等待信号输出为高电平的情况下检测到依旧会有有效数据输入,当数据有效信号为1时,此时利用缓存,由于输入待转换数据,数组开始表征信号a,数组结束信号eop都需要缓存写入到FIFO中,位宽为41,深度暂设为4。待第一个数据处理完后,首先要处理FIFO中数据,直到FIFO 中没有数据并且模块需要读取数据时再对外部可以进行数据输入,但是一旦得到数据,即向外部发出等待信号,进行数据处理阶段。
在具体转换过程中,字节转换模块可以接收对齐模块的输出数据,即对齐后的某一数组的数据块(可称为第三数据块),第三数据块的长度为第一长度(1个字节)。字节转换模块确定第三数据块对应的存储块,并将第三数据块存储到存储块中,其中,一个存储块的位宽为512位,即64字节。
首先,确定数据的起始位置。可选的,每个数组的第一个数据块可以从存储块的起始位置进行存储,或者,根据数组中第一个数据块的序号,确定数据块的存储位置。
具体的,对第一个寄存数据块的a值对64进行取余运算(64的由来:因为512位由64个8位组成),若余数等于0,则数据块直接存放在此刻512位输出数据的最高位上,然后,将该存储块对应的序号最为该数据块的序号,即存放数据块的512位数据的存储块的序号,再处理输入数据,其中,输出数据从头开始填8位数据,对应的字节使能信号的对应位置1,当在进入处理第二个数据之前将输出数据和字节使能信号进行移位操作等待填入第二个数据。若余数不等于0,则数据包第一个数组的首个数据块存放在下一个存储块中,并修改该数据块的序号,具体修改方式与余数为0的情况相同。输出数据从头开始填8位数据,对应的字节使能信号的对应位置1,当在进入处理第二个数据之前将输出数据和字节使能信号进行移位操作等待填入第二个数据。
然后,判断第三数据块是否为数据包的结束数据块。若是,则判断当前存储块中512位输出数据是否填满,如果填满,则直接输出该数据块,如果未填满,则将其余位宽补齐0,64位的字节使能信号的其余位宽置0,将这两个数据有效数据移位到最高位进行输出。同时也输出eop=1,其对应的数据有效信号输出为1。之后再读取新的数据,重新确定起始位置。
若不是数据包的结束数据块,再判断是否这个数据填满了512位宽中的有效位,若已填满,直接输出数据再获取数据;若没有填满512位输出数据,则进行顺序存储,再获取下一个数据块。
然后,可以判断获取到的数据的连续性。若是连续的,则再继续判断此时有效位是否已被填满,若没有填满则直接往一层512位的数据往后接输入数据,否则,另起512位数据开始填写输入数据。其对应输出的序号进行相应更改。之后处理过程再重复以上步骤。若不连续,则重新确定起始位置,得到新的序号。
例如,如图5所示,由序号代表的连续性以及对应eop的值可知第一个数据包有两个数组,第一个数组由三个数据组成,第二个数组由521个数据组成。第二个数据包只有一个数组,且这个数组只有两个数据。若要进行串并转换,首先确定起始位置,输入的a值对64取余,显然A不能被64整除,存放在一个512位输出数据的中间位置。然后,继续获取下一个数据块,并进行连续性判断。如果连续,则紧接着a值对应数据之后进行存放,如果不连续,则另起一个512位输出数据进行存放,同时输出第一个512位的输出数据。再获取到B+520对应的数据时,eop=1,直接输出其数据。之后获取的C值对应数据另起一个512位数据存放即可。
可选的,第三数据块可以是获取到的任一数据块,因此,在获取到第三数据块时,需要进行连续性判断。确定第三数据块对应的存储块,并将第三数据块存储到存储块中的具体过程为:判断第三数据块的序号与上一次获取到的数据块的序号是否连续;如果连续,则根据上一次获取到的数据块在存储块中的存储位置,将第一数据块顺序存储;如果不连续,则将第三数据块存储到一个新的存储块中。
在实施中,字节转换模块获取到第三数据块后,判断第三数据块的序号与上一次获取到的数据块的序号是否连续。如果连续,则说明第三数据块不是数组的首个数据块,根据上一次获取到的数据块在存储块中的存储位置,将第一数据块在存储块中顺序存储。如果不连续,则说明书第三数据块是首个数据块,将第三数据块存储到一个新的存储块中。
本申请实施例还提供了一种字节转换的示例,如图6所示,具体过程如下。
步骤601,接收对齐模块输入的数据块c1、c1的序号a。
步骤602,判断a对64取余的余数是否为0。
如果是,执行步603。如果否,执行步骤604。
步骤603,在存储块中,用确定该余数对应的字节,将c1存储在该字节中。
步骤604,在存储块中,将c1存储在存储块的第一个字节中。
步骤605,判断数据包是否结束。
如果是,执行步骤606,如果否,执行步骤607。
步骤606,输出存储块的数据。
其中,如果存储块未填满,则补0。
步骤607,判断存储块是否填满。
如果是,执行步骤608。否则,执行步骤609。
步骤608,输出存储块。
步骤609,获取c2,并判断是否与之前数据块连续。
如果连续,执行步骤610。如果不连续,执行步骤613。
步骤610,判断存储块是否填满。
如果是,执行步骤611,否则,执行步骤612。
步骤611,用新的存储块存储该数据。
步骤612,在该存储块中,顺序存储该数据。
步骤613,输出原存储块,用新的存储块存储该数据。
本申请实施例还提供了一种数据缓存的方法,可以应用于数据缓存装置,具体过程为:针对每个数据包,将输出的包含该数据包的数据的存储块和存储块的序号存储到预设缓存队列中,并统计已输出的存储块所构成的数组数目。判断当前存储块对应的数据包结束信号是否有效。如果有效,则将统计出的数组数目与数据包的第一数组的第一个数据块的序号进行拼接,得到该数据包的配置信息,并将配置信息存储到预设缓存队列中。如果无效,则继续获取下一个存储块。
在实施中,数据缓存模块的数据缓冲装置就是将多字节输出的数据缓存在FIFO(先进先出队列)中以便后续查询等操作进行使用。字节转换模块可以将字节转换后的多字节数据包传输给数据缓存模块。在本具体实施例中对齐模块设置了不同位宽输入数据统一位宽对齐输出,举例了两组数据,分别是D组和F组数据对齐输出。之后D组和F组又分别进行了字节8位位宽数据转换成512位即64字节的数据格式进行输出,最后两组数据分别根据组别存放到不同的FIFO中,以便进行后续利用。
在具体实施中,可以将D组和F组这两组数据,以存储块为单位进行输入。可以将存储块和存储块的序号存储到预设缓存队列中,并且,每缓存一个数组的数据,将计数器加1,从而统计已输出的存储块所构成的数组数目。
数据缓存模块可以获取代表数组的个数的输入参数,根据该输入参数,将数据包包含的每组数据进行个数划分。根据数据输入的有效信号,可以将输入数据以及字节使能信号存放到各组的FIFO中。
并且,数据缓存模块可以根据划分出来的数组将数组个数参数和数组第一个数据输入的a值按照拼接组合起来,作为数据包对应的配置信息,存放到FIFO中。每写入一个存储块之前,需要先判断对应的数据包输入的每一个数据包结束信号是否有效,即这一个数据包是否会中途结束,可设有一个计数器,若没有达到数组个数参数就中途中断,直接将实际的数据个数与a值拼接起来存放到各组的配置信息中。若没有中途中断,则直接将数组个数参数与数组第一个a值拼接起来存放再等待下一个数组输入。这样,后续用户在进行数据查询时,不仅可以查询缓存的数据,还可以查询该数据对应的配置信息。
另外,考虑到数据连续输入,会出现让FIFO溢出的情况,所以可以根据FIFO的将要满的信号去告诉外部对应组数据不再输入,需要保持。
本申请实施例还提供了一种数据缓存的示例,如图7所示,具体过程如下。
步骤701,获取字节转换装置输入的数据。
步骤702,判断该数据对应的数据包结束信号是否有效。
如果是,执行步骤703。否则,执行步骤704。
步骤703,将输入的数据及对应的字节有效信号存放到缓存队列中,同时,存放配置信息。
其中,配置信息为统计的数组的个数与a拼接组成。a是该数据包第一个数组中第一个数据块的序号。
步骤704,将输入的数据及对应的字节有效信号存放到缓存队列中。
在以上三种装置的基础上,整体装置实现不同位宽统一位宽对齐输出以及将字节转换成字等串并转换操作,同时合理地设置了存储装置,保证数据的稳定性,加快数据转换速度。
本发明实施例还提供一种先进先出队列FIFO,其上存储有大量的数据,根据程序步骤的处理对于FIFO进行读写操作,将已实现串并转换的数据进行写操作,存放在先进先出队列FIFO中,也可以在查询等操作是将FIFO中存放的数据进行读操作,输出给外部得以利用,也就是缓存装置设计目的。
综上,本发明实施例的串并转换装置的实现,为了更好提高转换速度,通过将不同位宽数据统一转换成相同位宽数据,在本实施例中将位宽为2的输入数据以及位宽为8的输入数据统一起来输出为一个字节即位宽为8的输入数据。之后利用统一位宽经过分析之后同时可以转换成目标位宽的数据,在本实施例中实现了将位宽为8的数据转换成多个字节(即64个字节)的数据,并且,可以并行对多个数组的数据进行转换,最终使整个装置的数据转换效率高,耗时少,同时设置一个能够并行存储数据的数据缓存模块存储已转换数据,能够让实现转换的数据更加快速、稳定地存放,以便稳定地数据得以利用。
基于相同的技术构思,本发明实施例还提供了一种数据对齐的装置,如图8所示,该装置包括:
第一获取单元810,用于获取第一数据包的第一数组的第一数据块、所述第一数据块的第一序号、和第二数据包的第二数组的第二数据块,其中,所述第一数组中每个数据块的第一长度大于所述第二数组中每个数据块的第二长度;
第一存储单元820,用于根据所述第一序号,将所述第一数据块存储到第一存储单元中,并根据所述第一序号,将所述第二数据块存储到第二存储单元中,其中,一个第一存储单元用于存储一个第一数组的数据块;第一数据包中第一数据块和第二数据包中第二数据块的连续性一致;
第一判断单元830,用于判断所述第一数据块是否为第一数据包的结束数据块;
第一输出单元840,用于如果是,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;
第二判断单元850,用于如果不是,则判断第二数组当前的第二存储单元是否存满;
第二输出单元860,用于如果存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;如果未存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号。
可选的,数据对齐的装置所述数据对齐的装置可以是基于FPGA(现场可编程门阵列)或ASIC(专用集成电路)实现。
可选的,所述第一存储单元820,具体用于:
如果所述第一数据块是所述第一数组的首个数据块,则将所述第一序号对4取余,得到第一余数;
如果所述第一余数为0,则将所述第一数据块存储到字节序号为所述第一序号的目标存储单元中;
如果所述第一余数不为0,则确定所述目标存储单元所属的目标存储单元组,将所述第一数据块存储到所述目标存储单元组的下一个存储单元组的第一个存储单元中,其中,一个存储单元组包含4个存储单元。
可选的,所述装置还包括:
第二存储单元,用于如果所述第一数据块不是所述第一数组的首个数据块,则按照字节序号顺序,将所述第一数据块存储到下一个存储单元中。
可选的,所述装置还包括:
第一确定单元,用于如果所述第一数据块是所述第一数组的首个数据块,则确定第二存储单元的前一个存储单元中,是否存储有未输出的数据块;
第三输出单元,用于如果是,则输出所述前一个存储单元包含的数据块。
可选的,所述装置还包括:
第三判断单元,用于判断所述第一数据块的序号、与上一次获取到的所述第一长度的数据块的序号是否连续;
如果连续,则确定所述第一数据块不是所述第一数组的首个数据块;
如果不连续,则确定所述第一数据块是所述第一数组的首个数据块。
可选的,所述每个第二存储单元包含4个子单元,一个子单元用于存储一个第二数组的一个数据块;
所述第一存储单元820,具体用于:
如果所述第二数据块是所述第二数组的首个数据块,则将所述第一序号对4取余,得到第二余数;
如果所述第二余数为0,则将所述第二数据块存储到子单元序号为所述第一序号的目标子单元中;
如果所述第二余数不为0,则将所述第二数据块存储到所述目标子单元所属存储单元的下一个存储单元的第一个子单元中。
可选的,所述装置还包括:
第三存储单元,用于如果所述第二数据块不是所述第二数组的首个数据块,则按照子单元序号顺序,将所述第一数据块存储到下一个子单元中。
可选的,所述装置还包括:
第二获取单元,用于获取对齐后的第一数组的第三数据块,其中,所述第三数据块的长度为所述第一长度;
第二确定单元,用于确定所述第三数据块对应的存储块,并将所述第三数据块存储到所述存储块中,其中,一个存储块的位宽包括512位;
第四判断单元,用于判断所述第三数据块是否为数据包的结束数据块;
第四输出单元,用于如果是,则输出所述存储块的数据和所述存储块的序号;
第五判断单元,用于如果不是,则判断所述存储块是否存满;
第五输出单元,用于如果存满,则输出所述存储块的数据和所述存储块的序号;如果未存满,则继续获取对齐后的数据块。
可选的,所述第二确定单元,具体用于:
判断所述第三数据块的序号与上一次获取到的数据块的序号是否连续;
如果连续,则根据上一次获取到的数据块在存储块中的存储位置,将所述第一数据块顺序存储;
如果不连续,则将所述第三数据块存储到一个新的存储块中。
可选的,所述装置还包括:
缓存单元,用于针对每个数据包,将输出的包含该数据包的数据的存储块和所述存储块的序号存储到预设缓存队列中,并统计已输出的存储块所构成的数组数目;
第五判断单元,用于判断当前存储块对应的数据包结束信号是否有效;
拼接单元,用于如果有效,则将统计出的数组数目与所述数据包的第一数组的第一个数据块的序号进行拼接,得到该数据包的配置信息,并将所述配置信息存储到所述预设缓存队列中;
如果无效,则继续获取下一个存储块。
本发明实施例中,可以获取第一数据包的第一数组的第一数据块、第一数据块的第一序号、和第二数据包的第二数组的第二数据块,其中,第一数组中每个数据块的第一长度大于第二数组中每个数据块的第二长度;根据第一序号,将第一数据块存储到第一存储单元中,并根据第一序号,将第二数据块存储到第二存储单元中,其中,一个第一存储单元用于存储一个第一数组的数据块;第一数据包中第一数据块和第二数据包中第二数据块的连续性一致;判断第一数据块是否为第一数据包的结束数据块;如果是,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号;如果不是,则判断第二数组当前的第二存储单元是否存满;如果存满,则输出第一存储单元的数据、第一存储单元的字节序号、第二存储单元的数据和第二存储单元的字节序号;如果未存满,则输出第一存储单元的数据、第一存储单元的字节序号。基于上述处理过程,可以将上述第一数据块和第二数据块都以存储单元为单位进行输出(即1个字节),从而实现是数据的对齐输出。
基于相同的技术构思,本申请实施例还提供了一种电子设备,如图9所示,包括处理器901、通信接口902、存储器903和通信总线904,其中,处理器901,通信接口902,存储器903通过通信总线904完成相互间的通信,
存储器903,用于存放计算机程序;
处理器901,用于执行存储器903上所存放的程序时,实现上述的方法步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(英文:PeripheralComponent Interconnect,简称:PCI)总线或扩展工业标准结构(英文:Extended IndustryStandard Architecture,简称:EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(英文:Random Access Memory,简称:RAM),也可以包括非易失性存储器(英文:Non-Volatile Memory,简称:NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(英文:Central ProcessingUnit,简称:CPU)、网络处理器(英文:Network Processor,简称:NP)等;还可以是数字信号处理器(英文:Digital Signal Processing,简称:DSP)、专用集成电路(英文:ApplicationSpecific Integrated Circuit,简称:ASIC)、现场可编程门阵列(英文:Field-Programmable Gate Array,简称:FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
基于相同的技术构思,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述方法步骤。
基于相同的技术构思,本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述方法步骤。
为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。
发明人在进行串并转换装置的处理方法具体实现过程中,在应用于数据库领域时,数据管理复杂程度高,需要存储的数据量大,位宽多,多数通信数据的传输方式为串行传输,串行传输就是使用一根数据线,将输入数据一位一位地依次传输,每一位数据占用一个固定的时间长度,但数据库中数据量巨大以这种方式传输速度比较低,非常耗时,故在本装置中采用串并转换,将一组数据的各个数据位在多条数据线上同时传输,实现并行传输,以这种方式传输速度快,效率极大提高。故本实施例在串并转换的基础上,将待处理的两种数据不同位宽数据,进行统一成一个字节即八位位宽,再在一个字节的基础上对每组数据进行多字节的缓存输出,以便后续使用。
为了实现这一方案,实现整个装置是由名为AddAlign不同位宽向统一位宽对齐输出装置、名为Abyte2Aword的字节转字装置以及名为DataTransBuffer的数据缓冲装置组成,其关系如图1所示。
在具体实施方案中AddAlign考虑两组输入数据,分为D组和F组。其中D组输入数据为一个字节,位宽为8,对应输入的有确定初始位置的a值(下文称d_a)以及数据包结束信号(下文称eop),其中a值用来判断输入数据d_in存放的位置,可理解为4个一组存放D组数据的组数。同时a值也有以下理解为:一个数据包可以由不同数组组成,同一数组中的数据对应的a值是连续的,数值相差为1。若连续输入的数据对应的a数据不是相差1连续时,则表示两者分别来自不同数组,并且后输入的数据是下一个数组的第一个数据。而当输入的eop信号置位为1时则表示此刻对应输入的数据为数据包中最后一个数组的最后一个数据。对于F组输入数据位宽为2,对应也输入用来确定初始位置的a值(下文称f_a)。故每存放F组的2位数据对应存放D组8位输入存放即一个字节的数据,也就是说每四个字节D组数据d_in对应F组一个字节数据,F组的每一个字节又分成四份,分别对应一个字节D组输入数据d_in。
AddAlign不同位宽向统一位宽对齐输出装置的目的是让D组、F组数据整齐排列输出。就是让具有连续性的D组数据从四个字节的第一个字节开始存放数据,其中对应的F组的每两位数据也从一个字节的最高两位存放实现对齐输出,如图3所示。
当有数据输入时,存放其数据首先需要确定最初位置。因为D组数据4个为一组存放,根据输入的a值对4取余的余数进行判断,若有余数则跳转到下一个4组数据进行存放;若无余数则直接从每4组代表的第1组进行存放数据进行输出。如图3,假设首先输入的数据对应的a值为5,其值对4取余余1,理应输入数据存放在A处,而对应输入的F组数据存放在C处,但是为了让两者对齐输出,D组输入数据存放在下一个4组数据中的第一组即B处,而F组输入数据存放在下一个字节中的最高两位即D处。
确定数据存放输出的初始位置后,要根据输入D组和F组数据的a值代表的数据连续性以及结束信号eop的值来得到输出的f_out(8),实现2位数据到8位数据的串并转换功能,同时其对应的f_a代表的是字节序号,即第几个8位字节输出f_out。而d_out数值不变地输出,变换的是数值d值存放的位置,由输出的d_a表示第几个四组数据来确定。如果输入的数据为连续数据,那么D组数据紧接着B处的字节位置进行存放输出,F组数据紧接着D处的2位数据位置进行存放输出。若输入数据不连续则重新确定初始位置,再进行输出。以上实现数据统一输出相同位宽。
Abyte2Aword的字节转字装置是将一个字节数转换成多个字节并行输出。在具体实施中实现的是8位位宽数据输入转换成512位位宽输出。由输入数据对应输入的a值来表示同一数组的性质与AddAlign表示的功能一致,若输入的a值连续则表示为数据包中同一数组,将此同一数组中的数据转换成512位进行输出,不同数组数据不可同一个512位数据输出,需将不同数组数据寄存在不同512位数据才输出。如图5所示。由a值代表的连续性以及对应eop的值可知第一个数据包有两个数组,第一个数组由三个数据组成,第二个数组由521个数据组成。第二个数据包只有一个数组,且这个数组只有两个数据。若要进行串并转换,首先确定初始位置,输入的a值对64取余,显然A不能被64整除,存放在一个512位输出数据的中间位置,紧接着获取的数据均是连续数据,则紧接着A值对应数据之后进行存放,获取到B对应数据时不与之前的数据连续,则另起一个512位输出数据进行存放,同时输出第一个512位的输出数据。再获取到B+520对应的数据时,eop=1,直接输出其数据。之后获取的C值对应数据另起一个512位数据存放即可。
DataTransBuffer的数据缓冲装置就是将多字节输出的数据缓存在FIFO(先进先出队列)中以便后续查询等操作进行使用。
在具体实施例中,具体实现AddAlign不同位宽输入统一位宽对齐输出的操作在上文说明的基础上,具体操作步骤如图10所示,实施步骤如下:整个操作支持串并转换数据处理、保持、缓存等操作。
保持和缓存操作是整个AddAlign装置的进行都是在hold_d和hold_f保持信号为低电平情况下进行,一旦有保持信号拉高,整个执行操作暂停任何处理操作,同时向外部发出等待请求,拉高等待信号。外部接收等待信号理应不再发送数据,但为了不对外部输入数据依赖性太强,暂设两个FIFO进行缓存数据。在等待信号拉高的情况下,外部还可能会输入数据,故两个FIFO分别存放输入的D组和F组的数据,包括输入数据以及对应的a值和eop。如果模块FIFO中有数据,待第一个数据处理完后,首先要处理FIFO中数据,直到FIFO 中没有数据并且模块需要读取数据时再对外部输出等待信号为低电平,但是一旦得到数据,即向外部发出等待信号为高电平,进行数据处理阶段。
数据处理操作:首先确定对齐后的初始位置,确定第一个8位数据d_in存放在四个字节组的起始位置以及一个2位数据f_in存放在哪个字节的高两位。
在这确定最初位置中,先对第一个寄存数据D组的a值对4进行取余,若余数等于0表示可以被4整除,其中要输出首个数据对应输出的a值等于输入的a值表示数据存放的四个字节的组数;而对应F组的8位输出数据对应a值也等于输入数据对应的a值表示数据可以直接存放在所在字节数,再处理输入数据,其中D组输入数据可以先寄存之后输出,而F组输入数据赋值给F组输出数据。之后再判断此时数据包是否结束。若整个数据包结束,8位F组输出数据未填完位宽补齐0,将数据f_out移位到最高位进行输出。输出数据包结束信号为1,同时对应的数据有效信号输出为1;而此时寄存的D组数据输出,输出数据包结束信号为1,同时对应的数据有效信号输出为1。输出后回到初始状态获取新数据,重新确定初始位置。
若此时数据并不是数据包的最后一个数组的最后一个数据,再判断是否f_out是否填满了统一位宽即8位位宽。若已填满,直接输出D组和F组数据,再获取数据进行判断连续性;若没有填满,输出D组数据再直接获取数据。判断此时得到的数据是否与前一个数据具有连续性,若连续表示这些数据为同一个数组中,再继续判断此时F组输出数据是否已填满8位数据,若未填满直接F组输入数据往同一字节的8位往后接,进行处理数据。若已填满则另起一个字节开始填输入数据,进行处理数据。若不连续则直接输出F组已填好的数据,同时将刚获取的数据寄存起来再重新确定初始位置。而对于D组数据的处理,判断连续性后,若相等则往后接一个字节寄存D组输入数据,若不连续则重新确定初始位置之后再输出。
若取余之后不等于0,作为D组数据存放到下一个四个字节的组数的第一个字节中;而F组数据可以存放在下一个字节数的高两位,再处理输入数据与取余之后为0情况一致。之后再判断数据包是否结束等步骤均与取余为0的情况一致,不再赘述。实际情况是在设计过程中,两者的状态发生过程基本一致,故实现代码复用。
AddAlign不同位宽输入统一位宽对齐输出装置将统一好位宽为8的数据输出给Abyte2Aword字节转字装置进行一个字节转换多个字节的操作。整个功能的实现支持保持、缓存和数据处理等操作。
如图1所示,Abyte2Aword具体实现步骤如下:以AddAlign输出的D组数据进行转换为512位数据为例,其整个操作都是在保持信号为低电平情况下进行,一旦保持信号拉高,整个执行操作暂停任何处理操作,同时向外部发出等待请求,拉高等待信号。
因本装置与AddAlign装置类似,不想太依赖上层模块数据输出时序,当输入数据有效时,将输入一个字节的待转换数据,数组结束信号eop寄存起来,对数组初始位置表征数据即a值进行处理。同时一检测到数据有效信息,先进行对这一输入数据的处理,此时拉高等待信号对外部表示外部需等待发送数据,外部理应不再发送数据,但避免数据流失。将在等待信号输出为高电平的情况下检测到依旧会有有效数据输入,当数据有效信号为1时,此时利用缓存,由于输入待转换数据,数组开始表征信号a,数组结束信号eop都需要缓存写入到FIFO中,位宽为41,深度暂设为4。待第一个数据处理完后,首先要处理FIFO中数据,直到FIFO 中没有数据并且模块需要读取数据时再对外部可以进行数据输入,但是一旦得到数据,即向外部发出等待信号,进行数据处理阶段。
数据处理操作如下:首先确定初始位置,确定第一个8位数据存放在512位宽输出数据的起始位置。对第一个寄存数据a值对64进行取余运算(64的由来:因为512位由64个8位组成),若余数等于0则数据直接存放在此刻512位输出数据的最高位上,得到此时的a值表示数据存放的512位数据的序号,再处理输入数据,输出数据从头开始填8位数据,对应的字节使能信号的对应位置1,当在进入处理第二个数据之前将输出数据和字节使能信号进行移位操作等待填入第二个数据。之后再判断数据包是否结束,若是,512位输出数据未填完位宽补齐0,64位的字节使能信号的其余位宽置0,将这两个数据有效数据移位到最高位进行输出。同时也输出eop=1,其对应的数据有效信号输出为1。之后再读取新的数据,重新确定初始位置。
若此数据并不是数据包的最后一个数组的最后一个数据,再判断是否这个数据填满了512位宽中的有效位,若已填满,直接输出数据再获取数据;若没有填满512位输出数据,则直接获取数据。判断此时输入的数据是否与之前的数据是连续的。若是连续的则再继续判断此时有效位是否已被填满,若没有填满则直接往一层512位的数据往后接输入数据,否则另起512位数据开始填写输入数据。其对应输出的a值进行相应更改。之后处理过程再重复以上步骤,如图3、11所示。若不连续则重新确定初始位置,得到新的a值。
若余数不等于0,则数据包第一个数组首个数据存放在下一个512位输出数据中处理输入数据,要输出首个数据对应输出的a值也发生相应改变。输出数据从头开始填8位数据,对应的字节使能信号的对应位置1,当在进入处理第二个数据之前将输出数据和字节使能信号进行移位操作等待填入第二个数据。再判断数据包是否结束,
若整个数据包结束,512位有效位置输出数据未填完位宽补齐0,64位的d_be其余位宽置0,将这两个数据有效数据移位到有效位的最高位进行输出。同时也输出eop=1,其对应的数据有效信号输出为1。之后再读取新的数据,重新确定初始位置。
若din_eop=0表示此数据并不是数据包的最后一个数组的最后一个数据,判断是否填满一层的其余位,若已填满一个512位中的有效位数据,则输出数据,再获取新数据。若未填满512位中有效位数则直接获取新数据。之后执行的步骤和取余为0一致。具体实施步骤如图11。
Abyte2Aword字节转换字装置将已转换的多字节数据包传输给DataTransBuffer数据缓存装置。在本具体实施例中AddAlign装置设置了不同位宽输入数据统一位宽对齐输出,举例了两组数据,分别是D组和F组数据对齐输出。之后D组和F组又分别进行了字节8位位宽数据转换成512位即64字节的数据格式进行输出,最后两组数据分别根据组别存放到不同的FIFO中,以便进行后续利用。其实现步骤如图12。
将D组和F组两组数据进行输入,根据代表每一数组的个数的输入参数,将每组数据进行个数划分。根据数据输入的有效信号,可以将输入数据以及字节使能信号存放到各组的FIFO中。同时根据划分出来的数组将数组个数参数和数组第一个数据输入的a值按照拼接组合起来以存放到各组代表配置信息的FIFO中。每写入一个数据之前还需要判断对应的数据包输入的每一个数据包结束信号是否有效,即这一个数据包是否会中途结束,可设有一个计数器,若没有达到数组个数参数就中途中断,直接将实际的数据个数与a值拼接起来存放到各组的配置信息中。若没有中途中断,则直接将数组个数参数与数组第一个a值拼接起来存放再等待下一个数组输入。
再考虑到数据连续输入,会出现让FIFO溢出的情况,所以我们根据FIFO的将要满的信号去告诉外部对应组数据不再输入,需要保持。
在以上三种装置的基础上,整体装置实现不同位宽统一位宽对齐输出以及将字节转换成字等串并转换操作,同时合理地设置了存储装置,保证数据的稳定性,加快数据转换速度。
本发明实施例还提供一种先进先出队列FIFO,其上存储有大量的数据,根据程序步骤的处理对于FIFO进行读写操作,将已实现串并转换的数据进行写操作,存放在先进先出队列FIFO中,也可以在查询等操作是将FIFO中存放的数据进行读操作,输出给外部得以利用,也就是缓存装置设计目的。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk (SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。
Claims (13)
1.一种数据对齐的方法,其特征在于,所述方法包括:
获取第一数据包的第一数组的第一数据块、所述第一数据块的第一序号、和第二数据包的第二数组的第二数据块,其中,所述第一数组中每个数据块的第一长度大于所述第二数组中每个数据块的第二长度;
根据所述第一序号,将所述第一数据块存储到第一存储单元中,并根据所述第一序号,将所述第二数据块存储到第二存储单元中,其中,一个第一存储单元用于存储一个第一数组的数据块;第一数据包中第一数据块和第二数据包中第二数据块的连续性一致;其中,连续性一致表示:第一数据包中第一数组的数量和第二数据包中第二数组的数量相同,第一数组中第一数据块的数量和第二数组中第二数据块的数量相同,第一数组在第一数据包中的分布位置与第二数组在第二数据包中的分布位置相同,第一数据块和第二数据块的位数不同;
判断所述第一数据块是否为第一数据包的结束数据块;
如果是,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;
如果不是,则判断第二数组当前的第二存储单元是否存满;
如果存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;如果未存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一序号,将所述第一数据块存储到第一存储单元中,包括:
如果所述第一数据块是所述第一数组的首个数据块,则将所述第一序号对4取余,得到第一余数;
如果所述第一余数为0,则将所述第一数据块存储到字节序号为所述第一序号的目标存储单元中;
如果所述第一余数不为0,则确定所述目标存储单元所属的目标存储单元组,将所述第一数据块存储到所述目标存储单元组的下一个存储单元组的第一个存储单元中,其中,一个存储单元组包含4个存储单元。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果所述第一数据块不是所述第一数组的首个数据块,则按照字节序号顺序,将所述第一数据块存储到下一个存储单元中。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果所述第一数据块是所述第一数组的首个数据块,则确定第二存储单元的前一个存储单元中,是否存储有未输出的数据块;
如果是,则输出所述前一个存储单元包含的数据块。
5.根据权利要求2~4任一所述的方法,其特征在于,所述方法还包括:
判断所述第一数据块的序号、与上一次获取到的所述第一长度的数据块的序号是否连续;
如果连续,则确定所述第一数据块不是所述第一数组的首个数据块;
如果不连续,则确定所述第一数据块是所述第一数组的首个数据块。
6.根据权利要求1所述的方法,其特征在于,所述每个第二存储单元包含4个子单元,一个子单元用于存储一个第二数组的一个数据块;
所述根据所述第一序号,将所述第二数据块存储到第二存储单元中,包括:
如果所述第二数据块是所述第二数组的首个数据块,则将所述第一序号对4取余,得到第二余数;
如果所述第二余数为0,则将所述第二数据块存储到子单元序号为所述第一序号的目标子单元中;
如果所述第二余数不为0,则将所述第二数据块存储到所述目标子单元所属存储单元的下一个存储单元的第一个子单元中。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
如果所述第二数据块不是所述第二数组的首个数据块,则按照子单元序号顺序,将所述第一数据块存储到下一个子单元中。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取对齐后的第一数组的第三数据块,其中,所述第三数据块的长度为所述第一长度;
确定所述第三数据块对应的存储块,并将所述第三数据块存储到所述存储块中,其中,一个存储块的位宽包括512位;
判断所述第三数据块是否为数据包的结束数据块;
如果是,则输出所述存储块的数据和所述存储块的序号;
如果不是,则判断所述存储块是否存满;
如果存满,则输出所述存储块的数据和所述存储块的序号;如果未存满,则继续获取对齐后的数据块。
9.根据权利要求8所述的方法,其特征在于,所述确定所述第三数据块对应的存储块,并将所述第三数据块存储到所述存储块中,包括:
判断所述第三数据块的序号与上一次获取到的数据块的序号是否连续;
如果连续,则根据上一次获取到的数据块在存储块中的存储位置,将所述第一数据块顺序存储;
如果不连续,则将所述第三数据块存储到一个新的存储块中。
10.根据权利要求8所述的方法,其特征在于,所述输出所述存储块的数据和所述存储块的序号之后,还包括:
针对每个数据包,将输出的包含该数据包的数据的存储块和所述存储块的序号存储到预设缓存队列中,并统计已输出的存储块所构成的数组数目;
判断当前存储块对应的数据包结束信号是否有效;
如果有效,则将统计出的数组数目与所述数据包的第一数组的第一个数据块的序号进行拼接,得到该数据包的配置信息,并将所述配置信息存储到所述预设缓存队列中;
如果无效,则继续获取下一个存储块。
11.一种数据对齐的装置,其特征在于,所述装置包括:
获取单元,用于获取第一数据包的第一数组的第一数据块、所述第一数据块的第一序号、和第二数据包的第二数组的第二数据块,其中,所述第一数组中每个数据块的第一长度大于所述第二数组中每个数据块的第二长度;
存储单元,用于根据所述第一序号,将所述第一数据块存储到第一存储单元中,并根据所述第一序号,将所述第二数据块存储到第二存储单元中,其中,一个第一存储单元用于存储一个第一数组的数据块;第一数据包中第一数据块和第二数据包中第二数据块的连续性一致;其中,连续性一致表示:第一数据包中第一数组的数量和第二数据包中第二数组的数量相同,第一数组中第一数据块的数量和第二数组中第二数据块的数量相同,第一数组在第一数据包中的分布位置与第二数组在第二数据包中的分布位置相同,第一数据块和第二数据块的位数不同;
第一判断单元,用于判断所述第一数据块是否为第一数据包的结束数据块;
第一输出单元,用于如果是,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;
第二判断单元,用于如果不是,则判断第二数组当前的第二存储单元是否存满;
第二输出单元,用于如果存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号、所述第二存储单元的数据和所述第二存储单元的字节序号;如果未存满,则输出所述第一存储单元的数据、所述第一存储单元的字节序号。
12.根据权利要求11所述的装置,其特征在于,所述装置是基于FPGA或ASIC实现。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-10任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010280520.8A CN111597239B (zh) | 2020-04-10 | 2020-04-10 | 数据对齐的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010280520.8A CN111597239B (zh) | 2020-04-10 | 2020-04-10 | 数据对齐的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111597239A CN111597239A (zh) | 2020-08-28 |
CN111597239B true CN111597239B (zh) | 2021-08-31 |
Family
ID=72182017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010280520.8A Active CN111597239B (zh) | 2020-04-10 | 2020-04-10 | 数据对齐的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111597239B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0650264A1 (en) * | 1993-10-25 | 1995-04-26 | Digital Equipment Corporation | Byte aligned data compression |
US6571362B1 (en) * | 2000-06-26 | 2003-05-27 | Storage Technology Corporation | Method and system of reformatting data blocks for storage as larger size data blocks |
CN101271429A (zh) * | 2007-03-23 | 2008-09-24 | 华为技术有限公司 | 一种数据存储方法及装置 |
CN102014037A (zh) * | 2010-12-07 | 2011-04-13 | 深圳市普方科技有限公司 | 存储转发设备中实现9位数据字节的传输方法及装置 |
CN107608714A (zh) * | 2017-09-30 | 2018-01-19 | 广州酷狗计算机科技有限公司 | 字节对齐方法、装置及计算机可读存储介质 |
CN110244973A (zh) * | 2018-03-09 | 2019-09-17 | 高德信息技术有限公司 | 数据更新包的生成方法、装置及数据更新方法、装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102802198B (zh) * | 2011-05-25 | 2015-09-16 | 中兴通讯股份有限公司 | 数据对齐方法及装置 |
US9213742B2 (en) * | 2011-09-06 | 2015-12-15 | Cleversafe, Inc. | Time aligned transmission of concurrently coded data streams |
CN103677655B (zh) * | 2012-09-26 | 2016-12-21 | 北京信威通信技术股份有限公司 | 一种二维数组数据流在存储器上的读写方法及装置 |
CN108108148B (zh) * | 2016-11-24 | 2021-11-16 | 舒尔电子(苏州)有限公司 | 一种数据处理方法和装置 |
CN108494676B (zh) * | 2018-03-21 | 2022-01-11 | 广州多益网络股份有限公司 | 数据传输方法、装置、数据收发设备、系统及存储介质 |
CN108682436B (zh) * | 2018-05-11 | 2020-06-23 | 北京海天瑞声科技股份有限公司 | 语音对齐方法及装置 |
CN110874273B (zh) * | 2018-08-31 | 2023-06-13 | 阿里巴巴集团控股有限公司 | 一种数据处理方法及装置 |
CN109739939A (zh) * | 2018-12-29 | 2019-05-10 | 颖投信息科技(上海)有限公司 | 知识图谱的数据融合方法和装置 |
-
2020
- 2020-04-10 CN CN202010280520.8A patent/CN111597239B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0650264A1 (en) * | 1993-10-25 | 1995-04-26 | Digital Equipment Corporation | Byte aligned data compression |
US6571362B1 (en) * | 2000-06-26 | 2003-05-27 | Storage Technology Corporation | Method and system of reformatting data blocks for storage as larger size data blocks |
CN101271429A (zh) * | 2007-03-23 | 2008-09-24 | 华为技术有限公司 | 一种数据存储方法及装置 |
CN102014037A (zh) * | 2010-12-07 | 2011-04-13 | 深圳市普方科技有限公司 | 存储转发设备中实现9位数据字节的传输方法及装置 |
CN107608714A (zh) * | 2017-09-30 | 2018-01-19 | 广州酷狗计算机科技有限公司 | 字节对齐方法、装置及计算机可读存储介质 |
CN110244973A (zh) * | 2018-03-09 | 2019-09-17 | 高德信息技术有限公司 | 数据更新包的生成方法、装置及数据更新方法、装置 |
Non-Patent Citations (1)
Title |
---|
结构体数据对齐方法的研究;王若;《未来英才》;20170526;第131页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111597239A (zh) | 2020-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101551736B (zh) | 基于地址指针链表的缓存管理装置和方法 | |
US10691731B2 (en) | Efficient lookup in multiple bloom filters | |
CN110134366B (zh) | 一种并行写入多通道fifo的方法及装置 | |
US20190220190A1 (en) | Method and device for managing hash table, and computer program product | |
KR20090058499A (ko) | 고성능 본딩 리시퀀싱을 위한 방법, 시스템 및 컴퓨터 제품 | |
US11226778B2 (en) | Method, apparatus and computer program product for managing metadata migration | |
CN111597239B (zh) | 数据对齐的方法及装置 | |
CN101825997A (zh) | 一种异步先入先出存储器 | |
JP4855864B2 (ja) | ダイレクトメモリアクセスコントローラ | |
JP2008234059A (ja) | データ転送装置および情報処理システム | |
CN101483844B (zh) | 索引移动电话号码的方法和系统 | |
CN110968538B (zh) | 一种数据缓冲方法和装置 | |
CN115834027B (zh) | 一种消息填充方法、装置、设备及计算机可读存储介质 | |
US7565595B2 (en) | Convolutional interleaving and de-interleaving circuit and method thereof | |
KR19980056298A (ko) | 환형 큐를 이용한 동적 데이터 블럭 전송 장치 및 방법 | |
JP5987560B2 (ja) | データ転送装置、データ転送方法およびデータ転送プログラム | |
EP3036665B1 (en) | A method of transmitting data structures from one computer to another computer | |
CN112711545B (zh) | 一种基于数组链表式队列结构的数据存取方法 | |
CN113434545B (zh) | 数据缓存装置及数据提供方法 | |
CN116796685B (zh) | 数据拼接模块及数据传递方法、介质、电子设备、芯片 | |
JP6835758B2 (ja) | フロー制御装置および方法 | |
CN117891507A (zh) | 一种数据展示方法及装置 | |
US6286081B1 (en) | Mechanism for ensuring data coherency during sequential readings of portions of data that changes with time | |
JP2007114944A (ja) | 2分木構造の情報を記憶する装置及びヒープ構造の情報を記憶する装置 | |
US8055819B2 (en) | Information processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |