译码数据缓存方法和译码器与流程

文档序号:20763748发布日期:2020-05-15 18:34阅读:309来源:国知局
译码数据缓存方法和译码器与流程

本申请涉及信息解码技术,特别地,涉及在对硬判决数据与软判决数据的并行译码中的软判决数据的缓存。



背景技术:

错误校正码(errorcorrectedcode,ecc)在信息处理技术中被广泛使用,以识别和校正信息存储、传输乃至计算过程中产生的错误。

例如,非易失存储介质一般都不是完全可靠介质,读出数据和写入数据会有差别,需要通过ecc技术保证用户得到准确的数据。现有技术中采用例如低密度奇偶校验码(ldpc,lowdensityparitycheckcode)来保护非易失存储介质中的数据。ldpc译码有两种方式:硬判决译码和软判决译码。

存储设备包括控制部件与nvm芯片,控制部件通常同时连接多个nvm芯片,目的是提高存储容量与数据访问的带宽。nvm芯片通过多个通道连接到控制部件。通道是例如连接控制部件与nvm芯片的一组物理或逻辑的连线。控制部件能够独立访问各个通道,在一个通道上的数据传输不影响其他通道的数据传输。每个通道连接一个或多个nvm芯片。

控制部件包括译码器,对从nvm芯片读出的数据进行译码。译码器可以在硬判决或软判决两种模式下工作,译码器的模式可以切换。

图1展示了译码器对来自多个通道的数据进行译码的示意图。译码器通过数据获取单元110耦合到多个通道,并接收来自各通道的待译码数据。数据获取单元110获取来自各个通道的数据,将数据提供到译码单元120进行译码。译码包括硬判决译码或软判决译码。软判决译码纠错能力强于硬判决译码。

硬判决译码对从通道之一获取的硬判决数据实施,通过一次数据读取操作,就能得到硬判决译码数据,读出硬判决译码数据所需时间较短。

对于软判决译码,需要对从通道之一获取的软判决数据实施。为获得软判决数据,需要在同一通道上施加多次数据读取操作,每次数据读取操作读出软判决数据的部分。读出软判决数据需要较长的时间,并且在获取完整的软判决数据的过程中,译码单元120被占用,而无法处理其他译码任务。

因此,现有技术的译码方法,在软判决译码发生时,在软判决译码完成前,只能对单一通道做软判决译码,而其他通道被阻塞,影响处理效率。

在非易失存储介质生命周期的早期,软判决译码发生的概率不高,数据缓存利用率较低,造成极大的资源浪费。而在非易失存储介质生命周期的末期,物理地址临近的非易失存储介质易于集中发生软判决译码,又会占据大量数据缓存,并且缓存分配不均匀,又会对非易失存储介质的其他物理地址的软判决译码造成影响。



技术实现要素:

本申请旨在动态调整数据缓存容量,在软译码过程中充分利用缓存资源。

软判决译码也适用于其他一些错误校正码,例如,卷积码、polar(极化)码等。本申请中,以用于非易失存储介质的ldpc译码器为例,描述对译码数据的缓存的分配和使用。可以理解地,根据本申请实施例的译码器架构,也适用于其他适用软判决译码与硬判决译码的译码器。

根据本申请的第一方面,提供了根据本申请第一方面的第一译码数据缓存的方法,包括如下步骤:响应于接收到软判决数据,为软判决数据分配软判决缓存的子分区;在缓存状态表记录所述子分区是否收到软判决译码所需的全部软判决数据;向所述子分区写入软判决数据;若软判决译码所需的全部软判决数据被写入所述子分区,进行软判决译码。

根据本申请的第一方面的第一译码数据缓存的方法,其中,所述软判决缓存包括多个子分区,每个子分区能够缓存一次软判决译码所需的全部软判决数据。

根据本申请的第一方面的第二译码数据缓存的方法,其中,缓存状态表的表项同软判决缓存的子分区一一对应。

根据本申请的第一方面的第一至第三译码数据缓存的方法之一,其中,响应于接收到软判决译码所需的全部软判决数据的第一部分数据,为所述第一部分数据分配软判决缓存的第一子分区,在缓存状态表中新建第一表项,以在所述第一表项记录所述第一子分区是否收到软判决译码所需的全部译码数据。

根据本申请的第一方面的第四译码数据缓存的方法,其中,所述第一表项中记录所述第一子分区的索引和提供所述第一部分数据的非易失存储介质的标识。

根据本申请的第一方面的第五译码数据缓存的方法,其中,非易失存储介质的标识是用于该非易失存储介质的物理地址或该非易失存储介质所耦合的通道的编号。

根据本申请的第一方面的第四至第六译码数据缓存的方法之一,其中,响应于接收到所述全部软判决数据的第二部分数据,更新缓存状态表的所述第一表项,以在所述第一表项记录所述第一子分区是否收到所述全部软判决数据。

根据本申请的第一方面的第七译码数据缓存的方法,其中,根据提供所述第二部分数据的非易失存储介质的标识查询缓存状态表,得到所述第一表项,从所述第一表项中获取第一子分区的索引,并将所述第二部分数据追加至所述第一子分区的索引指示的第一子分区。

根据本申请的第一方面的第四或第五译码数据缓存的方法,其中,响应于接收到软判决数据的第三部分数据,若提供第三部分数据的非易失存储介质的标识访问缓存状态表得到第一表项,则丢弃所述第三部分数据。

根据本申请的第一方面的第九译码数据缓存的方法,其中,提供第三部分数据的非易失存储介质同提供第一部分数据非易失存储介质具有相同的通道编号以及不同的物理地址。

根据本申请的第一方面的第一至第十译码数据缓存的方法之一,其中,响应于收到软判决译码请求,根据软判决译码请求从子分区中读出软判决数据,发起软判决译码。

根据本申请的第一方面的第一至第十一译码数据缓存的方法之一,其中,还包括:响应于子分区存储了软判决译码所需的全部软判决数据,生成软判决译码请求。

根据本申请的第一方面的第十二译码数据缓存的方法,其中,将所述软判决译码请求添加至请求队列,所述软判决译码请求记录子分区索引;响应于从请求队列获取软判决译码请求,根据软判决译码请求记录的子分区索引从子分区中读出软判决数据,以进行软判决译码。

根据本申请的第一方面的第一至第十三译码数据缓存的方法之一,其中,响应于对第一子分区获取的软判决数据的软判决译码完成,清空缓存状态表的对应所述第一子分区的表项。

根据本申请的第一方面的第一至第十四译码数据缓存的方法之一,其中,响应于接收到软判决译码所需的全部软判决数据的第一部分数据,从空闲队列获取第一子分区索引,为所述第一部分数据分配第一子分区索引所指示的第一子分区,其中,空闲队列中记录了未存储数据的子分区的索引。

根据本申请的第一方面的第十五译码数据缓存的方法,其中,响应于对第一子分区获取的软判决数据的软判决译码完成,清空缓存状态表的对应所述第一子分区的表项,将所述第一子分区的索引添加至空闲队列。

根据本申请的第一方面的第一至第十六译码数据缓存的方法之一,其中,子分区具有指定的大小或可动态分配的大小。

根据本申请的第一方面的第一至第十四译码数据缓存的方法之一,其中,响应于接收到软判决译码所需的全部软判决数据的第一部分数据,从空闲队列获取第一节点的索引,用所述第一节点的索引对应的子分区存储所述第一部分数据,其中,节点同子分区一一对应,空闲队列记录了对应于未存储数据的子分区节点的索引。

根据本申请的第一方面的第十八译码数据缓存的方法,其中,节点包括表示节点状态的状态标志与表示下一节点地址的下一节点指针。

根据本申请的第一方面的第十九译码数据缓存的方法,其中,所述状态标志包括数据长度和提供节点对应的子分区所存储的数据的非易失存储介质的标识。

根据本申请的第一方面的第二十译码数据缓存的方法,其中,数据长度指示所述节点对应的子分区存储的软判决数据的长度。

根据本申请的第一方面的第十五至第二十一译码数据缓存的方法之一,其中,响应于接收到软判决译码所需的全部软判决数据的第一部分数据,根据提供第一部分数据的非易失存储介质的标识访问头表,若根据提供第一部分数据的非易失存储介质的标识访问头表未得到头表的表项,则从空闲队列获取第一节点的索引,用所述第一节点的索引对应的子分区存储所述第一部分数据。

根据本申请的第一方面的第二十二译码数据缓存的方法,其中,对提供第一部分数据的非易失存储介质的标识进行哈希运算,将运算结果作为访问头表的索引。

根据本申请的第一方面的第二十二或第二十三译码数据缓存的方法,其中,,若根据提供第一部分数据的非易失存储介质的标识访问头表未得到头表的表项,在头表中创建第一表项,在所述第一表项中记录所述第一节点的索引。

根据本申请的第一方面的第十五至第二十一译码数据缓存的方法之一,其中,根据提供第一部分数据的非易失存储介质的第一标识访问头表,若根据提供第一部分数据的第一标识访问头表得到头表的第一表项,则查找头表的第一表项指示的节点链表中是否有记录了所述第一标识的第一节点;若第一表项指示的节点链表中有记录了所述第一标识的第一节点,则将所述第一部分数据写入所述第一节点标识的子分区。

根据本申请的第一方面的第二十五译码数据缓存的方法,其中,第一表项指示的节点链表中不存在记录了所述第一标识的节点,则从空闲队列获取第一节点的索引,将第一节点添加到所述第一表项指示的节点链表,以及用所述第一节点的索引对应的子分区存储所述第一部分数据。

根据本申请的第一方面的第二十六译码数据缓存的方法,其中,还包括:更新所述第一节点的状态标志所记录的数据长度。

根据本申请的第一方面的第十五至第二十七译码数据缓存的方法之一,其中,响应于对第一子分区获取的软判决数据的软判决译码完成,从节点链表中删除对应第一子分区的第一节点,并且将所述第一节点的索引添加至空闲队列。

根据本申请的第一方面的第二十八译码数据缓存的方法,其中,所述方法还包括:对提供从第一子分区获取的软判决数据的非易失存储介质中的第一标识进行哈希运算,根据运算结果访问头表得到第一表项,从所述第一表项指示的节点链表中删除所述第一节点。

根据本申请的第一方面的第一至第二十九译码数据缓存的方法之一,其中,还包括:响应于收到硬判决数据,将接收的硬判决数据存储在硬判决缓存,并进行硬判决译码。

根据本申请的第一方面的第三十译码数据缓存的方法,其中,在向子分区写入软判决数据的过程中,并行对硬判决缓存中的硬判决数据进行硬判决译码。

根据本申请的第二方面,提供了根据本申请第二方面的第一译码器,包括:软判决数据写模块、软判决缓存、缓存状态表与译码单元;软判决数据写模块获取为软判决数据分配的软判决缓存的子分区,向所分配的子分区写入软判决数据;缓存状态表的表项记录子分区是否收到软判决译码所需的全部软判决数据,其中,缓存状态表的表项同软判决缓存的子分区一一对应;响应于软判决译码所需的全部软判决数据被写入子分区,译码单元对子分区中的软判决数据进行软判决译码。

根据本申请的第二方面的第一译码器,其中,所述软判决缓存包括多个子分区,每个子分区能够缓存一次软判决译码所需的全部软判决数据。

根据本申请的第二方面的第一或第二译码器,其中,响应于接收到软判决译码所需的全部软判决数据的第一部分数据,在缓存状态表中新建第一表项,在所述第一表项记录软判决缓存的第一子分区是否收到软判决译码所需的全部译码数据;软判决数据写模块将接收到软判决译码所需的全部软判决数据的第一部分数据写入所述第一子分区。

根据本申请的第二方面的第三译码器,其中,所述第一表项中记录所述第一子分区的索引和提供所述第一部分数据的非易失存储介质的标识。

根据本申请的第二方面的第四译码器,其中,非易失存储介质的标识是用于该非易失存储介质的物理地址或该非易失存储介质所耦合的通道的编号。

根据本申请的第二方面的第三至第五译码器之一,其中,响应于接收到所述全部软判决数据的第二部分数据,更新缓存状态表的所述第一表项,以在所述第一表项记录所述第一子分区是否收到所述全部软判决数据。

根据本申请的第二方面的第六译码器,其中,软判决数据写模块根据提供所述第二部分数据的非易失存储介质的标识查询缓存状态表,得到所述第一表项,从所述第一表项中获取第一子分区的索引,并将所述第二部分数据追加至所述第一子分区的索引指示的第一子分区。

根据本申请的第二方面的第三或第四译码器,其中,软判决数据写模块响应于接收到软判决数据的第三部分数据,若提供第三部分数据的非易失存储介质的标识访问缓存状态表得到第一表项,则丢弃所述第三部分数据。

根据本申请的第二方面的第八译码器,其中,提供第三部分数据的非易失存储介质同提供第一部分数据非易失存储介质具有相同的通道编号以及不同的物理地址。

根据本申请的第二方面的第一至第九译码器之一,其中,译码单元响应于收到软判决译码请求,根据软判决译码请求从子分区中读出软判决数据,进行软判决译码。

根据本申请的第二方面的第一至第十译码器之一,其中,软判决数据写模块响应于子分区存储了软判决译码所需的全部软判决数据,生成软判决译码请求。

根据本申请的第二方面的第十一译码器,其中,还包括:请求队列和软判决数据读模块;软判决数据写模块将软判决译码请求添加至请求队列,软判决译码请求记录子分区索引;软判决数据读模块响应于从请求队列获取软判决译码请求,根据软判决译码请求记录的子分区索引从子分区中读出软判决数据,并提供给译码单元。

根据本申请的第二方面的第十二译码器,其中,软判决数据读模块响应于对第一子分区获取的软判决数据的软判决译码完成,清空缓存状态表的对应所述第一子分区的表项。

根据本申请的第二方面的第十二或第十三译码器,其中,还包括:记录了未存储数据的子分区索引的空闲队列,软判决数据写模块响应于接收到软判决译码所需的全部软判决数据的第一部分数据,从空闲队列获取第一子分区索引,为所述第一部分数据分配第一子分区索引所指示的第一子分区。

根据本申请的第二方面的第十四译码器,其中,软判决数据读模块响应于对第一子分区获取的软判决数据的软判决译码完成,清空缓存状态表的对应所述第一子分区的表项,将所述第一子分区的索引添加至空闲队列。

根据本申请的第二方面的第一至第十五译码器之一,其中,子分区具有指定的大小或可动态分配的大小。

根据本申请的第二方面的第一至第十译码器之一,其中,还包括:记录了对应于未存储数据的子分区节点索引的空闲队列,软判决数据写模块响应于接收到软判决译码所需的全部软判决数据的第一部分数据,从空闲队列获取第一节点的索引,用所述第一节点的索引对应的子分区存储所述第一部分数据。

根据本申请的第二方面的第十七译码器,其中,节点包括表示节点状态的状态标志与表示下一节点地址的下一节点指针。

根据本申请的第二方面的第十八译码器,其中,所述状态标志包括数据长度和提供节点对应的子分区所存储的数据的非易失存储介质的标识。

根据本申请的第二方面的第十九译码器,其中,数据长度指示所述节点对应的子分区存储的软判决数据的长度。

根据本申请的第二方面的第十四至第二十译码器之一,其中,还包括:记录非易失存储介质标识的头表,软判决数据写模块响应于接收到软判决译码所需的全部软判决数据的第一部分数据,根据提供第一部分数据的非易失存储介质的标识访问头表,若根据提供第一部分数据的非易失存储介质的标识访问头表未得到头表的表项,则从空闲队列获取第一节点的索引,用所述第一节点的索引对应的子分区存储所述第一部分数据。

根据本申请的第二方面的第二十一译码器,其中,软判决数据写模块将对提供第一部分数据的非易失存储介质的标识进行哈希运算的结果作为访问头表的索引。

根据本申请的第二方面的第二十一或第二十二译码器,其中,软判决数据写模块若根据提供第一部分数据的非易失存储介质的标识访问头表未得到头表的表项,在头表中创建第一表项,在所述第一表项中记录所述第一节点的索引。

根据本申请的第二方面的第十四至第二十译码器之一,其中,还包括:记录非易失存储介质标识的头表和记录了节点的节点链表,所述节点记录提供软判决数据的非易失存储介质的标识;软判决数据写模块根据提供第一部分数据的非易失存储介质的第一标识访问头表,若根据提供第一部分数据的第一标识访问头表得到头表的第一表项,则查找头表的第一表项指示的节点链表中是否有记录了所述第一标识的第一节点;若第一表项指示的节点链表中有记录了所述第一标识的第一节点,则将所述第一部分数据写入所述第一节点标识的子分区。

根据本申请的第二方面的第二十四译码器,其中,若第一表项指示的节点链表中不存在记录了所述第一标识的节点,软判决数据写模块则从空闲队列获取第一节点的索引,将第一节点添加到所述第一表项指示的节点链表,以及用所述第一节点的索引对应的子分区存储所述第一部分数据。

根据本申请的第二方面的第二十五译码器,其中,软判决数据写模块更新所述第一节点的状态标志所记录的数据长度。

根据本申请的第二方面的第十四至第十六译码器之一,其中,软判决数据读模块响应于对第一子分区获取的软判决数据的软判决译码完成,从节点链表中删除对应第一子分区的第一节点,并且将所述第一节点的索引添加至空闲队列。

根据本申请的第二方面的第二十七译码器,其中,软判决数据读模块根据对提供从第一子分区获取的软判决数据的非易失存储介质中的第一标识进行哈希运算的结果访问头表得到第一表项,从所述第一表项指示的节点链表中删除所述第一节点。

根据本申请的第二方面的第一至第二十八译码器之一,其中,还包括:数据分离模块与硬判决缓存,数据分离模块响应于收到硬判决数据,将接收的硬判决数据存储在硬判决缓存;译码单元对硬判决缓存中的硬判决数据进行硬判决译码。

根据本申请的第二方面的第二十九译码器,其中,软判决缓存的容量大于硬判决缓存的容量。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1展示了译码器对来自多个通道的数据进行译码的示意图;

图2是根据本申请实施例的译码器示意图;

图3为根据本申请实施例的通道管理单元的示意图;

图4为根据本申请实施例的译码流程图;

图5为又一实施例通道管理单元的示意图;

图6为根据本申请又一实施例的译码流程图;

图7为根据本申请再一实施例通道管理单元的示意图;

图8为根据本申请再一实施例的译码流程图;

图9为根据本申请再一实施例的译码器示意图;

图10展示了根据本申请实施例的缓存状态表;

图11展示了根据本申请实施例的译码数据缓存方法的流程图;

图12展示了根据本申请实施例的译码数据处理方法的流程图;

图13展示了根据本申请又一实施例的译码器示意图;

图14展示了根据本申请再一实施例的译码器示意图;

图15展示了根据本申请实施例的头表的表项的示意图;

图16展示了根据本申请实施例的节点链表的节点的示意图;

图17展示了根据本申请实施例的头表、节点链表的示意图;

图18展示了根据本申请又一实施例提供的译码数据缓存的方法的流程图;

图19展示了根据本申请又一实施例的译码数据处理方法的流程图。

具体实施方式

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

图2是根据本申请实施例的译码器示意图。

本申请实施例的译码器包括数据获取单元210、通道管理单元220与译码单元230。

译码器对来自多个通道的数据进行译码。译码器通过数据获取单元210耦合到多个通道,并接收来自第一通道至第n通道的待译码数据。数据获取单元210将获取来的各个通道的数据提供给通道管理单元220。通道管理单元220利用硬判决缓存221和软判决缓存222分别存储硬判决数据和软判决数据,译码单元230对从硬判决缓存221或软判决缓存222获取的数据进行译码。

通道管理单元220包括硬判决缓存221和软判决缓存222。通道管理单元222还包括数据分离模块223和数据选择模块224。数据分离模块223将硬判决数据分存储硬判决缓存221,软判决数据存储到软判决缓存222。数据选择模块224选择硬判决缓存221或软判决缓存222之一的数据并指示译码单元230对所选择的数据进行译码。

软判决缓存222的容量较大,能容纳一次或多次软判决译码所需的全部软判决数据。相对的,硬判决缓存221的容量较小,例如,能容纳一次或多次硬判决译码所需的硬判决数据。可选地,软判决缓存222包括多个子分区,每个子分区可以缓存一次软判决译码所需的全部软判决数据,这样软判决缓存222能存储多次软判决译码所需的全部软判决数据。

在硬判决译码所需的硬判决数据被存储在硬判决缓存221,和/或软判决译码所需的全部软判决数据被存储在软判决缓存222的情况下,才指示译码单元230进行译码。而在一次软判决译码所需的全部软判决数据尚未被完整的存储在软判决缓存222前,不指示译码单元230对该软判决数据进行译码,从而避免不完整的软判决数据占用译码单元230给译码单元230造成的大量等待时间,但可指示译码单元230对硬判决数据进行译码,也使得硬判决数据被译码的机会增多,减少了硬判决译码的延迟,从而提高译码效率。

图3为根据本申请实施例的通道管理单元的示意图。

数据分离模块323将来自数据获取单元(例如,参看图2,数据获取单元210)的软判决数据和硬判决数据存储到不同的缓存,将硬判决数据存储在硬判决缓存321中,将软判决数据存储在软判决缓存322中。

数据选择单元324从硬判决缓存321或软判决缓存322获取硬判决数据或软判决数据,提供给译码单元(例如,参看图2,译码单元230)进行译码。例如,硬判决缓存321实现为队列结构,数据分离模块323将硬判决数据写入硬判决缓存321的队尾,而数据选择单元324从硬判决缓存321的队头取出硬判决数据。可选地,软判决缓存322也实现为队列,队列的条目是软判决缓存322的子分区或子分区的索引。

在可选的实施方式中,数据选择单元324优先从硬判决缓存321获取硬判决数据并由译码单元230进行硬判决译码,以缩短硬判决数据等待译码的时间。数据选择单元324以低优先级处理软判决缓存322中的数据。

仅当软判决缓存322或其子分区中存储了用于软判决译码所需的全部软判决数据后,数据选择单元324才用软判决缓存322获取用于软判决译码所需的全部软判决数据并由译码单元230进行软判决译码。

在可选的实施方式中,用于软判决译码所需的全部软判决数据的各个部分被从同一通道连续读出。从一通道读出用于软判决译码所需的全部软判决数据的各个部分期间,从该通道上没有其他数据被读出。因而根据读出软判决数据的通道确定所使用的子分区,将来自同一通道的软判决数据的连续的多个部分存储在相同的子分区。

图4为根据本申请实施例的译码流程图。

接收数据(410),判断当前数据是否为硬判决数据(420),如果是,则将当前数据写入硬判决缓存(430)。如果当前数据是软判决数据,则将当前数据写入软判决缓存(440)。一般情况下,每次从通道接收的软判决数据是用于软判决译码所需的全部软判决数据的部分。通过多次从通道接收软判决数据来得到用于软判决译码所需的全部软判决数据。选择对硬判决译码所需的硬判决数据或软判决译码所需的全部软判决数据进行译码(450)。

图5为又一实施例通道管理单元的示意图。

数据分离模块523将来自数据处理单元(例如,参看图2,数据获取单元210)的软判决数据和硬判决数据存储到不同的缓存,将硬判决数据存储在硬判决缓存521中,将软判决数据存储在软判决缓存522中。

作为举例,若对硬判决缓存521中位置1的数据做硬判决译码失败,通过软判决译码来尝试得到正确数据。硬判决缓存521中的位置1的数据是从nvm芯片的地址p1读出的硬判决数据。作为对硬判决译码失败的响应,从地址p1读出软判决数据,并存储在软判决缓存522。从地址p1读出的用于软判决译码所需的全部软判决数据包括数据1a与数据1b,并将其存储在软判决缓存522的同一个子分区中。可选地,每次从地址p1读出用于软判决译码所需的全部软判决数据的部分,例如,第一次从地址p1读出数据1a,而第二次从地址p1读出数据1b。在读出数据1a时,为其分配空闲子分区,而在读出数据1b时,将其追加到分配给数据1a的子分区。

可选的,在从地址p1读出软判决数据期间,硬判决缓存521能接收其他需要进行硬判决译码的数据,数据选择单元524能从硬判决缓存521获取硬判决数据并由译码单元(例如,参看图2,译码单元230)进行硬判决译码,也能从软判决缓存522获取软判决数据并由译码单元230进行软判决译码。当地址p1的软判决数据被全部读出至软判决缓存522后,数据选择单元524可发起对该软判决数据的软判决译码请求。

图6为根据本申请又一实施例的译码流程图。

接收数据(610),判断当前数据是否为硬判决数据(620),如果是,则将当前数据写入硬判决缓存(630)。如果当前数据是软判决数据,则将当前数据写入软判决缓存(640)。选择对硬判决译码所需的硬判决数据或软判决译码所需的全部软判决数据进行译码(650)。判断硬判决译码是否成功(660),如果硬判决译码失败,从当前数据在nvm芯片中的地址中读出软判决数据(670)。

图7为根据本申请再一实施例通道管理单元的示意图。

数据分离模块723将来自数据处理单元的软判决数据和硬判决数据存储到不同的缓存,将硬判决数据存储在硬判决缓存721中,将软判决数据存储在软判决缓存722中。

作为举例,若对硬判决缓存721中位置1的数据做硬判决译码失败,通过软判决译码来尝试得到正确数据。硬判决缓存721中的位置1的数据是从nvm芯片的地址p2读出的硬判决数据。作为对硬判决译码失败的响应,将硬判决缓存721位置1的数据搬移到软判决缓存722(位置1)。以及从地址p2读出软判决数据,并存储在软判决缓存722。

对应于地址p2的软判决数据包括例如三部分,其中一部分同硬判决缓存721的位置1的数据相同,因而在软判决缓存722中分配新的子分区(记为第一子分区),将硬判决缓存721的位置1的数据搬移到软判决缓存722的第一子分区的位置1,而不必再从地址p2读出该数据。以及将地址p2的其他软判决数据分2次读出并分别存储在软判决缓存722的第一子分区的位置1’与位置1”。软判决缓存722的位置1、位置1’与位置1”属于同一子分区。

可选的,在从地址p2读出软判决数据期间,硬判决缓存721能接收其他需要进行硬判决译码的数据,数据选择单元724能从硬判决缓存721获取硬判决数据并由译码单元进行硬判决译码,也能从软判决缓存722获取第一子分区之外的其他子分区的软判决数据并由译码单元进行软判决译码。

图8为根据本申请再一实施例的译码流程图。

接收数据(810),判断当前数据是否为硬判决数据(820),如果是,则将当前数据写入硬判决缓存(830)。如果当前数据是软判决数据,则将当前数据写入软判决缓存(840)。选择对硬判决译码所需的硬判决数据或软判决译码所需的全部软判决数据进行译码(850)。判断硬判决译码是否成功(860),如果硬判决译码失败,则在软判决缓存中分配新的子分区,将当前硬判决数据搬移到软判决缓存的新子分区,还请求获取当前硬判决数据对应的其他软判决数据(870)。

图9是根据本申请再一实施例的译码器示意图。

译码器包括:软判决数据写模块930、软判决缓存940、缓存状态表950与译码单元(图中未示出)。

软判决数据写模块930将软判决数据写入软判决缓存940,并且在缓存状态表950中记录软判决缓存940的使用情况。

例如:软判决数据写模块930需要将新的一组软判决数据写入软判决缓存940时,在缓存状态表950中创建一个新表项1’,表项1’为该组软判决数据分配软判决缓存940的子分区1,将该组软判决数据写入子分区1;并且,将该组软判决数据写入子分区1的情况记录在缓存状态表950中新建的表项1’中,也参看图10。

图10展示了根据本申请实施例的缓存状态表。

缓存状态表950包括多个表项,例如:表项1’、表项2’、表项3’……表项n’。表项数量与软判决缓存940的子分区数量相同。缓存状态表的每个表项表示子分区的使用状态,例如:表项1’中记录子分区1的使用状态,表项2’中记录子分区2的使用状态,表项3’中记录子分区3的使用状态,直至表项n’记录子分区n的使用状态。使用状态例如用于记录子分区是否收到软判决译码所需要的全部软判决数据。依然作为举例,每个表项记录与其对应的子分区所存储的软译码数据所来自的nvm芯片的地址与数据长度。通过数据长度识别子分区是否已存储了用于软判决译码所需的全部软判决数据。

作为举例,如图10所示,将子分区1的id和nvm芯片地址1记录在新建的表项1’,以在缓存状态表950中记录子分区1存储来自nvm芯片地址1的软判决数据。作为又一举例,表项1’中记录的可以是子分区1的编号作为子分区1的索引,或者记录子分区1的存储空间起始地址。依然作为举例,表项1’记录通道编号,以替代nvm芯片地址1。

在另一个例子中,软判决数据写模块930将用于软判决译码所需的全部软判决数据的其他部分,写入为该全部软判决数据的第一部分所分配的子分区。例如,已经将一组软判决数据的第一部分写入软判决缓存940的子分区2,并且在缓存状态表950中的表项2’中记录了子分区2与该组软判决数据的对应关系。软判决数据写模块930根据提供所接收的软判决数据的部分的nvm芯片地址或通道号查询缓存状态表950,得到子分区2的索引,从而将所接收的软判决数据的部分追加至子分区2’,并更新缓存状态表950的表项2’,从而在表项2’中记录了子分区2已经接收了软判决数据的2部分,或者记录子分区2是否存储了软判决译码所需的全部软判决数据。

在根据本申请的又一个例子中,根据获取软判决数据的通道来分配缓存状态表的表项。在创建了缓存状态表950的新表项后,若收到来自相同通道的软判决数据的其他部分,将收到的其他部分数据追加到该新表项所指示的子分区。例如,若为来自第一通道的软判决译码数据的第一部分分配了缓存状态表的表项3’,在又从第一通道收到软判决译码数据的部分时,根据第一通道获取该表项3’,将所接收的数据追加到由该表项3’所指示的子分区3。来自同一通道的用于软判决译码所需的全部软判决数据的各个部分被连续读出。因而根据读出软判决数据的通道编号确定缓存状态表950的表项,进而获得分配给来自该通道的用于软判决译码所需的全部软判决数据的子分区。

在又一个例子中,软判决数据写模块930根据通道编号与nvm芯片的地址来访问缓存状态表950。若接收到来自相同通道的具有不同物理地址的软判决数据,则丢弃在后收到的该通道上的软判决数据。例如,已经将来自第2通道的软判决数据缓存至子分区3,并且表项3’中记录了子分区3的id、第2通道的编号和nvm芯片地址,待再次收到来自第2通道的软判决数据,通过而表项3’中记录的nvm芯片的地址不同于提供接收的软判决数据的nvm芯片地址,则丢弃在后收到的该通道上的软判决数据。

请继续参阅图9,硬判决缓存980用于对接收到的硬判决数据进行缓存。

译码器一般既会对硬判决数据进行硬判决译码,也会对软判决数据进行软判决译码。为了区分硬判决数据和软判决数据以分别对硬判决数据和软判决数据进行缓存,译码器还包括数据分离模块910和数据选择模块920。

数据分离模块910用于将来自不同通道的软判决数据和硬判决数据分发至不同的缓存。例如:数据分离模块910将来自通道1、通道2……通道n的软判决数据和硬判决数据分离;并且将其中的软判决数据传输至软判决数据写模块930,以通过软判决数据写模块930将软判决数据缓存至软判决缓存940;将其中的硬判决数据直接缓存至硬判决缓存980。

数据选择模块920选择自软判决缓存940的软判决数据或来自硬判决缓存980的硬判决数据提供给译码单元进行软判决译码或硬判决译码。

译码器还包括软判决数据读模块970和请求队列960。一组软判决数据完全缓存至软判决缓存940后,软判决数据写模块910生成软判决译码请求,并将软判决译码请求添加至请求队列960。软判决译码请求中记录有子分区的id和软判决数据长度。作为举例,请求队列960中可以按照生成时间顺序排列多个软判决译码请求,标记为黑色的软判决译码请求为即将或者是正在被处理的译码请求,而标记为白色的软判决译码请求为正在等待处理的译码请求。

软判决数据读模块970按照请求队列960中获取的软判决译码请求,从软判决缓存940中读出软判决数据并提供给数据选择模块920。待译码器对软判决数据译码完成后,软判决数据读模块920清空缓存状态表950中相应表项。

之前软判决数据会独占译码核心单元,每次读数据之间有很大的空闲时间,即使其它通道的硬判决数据已经准备完成(从存储器读出)也无法使用译码单元,现在将硬判决译码和软判决译码分成两条路径,同时规定硬判决译码具有高优先级,而软判决译码只有全部数据缓存完成,才发起译码请求,把译码单元空闲时间减少到零,硬判决数据被调度的机会增多,减少了多余的等待时间,从而提高译码效率,同时保证硬判决数据不会被阻塞。

图11展示了根据本申请实施例的译码数据缓存方法的流程图。

数据分离模块(也参看图9,数据分离模块910)接收来自不同通道的数据(1110)。判断接收到的数据是软判决数据,还是硬判决数据(1120)。若数据分离模块接收到的数据是硬判决数据,则将硬判决数据写入硬判决缓存(1130),硬判决数据全部写入硬判决缓存后,对硬判决数据进行硬判决译码。

若数据分离模块接收到的数据是软判决数据,判断接收到的软判决数据是否为一组新的软判决数据(1140),也就是判断软判决缓存中是否已经缓存有接收到的该组软判决数据的部分。

若软判决缓存中未存储该软判决数据,说明该软判决数据是一组新的软判决数据,则为该组新的软判决数据在软判决缓存中分配子分区,并在缓存状态表中创建新表项(1150),并将软判决数据写入分配的子分区中(1170)。例如:在缓存状态表的表项中记录软判决数据存储的子分区地址,与提供软判决数据的nvm芯片的地址。接收到软判决数据后,通过软判决数据在nvm芯片的地址查询缓存状态表中的表项,若缓存状态表中未记录该非易失存储介质的地址,则说明该软判决数据为新软判决数据,为新软判决数据分配子分区以存储软判决数据,并且创建新表项以记录软判决数据的存储情况。

若软判决缓存中已经存储有该组软判决数据的一部分数据,则更新缓存状态表的相应表项(1160),并将接收到的该组软判决数据的另一部分数据追加存储至存储该部分数据的子分区中(1170)。作为举例,接收到一组软判决数据的部分数据后,通过所接收数据在nvm芯片中的地址查询缓存状态表,得到相应的表项,获取该表项中记录的子分区,然后将所接收的数据追加至该子分区中,并且更该表项以记录软判决数据的存储情况。

通过缓存状态表的表项,判断是否一组软判决数据是否全部被缓存至软判决缓存(1180)。若该组软判决数据完全缓存至软判决缓存,发送软判决译码请求(1190),软判决数据的缓存阶段结束。

图12展示了根据本申请实施例的译码数据处理方法的流程图。

软判决数据读模块(也参看图9,软判决数据读模块970)接收软判决译码请求(1210),从软判决缓存中的相应子分区中读出软判决数据(1220)以提供给译码器进行软判决译码。待译码器完成译码后,软判决数据读模块删除缓存状态表中相应表项(1230),至此软判决译码结束。

图13展示了根据本申请又一实施例的译码器示意图。其中,译码器的数据分离模块1310、数据选择模块1320、软判决缓存1340、请求队列1360、和硬判决缓存980与图9中的相应部件相同。

译码器还包括空闲队列1390。空闲队列1390记录软判决缓存1340的空闲子分区。

作为举例,空闲队列1390中记录空闲子分区的索引,例如空闲子分区的id或空闲子分区的编号。其中,未存储数据的子分区为空闲子分区,其id为空闲子分区id。空闲队列1390的条目中记录空闲子分区的id。其中,子分区id指示了例如在存储设备的ddr存储器中的存储空间(子分区)。子分区具有例如指定的大小,或者可动态分配的大小。

软判决数据写模块1330开始将新的一组软判决数据写入软判决缓存1340的时候,为软判决数据分配子分区。

具体的,从空闲队列1390取出一个空闲子分区id,空闲队列1390中标记为黑色的条目为即将或者是正在被取出的空闲子分区id,而标记为白色的为尚未被使用的空闲子分区id。将软判决数据写入该子分区id所对应的子分区中,并且将该子分区的使用情况记录在缓存状态表1350中。

待软判决数据读模块1370将软判决数据完全读出软判决缓存1340的子分区后,清空缓存状态表1350中记录该子分区的表项,将所使用的子分区id添加到空闲队列1390以释放子分区id。

空闲队列1390的引入,使软判决缓存1340的各子分区能够被动态分配给各个软判决数据。并且,也能够动态调整软判决缓存1340的容量。从而在nvm芯片的生命周期的早期,通过为空闲队列1390设置较少数量的子分区id来给软判决译码的数据缓存分配较小容量,随nvm芯片的生命周期走向末期,可以通过不断向空闲队列1390中添加新的空闲子分区id,来增加软判决缓存的容量,并且提高软判决缓存占用的存储空间大小的灵活性。

在用于io命令的数据缓存是存储设备性能瓶颈的阶段(例如生命周期早期),将存储设备的存储器资源更多分配用来缓存io命令的数据,而较少分配给软判决译码。在软判决译码是存储设备性能瓶颈的阶段(例如,生命周期末期),将存储设备的存储器资源更多分配给软判决译码的数据缓存,来提升软比特译码的处理能力。

图14展示了根据本申请再一实施例的译码器示意图。其中,译码器除包括软判决数据写模块1430、软判决数据读模块1470之外,还包括软判决缓存、缓存状态表、请求队列和硬判决缓存,其功能与图13中相应部件功能相同。

译码器还包括空闲队列1490,空闲队列1490记录空闲子分区节点索引(节点编号)。软判决缓存被划分为多个子分区,每个子分区可以缓存一份完整的软判决数据。所有子分区节点被记录在节点表。每个子分区由节点表中的一个节点标识。根据节点表的节点能够得到子分区的地址,例如,子分区地址=基地址+节点索引*子分区大小。作为又一个例子,节点表的节点中记录了对应子分区的地址。

根据本申请的实施例,译码器还维护一个或多个节点链表。节点链表包括多个节点,节点链表的每个节点索引子分区节点。从而子分区节点被记录在节点表中,而根据节点链表的节点能获取子分区节点。节点链表中的节点索引的子分区节点是已被分配来存储软译码数据的子分区的子分区节点。

软判决数据写模块1430为将软判决数据写入软判决缓存,从空闲队列1490中取出一个子分区节点索引,以为软判决数据分配子分区节点索引对应的子分区。待软判决数据读模块1470将软判决数据完全读出软判决缓存后,将所使用的子分区节点索引添加到空闲队列1490以释放子分区节点索引及其对应的子分区。

另外,译码器还包括头表1410和节点表1420。

图15展示了根据本申请实施例的头表的表项的示意图。作为举例,头表的每个表项包括:有效标志1510和头节点地址1520。有效标志1510记录头节点地址1520对应节点是否有效;头节点地址1520记录节点链表的头节点的索引。节点链表的头节点包括例如子分区节点的索引。

请继续参阅图14,软判决数据写模块1430接收到软判决数据后,头处理模块1440根据软判决数据在nvm芯片中的地址的标识,索引头表1410。作为举例,nvm芯片中的地址的标识包括通道号、nvm芯片中的地址的部分或全部比特、nvm芯片中的地址的部分或全部比特经过转换后的值、或者nvm芯片中的地址的部分或全部比特的哈希值。

作为举例,若在头表中未查找到对应于相应的软判决数据在nvm芯片中的地址的标识的表项,则说明软判决缓存中未存储来自该nvm芯片中的地址的软判决数据。那么节点处理模块1450为该软判决数据分配子分区,以及创建节点链表。具体的,从空闲队列1490中取出一个空闲子分区节点索引,将软判决数据存储在该子分区节点索引对应的软判决缓存中。并且,创建节点链表的头节点,该头节点索引了该被分配的空闲子分区节点。从而,使得该空闲子分区节点被所创建的节点链表的节点所索引。以及在头表1410中创建一个新的表项,在新表项中记录所创建的节点链表的头节点的索引。

作为又一例子,在头表1410中查找到对应于该软判决数据在nvm芯片中的地址的标识的表项,则根据该表项中记录的节点链表的头节点地址遍历该节点链表,以在该节点链表中查找是否有记录了该软判决数据在nvm芯片中的地址的节点。

若节点链表中存在索引了相应子分区节点的节点,则说明来自相同nvm芯片的地址的软判决数据的部分之前已被写入对应的子分区,则将接收的软判决数据部分也写入该子分区。若节点链表中不存在索引了相应的子分区节点的节点,则从空闲队列中获取空闲子分区的子分区节点索引,创建节点链表的节点,在所创建的节点中记录分配的空闲子分区节点的索引,将创建的节点添加至头表表项指示的节点链表,将接收的软判决数据部分写入该空闲子分区节点对应的子分区中,并且更新该节点链表节点的状态标志所指示的数据长度。

图16展示了根据本申请实施例的节点链表的节点的示意图。

每个节点包括有效标志1610、状态标志1620和下一节点指针1630。其中,有效标志1610记录当前节点是否有效。下一节点指针1630表示下一节点地址。状态标志1620表示节点状态。状态标志1620的非易失存储介质的标识指示该节点索引的子分区存储的软判决数据在nvm芯片中的物理地址,状态标志1620的数据长度是该节点索引的子分区存储的软判决数据长度,状态标志1620的子分区地址是该节点索引的子分区的地址。可选的,状态标志1620不记录子分区地址,而根据该节点的在节点表中的索引计算得到子分区地址。

请继续参阅图14,软判决数据读模块1470将软判决译码的数据全部从软判决缓存的子分区读出后,从节点链表中删除对应于该子分区的节点,并且将该子分区对应的子分区节点的索引添加至空闲队列。例如,软判决数据读模块1470根据提供软判决数据的nvm芯片地址访问头表,并遍历头表的表项所指示的节点链表,从节点链表中找到记录了该nvm芯片地址的节点,并将该节点从节点链表中删除。若删除了节点后的节点链表不再包括任何节点,还删除该节点链表在头表中的表项。

图17展示了根据本申请实施例的头表、节点链表的示意图。

头表1710包括多个表项,头表表项索引了节点表1720中节点链表的头节点。例如,头表1710的表项0索引了节点链表0’,头表1710的表项3索引了节点链表3’,头表1710的表项7索引了节点链表7’。

例如,软判决数据写模块根据提供软判决数据的nvm芯片的地址(ppa5)的标识访问头表获得表项3,根据表项3中记录的节点链表的头节点索引遍历节点链表3’,并找到记录了该提供软判决数据的nvm芯片的地址(ppa5)的节点31’,根据该节点31’中记录的子分区索引(id5)将软判决数据写入索引为(id5)的子分区中,以及更新节点31’的“长度”(数据长度)字段。又一例子,软判决数据写模块根据提供软判决数据的非易失存储介质的地址访问头表获得表项1,表项1对应的节点链表中未记录相应的节点,则从空闲队列中获取空闲子分区节点索引,创建节点链表的节点作为头节点,将获取的该空闲子分区节点索引添加所创建的节点链表的头节点,并更新头表表项1,使得头表表项1指示的所创建的头节点,以及将软判决数据写入获取的该空闲子分区节点索引所指示的子分区中,并且更新该头节点的状态标志所记录的数据长度。

图18展示了根据本申请又一实施例提供的译码数据缓存的方法的流程图。

接收软判决数据(1810),并获取所接收的软判决数据在nvm芯片地址(1815)。对存储该软判决数据的nvm芯片地址进行例如哈希运算(1820),并将哈希运算的结果作为索引访问头表(1825),判断头表中是否有对应于nvm芯片地址的哈希运算结果的表项(1830)。

若在头表中未找到对应哈希运算结果的表项,则说明软判决缓存中未存储来自该nvm芯片地址的软判决数据,那么在从空闲队列获取一个空闲子分区节点索引(1835)。根据获取的空闲子分区节点索引创建节点链表的头节点,在头表中创建一个新的表项指示所创建的头节点(1840),在新表项中记录哈希运算结果,并且用获取的该空闲子分区节点索引更新所创建的头表表项指示的节点链表的头节点。将软判决数据写入软判决缓存中该空闲子分区节点索引对应的软判决缓存的子分区(1865)。

若在头表中找到对应哈希运算结果的表项,则进一步遍历头表指示的节点链表,查询节点链表中是否存在被命中的节点(1845)。

若在节点链表中未查询到被命中的节点,从空闲队列中获取空闲子分区的节点索引(1850),在节点链表中加入新节点并在新节点中记录所获取的空闲子分区的节点索引(1855),并且将软判决数据写入软判决缓存中该空闲子分区的节点索引对应的子分区(1865)。

若在节点链表中查询到被命中的节点,更新节点链表中被命中的节点(1860),例如更新节点中的数据长度。并且将软判决数据写入软判决缓存中该被命中节点的子分区地址对应的子分区(1865)。

图19展示了根据本申请又一实施例的译码数据处理方法的流程图。

从软判决缓存中读出软判决译码所需的全部软判决数据(1910),并获取读出的软判决数据在nvm芯片地址(1920)。对存储该软判决数据的nvm芯片地址进行哈希运算(1930),并将哈希运算的结果作为索引访问头表(1940),得到相应的头表表项。从该表项指示的节点链表中删除指示了存储所读取的软判决数据的子分区的节点(1950)。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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