一种数据读写的方法与装置与流程

文档序号:11230376
一种数据读写的方法与装置与流程

本发明涉及数据读写技术领域,特别是涉及一种数据读写的方法与装置。



背景技术:

存储器是现代信息技术中用于保存信息的记忆设备。有了存储器,计算机才有记忆功能,才能保证正常工作。存储器的主要功能是存储程序和各种数据,并能在计算机运行过程中高速、自动地完成程序或数据的存取。存储器的类型有多种,Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,为后续介绍方便可以将Nand-flash存储器简称为nand,由于nand在数据读写时会有bit错误,所以在数据写入Nand Flash时会利用ecc算法对数据进行编码(ecc编码),当数据从nand读出后可以根据ecc算法对数据进行解码(ecc解码),来对数据进行纠错。

传统方式中,向nand中写入数据或从nand中读取数据时,需要等待数据完成编码或解码处理后,再去向nand中写入新的数据或从nand中读取新的数据,而数据进行编码或解码的过程往往会耗费大量的时间,造成读写带宽的大量损失,使得数据读写的效率较低。可见,如何提升数据读写的效率,是本领域技术人员亟待解决的问题。



技术实现要素:

本发明实施例的目的是提供一种数据读写的方法与装置,可以有效提升数据读写的效率。

为解决上述技术问题,本发明实施例提供一种数据读写的方法,包括:

从第一存储器中读取第一数据包,并将所述第一数据包写入第一缓存区;

利用ecc算法对所述第一数据包进行编码或解码处理,并从所述第一存储器中读取第二数据包,将所述第二数据包写入第二缓存区;所述第二缓存区为与所述第一缓存区相邻的缓存为空的缓存区;

将编码或解码处理后的第一数据包发送至目标存储器。

可选的,还包括:

接收所述目标存储器发送的反馈信息;

依据所述反馈信息中携带的缓存区标识,将所述缓存区标识对应的缓存区清空。

可选的,当所述第一存储器为nand,目标存储器为DDR;

则利用ecc算法对所述第一数据包进行解码处理;

相应的,

将解码处理后的第一数据包发送至目标存储器。

可选的,当所述第一存储器为DDR,目标存储器为nand;

则利用ecc算法对所述第一数据包进行编码处理;

相应的,

将编码处理后的第一数据包发送至目标存储器。

可选的,在所述从第一存储器中读取第一数据包,并将所述第一数据包写入第一缓存区之前,还包括:

判断第一缓存区是否为空;

若是,则将所述第一数据包写入所述第一缓存区;

若否,则依次判断是否存在缓存为空的缓存区;

若存在,则将所述缓存区作为第一缓存区。

本发明实施例还提供了一种数据读写的装置,包括写入单元、处理单元和发送单元,

所述写入单元,用于从第一存储器中读取第一数据包,并将所述第一数据包写入第一缓存区;

所述处理单元,用于利用ecc算法对所述第一数据包进行编码或解码处理,所述写入单元还用于从所述第一存储器中读取第二数据包,并将所述第二数据包写入第二缓存区;所述第二缓存区为与所述第一缓存区相邻的缓存为空的缓存区;

所述发送单元,用于将编码或解码处理后的第一数据包发送至目标存储器。

可选的,还包括接收单元和清空单元,

所述接收单元,用于接收所述目标存储器发送的反馈信息;

所述清空单元,用于依据所述反馈信息中携带的缓存区标识,将所述缓存区标识对应的缓存区清空。

可选的,当所述第一存储器为nand,目标存储器为DDR;

则所述处理单元具体用于利用ecc算法对所述第一数据包进行解码处理;

相应的,

所述发送单元具体用于将解码处理后的第一数据包发送至目标存储器。

可选的,当所述第一存储器为DDR,目标存储器为nand;

则所述处理单元具体用于利用ecc算法对所述第一数据包进行编码处理;

相应的,

所述发送单元具体用于将编码处理后的第一数据包发送至目标存储器。

可选的,还包括判断单元和选取单元,

所述判断单元,用于判断第一缓存区是否为空;

若是,则触发所述写入单元,将所述第一数据包写入所述第一缓存区;

若否,则所述判断单元还用于依次判断是否存在缓存为空的缓存区;

若存在,则触发所述选取单元,所述选取单元,用于将所述缓存区作为第一缓存区。

由上述技术方案可以看出,当需要从第一存储器向目标存储器发送数据时,可以预先设置多个缓存区,从第一存储器中读取第一数据包,并将所述第一数据包写入第一缓存区;当第一数据包完全写入到第一缓存区后,便可以利用ecc算法对所述第一数据包进行编码或解码处理,为了提升数据读写的效率,在对第一数据包进行编码或解码处理时,可以从所述第一存储器中读取第二数据包,并将所述第二数据包写入第二缓存区;当完成对第一数据包的编码或解码处理后,可以将该第一数据包发送至目标存储器,参照第一数据包的处理流程,可以完成从第一存储器向目标存储器传输数据。可见,在对第一数据包进行编码或解码处理时,可以同时将第二数据包写入到第二缓存区,充分利用了编码或解码处理的时间间隙,可以有效提升数据读写的效率。

附图说明

为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种数据读写的方法的流程图;

图2a为本发明实施例提供的一种从nand向DDR传输数据的流水线操作的示意图;

图2b为本发明实施例提供的一种从DDR向nand传输数据的流水线操作的示意图;

图3为本发明实施例提供的一种数据读写的装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

以从nand向DDR传输数据为例,传统方式中,需要等待数据完成解码处理后,才可以进行下一个数据的传输,由于数据解码处理会消耗大量的时间,按照此种方式进行数据的传输,需要花费较长的时间,导致数据读写效率较低。

如果可以在数据进行编码或解码处理时,进行后续数据的读写操作,将极大的提升数据读写的效率。根据速度的提升会由资源增加来补偿的原则,按照该种处理方式必然会消耗一部分FPGA的缓存资源,而FPGA内部恰恰有大量的ram资源可以作为缓存区,为此,本发明实施例提供了一种数据读写的方法与装置,可以预先选取出多个ram作为数据存储的缓存区,使用多个缓存区的流水操作,实现在数据编码或解码处理的同时,进行后续数据的读写,从而有效提升数据读写的效率。本发明实施例提供的技术方案,适用于在进行数据传输时需要进行编码或解码处理的数据读写场景。

在本发明实施例中,可以通过存储控制器实现对多个缓存区的管理。为了区分不同的缓存区,便于存储控制器对这几个缓存区进行管理,可以对选取的多个缓存区设置缓存区标识,例如,该标识可以是数字编号,以选取3个缓存区为例,可以将其编号为0、1、2,即缓存区的名称为ram0、ram1和ram2。

接下来,详细介绍本发明实施例所提供的一种数据读写的方法。图1为本发明实施例提供的一种数据读写的方法的流程图,该方法包括:

S101:从第一存储器中读取第一数据包,并将所述第一数据包写入第一缓存区。

第一存储器可以是需要从存储器中读取数据的存储器。以nand和DDR之间传输数据为例,当需要从nand中读取数据时,第一存储器即为nand;当需要向nand写入数据时,即从DDR中读取数据时,第一存储器即为DDR。为后续介绍方便,下面均以nand数据的读写为例展开介绍。

数据可以以数据包的形式在不同的存储器之间传输,第一数据包可以是待传输数据中的一部分数据。第一缓存区可以是预先选取出多个缓存区中的其中一个缓存区。

S102:利用ecc算法对所述第一数据包进行编码或解码处理,并从所述第一存储器中读取第二数据包,将所述第二数据包写入第二缓存区。

当完成第一数据包写入第一缓存区的操作后,便可以对第一缓存区中的数据即第一数据包进行编码或解码处理。当需要从nand中读取数据时,即第一存储器为nand,则利用ecc算法对所述第一数据包进行解码处理。当需要向nand中写入数据时,则利用ecc算法对所述第一数据包进行编码处理。

第二数据包可以是待传输数据中与第一数据包相邻的数据。第二缓存区可以是与所述第一缓存区相邻的缓存为空的缓存区。

在本发明实施例中,可以预先设置多个缓存区,用于存储待传输数据。以缓存区为ram0和ram1为例,将第一数据包写入到ram0后,便可以利用ecc算法对ram0中的第一数据包进行编码或解码处理,与此同时可以从第一存储器中读取第二数据包,将该第二数据包写入ram1中。

S103:将编码或解码处理后的第一数据包发送至目标存储器。

以nand和DDR这两种存储器为例,当第一存储器为nand,目标存储器为DDR,则需要利用ecc算法对第一数据包进行解码处理;相应的,将解码处理后的第一数据包发送至目标存储器。

相比于对数据进行编码或解码处理所花费的时间,以及向DDR中写入数据或者从DDR中读取数据所花费的时间,向nand写入数据或者是从nand中读取数据花费的时间相对较长,为了降低数据读写带宽的损失,在执行上述操作流程时,可以通过保证nand数据读写的连续进行,以使得nand读写性能可以达到最大化。

以ram0、ram1和ram2三个缓存区为例,从nand向DDR传输数据的流水线操作的示意图,如图2a所示,从第一存储器即nand中读取第一数据包将其存储于第一缓存区ram0,当完成将第一数据包写入ram0的操作后,可以对ram0中的第一数据包进行ecc解码处理,与此同时,可以从nand中读取第二数据包将其存储于第二缓存区ram1,当完成对第一数据包的解码处理后,可以将解码后的第一数据包发送至目标存储器即DDR中。以此类推,当完成将第二数据包写入ram1的操作后,可以对ram1中的第二数据包进行ecc解码处理,与此同时,可以从nand中读取第三数据包将其存储于第三缓存区ram2,当完成对第二数据包的解码处理后,可以将解码后的第二数据包发送至DDR中。由图2a可以看出,当完成将第三数据包写入ram2的操作后,可以对ram2中的第三数据包进行ecc解码处理,此时第一数据包已经发送至DDR,说明ram0缓存为空,与此同时可以将第四数据包写入ram0,当完成对第三数据包的解码处理后,将解码后的第三数据包发送至DDR中。从图2a中可以看出,在数据传输过程中实现了从nand中读取数据的连贯性,从而使得数据从nand传输至DDR花费的时间较短,有效的提升了从nand中读取数据的效率。

当第一存储器为DDR,目标存储器为nand,则需要利用ecc算法对所述第一数据包进行编码处理;相应的,将编码处理后的第一数据包发送至目标存储器。

以ram0、ram1和ram2三个缓存区为例,从DDR向nand传输数据的流水线操作的示意图,如图2b所示,从第一存储器即DDR中读取第一数据包将其存储于第一缓存区ram0,当完成将第一数据包写入ram0的操作后,可以对ram0中的第一数据包进行ecc编码处理,在编码处理过程中,可以从DDR中读取第二数据包,并将其存储于第二缓存区ram1,当第一数据包完成编码后,便可以将编码后的第一数据包发送至目标存储器即nand中。以此类推,当完成将第二数据包写入ram1的操作后,可以对ram1中的第二数据包进行ecc编码处理,在编码处理过程中,可以从从DDR中读取第三数据包,并将其存储于第三缓存区ram2,当第二数据包完成编码后,便可以将编码后的第二数据包发送至nand中。由图2b可以看出,当完成将第三数据包写入ram2的操作后,可以对第三数据包进行ecc编码处理,此时第一数据包已经发送至nand,说明ram0缓存为空,故此,可以将第四数据包写入ram0,以此类推完成数据的传输。从图2b中可以看出,在数据传输过程中实现了向nand中写入数据的连贯性,从而使得数据从DDR传输至nand花费的时间较短,有效的提升了向nand中写入数据的效率。

图2a和图2b均以3个缓存区为例进行的介绍。在本发明实施例中,可以根据数据包从第一存储器写入缓存区的时间,对数据包进行编码或解码的时间,以及将编码或解码处理后的数据发送至目标存储器的时间,可以根据这三个时间之间的比例关系,确定所需要的缓存区的个数。

以从nand向DDR传输数据为例,可以将从nand向缓冲区写入数据包的时间作为第一参数,对数据包进行解码的时间以及将解码后的数据包发送至DDR的时间之和作为第二参数,可以由这两个参数的比例关系,确定出缓存区的个数。例如,当第二参数与第一参数的比值小于等于1时,说明在将一个数据包从nand写入缓冲区的时间段内,可以同时完成对上一个数据包的解码以及发送至DDR的操作,此时,设置两个缓存区便可以满足要求。如图2a所示,为当第二参数与第一参数的比值大于等于1时的情况,从图2a中可以看出,当完成将第二数据包写入ram1后,此时ram0中的第一数据包还没有完全传输至DDR,也即ram0缓存区仍被占用,此时,可以向缓存为空的ram2中写入第三数据包,当完成将第三数据包写入ram2后,此时ram0中的第一数据包已经完全传输至DDR,也即ram0缓存为空,此时,可以将第四数据包写入ram0,由此可知,针对图2a所示的情况,设置3个缓存区可以充分利用数据读写带宽,满足数据读写的要求。

与上述从nand向DDR传输数据的原理类似,从DDR向nand传输数据时,可以将从DDR向缓冲区写入数据包的时间以及对该数据包进行编码的时间之和作为第一参数,将编码后的数据包发送至nand的时间作为第二参数,可以由这两个参数的比例关系,确定出缓存区的个数。

由上述技术方案可以看出,当需要从第一存储器向目标存储器发送数据时,可以预先设置多个缓存区,从第一存储器中读取第一数据包,并将所述第一数据包写入第一缓存区;当第一数据包完全写入到第一缓存区后,便可以利用ecc算法对所述第一数据包进行编码或解码处理,为了提升数据读写的效率,在对第一数据包进行编码或解码处理时,可以从所述第一存储器中读取第二数据包,并将所述第二数据包写入第二缓存区;当完成对第一数据包的编码或解码处理后,可以将该第一数据包发送至目标存储器,参照第一数据包的处理流程,可以完成从第一存储器向目标存储器传输数据。可见,在对第一数据包进行编码或解码处理时,可以同时将第二数据包写入到第二缓存区,充分利用了编码或解码处理的时间间隙,可以有效提升数据读写的效率。

考虑到在将缓存区中的数据包发送至目标存储器时,可能会出现缓存区出现数据残余的情况,针对该种情况,可以在目标缓存器接收到从缓存区发送的数据包后,可以将携带该缓存区标识的反馈信息发送给存储控制器,存储控制器在接收到目标存储器发送的反馈信息后,可以依据所述反馈信息中携带的缓存区标识,将所述缓存区标识对应的缓存区清空。

通过清空处理,可以保证在将缓存区的数据包发送至目标存储器后,该缓存区可以用于后续数据包的存储。

在本发明实施例中,可以以轮询的方式依次向预先选取的缓存区写入数据包。当需要向某一缓存区写入数据时,可能会出现该缓存区仍有数据的情况,此时,若仍将数据包写入该缓存区,可能会出现缓存空间不足,导致数据包的丢失,针对该种情况,可以增加相应的判断步骤。以向第一缓存区写入数据包为例,具体的,可以判断第一缓存区是否为空;若是,则将所述第一数据包写入所述第一缓存区;若否,则依次判断是否存在缓存为空的缓存区;若存在,则将所述缓存区作为第一缓存区。

对于其他缓存区,可以参照第一缓存区的判断过程,在此不再赘述。

图3为本发明实施例提供的一种数据读写的装置的结构示意图,包括写入单元31、处理单元32和发送单元33,

所述写入单元31,用于从第一存储器中读取第一数据包,并将所述第一数据包写入第一缓存区;

所述处理单元32,用于利用ecc算法对所述第一数据包进行编码或解码处理,同时,所述写入单元31还用于从所述第一存储器中读取第二数据包,并将所述第二数据包写入第二缓存区;所述第二缓存区为与所述第一缓存区相邻的缓存为空的缓存区;

所述发送单元33,用于将编码或解码处理后的第一数据包发送至目标存储器。

可选的,还包括接收单元和清空单元,

所述接收单元,用于接收所述目标存储器发送的反馈信息;

所述清空单元,用于依据所述反馈信息中携带的缓存区标识,将所述缓存区标识对应的缓存区清空。

可选的,当所述第一存储器为nand,目标存储器为DDR;

则所述处理单元32具体用于利用ecc算法对所述第一数据包进行解码处理;

相应的,

所述发送单元33具体用于将解码处理后的第一数据包发送至目标存储器。

可选的,当所述第一存储器为DDR,目标存储器为nand;

则所述处理单元32具体用于利用ecc算法对所述第一数据包进行编码处理;

相应的,

所述发送单元33具体用于将编码处理后的第一数据包发送至目标存储器。

可选的,还包括判断单元和选取单元,

所述判断单元,用于判断第一缓存区是否为空;

若是,则触发所述写入单元,将所述第一数据包写入所述第一缓存区;

若否,则所述判断单元还用于依次判断是否存在缓存为空的缓存区;

若存在,则触发所述选取单元,所述选取单元,用于将所述缓存区作为第一缓存区。

图3所对应实施例中特征的说明可以参见图1所对应实施例的相关说明,这里不再一一赘述。

由上述技术方案可以看出,当需要从第一存储器向目标存储器发送数据时,可以预先设置多个缓存区,从第一存储器中读取第一数据包,并将所述第一数据包写入第一缓存区;当第一数据包完全写入到第一缓存区后,便可以利用ecc算法对所述第一数据包进行编码或解码处理,为了提升数据读写的效率,在对第一数据包进行编码或解码处理时,可以从所述第一存储器中读取第二数据包,并将所述第二数据包写入第二缓存区;当完成对第一数据包的编码或解码处理后,可以将该第一数据包发送至目标存储器,参照第一数据包的处理流程,可以完成从第一存储器向目标存储器传输数据。可见,在对第一数据包进行编码或解码处理时,可以同时将第二数据包写入到第二缓存区,充分利用了编码或解码处理的时间间隙,可以有效提升数据读写的效率。

以上对本发明实施例所提供的一种数据读写的方法与装置进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1