CN105191146B - 用于解码涡轮乘积码的校验子表 - Google Patents
用于解码涡轮乘积码的校验子表 Download PDFInfo
- Publication number
- CN105191146B CN105191146B CN201480023781.4A CN201480023781A CN105191146B CN 105191146 B CN105191146 B CN 105191146B CN 201480023781 A CN201480023781 A CN 201480023781A CN 105191146 B CN105191146 B CN 105191146B
- Authority
- CN
- China
- Prior art keywords
- component
- syndrome
- buffer
- tpc
- code word
- 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
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/159—Remainder calculation, e.g. for encoding and syndrome calculation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/152—Bose-Chaudhuri-Hocquenghem [BCH] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1525—Determination and particular use of error location polynomials
- H03M13/153—Determination and particular use of error location polynomials using the Berlekamp-Massey algorithm
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1545—Determination of error locations, e.g. Chien search or other methods or arrangements for the determination of the roots of the error locator polynomial
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2957—Turbo codes and decoding
- H03M13/296—Particular turbo code structure
- H03M13/2963—Turbo-block codes, i.e. turbo codes based on block codes, e.g. turbo decoding of product codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6502—Reduction of hardware complexity or efficient processing
- H03M13/6505—Memory efficient implementations
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1515—Reed-Solomon codes
Landscapes
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Algebra (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
从组件校验子缓冲器获得与涡轮乘积码(TPC)码字相关联的一个或更多个组件校验子的组。关于一个或更多个组件校验子的组来执行组件解码。
Description
相关申请的交叉引用
本申请要求于2013年4月26日提交的发明名称为“SYNDROME TABLES FORDECODING TURBO-PRODUCT CODES BASED ON BOSE-CHAUDHURI-HOCQUENGHEM(BCH)ANDREED-SOLOMON(RS)CODES(用于基于博斯-乔赫里-霍克文黑姆(BCH)码和里德-所罗门(RS)码来解码涡轮乘积码的校验子表)”的第61/816512号(代理人案号LINKP135+)的美国临时专利申请的优先权,其通过引用合并于此而用于所有目的。
背景技术
涡轮乘积码(TPC,turbo-product code)是一种类型的错误校正码。在TPC编码期间,有效负载信息以矩阵布置,TPC编码器使用组件码(component code)来编码行和列。例如,行被以某种方式分组(例如,每个组为1位“高”)并被编码。然后,列被以某种方式分组(例如,每个组为1位“宽”)并被编码。在解码器端,从数据存储缓冲器访问数据多次,用于行解码和列解码。从数据存储缓冲器访问这么大量的数据的开销是巨大的。能够克服该瓶颈的有效架构将是所期望的。
附图说明
在下面的具体实施方式和附图中公开了本发明的各种实施例。
图1是图示在TPC解码期间使用被储存的组件校验子的过程的实施例的流程图。
图2是图示TPC码字、行码字和列码字的实施例的示图。
图3是图示TPC解码器的第一实施例的示图。
图4是图示行校验子缓冲器和列校验子缓冲器的实施例的示图。
图5是图示初始化过程的实施例的流程图。
图6是图示用二元BCH码构建的TPC码字的实施例的示图。
图7是图示初始化之后的行校验子缓冲器和列校验子缓冲器的实施例的示图。
图8是图示用于对正被处理的组件码字索引执行的组件解码的过程的实施例的流程图。
图9是图示用于在第一组件校验子缓冲器中更新正被处理的组件码字索引的过程的实施例的流程图。
图10是图示用于在第二组件校验子缓冲器中更新与正被处理的组件码字索引相关的一个或更多个组件码字索引的过程的实施例的流程图。
图11是图示在行解码的第一次迭代之后但在列解码的第一次迭代之前的行校验子缓冲器和列校验子缓冲器的实施例的示图。
图12是图示在列解码的第一次迭代之后但在行解码的第二次迭代之前的行校验子缓冲器和列校验子缓冲器的实施例的示图
图13是图示TPC解码器的第二实施例的示图。
图14是图示用于更新被储存在TPC缓冲器中的TPC码字的过程的实施例的流程图。
具体实施方式
本发明可以以大量的方式来实施,包括实施为:过程;装置;系统;物的组合;在计算机可读储存介质上实施的计算机程序产品;和/或处理器(诸如被配置用来运行储存在耦接至处理器的存储器上的指令和/或由耦接至处理器的存储器提供的指令的处理器)。在本说明书中,这些实施方式或本发明可采用的其他任何形式可以被称作技术。总体而言,在本发明的范围之内可以改变所公开的过程中的步骤的次序。除非另外陈述,否则组件(诸如被描述为被配置用来执行任务的处理器或存储器)可以被实施为暂时地被配置用来在给定时间执行该任务的一般组件或被制造用来执行该任务的专用组件。如本文中所使用的,术语“处理器”指被配置用来处理数据(诸如计算机程序指令)的一个或更多个器件、电路和/或处理核。
下面连同附图一起提供对本发明的一个或更多个实施例的详细描述,附图图示本发明的原理。结合这些实施例来描述本发明,但本发明不局限于任何实施例。本发明的范围仅受权利要求限制,本发明包含大量的替代、变型和等价物。在下面的描述中阐述了大量的具体细节,以提供对本发明的透彻理解。这些细节被提供以用于示例的目的,本发明可以在无这些具体细节中的一些或所有的情况下根据权利要求来实施。为了清晰的目的,未详细地描述与本发明相关的技术领域中已知的技术材料,使得本发明不被不必要地混淆。
图1是图示在TPC解码期间使用储存的组件校验子的过程的实施例的流程图。在所示示例中,该过程通过TPC解码器来执行,例如,TPC解码器为读取控制器的一部分。图1中描述的TPC解码过程不束缚于任何特定的TPC格式、码比率和/或组件码类型,只要组件码具有把校验子作为输入的解码器,图1中描述的TPC解码过程就可以与各种TPC编码器一起使用。
在100处,从组件校验子缓冲器获得与涡轮乘积码(TPC,turbo-product code)码字相关联的一个或更多个组件校验子的组。例如,TPC码字包括多个列码字和多个行码字。列码字和行码字可以更笼统地被称作组件码字。对于每个码字,从行码字来计算出单个校验子,产生行校验子,从列码字来计算出单个校验子,产生列校验子。在步骤100处从储存器获得的组件校验子可以为行校验子或列校验子。
在一些实施例中,行校验子和列校验子分别被分开地储存在行校验子缓冲器和列校验子缓冲器中。在这样的实施例中,将从行校验子缓冲器获得行校验子,将从列校验子缓冲器获得列校验子。
在一些实施例中,在一些初始化序列或先于图1的其他过程期间,用初始的行校验子组和初始的列校验子组来填充行校验子缓冲器和列校验子缓冲器。例如,用来产生TPC码字的组件码可以为循环纠错码,诸如博斯-乔赫里-霍克文黑姆(BCH)码或里德-所罗门(RS)码。考虑到自然数m和t,具有长度n=2m-1的t-纠错二元BCH码被定义为:{c(x)G GF(2)[x]:deg c(x)≤n-1,c(a)=c(a2)=c(a3)=…=c(a2t)=0}
其中,a G GF(2m)为本原元素。换言之,其为最多n-1次的所有二元多项式的集合,使得当这些被当做关于GF(2m)的多项式时,他们必须具有a、a2、a3、…、a2t作为他们的根。
如果c(x)为被传输的码字,e(x)为错误多项式,且r(x)=c(x)+e(x)为接收到的码字,那么考虑到a、a2、a3、…、a2t是c(x)的根,初始的组件校验子可以被计算为:
S;=r(αi+1)=e(αi+1),i=0、1、…、2t-1。
可以使用任何合适的校验子技术来分别用初始的行校验子的组或初始的列校验子的组来填充行校验子缓冲器和/或列校验子缓冲器。
在102处,关于一个或更多个组件校验子的组执行组件解码。例如,如果在步骤100处获得行校验子的组,那么步骤102处的组件解码包括行解码,步骤102可以由专用行解码器或配置有行编码的一般用途的解码器来执行。或者,如果在步骤100处获得列校验子的组,那么步骤102处的组件解码包括列解码,步骤102可以由专用列解码器或被配置有列编码的一般用途的解码器来执行。每当组件解码成功时,步骤102包括:(1)提交对TPC码字的校正(例如,其在控制器的存储器中被局部地缓冲,直到已知应当对TPC码字作出校正为止);(2)对组件校验子缓冲器作出合适的改变(再次,被缓冲直到已知应当对组件校验子缓冲器作出校正为止)。
在行解码或者列解码期间,图1中的过程可以重复所需要的那么多次。例如,只要在TPC码字中还保留有错误,就可以重复图1中的过程。
上面描述的TPC解码技术的一个优点为可以降低瓶颈。例如,一些其他行解码器和列解码器被配置用来输入码字(例如,行码字、列码字或TPC码字),这在组件解码器的初始阶段在储存控制器上的TPC缓冲器处产生读取瓶颈。通过使用被配置用来输入校验子(例如,与一些类型的码字截然不同)的解码器,并与码字分开来储存和更新校验子,可以大幅降低对TPC缓冲器的读取访问数目。此外,一些其他行解码器和列解码器被配置用来输出码字,这在组件解码的最后阶段也产生瓶颈。通过使用被配置用来仅输出对组件码字的校正(例如,与输出整个组件码字截然不同)的解码器,对TPC缓冲器的写入访问的数目也大幅降低。
例如,考虑关于GF(212)的组成二元BCH码所构建的TPC,其中,长度n、维度k和最大纠错能力t为:
n行=2108,k行=2048,t行=5
n列=2132,k列=2048,t列=7
TPC码将以32x2048二元矩阵布置的8kB的信息位编码。在TPC码字中存在32个行码字和33个列码字,每个列码字张成64列信息位。
关于读取,使用一些其他技术,解码一个组件码字需要读取大约256字节的内存。使用本文中描述的TPC技术,解码一个组件码字需要读取最多7个校验子,这比校验子缓冲存储器的11字节少。
关于写入,使用一些其他技术,组件码字的成功解码导致写入大约256字节的内存到TPC缓冲器。相反地,本文中描述的TPC解码技术写入最多7位到TPC缓冲器,写入最多7x5x12=420位到校验子缓冲器,总计少于53字节。
本文中描述的TPC解码技术的另一个优点是校验子不需要在每个解码迭代处重新产生。这节省了功率、处理资源和时间。
图2是图示TPC码字、行码字和列码字的实施例的示图。在所示示例中,码字200是TPC码字的示例。行码字202和列码字204是组件码字的示例。在所示示例中,121个有效负载位(由阴影格子来指示)被TPC编码入225个位。为了获得所示的行奇偶校验信息和列奇偶校验信息,TPC编码器(未示出)首先编码11行有效负载信息(如阴影格子所示)来产生11个行奇偶值。然后,TPC编码器对15列有效负载信息加上行奇偶值编码以产生15个列奇偶性。在该示例中,每个行奇偶值和列奇偶值为4位长。
注意该TPC仅为示例性的,而不意在成为限制。例如,码比率可以为除11/15之外的。在一些实施例中,在列编码或行编码之前多个位被组合在一起。例如,每个行(列)码字可以具有多个位的高度(宽度)。在另一个示例中,行(列)码字包括来自一行(列)的所有位加上来自下一行(列)的位的一半。换言之,行(列)码字可以具有为分数个位的高度(宽度)。
图3是图示TPC解码器的第一实施例的示图。TPC解码器304示出了执行图1的过程的系统的一个实施例。为了清晰,此处未示出与图1中描绘的步骤不直接相关的组件。例如,未示出与读取控制器302相对应的写入控制器和与TPC解码器304相对应的TPC编码器。在一些实施例中,在诸如专用集成电路(ASIC)或现场可编程门阵列(FPGA)的半导体器件上实施读取控制器302(其包括TPC解码器304)。在一些这样的实施例中,储存器300包括另一种半导体器件。
TPC码字被储存在储存器300上(例如,被写入控制器(未示出)储存在那里)。在一些实施例中,储存器300包括固态储存器,诸如NAND闪存。在一些初始化过程中,从储存器300取回TPC码字,且分别用初始的行校验子的组和列校验子的组(其从储存在储存器300上的一个或更多个TPC码字产生)来填充行校验子缓冲器310和列校验子缓冲器312。在一些实施例中,例如通过一些初始化过程(未示出)来从储存器300取回要被校正的一个或更多个TPC码字,并将其储存在读取控制器中的TPC缓冲器314中。
一旦行校验子缓冲器310和列校验子缓冲器312已经被填充,通过行解码器306和列解码器308的处理开始。在该示例中,行解码先行。行解码器306从行校验子缓冲器310获得行校验子。这是图1中的步骤100的一个示例。然后,行解码器306关于行校验子来执行行解码。这是图1中的步骤102的一个示例。作为解码过程的一部分,行校验子缓冲器310和/或列校验子缓冲器312中的一些校验子可以由行解码器306更新。此外,通过解码过程102校正的位也可以被提交到TPC缓冲器314(例如,如果/在判定为那些位校正应当被提交到TPC缓冲器314时)。
在行解码器306已经完成所有的行解码之后,列解码器308从列校验子缓冲器312获得列校验子。这是图1中的步骤100的一个示例,且获得的列校验子可以包括一些由行解码器306更新的列校验子。列解码器308然后关于获得的列校验子来执行列解码。这是图1中的步骤102的一个示例。正如行解码器306一样,通过列解码器308的列解码可以包括更新行校验子缓冲器310和/或列校验子缓冲器312中的校验子中的一些。由列解码器校正的位也可以被提交到TPC缓冲器314(例如,如果/在判定为位校正应当被提交到TPC缓冲器314时)。注意,尽管这里示出了行解码器306和列解码器308作为两个分离的硬件块,但在一些实施例中,行解码器和列解码器可以被组合在单个组件中和/或他们共享同一硬件。
在一些实施例中,行解码器306和/或列解码器308包括错误位置多项式发生器(error locator polynomial generator)、错误定位器和(如果需要)误差大小发生器。错误位置多项式发生器使用校验子S0、S1、…、S2t-i来产生错误位置多项式(error locatorpolynomial)Λ(χ),其被定义为:
在一些实施例中,Berlekamp-Massey Algorithm(BMA)被用来产生错误位置多项式。
错误位置多项式的根(即,以上等式中的j1、j2、…、jv)指示错误的位置,所以找到错误位置多项式的根对应于找到对应的码字中的错误的位置。在一些实施例中,ChienSearch(CS)被用来找到错误位置多项式的根。对于二进制符号,一旦错误位置已经被确认,校正就仅包含将每个被确认的错误位置处的位翻转。对于非二进制符号,需要由误差大小发生器来计算误差大小以作出校正。在一些实施例中,Forney Algorithm被用来计算误差大小。
相比于一些其他TPC解码器,行解码器306和列解码器308被配置为直接输入校验子。例如,在一些其他解码器可以被配置用来输入码字(例如,TPC码字或组件码字)并从码字产生一个或更多个校验子时,行解码器306和列解码器308跳过该步骤。
图4是图示行校验子缓冲器和列校验子缓冲器的实施例的示图。在一些实施例中,图3中的行校验子缓冲器310和列校验子缓冲器312被实施为如所示。在所示示例中,行校验子缓冲器400被用来储存行校验子和相关的状态信息,列校验子缓冲器402被用来储存列校验子和相关的状态信息。使用图2作为示例,Nr=11且Nc=15。
行校验子缓冲器400中的每个记录包括2tr个行校验子,其中,tr为行编码的纠错能力。类似地,列校验子缓冲器402中的每个记录包括2tc个列校验子,其中,tc为列编码的纠错能力。使用图2作为示例,产生的针对行码字202的行校验子将被储存在行校验子缓冲器400的第一行码字索引中,产生的针对列码字204的列校验子将被储存在列校验子缓冲器402的第一列码字索引中。每个列校验子和行校验子为m位长,其中,m与在其上构建有示例性BCH码的迦罗瓦域(Galois Field)相关。在一些实施例中,如果剩余的校验子可以从子组产生,则对于每个记录,行(列)校验子缓冲器可以仅储存2tr个校验子(2tc个校验子)的子组。例如,如果组件码为t错误校正原始二元BCH码,那么仅偶数校验子S2i需要被储存,因为S2i+1=(Si)2。
除校验子之外,缓冲器400和402储存状态信息(包括被修改位)。被修改位被用来追踪哪些校验子在紧接组件解码之前期间被其他组件解码器(例如,行解码器或列解码器)修改过。另一种考虑被修改位的方法为:标记哪些信息应当被检验的位(例如,假定期望进一步的错误校正解码)。这使得行解码器或列解码器(任何一个为当前激活的)能够知道在当前迭代要处理哪一个校验子。下面给出如何设置和解释被修改位的更详细的示例。
除被修改位之外,状态信息包括无错位。无错位指示行解码或列解码是否不需要任何解码(例如,由所有的校验子都具有0来指示)。无错位被设置为1指示行码字或列码字将被组件解码器声明为无错。如果行校验子缓冲器400和列校验子缓冲器402中的所有无错位都为1,那么TPC码字已经被成功解码,TPC解码器停止。
返回图1,在一些实施例中,行校验子缓冲器400和列校验子缓冲器402中的状态位(即,被修改位和无错位)被用来驱动或指示在步骤100处获得什么校验子以及在步骤102处使用什么校验子。在一些实施例中,仅具有被设置为1的被修改位以及被设置为0的无错位的校验子在步骤100处被获得且在步骤102处被使用。在这样的实施例中未获得具有被设置为0的被修改位或被设置为1的无错位的校验子。
下面的图示出初始化过程的示例。在一些实施例中,示例性初始化过程被用来初始化组件校验子缓冲器,诸如行校验子缓冲器或列校验子缓冲器。
图5是图示初始化过程的实施例的流程图。在如何使用图5的一个示例中,在图1之前执行图5。在另一个示例中,如这里所示,图5的过程被用来填充图4中的行校验子缓冲器400和列校验子缓冲器402。
在500处,使用TPC码字来产生一个或更多个组件校验子的初始组。在各种实施例中,组件校验子的初始组可以包括一个或更多个行校验子的初始组和/或一个或更多个列校验子的初始组。可以使用任何合适的校验子发生技术。
在502处,将组件校验子缓冲器中的组件校验子的组设置为组件校验子的初始组。组件校验子缓冲器的一些示例包括行校验子缓冲器和列校验子缓冲器。例如,在步骤500处产生的初始值被储存在图4中的行校验子缓冲器400和/或列校验子缓冲器402中的校验子域中。
在504处,至少部分地基于组件校验子的初始组来识别不需要校正的那些组件码字和需要校正的那些组件码字。例如,如果对于给定的组件码字的所有组件校验子都为0,那么组件码字不需要任何校正。如果否(例如,在相关的组件校验子中存在至少一个非零值),那么对应的组件码字需要校正。
在506处,至少部分地基于对那些不需要校正的组件码字和那些需要校正的组件码字的识别来设置一个或更多个无错位。例如,已经被识别为无错的组件码字(即,不需要校正的那些组件码字)将其无错位设置为1,已经被识别为存在错误的那些组件码字(即,需要校正的那些组件码字)将其无错位设置为0。
在508处,设置一个或更多个被修改位以指示为相关记录已经被修改。例如,组件校验子缓冲器中所有的被修改位被设置为1。这将导致组件解码器来处理储存在该记录中的校验子(假定需要进一步的组件解码)。
尽管在图5中未示出,但在一些实施例中,初始化过程也用从储存器(例如,固态储存器)接收到或读取的初始TPC码字来初始化TPC缓冲器(其被配置用来储存被施加有任意数目的校正的TPC码字)。
下面的图示出正被初始化的示例性行校验子缓冲器和示例性列校验子缓冲器。
图6是图示用二元BCH码构建的TPC码字的实施例的示图。在所示示例中,使用GF(24)的迦罗瓦域来构建码字,长度n=15,tr=tc=2。在下面的示例中将使用该示例性TPC码字。
图7是图示初始化之后的行校验子缓冲器和列校验子缓冲器的实施例的示图。在所示示例中,行校验子缓冲器700和列校验子缓冲器710包含校验子S0和S2的初始组以及状态信息的初始组。在该示例中,我们不将校验子S1和S3储存在校验子缓冲器中,因为组件解码器可以使用S1=S0 2和S3=S1 2来即时产生它们。例如,图5中所示的初始化过程可以已如所示地填充行校验子缓冲器700和列校验子缓冲器710。在该特定示例中,由于二元BCH码被用来产生TPC码字(见图5),故能够仅储存偶数校验子。总之,对于二元BCH码,与每个记录2t个组件校验子截然不同的是,组件校验子缓冲器仅能够在每个记录储存t个组件校验子。
初始化过程分别用行校验子的初始组和列校验子的初始组来填充行校验子缓冲器700和列校验子缓冲器710。在一些情形下,在特定记录中的校验子都为0。对于这些记录,无错位被设置为0。如果在给定的记录中的校验子不全为0,那么无错位被设置为0。
初始化过程也将行校验子缓冲器700和列校验子缓冲器710中的所有被修改位设置为1。诸如行解码器或列解码器的组件解码器将使用被修改位和无错位来判定是否处理被包含在特定记录之内的校验子。这将在下面更详细地来描述。
图8是图示用于组件解码的过程的流程图,其中,该组件解码关于正被处理的组件码字索引来执行。在一些实施例中,图1中的步骤102包括图8的过程。在各种实施例中,该过程由诸如行解码器(例如,图3中的行解码器306)或列解码器(例如,图3中的列解码器308)的组件解码器来执行。使用图7作为示例,图8的过程可以关于行校验子缓冲器700中的7个行码字索引中的每个来执行,或者图8的过程可以关于列校验子缓冲器710中的15个列码字索引中的每个来执行。
在800处,判定在正被处理的组件码字索引中无错位是否为0以及被修改位是否为1。例如,假设图7中的第二行码字索引(702)为正被处理的组件码字索引。在该示例中,800处的判定为“是”。
如果无错位为0而被修改位为1,那么关于储存在正被处理的组件码字索引中的一个或更多个组件校验子来执行组件解码。例如,储存在图7的第二行码字索引(702)中的行校验子由行解码器来处理。
在804,判定解码是否成功。例如,在步骤804处行解码器或列解码器可以输出成功/失败位且该位被使用。描述804处的判定的另一种方法为判定是否提交对与正被处理的组件码字相关联的相关TPC码字、行校验子和/或列校验子的任何改变。
如果在步骤804处判定为解码成功,那么在806处在TPC缓冲器中,更新TPC码字。例如,如果图7中的第二行码字索引(702)为正被处理的组件码字索引,那么TPC码字通过图6中的第二行码字(600)来更新。
在808处,在第一组件校验子缓冲器中,更新正被处理的组件码字索引。为了继续图7中的第二行码字索引(702)为正被处理的组件码字索引的示例,更新第二行码字索引。这包括视情况来更新储存在第二行码字索引中的行校验子和第二行码字索引中的无错位。
在810处,在第二组件校验子缓冲器中,更新与正被处理的组件码字索引相关的一个或更多个组件码字索引。例如,图6示出第二行码字(600)通过TPC码字(由交叉处的点表示)而与第十列码字(602)和第十四列码字(604)相关。作为步骤810的示例,视情况来更新储存在第十列码字索引和第十四列码字索引中的列校验子和状态信息。
退回一步,注意,除非解码成功(例如,在步骤804处被判定),否则组件解码(在步骤802处被执行)的结果不被允许传递下去或被提交。这是因为一些组件解码器(例如,BCH解码器)的输出可以具有两部分。输出的第一部分包含错误的潜在位置,输出的第二部分指示组件解码器成功与否。在一些情形下,潜在错误位置中的一些在成功/失败状态可用之前变得可用。如果组件解码器成功,那么潜在错误位置为组件码字背离无错码字的位置。另一方面,如果组件解码器未成功,则潜在错误位置不说明任何有用的事情,且必须被舍弃。
图9是图示用于在第一组件校验子缓冲器中更新正被处理的组件码字索引的过程的实施例的流程图。在一些实施例中,如所示的来执行图8中的步骤808。一般来讲,如果行(列)解码正被执行(例如,在图8中),那么图9与对行(列)码字索引的更新(如所需/如果需要)相关联。
在900处,基于对TPC码字的一个或更多个改变来产生对储存在正被处理的组件码字索引中的组件校验子的一个或更多个改变。例如,如果行解码正被执行,则行解码器可以输出误差矢量,该误差矢量要被与行码字异或(XOR)以产生被更新的行码字。误差矢量可以被用来产生对储存在正被处理的行码字索引中的行校验子的一个或更多个改变(例如,也要被异或)。例如,要与图6中的第二行码字(600)异或的改变将被用来产生要与图7中的第二行码字索引(702)中的S0和S2来异或的改变。
在902处,提交对储存在正被处理的组件码字索引中的组件校验子的改变。例如,可以关于图7中的第二行码字索引(702)中的S0校验子和S2校验子来执行读取序列、异或序列和写入序列。注意,对校验子的改变(通常)在符号级。如果校验子为m位长,则改变也是m位长。新的校验子为旧的校验子与改变的按位(bit-wise)异或。此外,在一些应用中,不可能在缓冲器中寻址单独的位。如果如此,则改变基于缓冲器的寻址能力(例如,1字节、2字节或4字节),且改变可以关于使用按位异或操作来更新(如上所述)。
在904处,判定被更新的组件校验子是否全都为0。例如,如果储存在第二行码字索引中的被更新的S0校验子和S2校验子全都为0,那么904处的判定为是。如果这样,则在906处将正被处理的组件码字索引中的无错位设置为1。例如,图7中的第二行码字索引(702)中的无错位将被设置为1。注意,无错位的默认值或已经被储存的值可以为0,因此步骤904处的“否”路径可以将无错位值维持为0。
尽管在图9中未示出,但在第一组件缓冲器中的所有组件码字索引都已经被处理之后,过程可以在第一组件缓冲器中将所有被修改位设置为0。例如,如果行(列)解码正被执行,则在所有行(列)解码已经完成之后但列(行)解码开始之前,行(列)校验子缓冲器中的所有被修改位可以被设置为0。
图10是图示用于在第二组件校验子缓冲器中更新与正被处理的组件码字索引相关的一个或更多个组件码字索引的过程的实施例的流程图。在一些实施例中,如所示的来执行图8中的步骤810。一般来讲,如果行(列)解码正被执行(例如,在图8中),那么图10与对相关的列(行)码字索引的更新(如所需的/如果需要)相关联。如果两个或更多个列(行)码字与单个行(列)码字相关,那么图10中的过程可以被重复所需要的那么多次。例如,第十列码字和第十四码字与图6中的第二行码字相关。图10中的过程将被执行两次:一次用来更新第十列码字索引,第二次用来更新第十四列码字索引。
在1000处,基于对TPC码字的一个或更多个改变来产生对储存在相关的组件码字索引中的组件校验子的一个或更多个改变。为了从以上来继续该示例,要与图6中的第二行码字(600)异或的改变可以被用来产生要与图7中的第十列码字索引或第十四列码字索引中的校验子异或的改变。
在1002处,提交对储存在相关的组件码字索引中的组件校验子的改变。如上所述,可以使用读取过程、异或过程和写入过程。
在1003处,将相关的组件码字索引中的被修改位设置为1。注意,图9不具有将被修改位设置为1的相应步骤。这是因为在给定组件校验子缓冲器中的被修改位由其他组件解码器来评估(例如,设置为1)。例如,行(列)解码器负责评估列(行)校验子缓冲器中的被修改位。这使得在紧接前的迭代中列(行)解码器能够知道由行(列)解码器来更新什么校验子。
在1004处,判定被更新的组件校验子是否全都为0。如果是,则在1006处将相关组件码字索引中的无错位设置为1。如果否,则在1008处将相关的组件码字索引中的无错位设置为0。注意,关于将无错位设置为0的必要性,在图9与图10之间存在(细微的)差异。在图9中,无错位已经被设置为0。这是因为仅如果无错位被设置为0,组件码字才被处理(见,例如图8中的步骤800,其中,图9示出步骤808的一个实施例)。因此,在图9中的步骤904处没必要做任何事,因为无错位已经被设置为0。然而,在图10中,相关的组件码字可以将无错位设置为或者0或者1。因此,在图10中,无错位在步骤1008处被明确地设置为0(因为其可以为1)。
下面描述图8到图10在被应用到图7时的处理。在下面的示例中,行解码器执行行解码,行校验子缓冲器700中的记录从顶部到底部。
行码字索引1(701):在该记录中的行校验子不被处理,因为无错位被设置为0,表示相关联的行码字不包含错误且不需要进一步的校正。
行码字索引2(702):在该记录中的行校验子被处理,因为被修改位被设置为1且无错位被设置为0。行解码关于被包含在第二行码字索引(702)中的行校验子来执行,且在该特定情形中的行解码成功。由于在该情况下行(列)解码成功,故行(列)解码结果被允许传递下去。相反地,如果行(列)解码还未成功,则行(列)解码结果将不被允许传递下去。成功的行(列)解码引起若干过程以开始和/或对行校验子缓冲器700和/或列校验子缓冲器710的更新,包括:
·更新第十列码字索引(716)和第十四列码字索引(712)中的列校验子。在该示例性TPC码构造中,第二行码字被捆绑至第十列码字和第十四列码字,因此新的列校验子被产生以用于第十列码字索引和第十四列码字索引,并被提交至列校验子缓冲器710。
·第十列码字索引(716)和第十四列码字索引(712)中的被修改位被设置为1。这使得列解码器知道(在下一次迭代处)行解码器已经更新第十列码字索引(716)和第十四列码字索引(712)中的列校验子。在该特定情况下,这是一个争论点,因为初始化过程已经将列校验子缓冲器710中的所有被修改位设置为1,但在其他解码迭代中,被修改位被清除或被重置为0。
在该特定情形中,产生的用于第十四列码字索引(712)的被更新的列校验子全都为0,因此第十四列码字可以被认为是无错的:
·第十四列码字索引(712)中的无错位被设置为1。
由于第二行码字现在可以被认为是无错的:
·第二行码字索引(702)中的行校验子被设置为全都为0,第二行码字索引(702)中的无错位被设置为1。
行码字索引3(703)和行码字索引4(704)不被处理,因为无错位被设置为1。
行码字索引5(705):在该记录中的行校验子被处理,因为被修改位被设置为1而无错位被设置为0。在该特定情形中,行解码不成功(例如,由行解码器或列解码器评估失败信号)。这样,对第五行码字索引(705)不作出改变。所产生的任何更新都被舍弃且不被提交(例如,至TPC缓冲器、至行校验子缓冲器、至列校验子缓冲器等)。
行码字索引6(706):在该记录中的行校验子不被处理,因为无错位被设置为1。
行码字索引7(707):在该记录中的行校验子被处理,因为被修改位被设置为1,而无错位被设置为0。在该情形中行解码成功,从而下面的更新和过程被执行。
·更新第十三列码字索引(714)中的一个或更多个列校验子。在该示例中,第七行码字与第十三列码字有关,因此被更新的列校验子被产生用于第十三列码字索引(714),并被储存于其中。
·第十三列码字索引(714)中的被修改位被设置为1。这使得在下一次迭代期间列解码器知道行解码器更新了储存在第十三列码字索引(714)中的一个或更多个码字。
·第十三列码字索引(714)中的无错位被设置为1。在该特定情形中,被产生用于第十三列码字索引的被更新的列校验子全都为0,因此第十三列码字被成功地解码。
·第七行码字索引(707)中的无错位被设置为1而用于第七行码字索引(707)的行校验子被设置为0。这使得在下一次迭代处(如果需要的话)行解码器知道进一步解码是不必要的。
在行校验子缓冲器700中的所有的记录都已经被评估和处理(如果需要)之后,行校验子缓冲器700中的被修改位全都被设置为0。这将被修改位重置,使得在行解码的第二次迭代期间,仅行校验子缓冲器700中的在即将到来的列解码期间被更新的那些记录将被处理。
下面的图示出在上述的处理已经被执行之后的图7。
图11是图示在行解码的第一次迭代之后但在列解码的第一次迭代之前的行校验子缓冲器和列校验子缓冲器的实施例的示图。图11继续图7中的示例。在所示示例中,用星号(*)来指示图7与图11之间已经改变的域。为了简洁,在此处未示出校验子域。
在行校验子缓冲器1100中,所有的被修改位都已经被从1改变为0。如上所述,这将行校验子缓冲器1100重置,使得行解码器(在下一次行解码迭代期间)知道由列解码器来修改哪条记录,从而哪个行校验子应当被处理(如果需要的话)。
在第二行码字索引(1102)和第七行码字索引(1104)中,无错位已经被从0改变为1,因为解码对于那些行码字是成功的。注意,第五行码字索引(1106)中的无错位未被改变而维持为0,因为行解码不成功(如上所述)。
在列校验子缓冲器1110中,第十三列码字索引(1123)和第十四列码字索引(1124)中的列校验子和无错位已经被更新。更具体地,那些记录中的储存的列校验子全都为0,而无错位被设置为1。
使用列校验子缓冲器1110中示出的信息,列解码器执行列解码的第一次迭代。下面描述在第一次列解码迭代期间由列解码器在图11上执行的图8到图10的处理。
列码字索引1(1111)和列码字索引(1112)不被处理,因为无错位被设置为1。
列码字索引3(1113):关于第三列码字索引(1113)中的列校验子来执行列解码,且解码成功。由于所有的错误都已经从第三列码字移除,
·第三列码字索引(1113)中的无错位被设置为1,用于第三列码字索引的列校验子被设置为全为0。
在该特定示例中,不存在相关的行码字,因为仅第一个七位的列码字具有相关联的行码字。在不具有相关联的行码字的位13中出现错误,因此不对行校验子缓冲器1100进行更新。
列码字索引4(1114)、列码字索引5(1115)和列码字索引6(1116)不被处理,因为无错位被设置为1。
列码字索引7(1117):关于第七列码字索引(1117)中的列校验子来执行列解码,且解码成功。
·更新第五行码字索引(1106)中的行校验子。在该示例中,第七列码字与第五行码字相关,因此新的列校验子被产生用于第五行码字索引(1106)并被储存于其中。
·第五行码字索引(1106)中的被修改位被设置为1。这用来将如下情况指示给行解码器,即,列解码器更新了第五行码字索引(1106)中的校验子。
由于所有的错误都已从第七列码字移除,
·第七列码字索引(1117)中的无错位被设置为1,用于第七列码字的列校验子被设置为全为0。
在该示例中,被产生用于第五行码字索引(1106)并被保存到第五行码字索引(1106)的被更新的行校验子不全为0,因此第五行码字索引(1106)中的无错位被设置为0。如上所述,无错位可以或者为0或者为1,因此无错位可以被明确地设置为正确的值,因为不能关于该值做出假设。
列码字索引8(1118):关于第八列码字索引(1118)中的列校验子来执行列解码,且解码成功。由于所有的错误都已从第八列码字移除,
·第八列码字索引(1118)中的无错位被设置为1,用于第八列码字索引的列校验子被设置为全为0。
在该特定示例中,不存在相关联的行码字(位13再次包含错误且不存在相关联的行码字),因此行校验子缓冲器1100不被更新。
列码字索引9(1119)不被处理,因为无错位被设置为1。
列码字索引10(1120):关于第十列码字索引(1120)中的列校验子来执行列解码,且解码成功。
·更新第五行码字索引(1106)中的校验子。在该示例中,第十列码字与第五行码字(其有待被成功地解码)相关,因此被更新的行校验子被产生用于第五行码字索引(1106)并被保存到第五行码字索引(1106)。
·第五行码字索引(1106)中的被修改位被设置为1。(注意,该位由于与第七列码字索引(1117)相关联的处理而已经为1。这仅为了完整性而描述。)这反映被更新的行校验子保存到第五行码字索引(1106)。
由于所有的错误都已经从第十列码字移除,
·第十列码字索引(1120)中的无错位被设置为1,且第十列码字索引的列校验子被设置为全为0。
在该特定示例中,被产生用于第五行码字索引(1106)的被更新的校验子仍不全为0,因此第五行码字索引(1106)中的无错位被再次设置为0。
列码字索引11(1121)不被处理,因为无错位被设置为1。
列码字索引12(1122):关于第十二列码字索引(1122)中的列校验子来执行列解码,且解码成功。
·第十二列码字索引(1122)中的无错位被设置为1,用于第十二列码字索引的列校验子被设置为全为0。
在该特定情形中,错误位于不具有对应的行码字的第十四位中。这样,不更新行校验子缓冲器1100。
列码字索引13(1123)和列码字索引14(1124)不被处理,因为无错位被设置为1。
列码字索引15(1125):关于第十五列码字索引(1125)中的列校验子来执行列解码,且解码成功。
·第十五列码字索引(1125)中的无错位被设置为1,第十五列码字索引中的列校验子被设置为全为0。
·更新第五行码字索引(1106)中的校验子。在该示例中,第十五列码字与第五行码字(其有待被成功解码)有关,因此被更新的校验子被产生用于第五行码字索引(1106)。
·第五行码字索引(1106)中的被修改位被设置为1。
被产生用于第五行码字索引(1106)的被更新的行校验子最终全为0,因此下面的更新也被执行。
·第五行码字索引(1106)中的无错位被设置为1。
在列校验子缓冲器1110中的所有记录都已经被处理(如果需要的话)之后,列校验子缓冲器1110中的被修改位全都被设置为0。
下面的图示出在以上处理已经被执行之后的图11。
图12是图示在列解码的第一次迭代之后但在行解码的第二次迭代之前的行校验子缓冲器和列校验子缓冲器的实施例的示图。图12继续图11的示例。在所示示例中,用星号(*)来指示图11与图12之间已经改变的域。
在列校验子缓冲器1210中,所有的被修改位都被设置为0。这将列校验子缓冲器1210重置,并使得列解码器知道(例如,在下一次行解码迭代期间)由行解码器来更新哪条记录。
而且,在列校验子缓冲器1210中,被产生的用于列码字索引1211-1216的被更新的列校验子(未示出)全为0,因此那些记录中的无错位也已经被从0更新为1。
在列解码期间的多次更新之后,与第五行码字索引(1202)相关联的被更新的行校验子(未示出)最终全变为0。结果,用于第五行码字索引(1202)的无错位已经被从0更新为1。
注意,在示出的状态中,行校验子缓冲器1200和列校验子缓冲器1210中的所有无错位都被设置为1。这样,不需要进一步的解码,因为TPC码字已经被成功解码。
回到图3,除图3中所示的那些之外或作为图3中所示出的那些的替代,TPC解码器可以包括其他组件。下面的图示出具有更多组件的TPC解码器的第二实施例。
图13是图示TPC解码器的第二实施例的示图。如上所述,示例性TPC解码器可以被实施为半导体器件,诸如ASIC或FPGA。为了保持可读性,在该图中未示出图3中示出的储存器300和读取控制器302。
在所示示例中,初始化块1300负责在新TPC码字的解码开始时初始化TPC解码器。初始的行校验子和初始的列校验子被产生分别用于并被保存到行校验子缓冲器1302和列校验子缓冲器1304。对于那些对应的校验子全为0的行码字或列码字,通过初始化块1300来将无错位设置为1。如果否,通过初始化块1300来将无错位设置为0。
除将行校验子缓冲器1302和列校验子缓冲器1304中的校验子和无错位初始化之外,初始化块1300还在行校验子缓冲器1302和列校验子缓冲器1304中将被修改位设置为1。在初始化期间将所有的被修改位设置为1是可接受的,因为对应的无错位将导致行和列解码器1310跳过其中行码字或列码字已经被成功解码的行校验子缓冲器1302或列校验子缓冲器1304中的记录。
初始化块1300也负责初始化用来储存TPC码字的TPC缓冲器1306。初始化块1300通过将TPC码字(例如,从储存器接收的)复制到TPC缓冲器1306来这样做。在各种实施例中,TPC缓冲器1306可以为字节寻址RAM或字寻址RAM。换句话说,TPC缓冲器1306可以被划分为可以以每个时钟循环一个单元来访问的8位单元、16位单元或32位单元。随着TPC解码的进行,TPC码字之内的错误(如果有的话)通过在TPC缓冲器1306中翻转位来校正(例如,在保证电势变化应当被提交到TPC缓冲器1306之后)。
一旦初始化完成,控制器1308就接任。控制器1308从行校验子缓冲器1302获得状态信息(例如,无错位和被修改位)和(假设行解码首先进行)行校验子。基于无错位和被修改位,控制器1308将合适的校验子传递到行和列解码器1310以处理,并标志哪个组件解码器是激活的。例如,从控制器1308传送到行和列解码器1310的控制信号可以指示(在此情形中至少)行解码器是激活的。该示例中的从控制器1308传送到行和列解码器1310的校验子将对应于来自具有无错位0和被修改位1的行校验子缓冲器1302的行校验子。
响应于来自控制器1308的控制信号,行和列解码器1310将执行行解码。行和列解码器1310传递对TPC码字的可能改变,例如,以要与行码字或列码字异或的误差矢量的形式。使用对TPC码字的这些改变,校验子更新缓冲器1314产生并储存对行校验子缓冲器和列校验子缓冲器的可能改变。
可能改变被保留在TPC更新缓冲器1312或校验子更新缓冲器1314中,直到已知给定的改变是否应被实际进行。从行和列解码器1310传递到TPC更新缓冲器1312和校验子更新缓冲器1314的可能改变也可以被称作误差矢量或更新矢量。例如,误差矢量可以在错误位置处具有1而在不存在错误处具有0,使得与码字(正被校正的信息的其他片段)进行的异或将通过翻转被识别的错误来导致被识别的错误被固定。
之所以需要这种等待(至少在一些实施例中)的原因涉及行和列解码器1310中的BMA块和CS块。如上所述,BMA块和CS块工作来寻找错误位置多项式的根,这等价于识别码字(在该示例中,为行码字)中的哪个位置具有错误而应当被从1翻转到0,或者反之亦然。行和列解码器1310不能成功地解码码字,因为下面的原因中的任何一个:
·BMA块产生具有次数d>t的错误位置多项式,其中,t为组件码的最大校正能力。由于最多t位能够被校正(但错误位置多项式的次数指示存在多于t个错误),故解码失败。
·BMA块产生具有次数d≤t的错误位置多项式(意味着BMA块认为解码是可能的),但CS块在GF(2m)中未找到d个根。当错误位置多项式在GF(2m)的伸延集中具有根时这种错误情形出现,而宣布解码失败。
更详细地检查第二种失败情况,尽管在一段时间内可以输出可能的改变,但在CS块已经完成之前,不能知道第二种失败情况是否已经出现。这就是为什么可能的改变被储存在TPC更新缓冲器1312和校验子更新缓冲器1314中,直到已知解码是否成功,而特定的改变实际上可以被提交。注意,出于性能的原因,提前(已知改变是否应当被提交之前)产生可能的改变。如果仅在已知改变实际上将被提交之后产生要被施加的改变,则性能将不太好。
在TPC更新缓冲器1312的格式的一个示例中,TPC更新缓冲器1312包含两个域:要被修改的TPC缓冲器1306中的写入地址(例如,字节、字、双字等)和要与被储存在特定写入地址的数据异或以获得新的TPC码字的误差矢量。在一些实施例中,特定的写入地址仅包含TPC码字的一部分。例如,写入地址可以为字节、字或双字,而TPC码字可以为数千字节。注意,TPC更新缓冲器1312没有必要与TPC缓冲器1306为相同大小,而实际上其可以事实上更小,这是期望的。
TPC码字修改器1316事实上负责对TPC缓冲器1306作出改变。由TPC码字修改器1316对TPC缓冲器1306执行的操作的伪代码示例为:read_data=READ(<write_address>);write_data=XOR(read_data,<error_vector>);WRITE(<write_address>,write_data)。如上所述,除非对行(列)码字的解码成功,否则事实上不将给定的改变提交至TPC缓冲器1306中的相关的行(列)码字。
在校验子更新缓冲器1314的格式的一个示例中,校验子更新缓冲器1314包含三个域:行/列位(例如,在行解码期间被设置为0而在列解码期间被设置为1)、正被解码的行码字或列码字的索引或地址以及误差矢量。如上所述,储存在校验子更新缓冲器1314中的改变在行(列)解码成功之前事实上不被提交至行校验子缓冲器1302和列校验子缓冲器1304。
校验子缓冲器修改器1318和校验子缓冲器修改器1320事实上负责分别对行校验子缓冲器1302和列校验子缓冲器1304作出改变。基于校验子更新缓冲器1314中的行/列位的值,校验子缓冲器修改器1318将知道其负责哪些改变(即,具有被设置为0的行/列位的那些),校验子缓冲器修改器1320将知道其负责哪些改变(即,具有被设置为1的行/列位的那些)。如上所述,读取、异或和写入的三步过程可以被用来对校验子缓冲器1302和1304作出改变。而且,如上所述,如果上述第二种失败情况出现(即,CS块不能找到给定的错误位置多项式的所有根),那么校验子更新缓冲器1314中的与错误位置多项式相对应的改变不被提交至合适的校验子缓冲器。
除了更新校验子缓冲器1302和1304中的校验子之外,校验子缓冲器修改器1318和1320也负责更新储存于其中的状态信息(例如,无错位和被修改位)。在一些实施例中,校验子缓冲器修改器1318和1320是“哑”模块,储存在校验子更新缓冲器1314中的信息指定对于给定记录的被修改位和无错位的更新值。
一旦行解码已经完成且已经对缓冲器(即,行校验子缓冲器1302、列校验子缓冲器1304和TPC缓冲器1306)作出合适的改变,列解码就开始。列解码类似于行解码,而为了简洁在此处不描述。
组件解码(即,行解码和列解码)将继续,直到达到最大数目的迭代,或组件校验子指示所有的组件码字都已经被成功解码为止。如果其发生,则TPC缓冲器1306中的被校正TPC码字被输出。
注意,尽管图13仅示出单个组件解码器(即,行和列解码器1310),但一些其他实施例可以具有多个组件解码器(例如,因此可以并行地处理与不同的行(列)校验子相关联的行(列)校验子)。这会是有吸引力的,因为相比于实际的解码过程,将校验子加载到组件解码器中花费较小量的时间,因此期望使多个组件解码器同时运行。注意,在行(列)解码迭代期间,可以彼此独立地解码每个行(列)码字。
下面的图描述用于更新被储存在TPC缓冲器中的TPC码字的过程。如上所述,可能的改变被保留,直到确定特定的改变事实上应当被提交至TPC缓冲器为止。
图14是图示用于更新被储存在TPC缓冲器中的TPC码字的过程的实施例的流程图。在一些实施例中,如所示来执行图8中的步骤806。
在1400处,产生对组件码字的一个或更多个可能的改变。例如,在二元BCH TPC码字的情形下,可能的改变可以包括一个或更多个误差矢量,其中,1指示在该位位置中的需要被校正的错误,0指示在该位位置中无错误。通过将误差矢量与储存的组件码字的对应部分异或可以作出实际校正(如果有的话),使得该错误位置处的位被翻转(这与校正那些位为一回事)。在图13中,可能的改变被从行和列解码器1310传递到TPC更新缓冲器1312。
在1402处,可能的改变与TPC缓冲器中的一个或更多个写入地址相关联。例如,图13中的TPC更新缓冲器1312中的每个条目可以包括写入地址域和要在特定写入地址处施加的误差矢量。
在1404处,判定是否提交可能的改变。如上所述,在一些实施例中,这包括等待组件解码结束,使得知道CS块是否能够定位错误位置多项式的所有根。如果CS块不能够定位错误位置多项式的所有根,那么步骤1404处的判定为否。
如果步骤1404处的判定为是,那么在1406处,可能的改变被施加到被储存在TPC缓冲器中的组件码字。例如,在图13中,使用被储存在TPC更新缓冲器1312中的信息通过TPC码字修改器1316来执行步骤1404,以对被储存在TPC缓冲器1306中的列码字或行码字作出改变。如果在步骤1404处判定为不提交可能的改变,则在1408处舍弃可能的改变和相关联的写入地址。
在各种实施例中,步骤1406处改变的施加由发生的各种事件或被满足的条件中的一种诱发。在一个示例中,在行(列)解码的给定迭代已经完成之后但在列(行)解码的下一次迭代开始之前,提交图13中的TPC更新缓冲器1312中的改变(针对已知它们可以被提交至TPC缓冲器的那些记录)。在另一个示例中,当TPC更新缓冲器1312开始变满(再次,在合适或可能的情况下)时,“释放”TPC更新缓冲器1312。
当TPC解码已经完成时,输出被储存在TPC缓冲器中的被校正的TPC码字。
尽管上述示例描述了2D TPC码(即,具有行编码和列编码),但本文中所描述的技术也适用于具有任意数目的编码或维度的TPC码。在一个示例中,4个4kb 2D TPC码字被组合和交错。然后被交错的数据被与第三编码(被称作主码)纠错编码,以产生与4个4kb 2DTPC码字一起储存的主校验信息。(通常,由于各种成本相关理由,在解码期间不使用主码,除非其他解码技术(例如,其仅依赖于行编码和列编码)已经失败。)此处描述的技术可以被用来缓解具有三个或更多个编码或维度的系统中的瓶颈。例如,可以存在以上述方式来管理和/或使用的主校验子缓冲器。
尽管已经出于清楚地理解的目的而描述了上述实施例,但本发明不局限于所提供的细节。存在实施本发明的很多替代方法。所公开的实施例为说明性的而非限制性的。
Claims (20)
1.一种用于解码涡轮乘积码TPC的系统,包括:
组件校验子缓冲器;
组件解码器,被配置用来:
从组件校验子缓冲器获得与TPC码字相关联的一个或更多个组件校验子的组;以及
关于所述一个或更多个组件校验子的组来执行组件解码;以及
初始化块,初始化块被配置用来:
使用TPC码字来产生一个或更多个组件校验子的初始组;
将组件校验子缓冲器中的组件校验子的组设置为组件校验子的初始组;
至少部分地基于组件校验子的初始组来识别那些不需要校正的组件码字和那些需要校正的组件码字;
至少部分地基于对那些不需要校正的组件码字和那些需要校正的组件码字的识别来设置一个或更多个无错位;以及
设置一个或更多个被修改位来指示相关联的记录已经被修改。
2.如权利要求1所述的系统,其中,所述系统包括半导体器件,半导体器件包括下面中的一种或更多种:专用集成电路ASIC或现场可编程门阵列FPGA。
3.如权利要求1所述的系统,其中,组件校验子缓冲器包括下面中的一种或更多种:行校验子缓冲器、列校验子缓冲器或主校验子缓冲器。
4.如权利要求1所述的系统,其中,组件校验子的组包括下面中的一种或更多种:一个或更多个行校验子的组、一个或更多个列校验子的组或者一个或更多个主校验子的组。
5.如权利要求1所述的系统,其中,TPC码字与下面中的一种或更多种相关联:博斯-乔赫里-霍克文黑姆BCH码或里德-所罗门RS码。
6.如权利要求1所述的系统,还包括:TPC缓冲器,被配置用来储存TPC码字,其中,初始化块还被配置用来将TPC缓冲器中的TPC码字设置为从储存器复制来的初始TPC码字。
7.一种用于解码涡轮乘积码TPC的系统,包括:
组件校验子缓冲器;
组件解码器,被配置用来:
从组件校验子缓冲器获得与TPC码字相关联的一个或更多个组件校验子的组;以及
关于所述一个或更多个组件校验子的组来执行组件解码;以及
TPC码字修改器和校验子缓冲器修改器;
其中,组件解码器被配置用来执行组件解码,包括通过:
判定在正被处理的组件码字索引中无错位是否等于0以及被修改位是否等于1;以及
如果判定为无错位等于0且被修改位等于1,则:
关于储存在正被处理的组件码字索引中的一个或更多个组件校验子来执行组件解码;以及
判定解码是否成功;以及
如果判定为解码成功,则:
TPC码字修改器被配置用来在TPC缓冲器中更新TPC码字;以及
校验子缓冲器修改器被配置用来:
在第一组件校验子缓冲器中更新正被处理的组件码字索引;以及
在第二组件校验子缓冲器中更新与正被处理的组件码字索引相关的一个或更多个组件码字索引。
8.如权利要求7所述的系统,其中,校验子缓冲器修改器被配置用来在第一组件校验子缓冲器中更新正被处理的组件码字索引,包括通过:
基于对TPC码字的一个或更多个改变来产生对储存在正被处理的组件码字索引中的组件校验子的一个或更多个改变;
提交对储存在正被处理的组件码字索引中的组件校验子的改变;
判定被更新的组件校验子是否全都为0;以及
如果判定为被更新的组件校验子全都为0,则将正被处理的组件码字索引中的无错位设置为1。
9.如权利要求7所述的系统,其中,校验子缓冲器修改器被配置用来在第二组件校验子缓冲器中更新一个或更多个组件码字索引,包括通过:
基于对TPC码字的一个或更多个改变来产生对储存在相关的组件码字索引中的组件校验子的一个或更多个改变;
提交对储存在相关的组件码字索引中的组件校验子的改变;
将相关的组件码字索引中的被修改位设置为1;
判定被更新的组件校验子是否全都为0;
如果判定为被更新的组件校验子全都为0,则将相关的组件码字索引中的无错位设置为1;以及
如果判定为被更新的组件校验子不全为0,则将相关的组件码字索引中的无错位设置为0。
10.如权利要求7所述的系统,其中,TPC码字修改器被配置用来在TPC缓冲器中更新TPC码字,包括通过:
产生对组件码字的一个或更多个可能的改变;
将可能的改变与TPC缓冲器中的一个或更多个写入地址相关联;
判定是否提交可能的改变;
如果判定为提交可能的改变,则将可能的改变施加到储存在TPC缓冲器中的组件码字;以及
如果判定为不提交可能的改变,则舍弃可能的改变和相关联的写入地址。
11.一种用于解码涡轮乘积码TPC的方法,包括:
从组件校验子缓冲器获得与TPC码字相关联的一个或更多个组件校验子的组;
使用解码器来关于所述一个或更多个组件校验子的组执行组件解码;
使用TPC码字来产生一个或更多个组件校验子的初始组;
将组件校验子缓冲器中的组件校验子的组设置为组件校验子的初始组;
至少部分地基于组件校验子的初始组来识别那些不需要校正的组件码字和那些需要校正的组件码字;
至少部分地基于对那些不需要校正的组件码字和那些需要校正的组件码字的识别来设置一个或更多个无错位;以及
设置一个或更多个被修改位来指示相关联的记录已经被修改。
12.如权利要求11所述的方法,其中,由半导体器件来执行所述方法,半导体器件包括下面中的一种或更多种:专用集成电路ASIC或现场可编程门阵列FPGA。
13.如权利要求11所述的方法,其中,组件校验子缓冲器包括下面中的一种或更多种:行校验子缓冲器、列校验子缓冲器或主校验子缓冲器。
14.如权利要求11所述的方法,其中,组件校验子的组包括下面中的一种或更多种:一个或更多个行校验子的组、一个或更多个列校验子的组或者一个或更多个主校验子的组。
15.如权利要求11所述的方法,其中,TPC码字与下面中的一种或更多种相关联:博斯-乔赫里-霍克文黑姆BCH码或里德-所罗门RS码。
16.如权利要求11所述的方法,还包括:将TPC码字储存在TPC缓冲器中,其中,TPC缓冲器中的TPC码字被初始化为从储存器复制的初始TPC码字。
17.如权利要求11所述的方法,还包括:
判定在正被处理的组件码字索引中无错位是否等于0以及被修改位是否等于1;以及
如果判定为无错位等于0且被修改位等于1,则:
关于储存在正被处理的组件码字索引中的一个或更多个组件校验子来执行组件解码;
判定解码是否成功;以及
如果判定为解码成功,则:
在TPC缓冲器中更新TPC码字;
在第一组件校验子缓冲器中更新正被处理的组件码字索引;以及
在第二组件校验子缓冲器中更新与正被处理的组件码字索引相关的一个或更多个组件码字索引。
18.如权利要求17所述的方法,其中,在第一组件校验子缓冲器中更新正被处理的组件码字索引包括:
基于对TPC码字的一个或更多个改变来产生对储存在正被处理的组件码字索引中的组件校验子的一个或更多个改变;
提交对储存在正被处理的组件码字索引中的组件校验子的改变;
判定被更新的组件校验子是否全都为0;以及
如果判定为被更新的组件校验子全都为0,则将正被处理的组件码字索引中的无错位设置为1。
19.如权利要求17所述的方法,其中,在第二组件校验子缓冲器中更新一个或更多个组件码字索引包括:
基于对TPC码字的一个或更多个改变来产生对储存在相关的组件码字索引中的组件校验子的一个或更多个改变;
提交对储存在相关的组件码字索引中的组件校验子的改变;
将相关的组件码字索引中的被修改位设置为1;
判定被更新的组件校验子是否全都为0;
如果判定为被更新的组件校验子全都为0,则将相关的组件码字索引中的无错位设置为1;以及
如果判定为被更新的组件校验子不全为0,则将相关的组件码字索引中的无错位设置为0。
20.如权利要求17所述的方法,其中,在TPC缓冲器中更新TPC码字包括:
产生对组件码字的一个或更多个可能的改变;
将可能的改变与TPC缓冲器中的一个或更多个写入地址相关联;
判定是否提交可能的改变;
如果判定为提交可能的改变,则将可能的改变施加到储存在TPC缓冲器中的组件码字;以及
如果判定为不提交可能的改变,则舍弃可能的改变和相关联的写入地址。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361816512P | 2013-04-26 | 2013-04-26 | |
US61/816,512 | 2013-04-26 | ||
US14/219,764 | 2014-03-19 | ||
US14/219,764 US9391641B2 (en) | 2013-04-26 | 2014-03-19 | Syndrome tables for decoding turbo-product codes |
PCT/IB2014/001381 WO2014174370A2 (en) | 2013-04-26 | 2014-03-25 | Syndrome tables for decoding turbo-product codes |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105191146A CN105191146A (zh) | 2015-12-23 |
CN105191146B true CN105191146B (zh) | 2019-03-05 |
Family
ID=51790379
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480023781.4A Active CN105191146B (zh) | 2013-04-26 | 2014-03-25 | 用于解码涡轮乘积码的校验子表 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9391641B2 (zh) |
CN (1) | CN105191146B (zh) |
TW (1) | TWI539758B (zh) |
WO (1) | WO2014174370A2 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9673840B2 (en) * | 2014-12-08 | 2017-06-06 | SK Hynix Inc. | Turbo product codes for NAND flash |
US9998148B2 (en) | 2015-12-01 | 2018-06-12 | SK Hynix Inc. | Techniques for low complexity turbo product code decoding |
US10187086B2 (en) | 2017-03-15 | 2019-01-22 | SK Hynix Inc. | State-based decoding of product codes |
US10998922B2 (en) * | 2017-07-28 | 2021-05-04 | Mitsubishi Electric Research Laboratories, Inc. | Turbo product polar coding with hard decision cleaning |
US10831596B2 (en) | 2018-01-22 | 2020-11-10 | Micron Technology, Inc. | Enhanced error correcting code capability using variable logical to physical associations of a data block |
US10951239B2 (en) * | 2018-02-20 | 2021-03-16 | Micron Technology, Inc. | Performing a decoding operation to simulate switching a bit of an identified set of bits of a data block |
US10439648B1 (en) * | 2018-04-10 | 2019-10-08 | Micron Technology, Inc. | Area efficient implementation of a product code error correcting code decoder |
US10846175B2 (en) | 2018-04-10 | 2020-11-24 | Micron Technology, Inc. | High throughput bit correction of data inside a word buffer for a product code decoder |
CN110896309B (zh) * | 2018-09-12 | 2022-11-15 | 中兴通讯股份有限公司 | Turbo乘积码的译码方法、装置、译码器及计算机存储介质 |
US11770137B1 (en) * | 2020-09-21 | 2023-09-26 | Infinera Corporation | Error floor performance improvement of generalized product codes |
DE102021133678A1 (de) * | 2021-01-20 | 2022-07-21 | Infineon Technologies Ag | Korrektur von bitfehlern |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1266555A (zh) * | 1998-05-04 | 2000-09-13 | 阿尔卡塔尔公司 | 乘积码的迭代解码 |
WO2003030370A2 (en) * | 2001-10-04 | 2003-04-10 | Comtech Aha Corporation | Method of decoding a turbo product code utilizing a scalable and hardware efficient forward error correction decoder |
CN1414707A (zh) * | 2002-12-20 | 2003-04-30 | 清华大学 | 用于降低乘积码译码所需存储量和复杂度的方法 |
WO2004004132A1 (fr) * | 2002-07-01 | 2004-01-08 | Linkair Communications,Inc. | Procede et appareil de decodage iteratif pour code de produit fonde sur une formule adjointe |
CN1820418A (zh) * | 2003-07-09 | 2006-08-16 | 汤姆森特许公司 | 里德-所罗门乘积码的错误校正方法 |
CN101777926A (zh) * | 2010-01-12 | 2010-07-14 | 浙江大学 | 一种Turbo乘积码的通用译码器及其方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1281241A2 (en) | 2000-04-04 | 2003-02-05 | Advanced Hardware Architectures, Inc | Enhanced turbo product code decoder system |
US20040019842A1 (en) | 2002-07-24 | 2004-01-29 | Cenk Argon | Efficient decoding of product codes |
US7600177B2 (en) * | 2005-02-08 | 2009-10-06 | Lsi Corporation | Delta syndrome based iterative Reed-Solomon product code decoder |
US7725800B2 (en) | 2005-08-05 | 2010-05-25 | Hitachi Global Stroage Technologies Netherlands, B.V. | Decoding techniques for correcting errors using soft information |
US20090086839A1 (en) | 2005-11-07 | 2009-04-02 | Agency For Science, Technology And Research | Methods and devices for decoding and encoding data |
-
2014
- 2014-03-19 US US14/219,764 patent/US9391641B2/en active Active
- 2014-03-25 CN CN201480023781.4A patent/CN105191146B/zh active Active
- 2014-03-25 WO PCT/IB2014/001381 patent/WO2014174370A2/en active Application Filing
- 2014-04-24 TW TW103114896A patent/TWI539758B/zh active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1266555A (zh) * | 1998-05-04 | 2000-09-13 | 阿尔卡塔尔公司 | 乘积码的迭代解码 |
WO2003030370A2 (en) * | 2001-10-04 | 2003-04-10 | Comtech Aha Corporation | Method of decoding a turbo product code utilizing a scalable and hardware efficient forward error correction decoder |
WO2004004132A1 (fr) * | 2002-07-01 | 2004-01-08 | Linkair Communications,Inc. | Procede et appareil de decodage iteratif pour code de produit fonde sur une formule adjointe |
CN1414707A (zh) * | 2002-12-20 | 2003-04-30 | 清华大学 | 用于降低乘积码译码所需存储量和复杂度的方法 |
CN1820418A (zh) * | 2003-07-09 | 2006-08-16 | 汤姆森特许公司 | 里德-所罗门乘积码的错误校正方法 |
CN101777926A (zh) * | 2010-01-12 | 2010-07-14 | 浙江大学 | 一种Turbo乘积码的通用译码器及其方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2014174370A2 (en) | 2014-10-30 |
US20140325320A1 (en) | 2014-10-30 |
CN105191146A (zh) | 2015-12-23 |
TW201511479A (zh) | 2015-03-16 |
US9391641B2 (en) | 2016-07-12 |
TWI539758B (zh) | 2016-06-21 |
WO2014174370A3 (en) | 2015-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105191146B (zh) | 用于解码涡轮乘积码的校验子表 | |
KR102108386B1 (ko) | 저장 장치 및 그것의 데이터 엔코딩 및 디코딩 방법들 | |
CN106856103B (zh) | 用于与非闪存的涡轮乘积码 | |
US9985658B2 (en) | Decoding of product codes | |
JP6388599B2 (ja) | 不均一誤り保護を備えたヘッダ付サブ・データ・セットを復号するためのシステム、方法、及びプログラム | |
US8806295B2 (en) | Mis-correction and no-correction rates for error control | |
CN101211667A (zh) | 降低误纠概率的纠错电路和方法和包括该电路的存储设备 | |
US10090860B2 (en) | Memory system using integrated parallel interleaved concatenation | |
US10498364B2 (en) | Error correction circuits and memory controllers including the same | |
US11184026B2 (en) | Super-HPC error correction code | |
KR20090041224A (ko) | 연접 디코더 및 연접 디코딩 방법 | |
WO2017103716A1 (en) | Post-decoding error check with diagnostics for product codes | |
US9960788B2 (en) | Memory controller, semiconductor memory device, and control method for semiconductor memory device | |
US20180122494A1 (en) | Raid decoding architecture with reduced bandwidth | |
JP7429223B2 (ja) | ターボ積符号の復号方法、装置、デコーダー及びコンピュータ記憶媒体 | |
US8977936B2 (en) | Strong single and multiple error correcting WOM codes, coding methods and devices | |
KR20210001927A (ko) | 국부성을 사용한 일반화된 연접 에러 정정 코딩 방법 | |
JP2020046823A (ja) | メモリシステム | |
US20070022358A1 (en) | Methods and apparatuses for generating error correction codes | |
Rajab | Channel and source coding for non-volatile flash memories | |
US20160043741A1 (en) | Coding method and device | |
US20040249840A1 (en) | Device and method for block code error correction | |
KR20230132697A (ko) | 일반 연결 코드 코드워드를 디코딩하는 장치, 저장 시스템 및 그 제어 방법 | |
KR20170067656A (ko) | Nand 플래시용 터보 프로덕트 코드 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |