CN117632577A - 一种基于bch编码的快速ecc纠错电路 - Google Patents

一种基于bch编码的快速ecc纠错电路 Download PDF

Info

Publication number
CN117632577A
CN117632577A CN202311653797.0A CN202311653797A CN117632577A CN 117632577 A CN117632577 A CN 117632577A CN 202311653797 A CN202311653797 A CN 202311653797A CN 117632577 A CN117632577 A CN 117632577A
Authority
CN
China
Prior art keywords
data
ecc
bch
bit
module
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
Application number
CN202311653797.0A
Other languages
English (en)
Inventor
黄科杰
白宇单
沈海斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN202311653797.0A priority Critical patent/CN117632577A/zh
Publication of CN117632577A publication Critical patent/CN117632577A/zh
Pending legal-status Critical Current

Links

Abstract

本发明公开了一种基于BCH编码的快速ECC纠错电路,包括:encode模块、decode模块,其中decode模块由syndrome模块、BMA模块、chien模块串联组成。本发明采用缩短的系统BCH编码,给出了具体的BCH码参数选择方法、编码电路和解码电路的实现原理以及具体的电路计算框图。本发明给出的组合电路进行了实现算法和电路结构上的优化,去除了冗余的中间数据,需要的逻辑门数量少,组合延时合理,相比于时序电路实现的多周期运算,本发明只需要一个时钟周期就能完成,能够简化ECC内存的结构。

Description

一种基于BCH编码的快速ECC纠错电路
技术领域
本发明属于信息论编码和数字电路设计领域,尤其是涉及BCH编码和解码及组合电路实现,具体涉及一种基于组合电路实现的BCH(Bose–Chaudhuri–Hocquenghem)码ECC(Error Checking and Correcting,错误检查和纠正)内存数据纠错模块。
背景技术
ECC内存即错误检查和纠正内存,一般内存在工作期间,可能会由于突然出现的电子干扰等因素,导致内存中的数据发生错误,进而导致计算数据失效或者应用程序崩溃,因此需要在内存数据后加入冗余的校验位来检查和纠正错误,提高系统的稳定性。BCH码是一类线性循环分组码,这种码由于其能纠正多个随机错误,可以根据需要配置其纠错能力,以及其编码与解码的算法硬件容易实现等优点,经常被用作ECC内存的错误纠错码。目前BCH码的编码与解码多是通过时序电路实现的,一般需要多个时钟周期才能得到结果,提高了其使用的复杂度,因此本发明提出了一种基于BCH编码的快速ECC纠错电路,并优化了实现算法和组合电路的内部结构,使得BCH编码与解码都可以在一个时钟周期内完成,并很好的控制了组合电路的逻辑门数和延时。
发明内容
为解决现有技术中的问题,本发明提供了一种基于BCH编码的快速ECC纠错电路,包括:编码模块、解码模块,其中,解码模块由伴随式计算模块、错误位置多项式求解模块、钱搜索模块串联组成;
所述编码模块对外部的输入数据ecc_enc_data进行BCH编码,输出BCH编码的校验位ecc_bit_enc;
所述外部的输入数据ecc_enc_data与所述BCH编码的校验位ecc_bit_enc拼接在一起,写入ECC内存中;当外部需要读取ECC内存时,ECC内存将待纠错的原数据ecc_dec_in和数据校验位ecc_bit_data输入解码模块;待纠错的原数据ecc_dec_in和数据校验位ecc_bit_data顺序经过解码模块中的伴随式计算模块、错误位置多项式求解模块和钱搜索模块,得到BCH解码的数据和解码是否正确的标志位;所述伴随式计算模块将待纠错的原数据ecc_dec_in和数据校验位ecc_bit_data由左至右顺次拼接组成完整的接收数据,设完整的接收数据对应的多项式为recd(x),所述完整的接收数据的每一位作为多项式recd(x)的对应项的系数;伴随式计算模块利用完整的接收数据对应的多项式recd(x)计算t个伴随式Si,i=1,3,5,...,2t-1,t表示目标可纠正的错误数量,并将t个伴随式Si传输给所述错误位置多项式求解模块;所述错误位置多项式求解模块输出错误位置多项式和预评估的错误数量给钱搜索模块;所述钱搜索模块输出BCH解码的数据和解码是否正确的标志位。
进一步地,所述编码模块对外部的输入数据ecc_enc_data进行BCH编码的方法为缩短的系统BCH编码,注意BCH码和BCH编码的方法是不同的概念,BCH码仅代表所有可能的码的集合,而BCH编码的方法具体指明如何从原始数据映射到BCH码,具体的缩短的系统BCH编码方法如下:
确定外部的输入数据ecc_enc_data的位宽N,以及目标可纠正的错误数量t;
通过方程确定满足要求的m,令n=2m-1;
确定BCH码的生成多项式g(x),任意选择一个GF(2)上的m次本原多项式p(x),得到扩域GF(2m),设其中的本原元为α,而扩域上任意一个元素αi的极小多项式为fi(x),得到生成多项式g(x),g(x)=LCM(f1(x),f2(x),...,f2t(x)),令k=n-deg g(x),得到BCH码的有效位宽k,k大于等于N;(这里确定生成多项式的方法以及GF、极小多项式、本原多项式、本原元、扩域等其它相关概念,可以查阅相关BCH码相关书籍或文献,都有详细解释);
选择BCH码为(n,k)码,BCH码指所选择的码空间,而不是编码方法,所选的码空间中单个码字长度为n,其中有效位宽为k,而BCH编码的校验位位宽为n-k;
需要编码的N位外部的输入数据ecc_enc_data从高位到低位分别为iN-1,iN-2,...,i1,i0,外部的输入数据ecc_enc_data可以组成GF(2)上的多项式i(x)=iN-1xN-1+iN-2xN-2+...+i1x+i0,r(x)是BCH编码的校验位ecc_bit_enc对应的多项式,r(x)=(i(x)·xn-k)modg(x);由外部的输入数据ecc_enc_data编码得到的完整的BCH码为{(k-N)'b0,ecc_enc_data,ecc_bit_enc},r(x)=(i(x)·xn-k)modg(x)证明r(x)满足deg r(x)=deg g(x)-1=n-k-1,因此对应的输出的BCH编码的校验位ecc_bit_enc位宽为n-k,去除前k-N位冗余的0,得到缩短的BCH码{ecc_enc_data,ecc_bit_enc},此时缩短的BCH码码长为N+n-k。deg表示求多项式的最高次幂,mod表示取模运算。
进一步地,所述输出BCH编码的校验位ecc_bit_enc,具体为:设BCH编码的校验位ecc_bit_enc从高位到低位分别为rn-k-1,rn-k-2,...,r1,i0,BCH编码的校验位ecc_bit_enc组成多项式r(x)=rn-k-1xn-k-1+rn-k-2xn-k-2+...+r1x+r0,r(x)由r(x)=(i(x)·xn-k)modg(x)得到,从而得到BCH编码的校验位ecc_bit_enc;选择BCH编码的校验位ecc_bit_enc的最高位的下标为n-k-1是因为r(x)是通过mod运算得到的,所以deg r(x)=deg g(x)-1=n-k-1。
进一步地,所述伴随式计算模块利用完整的接收数据对应的多项式recd(x)计算t个伴随式Si,i=1,3,5,...,2t-1,t表示目标可纠正的错误数量,并将t个伴随式Si传输给所述错误位置多项式求解模块,具体为:Si=recd(αi),i=1,3,5,...,2t-1,其中,α为扩域GF(2m)中的本原元,recd(αi)表示完整的接收数据对应的多项式recd(x)将α的i次方作为自变量时的函数值,运算在扩域GF(2m)中进行,所述的扩域GF(2m)与编码模块中的扩域相同。
进一步地,所述错误位置多项式求解模块计算错误位置多项式和预评估的错误数量的方法如下:
设第r次迭代的错误位置多项式为σ(r)(x),第r次迭代的预评估的错误数量为lr+1,Si是指伴随式计算模块输出的伴随式,i=1,2,3,...,2t,其中i为2,4,...,2t时的Si没有被伴随式计算模块输出,需要通过S2i=Si 2计算得到,其余未说明变量都为中间变量;
初始化迭代数据,如果S1=0,令dp=1,σ(0)(x)=1+S1x=1,β(1)(x)=x3,l1=0;如果S1≠0,则令dp=S1,σ(0)(x)=1+S1x,β(1)(x)=x2,l1=1;最后令r=1;令σ(r-1) i为σ(r-1)(x)的i次项系数,i=0,1,...,t,t表示目标可纠正的错误数量,如果系数不存在则σ(r-1) i取0;
第1次迭代,计算d1=Σt i=0(0) i·S2-i+1)=σ(0) 0·S3(0) 1·S2(0) 2·S1,其中由于σ(0)(x)=1+S1x,因此σ(0) 0=1,σ(0) 1=S1,σ(0) 2=0,而S2=S1 2,因此最后d1=S3+S1 3;计算σ(1)(x)=dpσ(0)(x)-d1β(1)(x);如果d1≠0且1≥l1,则令bsel=1,否则令bsel=0,再根据bsel的值进行下面的计算;如果bsel=1,则β(2)(x)=x2·σ(0)(x),l2=2-l1+1,dp=d1,如果bsel=0,则β(2)(x)=x2·β(1)(x),l2=l1,dp=dp;最后令r=2,进入下一轮迭代;
进入第r次迭代时,r=1,2,...,t-1,计算dr=Σt i=0(r-1) i·S2r-i+1)和σ(r)(x)=dpσ(r-1)(x)-drβ(r)(x),此时的dp是第r-1次迭代后计算得到的dp;接着如果dr≠0且r≥lr,则令bsel=1,否则令bsel=0,再根据bsel的值进行下面的计算;如果bsel=1,则β(r+1)(x)=x2·σ(r-1)(x),lr+1=2r-lr+1,dp=dr,如果bsel=0,则β(r+1)(x)=x2·β(r)(x),lr+1=lr,dp=dp;最后令r=r+1,进入下一轮迭代;
当最后一次迭代完成后,最后一次迭代即第t-1次迭代,得到的σ(t-1)(x)就是求解得到的错误位置多项式,而预评估的错误数量为lt,lt表示第t-1次迭代的预评估的错误数量,也是最终输出给钱搜索模块的预评估的错误数量。
进一步地,所述钱搜索模块输出BCH解码的数据和解码是否正确的标志位前需先计算错误位置向量error,计算错误位置向量error的方法如下:
将扩域GF(2m)中的元素αi代入错误位置多项式来确定错误位置多项式在扩域GF(2m)中的根,如果扩域GF(2m)中的元素αi代入错误位置多项式后得到的σ(αi)=0,说明αi是σ(x)在扩域GF(2m)中的一个根,从而说明在接收到的BCH码的第n-i位出现了错误,i=k-N+1,k-N+2,...,n,此时令error[n-i]=1,表明此位出错;若σ(αi)≠0,则令error[n-i]=0,表示此位正确;对于每一个i都进行此操作,则得到错误位置向量error,错误位置向量error长度为n,但此处仅计算n-k+N位,因为BCH编码时去除前k-N位冗余的0,因此错误位置向量error的前k-N位不需要计算,最后计算得到的错误位置向量的长度为n-k+N;所述的扩域GF(2m)与编码模块中的扩域相同。
进一步地,所述钱搜索模块输出BCH解码的数据和解码是否正确的标志位,具体为:若错误位置多项式的根的数量与预评估的错误数量相等,则进行纠正,将输出错误位置向量error与{ecc_dec_in,ecc_bit_data}按位异或,并选择待纠错的原数据ecc_dec_in所在位对应的数据作为纠正后的数据,纠正后的数据即为所述的BCH解码的数据,并将解码是否正确的标志位置1;若错误位置多项式的根的数量与预评估的错误数量不相等,将待纠错的原数据ecc_dec_in赋值给BCH解码的数据并输出,并将解码是否正确的标志位置0,表示检测到出错,但是没有纠错。
本发明还提供一种所述基于BCH编码的快速ECC纠错电路的纠错方法,当外部写入数据到ECC内存时,外部的输入数据ecc_enc_data通过编码模块进行BCH编码,并将外部的输入数据ecc_enc_data和编码模块得到BCH编码的校验位ecc_bit_enc拼接在一起,写入ECC内存中;当外部需要读取ECC内存时,ECC内存将内存中存储的数据输入解码模块,所述存储的数据即为所述待纠错的原数据ecc_dec_in和所述数据校验位ecc_bit_data,解码模块将解码得到的BCH解码的数据输出,BCH解码的数据中不包括数据校验位ecc_bit_data;如果ECC内存在编码模块写入数据时发生了错误,就能在读取时通过解码模块纠正错误,恢复原始数据。
与现有技术相比,本发明所具有的有益效果有:
以往的发明都是采用了时序逻辑电路,需要很多个时钟周期才能实现BCH的编码与解码,并且时钟周期不固定,在用于ECC内存纠错时结构复杂;本发明的优势在于将BCH编码与解码的操作用组合逻辑实现,使用简单,只需要在一个时钟周期内就能完成BCH的编码与解码,并且展开为组合逻辑后,encode、sydrome和chien模块中的运算都采用并行处理,并且重用了很多中间结果,最后的组合逻辑电路与直接把时序逻辑电路展开相比,速度提升很多,门单元的数量也减少了很多,符合ECC内存的要求;组合逻辑电路还可以插入流水级以提高吞吐量,进一步提高性能。
附图说明
图1是本发明ECC内存数据纠错模块的结构框图。
图2是本发明encode模块的具体计算框图。
图3是本发明syndrome模块计算Si的具体计算框图。
图4是本发明BMA模块第r个迭代过程的具体计算框图。
图5是本发明chien模块的具体计算框图。
图6是本发明chien模块中σ(αi)的具体计算框图。
图7是本发明chien模块中σjαij的具体计算框图。
图8是本发明具体实施例在t=4时的vcs仿真波形图。
具体实施方式
下面结合具体实施方式对本发明做进一步阐述和说明。所述实施例仅是本公开内容的示范且不圈定限制范围。本发明中各个实施方式的技术特征在没有相互冲突的前提下,均可进行相应组合。
本实施例会详细介绍各个模块的内部计算电路,其采用如下技术方案:
一种基于BCH编码的快速ECC纠错电路,如图1所示,包括:encode模块(编码模块)、decode模块(解码模块),其中decode模块由syndrome模块(伴随式计算模块)、BMA模块(错误位置多项式求解模块)、chien模块(钱搜索模块)串联组成。
所述encode模块,接受外部的输入数据ecc_enc_data,经过encode模块对输入数据进行BCH编码,输出编码的校验位ecc_bit_enc。如图2所示,本实施例设ecc_enc_data所对应的多项式为i(x),ecc_bit_enc所对应的多项式为r(x),这在发明内容中有详细说明;图2中,本实施例提前计算好当i=0,1,2,...,N-1时的各项(xi·xn-k)modg(x),而本实施例的编码输出结果r(x)=(i(x)·xn-k)modg(x)=((iN-1xN-1+iN-2xN-2+...+i1x+i0)·xn-k)modg(x)可以看作是:先用i(x)的各项系数对对应的(xi·xn-k)modg(x)进行选择,最终得到的结果记为encode_build[i],然后将N个encode_build通过异或运算(有限域GF(2)上的加法运算)得到编码结果r(x)(也即得到了BCH编码的校验位ecc_bit_enc)。而关于如何使用电路计算(xi·xn-k)modg(x),可以利用deg g(x)=n-k,通过以下两个式子迭代获得,(1·xn-k)modg(x)=g(x)-xn-k,(xi+1·xn-k)modg(x)=(x·(xi·xn-k)modg(x))modg(x),而后者可以通过如下方式获得:先将多项式(xi·xn-k)modg(x)左移一位(即乘以x),如果此时n-k次项不为0,则在modg(x)的计算中将n-k次项去除,并给多项式加上g(x)-xn-k,否则保持移位后多项式不变。
一般的非系统的编码方案是code(x)=i(x)g(x)(非系统是指被编码的输入数据并不直接体现在编码结果中,而系统编码是指编码结果中可以直接找到某一段与被编码的输入数据相同),本发明希望得到系统的编码方法,从而假设得到编码code'(x)=i(x)xn-k+r(x),其中r(x)是校验位ecc_bit_enc对应的多项式,deg r(x)=n-k-1,可以看到此时code'(x)中被编码的输入数据和校验位是分离的。为了达到这个目的使i(x)xn-k+r(x)=q(x)g(x)(因为q(x)g(x)可以生成BCH码,这是线性循环码的特性),则得到的校验位组成的多项式r(x)=(i(x)·xn-k)modg(x)(这里是因为在GF(2)上r(x)与-r(x)是等价的),其对应着输出编码的校验位ecc_bit_enc,由输入数据ecc_enc_data编码得到的完整的BCH码为{(k-N)'b0,ecc_enc_data,ecc_bit_enc},(k-N)'b0表示k-N位的0。由于r(x)是通过modg(x)运算得到的,有deg r(x)=deg g(x)-1=n-k-1,则对应的输出编码的校验位ecc_bit_enc位宽为n-k,从而完整的BCH码长度刚好为n。前面的k-N位的0实际上并不包含任何信息,因此完全可以删掉,从而得到缩短的BCH码{ecc_enc_data,ecc_bit_enc},此时码长为N+n-k。
所述decode模块,接受外部输入的待纠错的原数据ecc_dec_in,数据校验位ecc_bit_data,顺序经过decode模块中的三个子模块syndrome模块、BMA模块、chien模块,得到BCH解码的数据ecc_dec_out和解码是否正确的标志位ecc_dec_sts;
所述syndrome模块,其计算Si的框图如图3所示,假设H=N+n-k,Si=recd(αi),i=1,3,5,...,2t-1,recd(x)=cH-1xH-1+cH-2xH-2+...+c0,本实施例首先在有限域GF(2m)中计算αij,其中j=0,1,...,H-1,然后类似encode模块的计算,用recd(x)的各项系数对αij进行选择,得到的结果记为syndrome_build[j],然后将H个syndrome_build通过异或运算(有限域GF(2m)上的加法运算)得到Si;syndrome模块通过同样的过程计算得到S1,S3,...S2t-1这t个值,传递给BMA模块做接下来的运算;
所述BMA模块,其第r个迭代过程的计算框图如图4所示,图中符号意义在发明内容中有详细说明,其中的σi (r-1)·S2r-i+1项是GF(2m)中的两个元素相乘,GF(2m)中的元素相乘定义为多项式相乘的结果再进行modp(x)运算,其中p(x)是构建扩域时使用的本原多项式(在发明内容中有说明),因此σi (r-1)·S2r-i+1项的计算和encode模块中(i(x)·xn-k)modg(x)的计算原理相同;
所述chien模块,如图5所示,验证αi是否是错误位置多项式的根,从而得到错误位置向量error和错误数量error_count,其中i=n-H+1,n-H+2,...,n,H的定义与上文中相同,即H=N+n-k;其中本实施例设σ(x)=σtxtt-1xt-1+...+σ1x+σ0,则σ(αi)=σtαitt-1αi(t-1)+...+σ0(如图6所示),而在图7中详细描述了σjαij的计算方法,通过重复图6和图7中的计算模块,我们可以计算σ(αi);最后chien模块根据错误位置向量error纠正原数据ecc_dec_in(将error向量与{ecc_dec_in,ecc_bit_data}按位异或,并选择外部输入的待纠错的原数据ecc_dec_in所在位对应的数据作为纠正后的数据ecc_dec_out),输出纠正后的数据ecc_dec_out,以及标志位ecc_dec_sts。
本实施例中所述的基于组合电路实现的BCH码ECC内存数据纠错模块的工作方法为:当外部写入数据到ECC内存时,外部输入数据通过encode模块编码,并将外部输入数据和encode模块编码得到的校验位拼接在一起,写入ECC内存中;当外部需要读取ECC内存时,ECC内存将内存中存储的数据输入decode模块,并将解码得到的数据位(不包括校验位)输出。如果ECC内存在写入数据时发生了错误,就能在读取时通过decode模块纠正错误,恢复原始数据。
以上实施例用verilog编写了实现代码,并在参数n=511,m=9,N=256,k=448,t=4或7这两种情况下,用synopsys的vcs编译仿真软件进行了功能验证,结果表明电路功能符合预期,满足理论设计,可以成功编码、检测和纠正错误;图8是本实施例在t=4时的vcs仿真波形图,图中对于各种错误数量情况进行了测试,其中right信号为1表示解码结果是正确的,从仿真波形中可以看到功能确实符合预期(图中在第3条竖线处right为0,因为这里是测试第3条竖线的5个错误(超过t=4个可纠正错误)是否可以被检测到,从解码是否正确的标志位ecc_dec_sts信号的最高位可以看到错误虽然没有被纠正,但是已经检测到了,符合设计预期)。此外,本设计还在synopsys的dc综合软件中利用tcbn28hpcplusbwp30p140ffg0p88v0c.db逻辑库进行了综合验证,结果表明在t=4时,使用了21466个逻辑门,组合延时4.22ns,t=7时,使用了40534个逻辑门,组合延时7.1ns;dc综合结果表明,在常用的t值下,组合逻辑的逻辑门数和延时都在合理范围内,符合设计需求。在现实中为了简化ECC内存的操作逻辑,简化ECC内存的结构,使用组合逻辑电路实现BCH编码器与解码器是很有必要的,因为组合逻辑可以在一个周期内完成计算,不需要额外的逻辑控制编解码的时序;本发明及实施例优化了组合逻辑电路的实现算法和具体实现电路,与直接将时序逻辑电路展开为组合逻辑电路相比,本发明采用了并行计算的方法,减少了组合延时,采用了中间计算结果复用和减少冗余的中间结果的方法,大大减少了逻辑门的使用;对应t=4的情况,如果直接将时序逻辑电路展开为组合逻辑电路,大概需要10万以上的逻辑门。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

Claims (8)

1.一种基于BCH编码的快速ECC纠错电路,其特征在于,包括:编码模块、解码模块,其中,解码模块由伴随式计算模块、错误位置多项式求解模块、钱搜索模块串联组成;
所述编码模块对外部的输入数据ecc_enc_data进行BCH编码,输出BCH编码的校验位ecc_bit_enc;
所述外部的输入数据ecc_enc_data与所述BCH编码的校验位ecc_bit_enc拼接在一起,写入ECC内存中;当外部需要读取ECC内存时,ECC内存将待纠错的原数据ecc_dec_in和数据校验位ecc_bit_data输入解码模块;待纠错的原数据ecc_dec_in和数据校验位ecc_bit_data顺序经过解码模块中的伴随式计算模块、错误位置多项式求解模块和钱搜索模块,得到BCH解码的数据和解码是否正确的标志位;所述伴随式计算模块将待纠错的原数据ecc_dec_in和数据校验位ecc_bit_data由左至右顺次拼接组成完整的接收数据,设完整的接收数据对应的多项式为recd(x),所述完整的接收数据的每一位作为多项式recd(x)的对应项的系数;伴随式计算模块利用完整的接收数据对应的多项式recd(x)计算t个伴随式Si,i=1,3,5,...,2t-1,t表示目标可纠正的错误数量,并将t个伴随式Si传输给所述错误位置多项式求解模块;所述错误位置多项式求解模块输出错误位置多项式和预评估的错误数量给钱搜索模块;所述钱搜索模块输出BCH解码的数据和解码是否正确的标志位。
2.根据权利要求1所述的基于BCH编码的快速ECC纠错电路,其特征在于,所述编码模块对外部的输入数据ecc_enc_data进行BCH编码的方法为缩短的系统BCH编码,缩短的系统BCH编码方法如下:
确定外部的输入数据ecc_enc_data的位宽N,以及目标可纠正的错误数量t;
通过方程确定满足要求的m,令n=2m-1;
确定BCH码的生成多项式g(x),任意选择一个GF(2)上的m次本原多项式p(x),得到扩域GF(2m),设其中的本原元为α,而扩域上任意一个元素αi的极小多项式为fi(x),得到生成多项式g(x),g(x)=LCM(f1(x),f2(x),...,f2t(x)),令k=n-deg g(x),得到BCH码的有效位宽k,k大于等于N;
选择BCH码为(n,k)码,BCH码中单个码字长度为n,其中有效位宽为k,而BCH编码的校验位位宽为n-k;
需要编码的N位外部的输入数据ecc_enc_data从高位到低位分别为iN-1,iN-2,...,i1,i0,外部的输入数据ecc_enc_data组成GF(2)上的多项式i(x)=iN-1xN-1+iN-2xN-2+...+i1x+i0,r(x)是BCH编码的校验位ecc_bit_enc对应的多项式,r(x)=(i(x)·xn-k)modg(x);由外部的输入数据ecc_enc_data编码得到的完整的BCH码为{(k-N)'b0,ecc_enc_data,ecc_bit_enc},r(x)=(i(x)·xn-k)modg(x)证明r(x)满足deg r(x)=deg g(x)-1=n-k-1,因此对应的输出的BCH编码的校验位ecc_bit_enc位宽为n-k,去除前k-N位冗余的0,得到缩短的BCH码{ecc_enc_data,ecc_bit_enc},此时缩短的BCH码码长为N+n-k。
3.根据权利要求2所述的基于BCH编码的快速ECC纠错电路,其特征在于,所述输出BCH编码的校验位ecc_bit_enc,具体为:设BCH编码的校验位ecc_bit_enc从高位到低位分别为rn-k-1,rn-k-2,...,r1,i0,BCH编码的校验位ecc_bit_enc组成多项式r(x)=rn-k-1xn-k-1+rn-k- 2xn-k-2+...+r1x+r0,r(x)由r(x)=(i(x)·xn-k)modg(x)得到,从而得到BCH编码的校验位ecc_bit_enc;选择BCH编码的校验位ecc_bit_enc的最高位的下标为n-k-1是因为r(x)是通过mod运算得到的,所以deg r(x)=deg g(x)-1=n-k-1。
4.根据权利要求2所述的基于BCH编码的快速ECC纠错电路,其特征在于,所述伴随式计算模块利用完整的接收数据对应的多项式recd(x)计算t个伴随式Si,i=1,3,5,...,2t-1,t表示目标可纠正的错误数量,并将t个伴随式Si传输给所述错误位置多项式求解模块,具体为:Si=recd(αi),i=1,3,5,...,2t-1,其中,α为扩域GF(2m)中的本原元,recd(αi)表示完整的接收数据对应的多项式recd(x)将α的i次方作为自变量时的函数值,运算在扩域GF(2m)中进行,所述的扩域GF(2m)与所述编码模块中的扩域相同。
5.根据权利要求4所述的基于BCH编码的快速ECC纠错电路,其特征在于,所述错误位置多项式求解模块计算错误位置多项式和预评估的错误数量的方法如下:
设第r次迭代的错误位置多项式为σ(r)(x),第r次迭代的预评估的错误数量为lr+1,Si是指伴随式计算模块输出的伴随式,i=1,2,3,...,2t,其中i为2,4,...,2t时的Si没有被伴随式计算模块输出,需要通过S2i=Si 2计算得到,其余未说明变量都为中间变量;
初始化迭代数据,如果S1=0,令dp=1,σ(0)(x)=1+S1x=1,β(1)(x)=x3,l1=0;如果S1≠0,则令dp=S1,σ(0)(x)=1+S1x,β(1)(x)=x2,l1=1;最后令r=1;令σ(r-1) i为σ(r-1)(x)的i次项系数,i=0,1,...,t,t表示目标可纠正的错误数量,如果系数不存在则σ(r-1) i取0;
第1次迭代,计算d1=Σt i=0(0) i·S2-i+1)=σ(0) 0·S3(0) 1·S2(0) 2·S1,其中由于σ(0)(x)=1+S1x,因此σ(0) 0=1,σ(0) 1=S1,σ(0) 2=0,而S2=S1 2,因此最后d1=S3+S1 3;计算σ(1)(x)=dpσ(0)(x)-d1β(1)(x);如果d1≠0且1≥l1,则令bsel=1,否则令bsel=0,再根据bsel的值进行下面的计算;如果bsel=1,则β(2)(x)=x2·σ(0)(x),l2=2-l1+1,dp=d1,如果bsel=0,则β(2)(x)=x2·β(1)(x),l2=l1,dp=dp;最后令r=2,进入下一轮迭代;
进入第r次迭代时,r=1,2,...,t-1,计算dr=Σt i=0(r-1) i·S2r-i+1)和σ(r)(x)=dpσ(r-1)(x)-drβ(r)(x),此时的dp是第r-1次迭代后计算得到的dp;接着如果dr≠0且r≥lr,则令bsel=1,否则令bsel=0,再根据bsel的值进行下面的计算;如果bsel=1,则β(r+1)(x)=x2·σ(r-1)(x),lr+1=2r-lr+1,dp=dr,如果bsel=0,则β(r+1)(x)=x2·β(r)(x),lr+1=lr,dp=dp;最后令r=r+1,进入下一轮迭代;
当最后一次迭代完成后,最后一次迭代即第t-1次迭代,得到的σ(t-1)(x)就是求解得到的错误位置多项式,而预评估的错误数量为lt,lt表示第t-1次迭代的预评估的错误数量,也是最终输出给钱搜索模块的预评估的错误数量。
6.根据权利要求5所述的基于BCH编码的快速ECC纠错电路,其特征在于,所述钱搜索模块输出BCH解码的数据和解码是否正确的标志位前需先计算错误位置向量error,计算错误位置向量error的方法如下:
将扩域GF(2m)中的元素αi代入错误位置多项式来确定错误位置多项式在扩域GF(2m)中的根,如果扩域GF(2m)中的元素αi代入错误位置多项式后得到的σ(αi)=0,说明αi是σ(x)在扩域GF(2m)中的一个根,从而说明在接收到的BCH码的第n-i位出现了错误,i=k-N+1,k-N+2,...,n,此时令error[n-i]=1,表明此位出错;若σ(αi)≠0,则令error[n-i]=0,表示此位正确;对于每一个i都进行此操作,则得到错误位置向量error,错误位置向量error长度为n,但此处仅计算n-k+N位,因为BCH编码时去除前k-N位冗余的0,因此错误位置向量error的前k-N位不需要计算,最后计算得到的错误位置向量的长度为n-k+N。
7.根据权利要求6所述的基于BCH编码的快速ECC纠错电路,其特征在于,所述钱搜索模块输出BCH解码的数据和解码是否正确的标志位,具体为:若错误位置多项式的根的数量与预评估的错误数量相等,则进行纠正,将输出错误位置向量error与{ecc_dec_in,ecc_bit_data}按位异或,并选择待纠错的原数据ecc_dec_in所在位对应的数据作为纠正后的数据,纠正后的数据即为所述的BCH解码的数据,并将解码是否正确的标志位置1;若错误位置多项式的根的数量与预评估的错误数量不相等,将待纠错的原数据ecc_dec_in赋值给BCH解码的数据并输出,并将解码是否正确的标志位置0,表示检测到出错,但是没有纠错。
8.一种根据权利要求1-7任一项所述基于BCH编码的快速ECC纠错电路的纠错方法,其特征在于,当外部写入数据到ECC内存时,外部的输入数据ecc_enc_data通过编码模块进行BCH编码,并将外部的输入数据ecc_enc_data和编码模块得到BCH编码的校验位ecc_bit_enc拼接在一起,写入ECC内存中;当外部需要读取ECC内存时,ECC内存将内存中存储的数据输入解码模块,所述存储的数据即为所述待纠错的原数据ecc_dec_in和所述数据校验位ecc_bit_data,解码模块将解码得到的BCH解码的数据输出,BCH解码的数据中不包括数据校验位ecc_bit_data;如果ECC内存在编码模块写入数据时发生了错误,就能在读取时通过解码模块纠正错误,恢复原始数据。
CN202311653797.0A 2023-12-05 2023-12-05 一种基于bch编码的快速ecc纠错电路 Pending CN117632577A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311653797.0A CN117632577A (zh) 2023-12-05 2023-12-05 一种基于bch编码的快速ecc纠错电路

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311653797.0A CN117632577A (zh) 2023-12-05 2023-12-05 一种基于bch编码的快速ecc纠错电路

Publications (1)

Publication Number Publication Date
CN117632577A true CN117632577A (zh) 2024-03-01

Family

ID=90019621

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311653797.0A Pending CN117632577A (zh) 2023-12-05 2023-12-05 一种基于bch编码的快速ecc纠错电路

Country Status (1)

Country Link
CN (1) CN117632577A (zh)

Similar Documents

Publication Publication Date Title
US7562283B2 (en) Systems and methods for error correction using binary coded hexidecimal or hamming decoding
JP5043562B2 (ja) エラー訂正回路、その方法及び前記回路を備える半導体メモリ装置
CN101814922B (zh) 基于bch码的多位错纠错方法和装置以及存储系统
US20050138533A1 (en) Encoding/decoding device using a reed-solomon encoder/decoder
WO2000057561A1 (en) Pipelined high speed reed-solomon error/erasure decoder
JPS638494B2 (zh)
US8806295B2 (en) Mis-correction and no-correction rates for error control
KR102352158B1 (ko) 리스트 디코딩 생성을 통한 이진 bch 코드들의 bm-기반 빠른 체이스 디코딩에서 빠른 다항식 업데이트를 위한 방법을 수행하기 위한 asic
JPH08330975A (ja) 誤り訂正符号復号化方法およびこの方法を用いる回路
US20100299575A1 (en) Method and system for detection and correction of phased-burst errors, erasures, symbol errors, and bit errors in a received symbol string
US8694872B2 (en) Extended bidirectional hamming code for double-error correction and triple-error detection
CN105553485A (zh) 基于fpga的bch编解码装置及其编解码方法
JP2004032737A (ja) リード−ソロモン復号器
Parvathi et al. FPGA based design and implementation of Reed-Solomon encoder & decoder for error detection and correction
CN106708654A (zh) 一种用于NANDflash的BCH纠错码的电路结构
US11101925B2 (en) Decomposable forward error correction
US9191029B2 (en) Additional error correction apparatus and method
US10367529B2 (en) List decode circuits
US20150128009A1 (en) Memory system and memory controller
US20080140740A1 (en) Systems and methods for processing data sets in parallel
CN110908827A (zh) 用于NAND Flash闪存纠错的并行BCH解码方法
CN107688506B (zh) 一种流水结构的bch译码系统
US8255777B2 (en) Systems and methods for locating error bits in encoded data
CN117632577A (zh) 一种基于bch编码的快速ecc纠错电路
CN108847851B (zh) 一种二元bch码伴随式矩阵的实现方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination