二进制对称不变乘积码编码的码字的有效纠错

文档序号:411871 发布日期:2021-12-17 浏览:45次 >En<

阅读说明:本技术 二进制对称不变乘积码编码的码字的有效纠错 (Efficient error correction of binary symmetric invariant product code coded codewords ) 是由 C·坎普 M·斯坦尼萨维奇 R·A·塞浦路斯 于 2020-06-03 设计创作,主要内容包括:一种用于对二进制对称不变乘积码进行解码的解码器,包括具有正交第一维和第二维的数据阵列。数据阵列被配置为仅沿第一维访问其中缓冲的二进制对称不变乘积码。解码器还包括用于存储错误位置的错误存储阵列和被配置为检测和校正沿第一维从数据阵列访问的数据中的错误并将沿第二维的错误位置存储在错误存储阵列中的第一校正电路。第一校正电路基于对称不变乘积码的数据对称性确定错误位置。解码器还包括第二校正电路,在第一校正电路接收沿第一维从数据阵列访问的数据之前基于存储在错误存储阵列中的错误位置校正从数据阵列访问的数据。(A decoder for decoding a binary symmetric invariant product code includes a data array having orthogonal first and second dimensions. The data array is configured to access the binary symmetric invariant product codes buffered therein only along the first dimension. The decoder also includes an error storage array for storing error locations and a first correction circuit configured to detect and correct errors in data accessed from the data array along a first dimension and to store error locations along a second dimension in the error storage array. The first correction circuit determines an error location based on data symmetry of the symmetric-invariant product code. The decoder also includes a second correction circuit that corrects data accessed from the data array based on the location of the error stored in the error storage array before the first correction circuit receives the data accessed from the data array along the first dimension.)

二进制对称不变乘积码编码的码字的有效纠错

背景技术

本公开涉及数据处理,并且更具体地,涉及例如在数据存储系统或数据通信系统中利用二进制对称不变乘积码(例如,半乘积码)编码的数据的有效纠错。

数据存储系统和数据通信系统中采用纠错编码以提高可以从数据信道恢复数据的准确性。通过在将数据提供给信道之前根据纠错码(ECC)对数据进行编码,可以在取决于ECC特性的程度上识别和纠正位于信道输出的错误。许多这样的ECC方案是已知的。一类众所周知的ECC方案是基于乘积码的。乘积码使用两个组件ECC码对输入数据的名义二维数组的行和列进行编码。

图1示意性地示出了传统乘积码的基本结构。输入数据符号(其通常可以是qary符号,具有q个可能的符号值,其中q≧2)被分配给具有n2行和n1列符号位置的名义阵列中的各个符号位置。在该示例中,k2×k1个数据符号被分配到k2×k1子阵列中位于n2×n1阵列的前k2行和前k1列的交叉处的各个位置。通过对数组的行和列分别进行编码来对生成的输入数据符号数组进行编码。第一ECC码C1用于将阵列的每一行中的ki-符号数据字编码为长度为n1的C1码字。该示例使用系统编码,由此输入数据保留在码字中。具体地,C1码字的n1个码元是通过在给定行中的k1-符号数据字之后添加(n1-k1)个奇偶校验码而获得的。然后使用第二个ECC码C2将阵列每列中的k2个符号编码为长度为n2的C2码字,这里通过在每列的末尾添加(n2-k2)个奇偶校验符号。数组中得到的n2×n1个码符号形成乘积码的输出码字。在此基本思想的扩展中,交错乘积码将C2码应用于数组的s>1个均匀间隔的列,从而产生n1/s个C2码字。

乘积码可以提供实用的编码器/解码器实现,它们的解码器是基于硬判决的,因此避免了与软判决解码相关联的各种复杂性和延迟问题。一些用于交错乘积码的解码器使用基于从基本码结构定义的图形的迭代解码技术。简而言之,二部图可以定义为具有n2个右节点,每个节点对应一个C1码字,以及n1/s个左节点对应于各自的C2码字。每个右节点通过s条边连接到每个左节点。连接一对节点的s条边代表上述概念阵列中那些节点的C1和C2码字交叉处的s个公共符号。通过对C1码字进行一一解码,然后对C2码字一一解码,基于图进行迭代解码。每次成功解码一个码字时,都会纠正离开适当节点的边缘。该过程迭代直到解码完成,即解码器不再检测到错误或达到预定的最大迭代次数,在这种情况下,解码器可以声明解码失败。

在J.Justesen,“Error Correcting coding for OTN(OTN纠错编码)”,IEEECommunications Magazine,2010年9月和J.Justesen,Performance of Product Codesand Related Structures with Iterative Decoding(乘积码和相关结构的迭代解码性能),IEEE Transactions on Communications,2011。这些码称为半乘积码(HPC),是对行码C1和列码C2使用相同码的乘积码。如果每个分量码C1和C2是码长(即一个码字中的符号数)为n,维数(即编码到每个码字中的数据符号数)为k的比率k/n码,则生成的乘积码C的长度为N=n2,维数为K=k2,比率为(k/n)2。C的码字可以由对应于上述概念数组的(n×n)-符号矩阵X来定义,其中X的每一行和每一列是行/列码的码字。对应的半乘积码CH则定义为CH={X-XT:X∈C},其中XT是X的转置矩阵。

注意,如果X是码字,则XT也是码字,因为行码和列码相同。通过构造,CH的每个码字YH的主对角线为零(尽管任一主对角线都可以是零主对角线,但零主对角线在本文中被定义为从右上符号到左下符号跨(n×n)-符号矩阵YH对角延伸的符号线)。也就是说,零主对角线上的所有符号的值都为零。由于根据CH的定义,YH=YH T,三角形子阵列中零主对角线每一边的n(n-1)/2个符号的集合是相同的。这些n(n-1)/2个符号因此定义了码字YH,使得半乘积码具有NH=n(n-1)/2的有效长度。对于HPC,编码和迭代解码通常以与乘积码相同的方式执行,但输入数据仅限于零主对角线一侧的三角形子阵列,因此HPC的维数为KH=k(k-1)/2。

图2中示出了示例性现有技术HPC 200。为了形成HPC 200,原始输入数据204被放置在零主对角线202下方的方形阵列中。然后通过复制原始输入数据204、转置原始输入数据并将所得数据放置在零主对角线202之上来形成对称复制数据206。然后为每行和每列单独计算奇偶校验数据208(例如,利用Bose-Chaudhuri-Hocquenghem(BCH)纠错函数)。编码后,由于数据对称,只需要存储和/或传输零主对角线202上方或下方的阵列部分。

当从存储器检索数据或经由数据传输接收数据时,可以通过复制和转置检索/接收的数据以填充阵列来重构HPC 200。因此,在数据的存储、保留、检索和/或传输过程中出现的任何错误也将关于重构阵列的零主对角线对称,如图3所示。在传统解码过程中(即迭代处理行和列以纠正行和列错误的纠错过程),阵列中的数据首先以行格式访问,然后以列格式访问。

在现实世界的实现中,标准软件方法通常不复制CPU存储器中的数据,而是仅对一组数据进行操作并受益于重复错误的隐式校正。假设在图3中,从数组的底部到顶部处理行。如果每个位只有一个副本存储在CPU内存中,则纠正包含A、B和C处错误的行会固有地导致包含这些位值的三个后续行中的A、B和C的值正确。虽然看似高效,但这种基于软件的方法比基于硬件的解决方案具有更高的延迟,因此不适合真正高性能的应用。

为了实现高性能解码,HPC解码的硬件实现通常会在存储器中形成完整的HPC阵列(包括重复数据206)并然后逐一迭代解码每一行,然后逐一解码每一列。虽然这种方法提供了比传统软件实现更高的性能,本公开认识到能够以行和列格式访问数据的电路非常昂贵。本公开还认识到,常规硬件实现需要独立读取和校正行数据和列数据,这意味着硬件HPC解码实现没有受益于阵列对称性。

发明内容

在至少一个实施例中,解码器在硬件中对由二进制对称不变乘积码(例如半乘积码(HPC))编码的码字执行迭代解码。仅沿数据阵列的第一维访问缓存在数据阵列中的对称不变乘积码,并通过纠错电路检测和纠正对称不变乘积码的数据中的错误。当检测到错误时,数据阵列的正交第二维的错误位置被存储在错误存储阵列中,其中错误位置是基于对称不变乘积码的已知数据对称性来确定的。基于存储的错误位置,当从数据阵列访问数据并将数据发送到纠错电路时,会“即时”纠正错误。

根据一个方面,提供了一种用于对二进制对称不变乘积码进行解码的解码器,该解码器包括电路,该电路包括:具有正交的第一维和第二维的数据阵列,其中该数据阵列被配置为仅沿第一维访问在其中缓冲的二进制对称不变乘积码;用于存储错误位置的错误存储阵列;第一校正电路被配置为检测并校正沿第一维从数据阵列访问的数据中的错误,并将沿第二维的错误位置存储在错误存储阵列中,其中,第一校正电路基于对称不变乘积码的数据对称性确定错误位置;并且在第一校正电路接收沿第一维从数据阵列访问的数据之前,第二校正电路基于存储在错误存储阵列中的错误位置校正从数据阵列访问的数据。

根据另一方面,提供了一种对二进制对称不变乘积码进行解码的方法,该方法包括:仅沿第一维访问在具有正交的第一和第二维的数据阵列中缓冲的二进制对称不变乘积代码;第一校正电路检测并校正沿第一维从数据阵列访问的数据中的错误;第一校正电路基于对称不变乘积码的数据对称性确定错误存储阵列中沿第二维的错误位置,并将错误位置存储在错误存储阵列中;并且在第一校正电路接收沿第一维从数据阵列访问的数据之前,第二校正电路基于存储在错误存储阵列中的错误位置校正从数据阵列访问的数据。

根据另一方面,提供了一种包括程序代码装置的计算机程序,当程序在计算机上运行时,该程序代码装置适于执行前一段描述的方法。

附图说明

现在将参考附图仅通过示例的方式描述本发明的优选实施例,其中:

图1示出了现有技术的乘积码;

图2示出了现有技术的半乘积码(HPC);

图3示出了包含对称数据错误的现有技术HPC;

图4是根据一个实施例的数据存储系统的高级框图;

图5是根据一个实施例的数据通信系统的高级框图;

图6-7示出了图4的数据存储系统的示例性实施方式;

图8示出了根据一个实施例的示例性解码器;

图9是根据一个实施例的解码器对二进制对称不变乘积码进行解码的示例性过程的高级逻辑流程图;和

图10-13示出了根据一个实施例的解码器在示例性HPC中的错误校正。

具体实施方式

根据至少一个实施例,本申请涉及一种解码器,该解码器在硬件电路中对由二进制对称不变乘积码(例如半乘积码(HPC))编码的码字执行迭代解码。缓存在数据阵列中的对称不变乘积码仅沿数据阵列的第一维访问,并且对称不变乘积码的数据中的错误由第一校正电路检测和校正。当检测到错误时,数据阵列的正交第二维的错误位置被存储在错误存储阵列中,其中错误位置是基于对称不变乘积码的已知数据对称性来确定的。基于存储的错误位置,当从数据阵列访问数据并将数据发送到第一校正电路时,第二校正电路会“即时”校正错误。该申请进一步涉及相关方法和程序产品。

虽然本文所述的解决方案可以应用于如上所述的常规HPC,应当理解,这里公开的解决方案也适用于由每行多于一种类型的分量码和每列多于一种类型的分量码形成的对称不变乘积码。类似地,通过在代码构造中使用一种以上的组件码,可以获得HPC的进一步扩展。例如,可以使用相同长度n但具有不同纠错能力t1和t2的两种类型的分量码。在HPC情况下,可以要求前半行/列是来t1-纠错组件码的码字,而后半行/列是来自t2-纠错组件码的码字。

再次参考附图,特别是参考图4,存在用于在数据存储设备上读取和写入ECC编码的数据的数据存储系统400的示例性实施例的高级框图。数据存储系统400包括记录信道402,包括存储器404(例如,闪存或其他非易失性随机存取存储器(NVRAM))和用于在存储器404中读取和写入数据的读/写装置406。尽管在图4中示出为单个块,但是存储器404可以包括范围从例如单个芯片或管芯到多个存储体的任何期望的数据存储单元配置,每个存储体包括多个存储器芯片封装。读/写装置406以已知方式执行读和写操作,通过向存储器404中的字线和位线阵列施加适当电压来寻址存储器单元以用于读和写目的。

数据存储系统400还包括编码器410和解码器412。编码器410根据二进制对称不变乘积码(例如,HPC)将输入数据编码成码符号,并将码符号输出到记录信道402。解码器412处理由读/写装置406从存储器404获得的回读符号以解码对称不变乘积码,从而恢复并输出原始输入数据。

如图5中进一步说明的,对称不变乘积码(例如HPC)也可应用于数据通信系统,例如数据通信系统500。数据通信系统500的发射机包括如上文参考图4所述的编码器510、调制器508和传输设备(TX)506。编码器510输出的码符号经由调制器508提供给生成用于通过通信链路504传输码符号的信号的传输设备506。通信链路504可以包括物理(有线或无线)链路或一个或多个物理链路上的逻辑链路。数据通信系统的接收器包括用于接收通过链路504传输的信号的接收设备(RX)516、用于解调接收信号的解调器518、以及用于解码从解调器518接收的结果码符号的如上所述的解码器512。

在优选实施例中,编码器410、510和解码器412、512的功能在硬件电路(即,集成电路)中实现以实现高性能。然而,在其他实施例中,编码器410、510和解码器412、512的功能可以在执行软件和/或固件的程序指令的硬件中实现。例如,可以通过执行将一个或多个处理器配置为编码器和/或解码器以执行编码和解码的软件来整体或部分地执行编码和解码。

现在参考图6-7,描绘了数据存储系统(例如图4的数据存储系统400)的示例性实施方式的更详细框图。图6图示了包括一个或多个主机的数据处理环境600,例如具有处理指令和数据的一个或多个处理器604的处理器系统602。处理器系统602可以另外包括本地存储器606(例如,动态随机存取存储器(DRAM)或磁盘),可以存储由处理器604执行的处理的程序代码、操作数和/或执行结果。在各种实施例中,处理器系统602可以是例如移动计算设备(例如智能电话或平板电脑)、膝上型或台式个人计算机系统、服务器计算机系统(例如来自国际商业机器公司的可用的POWER系列服务器之一),或大型计算机系统。处理器系统602也可以是使用各种处理器的嵌入式处理器系统,例如ARM、POWER、Intel X86,或结合任何存储器高速缓存、存储器控制器、本地存储器、I/O总线集线器等的任何其他处理器。

每个处理器系统602还包括输入/输出(I/O)适配器608,通过I/O通道610直接(即,没有任何中间设备)或间接(即,通过至少一个中间设备)耦合到数据存储系统620。在各种实施例中,I/O通道610可以采用已知或未来开发的通信协议中的任何一种或组合,包括例如光纤通道(FC)、以太网上的FC(FCoE)、互联网小型计算机系统接口(iSCSI)、InfiniBand、传输控制协议/互联网协议(TCP/IP)、快速外围组件互连(PCIe)等。经由I/O通道610传送的I/O请求包括处理器系统602从数据存储系统620请求数据的读请求和处理器系统602请求将数据存储在数据存储系统620中的写请求。

尽管不是必需的,但在所示实施例中,数据存储系统620包括多个接口卡622,数据存储系统620通过这些接口卡622经由I/O通道610接收和响应主机的I/O请求。每个接口卡622耦合到多个廉价磁盘冗余阵列(RAID)控制器624中的每一个以促进容错和负载平衡。RAID控制器624中的每一个又耦合(例如,通过PCIe总线)到非易失性存储介质,在所示示例中,包括承载NAND闪存的多个闪存卡626。在其他实施例中,可以采用替代的和/或附加的非易失性存储设备。

在所描绘的实施例中,数据存储系统620的操作由冗余系统管理控制器(SMC)623管理,耦合到接口卡622和RAID控制器624。在各种实施例中,可以利用硬件或硬件执行固件和/或软件实现系统管理控制器623。

图7描绘了图6的数据存储系统620的闪存卡626的示例性实施例的更详细框图。闪存卡626包括网关730,用作闪存卡626和RAID控制器624之间的接口。网关730耦合到通用处理器(GPP)732,可以被配置(例如,通过程序代码)以对网关730接收的I/O请求执行预处理和/或调度I/O闪存卡626的请求。GPP 732耦合到GPP存储器734(例如,动态随机存取存储器(DRAM)),可以方便地缓冲由GPP 732在其处理过程中创建、引用和/或修改的数据或流经网关730目的地是一个或多个闪存控制器740的数据流。

网关730还耦合到多个闪存控制器740,每个控制器控制相应的NAND闪存系统750。闪存控制器740可以例如由专用集成电路(ASIC)和/或现场可编程门阵列(FPGA)和/或微处理器实现,并且每个都具有关联的闪存控制器存储器742(例如,DRAM)。在闪存控制器740用FPGA实现的实施例中,GPP 732可以在数据存储系统620的启动期间对闪存控制器740进行编程和配置。在启动之后,通常操作闪存控制器740从网关730接收请求读取存储在NAND闪存系统750中的数据和/或在NAND闪存系统750中存储数据。闪存控制器740例如通过访问NAND闪存系统750以从或向NAND闪存系统750读取或写入所请求的数据或通过访问与NAND闪存系统750相关联的存储器高速缓存(未示出)来服务这些请求。

闪存控制器740实现闪存转换层(FTL),提供逻辑到物理地址转换以允许访问NAND闪存系统750内的特定存储器位置。通常,闪存控制器740从主机设备(例如处理器系统602)接收的I/O请求包含要访问(读取或写入)数据的逻辑块地址(LBA),并且,如果是写请求,将写数据存储到数据存储系统620。I/O请求还可以指定要访问的数据量(或大小)。还可以根据数据存储系统620支持的协议和特征来传送其他信息。闪存转换层将从RAID控制器624接收的LBA转换为分配给NAND闪存系统750中相应物理位置的物理地址。闪存控制器740可以在逻辑到物理转换数据结构中执行地址转换和/或存储逻辑和物理地址之间的映射,例如可以方便地存储在闪存控制器存储器742中的逻辑到物理转换表(LPT)。

在各种实施例中,NAND闪存系统750可以采用多种形式。在图7所示的实施例中,每个NAND闪存系统750包括多个(例如32个)可单独寻址的NAND闪存存储设备752。在所示示例中,闪存存储设备752采用板装闪存模块的形式,例如单级单元(SLC)、多级单元(MLC)、三级单元(TLC)或四级单元(QLC)NAND闪存模块。从闪存存储设备752读取的数据的保真度优选地通过例如通过闪存控制器740和/或诸如GPP 732或RAID控制器624的高级控制器的ECC编码的实施来增强。在所示实施例中,ECC编码和解码至少在闪存控制器740中由编码器744和解码器746实现。

现在参考图8,示出了根据一个实施例的解码器800的示例性实施例。可用于实现解码器412、512或746中的任何一个的解码器800对已使用二进制对称不变乘积码(例如HPC)编码的数据进行解码。

如图8所示,解码器200包括控制电路802,控制利用二进制对称不变乘积码编码的未校正码字的解码。此外,解码器800包括数据阵列804,在解码时缓冲二进制对称不变乘积码。按照惯例,数据阵列804包括正交的、大小相等的第一和第二维,这里分别称为行和列。与传统解码器相比,数据阵列804优选地包括允许访问缓冲在其中的二进制对称不变乘积码以仅沿其第一和第二维中的一个而不是另一个进行解码的电路。这种限制大大降低了在硬件电路中实现解码器800的成本。为简单起见,下文假设数据阵列804仅按行而不按列访问;然而,应当理解,考虑到缓冲在数据阵列804中的二进制对称不变乘积码的数据对称性,访问维度的选择完全是任意的。

数据阵列804耦合到列校正电路806,该电路配置为根据需要并基于存储在错误存储阵列810中的错误位置信息“即时”校正从数据阵列804读出的行码字内的单个位位置。行码字可能被列校正器电路806修改,然后由行校正电路808完全解码。行校正电路808可以实现例如本领域已知的Bose-Chaudhuri-Hocquenghem(BCH)纠错功能。基于行码字的解码,行校正电路808记录错误内任何已校正错误的位置。

现在参考图9,示出了示例性过程的高级逻辑流程图,通过该过程,诸如图8的解码器800之类的解码器在一个实施例中对二进制对称不变乘积码进行解码。图9的过程开始于块900,然后进行到块902,其示出解码器800接收二进制对称不变乘积码的一部分,下文假定为HPC。如上所述,HPC可以由解码器800例如从数据存储系统400的记录信道402或数据通信系统500的传输链路504接收。响应于接收到HPC的一部分,解码器800的控制电路802用接收到的HPC部分(例如,零主对角线下方的阵列的三角形部分)填充数据阵列804的一部分,并复制接收到的HPC部分内的数据以在数据数组804中形成完整的数据对称HPC。

在块902之后,控制电路802仅沿着数据阵列804的单个维度指导HPC的迭代解码。因此,在一个示例中,控制电路802使HPC被行码字而不是列码字访问和解码。通过消除沿第二维的HPC访问,解码HPC的延迟减少了一半。

控制电路802通过确定数据阵列804内缓冲的HPC的所有行码字是否都已被访问以进行解码,从而在块904处开始迭代解码过程。如果是,则过程转到块920,如下所述。如果不是,则过程进行到块910。在块910,控制电路802使HPC的第一行或下一行代码字从数据阵列804中读出。如块912所示,当行码字被传送到行校正电路808进行解码时,列校正电路806“即时”校正(即,反转)由错误存储阵80识别为包含错误的行码字的任何位并且将具有任何此类校正的行码字转发到行校正电路808。响应于接收到可能由列校正电路806修改的行码字,行校正电路808利用码字的奇偶校验部分对码字进行解码以校正任何错误(块914)。如上所述,在一个实施例中,行校正电路808可以利用例如传统的BCH纠错功能。如块914进一步指示的,如果在行码字中纠正了任何错误,则行纠正电路808在错误存储阵列810中记录错误位置,因此允许列校正电路806基于HPC的已知数据对称性利用错误位置信息来校正一个或多个附加行码字中的位。在块916,行校正电路808将解码的行码字写回到其在数据阵列802中的原始位置。此后,过程返回到块904。

现在参考块920,控制电路802确定在通过所有行码字的最后一次迭代期间在HPC的任何行码字中是否检测到任何错误。如果在上次迭代期间在任何行代码字中没有检测到错误,则成功解码HPC,并且过程转到块922,其中描述了控制电路802使解码的HPC的行代码字从数据阵列输出804,例如,处理器系统602或数据通信系统500的组件。此后,图9的过程在块924结束。然而,如果控制电路802在块920确定在通过HPC的所有行码字的最后一次迭代期间在至少一个行码字中发现至少一个错误,则控制电路802在块926确定通过HPC的行代码字的最大迭代次数(例如,3)是否已经被执行如果不是,则图9的过程通过页面连接器A返回到块910和已经描述的后面的块。然而,如果控制电路802在块926确定已经执行了通过HPC的所有行码字的最大迭代次数,则图9的过程在块928以错误终止,并且解码器800启动任何所需的错误处理。

现在参考图10-13,给出了由图8的解码器利用图9的过程校正示例性HPC中的错误的示例。在该示例中,数据阵列804具有20行和20列,分别编号为R0至R19和C0至C19。在此示例中,假设HPC使用Bose-Chaudhuri-Hocquenghem(BCH)纠错功能进行编码,该功能能够以零延迟纠正给定行(或列)中的多达三个错误。作为这种纠错能力的结果,错误存储阵列810优选地包括每行存储多达三个错误位置的容量。错误存储阵列被初始化为所有“无效”值(空状态),使得列校正电路806最初不会对从数据阵列804读出的行码字执行任何校正。

在数据阵列804中建立全输入HPC后,控制电路802使行码字从数据阵列804迭代和顺序读出,并通过集合校正电路806到行校正电路808用于BCH解码,从行R0开始。如图10所示,行R0和R1中的行代码字不包含任何错误,但行R2中的行代码字最初包含列C10、C4和C3中的三个错误。响应于检测到这些位错误,行校正电路808更新错误存储阵列810,其可以如表I所示表示。如所指示的,错误存储阵列810记录三个待修复的错误,即行R3、R4和R10中的列C2中的位。应该观察到,这三个错误与在行R2的C3、C4和C10列中检测到的错误是对称的。

表I

在行R2中的错误校正之后,行校正电路808更新数据阵列804,它将暂时变得不对称,如图11所示。

继续该示例,接下来从数据阵列804中读出行R3中的行码字并通过列校正电路806到达行校正电路808。随着该行码字被传输,列校正电路806校正C2列中的错误并更新错误存储阵列810以从错误存储阵列810中对应于C2列的条目中去除“3”。当行校正电路808对行R3的行码字执行BCH解码时,没有发现错误,因为在行校正电路808接收到行码字之前,列校正电路806已经校正了唯一的错误。因此,行校正电路808不会将任何新的错误位置存储到错误存储阵列810中,其随后将如下面的表II中所示出现。在行校正电路808将校正后的行代码字写回行R3后,数据阵列804将如图12所示。

表II

行R4中的行码字接下来从数据阵列804读出并且通过列校正电路806到行校正电路808。如图所示,行R4的行码字最初包含四个错误,这比由行校正电路808实施的BCH算法所能校正的要多。然而,因为列校正电路806基于错误存储阵列810提供的信息在行校正电路808接收行码字之前校正行码字的第2列中的位,假设在列校正后仅存在3个而不是4个错误,行校正电路808能够完全解码行码字。在行校正电路808解码行码字并更新数据阵列802和错误存储阵列810之后,数据阵列802将如图13所示出现并且错误存储阵列810将具有下表III所示的状态。

表III

该解码过程将通过行R19迭代地继续。一旦通过数据阵列802的所有行的第一次迭代完成,错误存储阵列810就不会被清除,并且第二次迭代开始。这个过程将继续直到满足两个退出条件之一:(1)HPC不包含错误(即,HPC的所有行代码字都被行校正电路808解码而没有发现任何错误)或(2)达到最大迭代限制(即,HPC未得到纠正)。

在前面的描述中,为了便于描述,忽略了实际硬件实现中的延迟和流水线的影响。为了说明延迟和流水线的额外影响,假设行校正电路808的延迟是五个周期,这意味着当特定行代码字开始BCH解码时,结果校正将在5个时钟周期之后才可用。根据这个假设,在行R7进入行校正电路808之前,行R2中的错误位置将不可用于后续行的校正。因此,尽管行校正电路808将基于解码行R2将校正记录到错误存储阵列810中的行R3、R4和R10的列C2,但行校正电路808将在此错误之前接收行R3和R4的码字位置信息可用。因此,在理想的零延迟情况下可以在通过数据阵列804的相同迭代期间由列校正电路806“即时”进行列校正的行R3和R4的行码字已经由反映这些行码字中的错误位置的时间误差存储阵列810由行校正电路808处理。幸运的是,列校正电路806在第一次迭代中未能校正这些列错误不会影响BCH解码的最终结果,因为列校正电路806将利用记录在错误存储阵列810中的任何错误位置信息来在下一次通过时校正位(例如,行R3和R4的行码字的C2列中的位)。仿真和分析表明,与理想的零延迟情况相比,如上所述的延迟不会导致解码性能的任何显着损失。

在优选实施例中,行校正电路808被设计成知道其解码等待时间并且根据其解码等待时间对错误存储阵列中的错误位置的存储进行排序。因此,例如,行校正电路808可以在行R3和R4的C2列中存储错误位置之前智能地对错误存储阵列810内的行R10的C2列中的错误位置的存储进行排序。错误存储阵列810中错误位置存储的这种智能排序确保在最大可能程度上,可以在通过检测到相应错误的行代码字的相同迭代期间由列校正电路806校正对称错误(例如,行R10的C2列中的错误)。

以上提供的示例也没有明确讨论并行性的影响。在至少一些实施例中,期望通过在列校正电路806内实现列校正逻辑的并行实例和在行校正电路808内实现解码逻辑的并行实例来增加解码吞吐量。例如,在一个实施例中,行校正电路808可以包括能够解码每个时钟周期四个码字的四个解码逻辑实例,并且列校正电路806可以类似地包括能够校正每个时钟周期四个码字内的位的列校正逻辑的四个实例。在这样的实施例中,如果逻辑的一个实例处理行R0、R4、R8、R12、...的行码字,则逻辑的第二实例处理行R1、R5、R9、R13等的行码字是优选的。由数据数组的维度以逻辑实例的数量为模确定。应当注意,由任何列校正逻辑实例校正的错误位置可以由任何解码逻辑实例检测到。

如已经描述的,在至少一个实施例中,用于对二进制对称不变乘积码进行解码的解码器包括具有正交第一维和第二维的数据阵列。数据阵列被配置为仅沿第一维访问其中缓冲的二进制对称不变乘积码。解码器还包括用于存储错误位置的错误存储阵列和配置为检测和纠正沿第一维从数据阵列访问的数据中的错误并将沿第二维的错误位置存储在错误存储阵列中的第一校正电路。第一校正电路基于对称不变乘积码的数据对称性确定错误位置。解码器还包括第二校正电路,在第一校正电路接收沿第一维从数据阵列访问的数据之前,基于存储在错误存储阵列中的错误位置校正从数据阵列访问的数据。

所描述的实施例可以在成本和性能方面提供优于现有技术解码器的显著优势。例如,通过消除沿两个维度访问二进制对称不变乘积码的要求,节省了大量电路费用和面积,特别是对于较大的二进制对称不变乘积码,其每个维度可能有三百或更多位。此外,通过消除沿两个维度访问二进制对称不变乘积码的需要,解码延迟可以减少一半。此外,所描述的实施例利用数据对称性来“即时”纠正对称错误,而不是等待此类对称错误在后续码字的解码期间被“重新发现”和纠正。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路配置数据或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

虽然本发明已经特别地如参照一个或多个优选实施例所描述的那样示出,本领域技术人员将理解,在不脱离本发明的精神和范围的情况下,可以在形式和细节上进行各种改变。例如,虽然已经关于包括指导某些功能的闪存控制器的数据存储系统描述了方面,应当理解,本发明可以备选地实现为包括存储程序代码的存储设备的程序产品,该程序代码可以由处理器处理以执行这些功能或使这些功能被执行。如本文所使用的,“存储设备”被具体定义为仅包括法定制品并且不包括信号介质本身、瞬时传播信号本身和能量形式本身。

此外,虽然已经描述了包括使用NAND闪存的实施例,但是应当理解,本发明的实施例也可以与任何其他类型的非易失性随机存取存储器(NVRAM)一起使用。

上面描述的图和下面的具体结构和功能的书面描述不是为了限制申请人所发明的范围或所附权利要求的范围。相反,提供附图和书面说明是为了教导本领域的任何技术人员制作和使用寻求专利保护的发明。本领域技术人员将理解,为了清楚和理解起见,并未描述或示出本发明的商业实施例的所有特征。本领域技术人员还将理解,结合本发明的方面的实际商业实施例的开发将需要许多特定于实施的决策以实现开发者针对商业实施例的最终目标。此类特定于实施的决策可能包括但可能不限于遵守系统相关、业务相关、政府相关和其他约束,这些约束可能因具体实施、位置和不时而异。尽管开发人员的努力在绝对意义上可能是复杂和耗时的,但是对于受益于本公开的本领域技术人员而言,这样的努力将是例行工作。必须理解,本文公开和教导的发明易于进行多种不同的修改和替代形式。最后,单数术语(例如但不限于“一”)的使用并非旨在限制项目的数量。

27页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:装置,方法和计算机程序

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类