CN106708654A - 一种用于NANDflash的BCH纠错码的电路结构 - Google Patents
一种用于NANDflash的BCH纠错码的电路结构 Download PDFInfo
- Publication number
- CN106708654A CN106708654A CN201710017892.XA CN201710017892A CN106708654A CN 106708654 A CN106708654 A CN 106708654A CN 201710017892 A CN201710017892 A CN 201710017892A CN 106708654 A CN106708654 A CN 106708654A
- Authority
- CN
- China
- Prior art keywords
- parallel
- circuit
- error correction
- error
- nand flash
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/44—Indication or identification of errors, e.g. for repair
Abstract
该发明公开了一种用于NAND flash的BCH纠错码的电路结构,涉及存储系统,尤指一种纠错电路,用于NAND flash存储数据时检错纠错,包括:BCH并行编码部分、BCH并行解码部分。并行解码部分包括并行伴随式计算电路,错误位置多项式计算电路,并行搜索求根计算电路;对各个硬件电路进行模块化设计,并且进行八位并行数据处理,不仅能够满足快速编码和解码达到快速纠错检错的目的,采用八位并行还能够使该纠错电路挂接在总线上,使NAND flash与总线互连,具有一定的扩展性。该纠错电路能够符合NAND flash读写操作要求,牺牲部分读写效率和存储空间,具有速度快、成本低、吞吐率高和扩展性好等优点。
Description
技术领域
本发明属于存储技术领域,特别是涉及NAND flash存储数据时容易发生比特流翻转的情况,针对此种情况提出每进行NAND flash页写入4096bits时,进行并行编码处理,生108bits的校验位,取出数据时完成并行解码处理,实现检错纠错功能,该电路结构能够实现4096bits中最高纠8bits错误。
背景技术
近年来基于闪存技术的存储设备,因为其容量大,成本低廉的优点而广受欢迎。在闪存存储领域,NAND flash存储器件由于具有容量大成本低的显著优势,从而被频繁的使用为存储介质。作为闪存的物理结构使其有固定的几率发生错误,而且大多数现有的存储器件并没有集成纠错算法,因而需要纠错码技术使得信息安全可靠的存储。BCH纠错码因为具有优良的纠错能力和规则的实现方法,在闪存存储结构中的得到广泛应用。
纠错码是一种在传输过程中发生错误在接收端能够自行发现和纠正的码。为了使一种码具有纠错能力,必须对原码字增加多余的码元,即把原码元按照一定的规则变成一种具有校验位的码字,这种关系的建立称为编码。码字到达接收端可以根据编码规则是否满足来判断是否有错,当不能满足时,按照一定的规则检测出错误所在的位置并给予纠正,这就是解码。
BCH纠错码是一类重要的纠错码,属于线性分组码的一种。它将每k个信息码元分为一组进行独立的编码,变成长度为n(n>k)的码组,多出来的n-k个信息元被称为监督码元,编码可以表示为[n,k],解码过程与编码过程相反,把长度为n的码组进行解码变为k个信息码元。由于本发明应用于NAND flash存储领域,信息码元为4096位,监督码元为104位,纠错能力最高为8bits,本发明重点研究的是具有该纠错能力的BCH的编码和解码电路结构。
发明内容
针对背景技术中NAND flash存取数据时容易发生比特流的翻转,而现有的存储器大多数都没有集成纠错算法的特点,设计了一种具有特定纠错能力的纠错电路,具体包括编码电路和解码电路,从而使NAND flash存储数据时达到特定的纠错能力。该纠错电路采用并行编码和解码设计,该电路具有速度快,成本低,纠错能力强,效率高等特点。
本发明的技术方案是一种应用于NAND flash的具有特定纠错能力的BCH纠错电路结构,该纠错电路结合了并行编码和解码优点,可以为NAND flash读取数据提供快速的纠错检错。该纠错电路包括:具有八位并行编码电路、具有八位并行的解码电路。其中由于事先研究过BCH特定的构码规则,所以编码模块直接就是一个单独的并行编码电路。解码模块包括八位并行的伴随式计算电路,错误位置多项式计算电路,钱搜索求根电路。
并行编码电路根据生成多项式构建的。解码模块中的伴随式计算电路是将接收到的码字计算出对应的伴随式,并根据伴随式判断接收码字有无错误发生。若存在伴随式不为零的情况,则说明有错误发生,则根据伴随式求得错误位置多项式。根据错误位置多项式,求解错误位置的根,得到错误位置,并进行纠错改正,最终得到正确的码字。
下面简单介绍BCH码的基本原理和构建编码解码的一些方法。BCH码是一种线性分组码,所谓分组码是将信元拆分为一个一个的分组分别进行处理和编码,将每k个信息码元分为一组进行独立的编码,变成长度为n(n>k)的码组,多出来的n-k个信息元被称为校验码,编码可以表示为[n,k]。线性分组码是指信息码元与校验码之间满足线性关系的特殊分组码。定义一个线性分组码的信息序列为M,生成矩阵为G,校验矩阵为H,码字为C,接收码字为R,伴随式为S,其中生成矩阵和校验矩阵关系为:GHT=0(n-k)*k,编码方式为信息序列与生成矩阵的乘积得到编码后的码字:M1*(n-k)G(n-k)*n=C1*n,译码时接收码字与校验矩阵得到伴随式:R1*n HT=S1*k,再根据伴随式计算错误位置和求解错误位置的根,达到纠错的目的。同时BCH码也是一种系统循环码,一个码的码字经过循环移位之后仍然是一个码字,这种码字称为循环码,要构造一个[n,k]循环码,就是找一个能够除尽的n-k次生成多项式g(x),该多项式满足对于任意一个次数小于等于k-1的多项式m(x),都能满足:C(x)=m(x)g(x),这里的C(x)为码字多项式,m(x)信息码元多项式。对于BCH码而言,进行编码的关键问题是求解校验码的问题,对于校验码的求解相当于将信息码元多项式m(x)乘以xn-k,然后对g(x)求余式的问题,这个在电路里面可以用移位寄存器和异或门来实现。类似的解码过程相当于将接收到的码字多项式r(x)除以生成多项式g(x)的余式就是伴随式r(x),根据对伴随式的计算求得错误位置多项式,并求解错误位置的根,最后达到纠错的目的。
接下来具体介绍BCH码的一些规则,尤其是生成多项式的生成原理。BCH码的涉及到二进制有限域里面的运算,对于BCH码的具体定义如下:对于一个取自GF(2)上的循环码,定义一个扩域,若这个码的生成多项式g(x)在上存在p-1个连续根,则这个码被称为BCH码。BCH码的运算都在有限域的扩域上,下面主要介绍有限域里面的一些概念:1、有限域元素:在有限域GF(2m)上,0,α0,α1,α2,α3,……,α2m-1称为有限域GF(2m)中的2m个元素,本次发明中m取13。2、有限域共轭根元素:对具有某种共同特性的有限域元素归纳为有限域共轭根集,αi,(αi)2,(αi)3,(αi)4,……(αi)m就是一组共轭根元素,本次发明m取13,i的取值1,3,5,7……15。3、最小多项式:以有限域共轭集αi为根的GF(2m)上的次数最低的不可约多项式mi(x)称为αi的最小多项式,求最小多项式的方法一般采用待定系数法。4、生成多项式:一个能够纠正t个错误的BCH码的生成多项式的基本方法是求出2t个最小多项式的最小公倍式,由于αi与α2i属于同一个共轭根集,有相同的最小多项式,所以生成多项式可以化简为求t个最小多项式的乘积,本次发明t取8。
总结下生成多项式的生成具体步骤,首先,根据预计的码元长度确定需要使用的有限域,若期望本原BCH码元长度为2m-1则选定扩域为GF(2m);其次,通过查询表获得m次的本原多项式,并根据本原多项式计算出2m个有限域元素和相应的有限域共轭集;最后,根据共轭根集求出t个最小多项式,并计算乘积求得生成多项式g(x),g(x)的最高次数为最多为m*t。最后得到的生成多项式会用在我们的编码和解码上。
需要的BCH码为[4200,4096]码,该码是一个[8191,8087]码的缩短码,拥有同样的生成多项式,只是将信息码元截短为4096bit即可,故m取13即可。当m=13时,本原多项式,最小多项式和生成多项式分别如下所示:
f(x)=x13+x4+x3+x+1
m1(x)=x13+x4+x3+x1+x0,m3(x)=x13+x10+x9+x7+x5+x4+x0
m5(x)=x13+x11+x8+x7+x4+x1+x0,m7(x)=x13+x10+x9+x8+x6+x3+x2+x1+x0
m9(x)=x13+x12+x8+x7+x6+x5+x0,m11(x)=x13+x9+x8+x7+x5+x1+x0
m13(x)=x13+x12+x6+x5+x4+x3+x0,m15(x)=x13+x9+x7+x5+x4+x3+x2+x1+x0
g(x)=x104+x100+x98+x96+x95+x94+x93+x92+x91+x88+x84+x82+x79+x78+x77+x70+x69+x68
+x67+x65+x64+x59+x58+x52+x49+x48+x47+x42+x41+x40+x38+x32+x31+x30+x26+x24+x23
+x22+x18+x15+x14+x13+x12+x11+x9+x8+x5+x1+1
对于编码器设计关键是求解校验码的问题,求解校验码的具体步骤就是将信息多项式m(x)乘以xn-k,然后用生成多项式g(x)求其余式。这个问题很容易在电路中实现,通常可以使用线性反馈移位寄存器。对于解码器设计的关键就是求得错误位置多项式,其中涉及到伴随式的计算,求得错误位置多项式还必须求得具体的错误所处的位置,并进行翻转修正才能达到纠错的目的,解码总体来说比编码结构更复杂些。
附图说明
图1为BCH纠错码具体电路结构示意图;
图2为串行编码电路结构示意图;
图3为八位并行编码电路结构示意图;
图4为串行伴随式计算结构示意图;
图5为八位并行伴随式计算结构示意图;
图6为错误位置多项式求解结构示意图;
图7为串行钱搜索求根示意图;
图8为八位并行钱搜索求根示意图;
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施案例仅仅用以解释本发明,并不用于限定本发明。
本发明实例中具体的BCH纠错码电路如图1所示。传输中编码前的数据经过八位并行编码电路,得到编码之后的数据存储在NAND flash里面,编码之后的数据包括信息位和校验位。读取数据时译码前的数据经过并行伴随式计算电路,错误位置计算电路,并行钱搜索求根电路,最终得到译码之后的数据,实现检错纠错的功能。
具体的,在本发明实例中BCH纠错码电路的并行编码模块如图3所示,在接收并行编码模块之前介绍串行编码模块如图2所示。在串行编码模块中,4096位信息为从高位到低位依次串行输入,104个寄存器用于存储校验位,最高位异或门的输出结果反馈给其它位,具体反馈情况与生成多项式g(x)有关,相关校验位寄存器在g(x)里面系数不为0,则存在最高位异或门的输出结果到其的反馈通路。具体操作如下,在前4096个周期依次从高位到低位输入4096为信息位,信息位传送完毕,104位校验位寄存器里面所存储的正是104位的校验位。如果该校验位需要串行输出的话,总共所需时间为4200个周期。基于串行编码的原理基础上,本次发明改进为八位并行编码,能够缩短编码时间,提高吞吐率,具体电路结构如图3所示。在每个周期内依次输入八位信息位,反馈通路与串行编码一样,这样在每个周期内能够处理八位信息位的计算,每次计算结果依旧保存在104位校验位寄存器中。在这种并行结构中,只需要512个周期就可以把信息位传输完毕,若考虑校验位也是八位传输的,则总共需要525个周期。根据对比可以发现虽然并行编码比串行编码消耗的资源更多,但同时速度和吞吐率的提升也是非常可观的。
本发明实例中BCH纠错码电路的并行伴随式计算电路如图5所示,在介绍并行伴随式计算之前先介绍串行伴随式计算模块如图4所示。根据BCH码的纠错能力可知,纠错能力为t的BCH码,需要在接收模块计算2t个伴随式S1到S2t,计算伴随式只需要将有限域元素αj代入到接收码字多项式C(x)中计算乘积求得C(x),则伴随式为Sj=C(αj),计算伴随式就会用到有限域元素的乘法和加法运算。在串行伴随式计算电路中,只需把接收码元从高位到低位依次送入计算电路中,每次对计算结果进行迭代和保存,当所有的码元都送入后,下一个周期寄存器的值就是伴随式的结果,对于不同的伴随式计算只需要更新有限域元素。对于GF(2m)上的加法,就是对应的域元素按位异或运算;GF(2m)上的乘法,就是对应的域元素对幂指数求模运算。基于串行的伴随式计算电路很容易改成并行的计算电路,本次发明所采用的八位并行伴随式计算电路结构如5所示。每次从高位到低位将八位接收码元送入接收电路,结合不同的反馈系数进行迭代,可以在一个周期内进行多次计算,大大缩短计算时间。与串行伴随式计算电路相比,该并行伴随式计算电路结构相对复杂一些,但是关键路径大大缩短,效率大大提高。
本发明实例中BCH纠错码电路的错误位置多项式计算电路如图6所示。错误位置多项式的计算是BCH码的译码过程中最复杂的一个步骤,现有的求解算法也比较多,本次发明中采用的是改进的Berlekamp-Massey迭代算法,采用的是RiBM算法,该算法具有结构简单计算速度快等诸多优点,具体步骤如下所示。
初始条件:δi(0)=θi(0)=Si,(i=0,1,...,2t-1);δi(0)=1,(i=3t);δi(0)=0,(i=2t,2t+1,...,3t-1);k(0)=0;γ(0)=1;r=0.
跳转部分:判断r是否等于2t-1,如果相等跳转(5),否则跳转(3)。
计算判断部分:δi(r+1)=γ(r)·δi+1(r)-δ0(r)·θi(r),(i=0,1,...,3t).随后是判断部分,若有δ0≠0且k(r)≥0,则有:θi(r+1)=δi+1(r),(i=0,1,...3r),γ(r+1)=δi+1(r),k(r+1)=-k(r)-1.否则:θi(r+1)=θi(r),(i=0,1,...3r),γ(r+1)=γ(r),k(r+1)=k(r)+1.
自加部分:r加1,并回到(2),进行下一步操作。
结果部分:结束循环,输出错误位置多项式的各项系数:σi=δ(t+i),(i=0,1,2,……,t)最后得到错误位置多项式,对图5而言数据选择器的判断端口由条件δ0≠0且k(r)≥0判断,同样也涉及到有限域乘运算和有限域加运算。
本发明实例中BCH纠错码电路的并行钱搜索求根电路如图8所示,在介绍并行钱搜索求根电路之前先介绍串行钱搜索求根电路如图7所示。在求得错误位置多项式的基础上,接下来就是求得错误位置的根来确定错误位置,并进行纠错。其中我们通过之前的电路可以得到σ(x),直接求根法比较困难,钱搜索求根的思路是将有限域元素依次带入错误位置多项式中看能否满足:σ(αi)=0。对于数据的第L位数据rn-L,要判断其是否有错,则只需判断σ(αL)是否为0即可,若为0,则说明数据有错,由于编码都是二进制编码,对第L位数据取反即可完成对错误的修正。对于串行钱搜索求根计算电路从码元的高位开始逐位进行检测,首先寄存器初始化错误位置多项式系数σi,然后依次从高位开始输入接收码序列,同时在计算电路中计算有限域乘法,并对结果进行求和。如果求和结果等于0,则说明对应位有错,求和模块判断模块输出1,与对应的接受码进行异或操作,即可将数据取反,进行修正;如果不等于0,则求和判断模块输出0,异或之后使得对应位不变,这样就完成一个bit的检错和纠错。接着可以进行下一次循环,直到所有的数据完全通过钱搜索求根电路完成检错和纠错,计算才完成。对于八位并行钱搜索求根电路如图8所示,设计并行钱搜索求根电路与其他并行电路思想类似,采用了迭代的思想,由于并行度为8,所以每次寄存器更新值由串行电路里面的αi变为并行电路里面的α8i,并且加入了αi到α7i的计算单元电路,用于计算两次更新的间隔值。与串行钱搜索求根电路相比,并行钱搜索求根电路虽然消耗的资源较多,但计算速度大大提升,效率也大大提高。
Claims (4)
1.一种用于NAND flash的BCH纠错码的电路结构,该电路结构包括:BCH并行编码部分和BCH并行解码部分,其中并行解码部分包括并行伴随式计算电路,错误位置多项式计算电路,并行钱搜索求根电路。
2.其中BCH并行编码电路是在传统的串行编码电路基础上提出的一种新的电路结构,该电路结构简单,每个周期并行处理8位数据,能够实现快速并行编码,效率较高。
3.并行解码部分的并行伴随式计算电路在串行计算的基础上做了些改进,采用循环迭代,能够快速实现并行伴随式的计算,错误位置多项式计算以及搜索求根计算。
4.如权利要求1所述的一种用于NAND flash的BCH纠错码的电路,其特征在于采用并行编码和并行解码技术能够达到快速纠错的目的,在原有NAND flash读写基础上加入纠错码电路,由于有校验码的存在,牺牲部分读写效率和部分存储空间,但是能够大大提升NANDflash存储数据的稳定性,能够在页读写4096位中纠正8位错误,能够保证数据的稳定正确。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710017892.XA CN106708654A (zh) | 2017-01-10 | 2017-01-10 | 一种用于NANDflash的BCH纠错码的电路结构 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710017892.XA CN106708654A (zh) | 2017-01-10 | 2017-01-10 | 一种用于NANDflash的BCH纠错码的电路结构 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106708654A true CN106708654A (zh) | 2017-05-24 |
Family
ID=58907192
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710017892.XA Pending CN106708654A (zh) | 2017-01-10 | 2017-01-10 | 一种用于NANDflash的BCH纠错码的电路结构 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106708654A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110489268A (zh) * | 2019-08-05 | 2019-11-22 | 南开大学 | 一种应用于星上恶劣环境中存储系统的两级纠错编码方法与系统 |
CN110908827A (zh) * | 2019-11-19 | 2020-03-24 | 天津津航计算技术研究所 | 用于NAND Flash闪存纠错的并行BCH解码方法 |
CN111192624A (zh) * | 2019-12-30 | 2020-05-22 | 深圳市芯天下技术有限公司 | 测试bch纠错码的性能的系统及方法 |
CN112286716A (zh) * | 2020-10-21 | 2021-01-29 | 天津津航计算技术研究所 | 一种1024字节的存储系统差错控制模块 |
-
2017
- 2017-01-10 CN CN201710017892.XA patent/CN106708654A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110489268A (zh) * | 2019-08-05 | 2019-11-22 | 南开大学 | 一种应用于星上恶劣环境中存储系统的两级纠错编码方法与系统 |
CN110489268B (zh) * | 2019-08-05 | 2023-01-20 | 南开大学 | 一种应用于星上恶劣环境中存储系统的两级纠错编码方法与系统 |
CN110908827A (zh) * | 2019-11-19 | 2020-03-24 | 天津津航计算技术研究所 | 用于NAND Flash闪存纠错的并行BCH解码方法 |
CN111192624A (zh) * | 2019-12-30 | 2020-05-22 | 深圳市芯天下技术有限公司 | 测试bch纠错码的性能的系统及方法 |
CN112286716A (zh) * | 2020-10-21 | 2021-01-29 | 天津津航计算技术研究所 | 一种1024字节的存储系统差错控制模块 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Huang et al. | Binary linear locally repairable codes | |
CN101814922B (zh) | 基于bch码的多位错纠错方法和装置以及存储系统 | |
Yaakobi et al. | Decoding of cyclic codes over symbol-pair read channels | |
US5440570A (en) | Real-time binary BCH decoder | |
CN101656541B (zh) | Rs码的译码方法和装置 | |
CN105553485B (zh) | 基于fpga的bch编解码装置及其编解码方法 | |
CN101946230B (zh) | 用于检测和校正所接收的符号串中的定相突发差错、删除、符号差错和位差错的方法和系统 | |
CN106708654A (zh) | 一种用于NANDflash的BCH纠错码的电路结构 | |
CN110071727B (zh) | 编码方法、译码方法、纠错方法及装置 | |
CN101288232B (zh) | 对数据进行编码和解码的方法以及设备 | |
CN101227194A (zh) | 用于并行bch编码的电路、编码器及方法 | |
CN109981112A (zh) | 一种部分循环冗余校验辅助的排序统计译码方法 | |
CN105812000B (zh) | 一种改进的bch软判决译码方法 | |
CN104639282A (zh) | 通信系统中rs译码方法及其装置 | |
CN103269255B (zh) | 一种并行crc电路的生成方法和装置 | |
CN107565981A (zh) | 一种基于fpga的rs编译码器实现方法 | |
US20060010363A1 (en) | Method and system for correcting low latency errors in read and write non volatile memories, particularly of the flash type | |
Tallini et al. | On efficient repetition error correcting codes | |
RU2340088C2 (ru) | Способ синдромного декодирования циклического кода (варианты) | |
CN103151078A (zh) | 一种存储器检错纠错码生成方法 | |
CN103346805B (zh) | 一种长bch码的译码系统及方法 | |
CN109560819A (zh) | 一种通用于ldpc码比特翻转译码算法的翻转准则 | |
US8255777B2 (en) | Systems and methods for locating error bits in encoded data | |
CN101436864B (zh) | 一种低密度奇偶校验码的译码方法及装置 | |
US9236890B1 (en) | Decoding a super-code using joint decoding of underlying component codes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170524 |
|
WD01 | Invention patent application deemed withdrawn after publication |