用于BCH译码器的高速低延时Berlekamp‑Massey迭代译码电路 【技术领域】
本发明大体上涉及一种纠错译码电路。更具体地,本发明指示一种具有低延时特性的Berlekamp‑Massey(BM)迭代译码电路,用于实现高速NandFlash存储设备的BCH纠错译码器,也可以应用于通信系统中的BCH纠错译码器。
背景技术
BCH码是1959年由Hocquenghem,1960年由Bose和Chandhari分别独立提出的一种能纠正多个随机错误的循环码;BCH码是迄今为止所发现的一类很好的线性纠错码类,它的纠错能力强,被广泛应用于电子通信信息领域。
近年来随着工艺的进步,线宽降低,Nand Flash的存储密度不断增大,而产生错误的概率也越来越大。目前新一代的MLC(Multi‑level cell)Nand Flash已经由需要纠正4位(bit)错误提高到需要纠正8位(bit)错误,这就使得Nand Flash控制器需要采用纠错能力更强的BCH码。
现有的BCH译码过程通常分为3步,第一步,接收输入码字,计算校正子;第二步,基于校正子,利用无逆运算的BM(InversionlessBM)算法计算错误位置方程;第三步,利用错误位置方程搜索错误位置,以对错误值进行纠错。然而BCH码的纠错能力越强,BCH解码器的设计就越复杂,解码所需时间就越长;尤其是BCH中BM迭代译码步骤的延时是与纠错能力的平方成正比的。在高速固态存储系统中,BCH解码的延时直接导致存储系统的带宽和IOPS(I/Ooperations per second)的降低,整个存储系统的延时增大,上层软件的IO操作等待时间变长。所以在高纠错能力下,如何有效降低BM算法带来的延时,已经成为本领域最为关注的问题之一。
中国专利申请200910024526.2(CN101488762A)公开了“一种面积紧凑且快速的BCH并行译码方法”,采用一轮多拍方式迭代运算错误位置多项式,通过状态机控制单元的配置逻辑与状态机相结合来复用由一个二输入有限域乘法器和一个有限域加法器组成的计算单元。
中国专利申请200910046088.X(CN101478314A)公开了一种“根据Nand Flash多余空间来配置纠错能力的BCH解码器”,采用无逆简化BM算法迭代算法模块,求解出错误位置方程的各系数;并使用多个无限域乘法器,实现偶数伴随式的计算,无逆运算的BM算法。
以上两篇专利中所涉及到的译码电路,都存在较大译码延时。中国专利申请200910024526.2中采用状态机的控制方式反复调用一个有限域计算单元,计算延时过大,另外电路中众多的伴随式和错误多项式系数的排序是通过状态机来判断并输入给计算单元的,因此需要采用庞大的多路选通器来实现,这种实现方式将造成电路占用面积过大。中国专利申请200910046088.X中的迭代译码电路采用串行迭代方式,解码所需要的延时较大。
【发明内容】
本发明公开一种高速、低延时的BM(Berlekamp‑Massey)迭代译码电路,目的在于解决传统BCH译码器中BM迭代译码环节,在纠错位个数增多情况下,速度变慢,延时增大的问题。
为了解决上述目的,本发明所采用伴随式计算处理电路和并行迭代译码电路,节省了BCH译码算法的计算量,加快了译码速度;减少了传统BM迭代译码所需的时钟周期个数和电路逻辑门数。为高速Nand Flash存储设备提供纠错能力强,延时小,纠错数据吞吐量大的BM迭代译码电路。
本发明实现了一种用于BCH译码器的高速低延时BM迭代译码电路,包括奇数伴随式计算电路(102)、偶数伴随式逐次计算及伴随式排序电路(104)以及并行迭代译码电路(106);
所述奇数伴随式计算电路(102)用于接收BCH编码的输入数据,以及计算所述BCH编码的输入数据的奇数伴随式;
耦合到奇数伴随式计算电路(102)的输出端的所述偶数伴随式逐次计算及伴随式排序电路(104),用于计算所述BCH编码的输入数据的偶数伴随式,并将计算得到的奇数伴随式与偶数伴随式输出给并行迭代译码电路(106),当BCH编码输入数据可纠正t位错误时,所述偶数伴随式逐次计算及伴随式排序电路(104)在第1至第t‑1次循环中的第j次循环中,当j≤t/2时,输出伴随式S
2j+1、S
2j、S
2j‑1......S
1,当j>t/2时,输出t+1个伴随式S
2j+1、S
2j、S
2j‑1......S
2j‑t+2、S
2j‑t+1;若伴随式S
2j+1、S
2j、S
2j‑1......S
1的数量不足t+1个,余下部分的输出为任意值;
在t‑1次循环的每次中,包括k个周期,每个周期输出依序号从大到小输出p个伴随式,k为正整数,p*k=t+1;
所述并行迭代译码电路(106)基于无逆运算的BM算法利用所述偶数伴随式逐次计算及伴随式排序电路(104)输出的伴随式计算错误位置多项式系数;
并行迭代译码电路(106)包括第一乘法器组(502)、第二乘法器组(508)、第三乘法器组(509)、多输入加法器(503)、加法器组(510)、错误多项式寄存器(511)、错误多项式位置缓存(512)、辅助多项式缓存(513)、非零差值寄存器(507)以及迭代差值寄存器(504),所述乘法器和加法器均为GF域内运算器;
对应于所述偶数伴随式逐次计算及伴随式排序电路(104)的t‑1次循环,所述并行迭代译码电路(106)进行t‑1次迭代计算,以及所述并行迭代译码电路(106)还进行第t次迭代计算,在每次迭代计算的k个周期的每个周期中,第一乘法器组(502)将所述偶数伴随式逐次计算及伴随式排序电路(104)的输出与错误多项式寄存器(511)存储的值相乘,多输入加法器(503)计算第一乘法器组(502)输出的p个积与所述多输入加法器(503)的前一周期的计算结果的和,第三乘法器组(509)将错误位置多项式缓存(512)的p个值分别与非零差值寄存器(507)的值相乘,第二乘法器组(508)将辅助多项式缓存(513)的p个值分别与迭代差值寄存器(504)的值相乘,加法器组(510)将第二乘法器(508)输出与第三乘法器(509)输出相加,得到p个和,并输出给错误多项式寄存器(511),判断迭代差值寄存器(504)是否等于零或者错误位置多项式的维数是否大于迭代次数j:
如果迭代差值寄存器(504)不等于零并且错误位置多项式的维数不大于迭代次数j,则将迭代差值寄存器(504)的值存储到非零差值寄存器(507)中,错误多项式寄存器(511)的输出寄存在错误位置多项式缓存(512)中,错误位置多项式缓存(512)将前一周期计算得到的错误位置多项式输出给辅助多项式缓存(513);
如果迭代差值寄存器(504)等于零或者错误位置多项式的维数大于迭代次数j,则不更新非零差值寄存器507内的值,也不更新辅助多项式缓存(513);
以及在每次迭代计算的最后一个周期,用多输入加法器(503)的输出值,对迭代差值寄存器(504)进行更新。
本发明还公开了一种GF(2
13)域的平方计算电路,包括13个信号输入端,13个信号输出端:
对第1信号输入端与第12信号输入端求异或,结果由第1信号输出端输出;
对第8信号输入端与第12信号输入端以及第13信号输入端求异或,结果由第2信号输出端输出;
对第2信号输入端与第8信号输入端求异或,结果由第3信号输出端输出;
对第9信号输入端与第12信号输入端以及第13信号输入端求异或,结果由第4信号输出端输出;
对第3信号输入端、第8信号输入端、第9信号输入端、第12信号输入端、第13信号输入端求异或,结果由第5信号输出端输出;
对第8信号输入端与第10信号输入端求异或,结果由第6信号输出端输出;
对第4信号输入端、第9信号输入端、第10信号输入端与第13信号输入端求异或,结果由第7信号输出端输出;
对第9信号输入端与第11信号输入端求异或,结果由第8信号输出端输出;
对第5信号输入端、第10信号输入端与第11信号输入端求异或,结果由第9信号输出端输出;
对第10信号输入端与第12信号输入端求异或,结果由第10信号输出端输出;
对第6信号输入端、第11信号输入端与第12信号输入端求异或,结果由第11信号输出端输出;
对第11信号输入端与第13信号输入端求异或,结果由第12信号输出端输出;
对第7信号输入端、第12信号输入端与第13信号输入端求异或,结果由第13信号输出端输出。
本发明还公开了一种BCH译码器的高速BM迭代译码器,包括奇数伴随式计算电路(102)、偶数伴随式逐次计算及伴随式排序电路(104)以及并行迭代译码电路(106);
所述奇数伴随式计算电路(102)用于接收BCH编码的输入数据,以及计算所述BCH编码的输入数据的奇数伴随式;
耦合到奇数伴随式计算电路(102)的输出端的所述偶数伴随式逐次计算及伴随式排序电路(104),用于当所述BCH编码的输入数据的奇数伴随式不全为0时,计算所述BCH编码的输入数据的偶数伴随式,并将计算得到的奇数伴随式与偶数伴随式输出给并行迭代译码电路(106);
所述偶数伴随式逐次计算及伴随式排序电路(104)包括2t‑2个第一排序寄存器单元RS
i(i≠p‑1)和1个第二排序寄存器单元RS
p‑1,p表示所述偶数伴随式计算及伴随式排序电路(104)的并行度,所述的BM迭代译码电路的纠错能力为t,以及,所述2t‑2个第一排序寄存器单元RS
i(i≠p‑1)的每个接收排序寄存器单元RS
i‑p和排序寄存器单元RS
i+t+3‑p的输出,所述第二排序寄存器单元RS
p‑1接收第一排序寄存器单元RS
2t‑2和排序寄存器单元RS
t、RS
t‑1、RS
t‑2......RS
3的输出,以及来自所述奇数伴随式计算电路(102)的奇数伴随式S
1;
在所述偶数伴随式逐次计算及伴随式排序电路(104)的t‑1次循环的每次的第一周期,选择排序寄存器单元RS
i+t+3‑p的输出作为所述第一排序寄存器单元RS
i(i≠p‑1)的输出,在每次循环的其他k‑1个周期,选择排序寄存器单元RS
i‑p的输出作为所述第一排序寄存器单元RS
i(i≠p‑1)的输出;
在t次循环的每次的第一周期,对应于循环次数,依次计算伴随式S
1、排序寄存器单元RS
t、RS
t‑1、RS
t‑2......RS
4、RS
3的输出的平方,作为第二排序寄存器单元RS
p‑1的输出,在每次循环的其他k‑1个周期,选择第一排序寄存器单元RS
2t‑2的输出作为第二排序寄存器单元RS
p‑1的输出;
排序寄存器单元RS
1、RS
2......RS
p‑1、RS
p的输出作为所述偶数伴随式逐次计算及伴随式排序电路(104)的输出,以及k*p=t+1,k、p均为正整数;
所述并行迭代译码电路(106)基于无逆运算的BM算法利用所述偶数伴随式逐次计算及伴随式排序电路(104)输出的奇数伴随式与偶数伴随式计算错误位置多项式系数;
并行迭代译码电路(106)包括第一乘法器组(502)、第二乘法器组(508)、第三乘法器组(509)、多输入加法器(503)、加法器组(510)、错误多项式寄存器(511)、错误多项式位置缓存(512)、辅助多项式缓存(513)、非零差值寄存器(507)以及迭代差值寄存器(504),所述乘法器和加法器均为GF域内运算器;
对应于所述偶数伴随式逐次计算及伴随式排序电路(104)的t‑1次循环,所述并行迭代译码电路(106)进行t‑1次迭代计算,以及所述并行迭代译码电路(106)还进行第t次迭代计算,在每次迭代计算的k个周期的每个周期中,第一乘法器组(502)将所述偶数伴随式逐次计算及伴随式排序电路(104)的输出与错误多项式寄存器(511)存储的值相乘,多输入加法器(503)计算第一乘法器组(502)输出的p个积与所述多输入加法器(503)的前一周期的计算结果的和,第三乘法器组(509)将错误位置多项式缓存(512)的p个值分别与非零差值寄存器(507)的值相乘,第二乘法器组(508)将辅助多项式缓存(513)的p个值分别与迭代差值寄存器(504)的值相乘,加法器组(510)将第二乘法器(508)输出与第三乘法器(509)输出相加,得到p个和,并输出给错误多项式寄存器(511),判断迭代差值寄存器(504)是否等于零或者错误位置多项式的维数是否大于迭代次数j:
如果迭代差值寄存器(504)不等于零并且错误位置多项式的维数不大于迭代次数j,则将迭代差值寄存器(504)的值存储到非零差值寄存器(507)中,错误多项式寄存器(511)的输出寄存在错误位置多项式缓存(512)中,错误位置多项式缓存(512)将前一周期计算得到的错误位置多项式输出给辅助多项式缓存(513);
如果迭代差值寄存器(504)等于零或者错误位置多项式的维数大于迭代次数j,则不更新非零差值寄存器507内的值,也不更新辅助多项式缓存(513);
以及在每次迭代计算的最后一个周期,用多输入加法器(503)的输出值,对迭代差值寄存器(504)进行更新。
本发明还公开了一种用于BCH译码器的BM迭代译码电路,包括奇数伴随式计算电路(102)、偶数伴随式逐次计算及伴随式排序电路(104)以及并行迭代译码电路(106);
所述奇数伴随式计算电路(102)用于接收BCH编码的输入数据,以及计算所述BCH编码的输入数据的奇数伴随式;
所述偶数伴随式逐次计算及伴随式排序电路(104),计算所述BCH编码的输入数据的偶数伴随式,在一个周期内,将p个伴随式按照顺序输出给并行迭代译码电路(106),其中p为所述BCH译码器的并行度;
所述并行迭代译码电路(106),用于计算所述BCH编码的输入数据的错误方程式系数,其特征在于,在一个时钟周期内,所述并行迭代译码电路(106)将p个伴随式转化为p个错误方程系数。
本发明极大程度的减少了求解错误位置方程所需的时钟周期,降低了电路系统解延时,有效提高了BCH解码器的数据吞吐量。
【附图说明】
当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:
图1示出了本发明的迭代译码电路基本结构示意图;
图2示出了本发明的奇数伴随式计算电路;
图3示出了本发明的偶数伴随式逐次计算及伴随式排序电路(纠错能力t=15,并行度p=4);
图4示出了本发明的求解错误位置多项式的迭代译码流程图;
图5示出了本发明的并行迭代译码电路结构图(纠错能力t=15,并行度p=4);
图6示出了本发明的偶数伴随式逐次计算及伴随式排序电路;
图7示出了本发明的并行迭代译码电路结构图。
【具体实施方式】
图1是示出了本发明Berlekamp‑Massey迭代译码电路的基本结构示意图。本发明所设计的迭代电路主要包含三个部分,奇数伴随式的计算电路102、偶数伴随式逐次计算及伴随式排序电路104、并行迭代译码电路106。
当携带多位校验位信息的二进制BCH编码数据101输入到迭代译码电路时,首先由奇数伴随式计算电路102计算出该BCH编码数据的奇数伴随式103,当数据中没有错误位时,所有奇数伴随式均为0,跳出迭代译码。当数据中出现错误位时,奇数伴随式不全为0,此时将奇数伴随式输入到偶数伴随式逐次计算及伴随式排序电路104,求出偶数伴随式,并且按照一定顺序并行输出伴随式105(包括奇数伴随式和偶数伴随式)。该伴随式的输出作为并行迭代译码电路106的输入,由并行迭代译码电路106计算出错误位置方程107。
1.奇数伴随式计算电路
BCH译码的第一个步骤为计算伴随式。
一个长度为n位的二进制发送码字C(x)可以用多项式表示为
C(x)=(c
n‑1x
n‑1+...+c
1x+c
0)
其中c
n‑1,c
n‑2......c
0∈(0,1),为二进制发送码字的编码。
通过信道后,译码器接收到的数据为
R(x)=C(x)+E(x)=(r
n‑1x
n‑1+..+r
1x+r
0)
其中E(x)=(e
n‑1x
n‑1+...+e
1x+e
0)是信道产生的错误图样,因此伴随式可以表示为:
S
i=R(α
i)=C(α
i)+E(α
i)=E(α
i)
式中S
i为伴随式,α
i多项式方程C(x)的根(C(α
i)=0),因此对于无信道错误(E(x)=0)的BCH输入数据来说,伴随式为0,即S
i=0。
伴随式的计算公式可以转换成:
S
i=R(α
i)=r
n‑1(α
i)
n‑1+r
n‑2(α
i)
n‑2+r
1α
i+r
0 ‑‑‑‑‑‑‑‑‑‑‑‑‑(1)
=(...(r
n‑1α
i+r
n‑2)α
i+...+r
1)α
i+r
0 这表明可以通过乘法‑加法循环计算操作来求得伴随式。将输入数据的最高位r
n‑1与α
i相乘(GF域乘法),计算结果与下一个输入数据位r
n‑2相加;计算结果再与α
i相乘...以此类推,直到最后一位r
0,计算完成。
图2是示出了本发明的奇数伴随式计算电路,其中输入并行数据201为BCH编码字节(8bit),该数据中可能包含多个错误位。对于能够纠正t个错误位的二进制BCH编码,需要计算t个奇数伴随式,S
1,S
3,S
5......S
2t‑1。当BCH编码数据并行输入到奇数伴随计算电路时,首先经过RC(α
i)组合逻辑电路202计算出8次乘法‑加法循环计算的结果:
RC(α
i)=(...(R
n‑m(α
i)α
i+r
n‑m‑1)α
i+r
n‑m‑2)α
i+...+r
n‑m‑7)α
i+r
n‑m‑8 所属领域技术人员将容易意识到的是,这里每次输入一个字节(8比特)的BCH编码数据,以及对该1字节BCH编码输入,由RC(α
i)组合逻辑电路202执行的乘法‑加法循环计算的次数相应为8(与每次输入的比特数相同),仅仅是为便于表达的需要而作为举例,也可以采用其他比特数B作为输入数据的数量,并相应地进行B次乘法‑加法循环计算。
在图2的奇数伴随式计算电路的计算过程中,在一个周期内,RC(α
i)计算电路202计算(...(R
n‑m(α
i)·α
i+r
n‑m‑1)α
i+r
n‑m‑2)α
i+...+r
n‑m‑7)α
i+r
n‑m‑8,其中r
n‑m‑1,r
n‑m‑2...r
n‑m‑8为输入的一个字节的8个比特,R
n‑m(α
i)为前一次计算存储在寄存器203中的数据,RC(α
i)的计算结果为R
n‑m‑8(α
i)存储在寄存器203中;在下一个周期,当另外一个字节的数据输入时,同样进布此操作,依次循环,直到最后一个字节数据输入完成,寄存器内的数据即为该BCH编码数据的奇数伴随式204。根据前面公式,当无错误出现时S
i=0;因此当奇数伴随式全为0时,表明数据无错误需要纠正,跳出该迭代译码电路。当奇数伴随式不全为0时,这些奇数伴随式将会被发送到偶数伴随式逐次计算及伴随式排序电路104进行处理。
2.偶数伴随式逐次计算及伴随式排序电路
偶数伴随式逐次计算及伴随式排序电路104的主要特点是,伴随式在按照一定顺序并行输出的同时,只采用一个GF域平方计算单元,逐次计算出偶数伴随式。
对于BCH编码偶数伴随式求解有如下GF域计算公式,
根据该公式由S
1可以计算出
由S
2可以计算出S
4,由S
3可以计算出S
6......
图3是示出了本发明的偶数伴随式逐次计算及伴随式排序电路104,该图举例说明了一个纠错能力为15bit,并行输出4个伴随式的电路结构。
在初始时,图3中所描述的排序寄存器阵列300,将奇数伴随式载入排序寄存器单元,之后在时钟驱动下排序寄存器阵列300,进行14次循环,每个循环包含4个周期,每个周期可以并行输出4个伴随式,每次循环输出16个伴随式。其中排序寄存器单元RS
4,RS
3,RS
2,RS
1,提供排序寄存器阵列的输出,伴随式输出的方式在表1中示出。其中,以第1次循环的第一个时钟周期为例,在该时钟周期中,在排序寄存器单元RS
4输出S
3,在RS
3输出S
2,在RS
2输出S
1,RS
1的输出不考虑(表示为NA)。因而,表1中详细描述了排序寄存器阵列300在14个循环中的每一周期内,排序寄存器单元RS
4、RS
3、RS
2以及RS
1输出的内容。
表1伴随式并行输出顺序
在表1中,j为循环次数,S
2j(S
j2)表示由S
j通过GF域平方运算单元324计算出S
2j。
下面结合图3介绍偶数伴随式逐次计算及伴随式排序电路104的详细实施例。图3中附图标记310指示排序寄存器单元RS
i(i≠3),标记320指示排序寄存器单元RS
3,具有计算偶数伴随式的功能。对于RS
i(i≠3)排序单元310,其输入为R
i‑4313和R
i+14314,R
i‑4313和R
i+14314分别是RS
i‑4和RS
i+14排序寄存器单元的输出,其中i是周期为29的循环标识,并且:
R
i‑4=R
i‑4+29(当i‑4≤0时),R
i+14=R
i+14‑29(当i+14>29时)
R
i‑4313和R
i+14314通过MUX选通器312连接到寄存器311上,排序寄存器单元RS
i(i≠3)的输出信号为R
i315。
RS
3排序寄存器单元320的输入分为两部分,第一部分输入为信号S
1,R
15,R
14...R
3其中S
1是伴随式S
1,而R
15,R
14...R
3分别是排序寄存器单元RS
15,RS
14...RS
3的输出,他们通过一个MUX选通器323输入到GF域平方计算单元324,计算出偶数伴随式;RS
3排序寄存器单元320的第二部分输入为R
28,用于移位排序。两部分输入通过一个MUX选通器325连接到寄存器326上,RS
3排序寄存器单元320的输出为R
3。如前所述,RS
1、RS
2、RS
3、RS
4作为伴随式并行输出303连接到后级并行迭代译码电路106。
下面再次参看上述表1,并结合图3,以说明本发明的偶数伴随式逐次计算及伴随式排序电路104的工作过程。偶数伴随式逐次计算及伴随式排序电路可以分为循环排序移位和周期排序移位两种工作过程。
在每次循环的第1个周期进行循环排序移位。MUX选通器312选择R
i+14314作为RS
i(i≠3)中寄存器311的输入信号;MUX选通器325按照循环次数i,对应于i=1,2...14,依次选择S
1,R
15,R
14......R
4,R
3作为GF域平方计算单元324的输入,由GF域平方计算单元324计算出偶数伴随式;MUX选通器325选择GF域平方计算单元324的输出作为RS
3中寄存器326的输入。
在每次循环的第2,3,4周期进行周期排序移位。MUX选通器312选择R
i‑4313作为RS
i(i≠3)中寄存器311的输入信号,MUX选通器325选择R
28作为RS
3中寄存器326的输入。可选地,在此时可禁用MUX选通器323以及GF域平方计算单元324,以降低译码器的功耗。
为进一步提高GF域平方计算的速度,本发明还设计了一种全新的GF域平方计算单元324,用于计算偶数伴随式,对于GF(2
13)域平方计算单元,可以按照如下方法进行计算GF(2
13)域的平方。
设c={c[12],c[11],c[10],c[9],c[8],c[7],c[5],c[4],c[3],c[2],c[1],c[0]};
a={a[12],a[11],a[10],a[9],a[8],a[7],a[5],a[4],a[3],a[2],a[1],a[0]};
c[0]=a[0]^a[11];
c[1]=a[7]^a[11]^a[12];
c[2]=a[1]^a[7];
c[3]=a[8]^a[11]^a[12];
c[4]=a[2]^a[7]^a[8]^a[11]^a[12];
c[5]=a[7]^a[9];
c[6]=a[3]^a[8]^a[9]^a[12];
c[7]=a[8]^a[10];
c[8]=a[4]^a[9]^a[10];
c[9]=a[9]^a[11];
c[10]=a[5]^a[10]^a[11];
c[11]=a[10]^a[12];
c[12]=a[6]^a[11]^a[12];
其中“c”为GF域平方计算结果,“a”为平方计算输入,“^”为按位异或操作。因而可知,GF域平方计算单元电路,可以通过一系列异或门来实现。
与现有技术相比,所述偶数伴随式逐次计算及伴随式排序电路的优势在于:
1)采用GF域平方计算单元,替代GF域乘法计算单元,与GF域乘法电路相比,GF域平方电路占用的电路逻辑门不到GF域乘法电路占用逻辑门数的3%,中国专利申请200910046088.X中用于计算偶数伴随式所采用的便是GF域乘法器。
2)采用排序寄存器的方式,实现伴随式按照一定顺序输出。避免采用复杂的状态机或处理器指令来实现伴随式输出,简化了电路结构,提高了运行速度,减少了电路占用面积。
3)将平方计算嵌入到寄存器排序步骤中,串行计算偶数伴随式,只需要1个平方计算单元就可以实现偶数伴随式的逐次计算。避免采用多个GF域乘法单元同时计算偶数伴随式,大大降低了硬件的面积。
3.并行迭代译码电路
图4示出了本发明求解错误位置方程的迭代译码流程图,图5示出了本发明并行迭代译码电路结构图。
本发明采用了无GF域逆运算的简化BM算法,求解出错误位置方程的系数。迭代译码电路接收并行输入的伴随式(按照表1所示的排列顺序),通过乘法器组,加法器组,以及环状循环电路并行计算出错误位置方程的系数。对于纠错能力为15的迭代译码电路,整个过程,需要迭代15次,每次迭代包含4个周期,在最后一次迭代计算出错误位置方程的16个系数。在本实施例中,下面文字将结合图4和图5对迭代译码电路的组成和工作原理进行详细描述。
设σ(x)为错误位置多项式,τ(x)为辅助多项式,Δ为迭代差值,δ为非零迭代差值,Deg为多项式的维数,j为迭代次数,t为纠错能力。
在迭代计算的开始,需要对相关寄存器进行初始值设定401,
σ
(‑1)(x)=τ
(‑1)(x)=1,Δ
(0)=S
1,δ=1
即设定错误位置多项式缓存512和辅助多项式缓存513为1,设定错误多项式寄存器511为1,设定非零差值δ507为1,设定寄存器505为0,设定迭代差值Δ寄存器504为S
1,其中S
1由奇数伴随式计算电路求得。
参看图4,整个迭代电路主要涉及两种计算,求解迭代差值Δ的计算步骤402和求错误位置多项式系数σ的计算步骤403。在迭代译码电路中这两个计算步骤通过环状循环电路能够同时进行。下面,分别对其加以详细介绍。
A.求解迭代差值Δ的计算步骤402
首先,如表1及图3所示出的,偶数伴随式逐次计算及伴随式排序电路104能够每个周期将4个伴随式输入501,按照顺序输入到并行迭代译码电路106的“乘法器组1”502。在第j次迭代的第一个时钟周期,“乘法器组1”502包含4个GF(2
13)域乘法器,能够将错误多项式寄存器511中的4个多项式系数σ
0(j),σ
1(j),σ
2(j),σ
3(j)和输入的4个伴随式S
2j+1,S
2j,S
2j‑1,S
2j‑2在GF域内相乘,得到4个相乘结果σ
0(j)S
2j+1,σ
1(j)S
2j,σ
2(j)S
2j‑1,σ
3(j)S
2j‑2(当来自偶数伴随式逐次计算及伴随式排序电路104的输出为NA时,相应的GF域乘法结果计为0),将4个相乘结果和寄存器505所寄存的上个时钟周期的计算结果,通过多输入加法器503将5个输入求和;在第二个时钟周期计算出σ
4(j)S
2j‑3,σ
5(j)S
2j‑4,σ
6(j)S
2j‑5,σ
7(j)S
2j‑6,由多输入加法器503,将4个相乘结果和寄存器505所寄存的上个时钟周期的计算结果进行求和。在经历第j次迭代(循环)的4个周期后,也就是每次迭代(循环)地最后一个周期,得到迭代差值
该迭代差值寄存在迭代差值寄存器504内,而在每次迭代(循环)内,迭代差值Δ寄存器504的值保持不变。图3偶数伴随式逐次计算及伴随式排序电路中每次循环包含的4个周期相对应,表1中的第j次循环对应于图4的译码过程的第j次迭代。在第15次迭代时,并行迭代译码电路,只计算σ
(j)(x),不计算迭代差值Δ,不需要输入的伴随式;因此偶数伴随式逐次计算及伴随式排序电路需要经历14次循环,而并行迭代译码电路则需要进行15次迭代。
B.求错误位置多项式系数σ
(j)(x)的计算步骤403
求错误位置多项式系数σ
(j)(x)的计算步骤403是和求解迭代差值Δ的计算步骤402同时进行的,下面介绍求解错误位置多项式系数的详细步骤。
对应于偶数伴随式逐次计算及伴随式排序电路104的每个输出周期,判断迭代差值是否等于零或者σ
(j)(x)多项式的维数是否大于迭代次数j,即
Δ=0或Degσ
j(x)>j——(布尔表达式1)
对布尔表达式1的判断结果,如果“否”,通过MUX506将迭代差值Δ寄存器504记录到非零差值寄存器507内;在第j次迭代过程中,“乘法器组2”508的输入为辅助多项式缓存513和迭代差值寄存器504,计算出Δ
(j)x
2τ
i‑2(j‑1)(x),Δ
(j)x
2τ
i‑1(j‑1)(x),Δ
(j)x
2τ
i(j‑1)(x),Δ
(j)x
2τ
i+1(j‑1)(x);“乘法器组3”509的输入为错误位置多项式缓存512和非零差值寄存器507,计算出δ·σ
i(j‑1)(x),δ·σ
i+1(j‑1)(x),δ·σ
i+2(j‑1)(x),δ·σ
i+3(j‑1)(x),最后由“加法器组”510,并行计算σ
(j)(x)=δ·σ
(j‑1)(x)+Δ
(j)x
2τ
(j‑1)(x),得到σ
(j)(x)多项式的4个系数σ
i(j),σ
i+1(j),σ
i+2(j),σ
i+3(j),记录在错误多项式寄存器511中,错误多项式寄存器511的输出连接到“乘法器组1”502的输入,同时错误多项式寄存器511的输出也寄存在错误位置多项式缓存512中。对于上次迭代(第j‑1次迭代)计算得到的σ
(i‑1),错误位置多项式缓存512将其输出给辅助多项式缓存513,即图4中的τ
(j)(x)=σ
(j‑1)405。τ
(j)(x)将在下一次迭代(第j+1次迭代)中作为“乘法器组2”508的输入。
布尔表达式1的判断结果,如果“是”,通过MUX506将非零差值寄存器507内的值重新寄存,而不是更新为迭代差值Δ寄存器504的值;由“乘法器组2”508,“乘法器组3”509和“加法器组”510,并行计算σ
(j)(x)=δ·σ
(j‑1)(x)+Δ
(j)x
2τ
(j‑1)(x)403,得到σ
(j)(x)多项式的4个系数σ
i(j),σ
i+1(j),σ
i+2(j),σ
i+3(j),记录在错误多项式寄存器511中,输出给“乘法器组1”502,并寄存在错误位置多项式缓存512中;辅助多项式缓存513内的值不需要更新,即图4中的τ
(j)(x)=xτ
(j‑1)(x)407。
经过第j次迭代的4周期,计算出错误多项式的所有16个系数(每个周期计算出σ
(j)(x)多项式的4个系数σ
i(j),σ
i+1(j),σ
i+2(j),σ
i+3(j)),即得到错误位置多项式
在图4中的步骤408,将迭代次数加“1”,在步骤409,判断迭代次数j是否小于纠错能力“t”。如果“是”继续下一次迭代操作,对于一个纠错能力为15的BM迭代译码,需要进行15次迭代;如果“否”,表明迭代已经完成,得到错误位置多项式σ(x),在步骤410判断σ(x)的维数是否大于“t”,如果“是”表明该段代码错误位个数大于最大纠错能力,如果“否”,则σ(x)为该BCH编码的错误位置多项式。
与现有技术相比,所述并行迭代译码电路的优势在于:
1)每次能够并行处理多个伴随式,减少了求解方程的时钟周期,降低了电路系统解延时;对于实现具有15位纠错能力的BM译码,采用状态机或CPU指令方式实现需要几百到数千个时钟周期。而采用串行译码方式至少需要240个时钟周期,而采用并行度为4的译码方式只需要60个时钟周期就可以得到错误位置方程。与中国专利申请200910024526.2中所描述的性能相比,在16bit纠错能力下,采用状态机方式进行译码,需要830个时钟周期才能完成错误位置多项式的BM迭代运算。
2)采用环状循环电路,将错误多项式系数的计算和迭代差值的计算紧密衔接,可以同时计算迭代差值和错误位置多项式系数。3个GF域乘法器组一直处于工作状态,迭代过程中没有时钟周期处于等待状态,有效地减少了译码电路的延时。
3)与采用状态机或CPU指令方式实现BM译码相比,本并行迭代电路需要很少的面积,而且具有更高的译码速度;
4)在实现相同纠错数据吞吐量的情况下,本发明所采用的并行迭代电路结构在占用芯片面积上具有明显的优势。
4.纠错能力和并行度
以上对偶数伴随式逐次计算及伴随式排序电路和并行迭代译码电路的描述只针对纠错能力为15bit,并行度为4的一个例子进行说明;通过举例的方式对可纠正15位错误的BM迭代电路译码过程进行了一次完整描述,目的是便于理解迭代电路的工作原理。在此基础上,所属领域技术人员将容易意识到,对于具有t位纠错能力的偶数伴随式逐次计算及伴随式排序电路104,可以根据实际需要设计出具有其他并行度和周期数的排序电路,以及可得到相应并行度的并行迭代译码电路。
循环次数J,并行度p和周期数k与纠错能力t满足如下关系:
循环次数J=t‑1,并行度p×周期数k=t+1
其中J,p,k,t均为自然数,因此t+1为p的倍数,因此p可以等于1到t+1中任意一个可以整除t+1的自然数。
例如,对于15bit纠错能力,可以设计出循环次数为14,每次循环包含8个周期,每个周期并行输出2个伴随式的排序电路;也可以设计出循环次数为14,每次循环包含1个周期,每个周期并行输出16个伴随式的排序电路。对于纠错能力为8bit,可以设计出循环次数为7,每次循环包含3个周期,每个周期并行输出3个伴随式的排序电路。
图6示出了偶数伴随式逐次计算及伴随式排序电路,具有通用意义。图中t为纠错能力,p为并行度,m为排序寄存器阵列的行数,连续p个寄存器被划分为一行,2t‑1个RS寄存器单元共排列成m个满行,满足如下关系;
2t‑1‑p<m×p≤2t‑1
在图6中,RS表示寄存器单元,RS
i(i≠p‑1)寄存器单元具有周期排序移位和循环排序移位的功能,RS
p‑1寄存器单元,除了具有周期排序移位和循环排序移位的功能外,还具有偶数伴随式计算的功能,表2列出了具有纠错能力为t,并行度为p的伴随式的输出顺序。图6中所示电路的工作方式与前面所叙述的偶数伴随式逐次计算及伴随式排序电路(t=15,p=4)的工作方式一致,在此不再作重复描述。
表2纠错能力为t,并行度为p的伴随式输出顺序
对于具有t位纠错能力的并行迭代译码电路106,可以根据实际需要设计出具有其他并行度和周期数的迭代译码电路。其中迭代次数J,并行度p和周期数k满足如下关系:
迭代次数J=t,并行度p×周期数k=t+1
其中J,p,k,t均为自然数,因此t+1为p的倍数,因此p可以等于1到t+1中任意一个可以整除t+1的自然数。
例如,对于15bit纠错能力,可以设计出迭代次数为15,每次迭代包含8个周期,并行度为2的迭代译码电路;也可以设计出循环次数为15,每次循环包含1个周期,并行度为16的迭代译码电路。对于纠错能力为8bit,可以设计出循环次数为8,每次循环包含3个周期,并行度为3的迭代译码电路。
也可以采用包含执行计算指令的微处理器的电路系统来实现偶数伴随式逐次计算及伴随式排序电路,并按照如表2所示出的伴随式输出顺序,以向并行迭代译码电路输出伴随式。由于参照前述公式(1)可以容易地得到微处理器指令实现的BCH码的伴随式计算方法,因而为使本说明书保持简洁,而不复赘述。
图7是示出了本发明的并行迭代译码电路结构图。为了满足并行度p的计算,乘法器组由p个GF域乘法器组成,加法器组由p个GF域加法器组成,其工作方式和流程与前面所叙述的具有15位纠错能力并行度为p的并行迭代译码电路一致。
对于纠错能力为t,并行度为p的BM迭代译码电路所需时钟周期T为:
需要强调的是,偶数伴随式逐次计算及伴随式排序电路104和并行迭代译码电路106,需要具有相同的并行度p。
在纠错能力t不变的情况下,并行度p越大,译码所需时钟周期越少,BM译码电路的延时越小;同时并行度p越大,译码电路所占用的电路面积越大。因此,在实际应用中可以根据译码系统对延时和电路占用面积的需求,灵活选取并行度。
利用本发明中所公开的译码电路,已实现了具有15位和8位纠错能力的BCH译码电路。对于具有15位纠错能力BCH译码电路,其数据吞吐量大于2GB/s,工作在250MHz时钟频率时,平均BM迭代译码延时只有250ns。对于具有8位纠错能力的BCH译码电路,其数据吞吐量大于4.5GB/s,工作在250MHz时钟频率时,平均BM迭代译码延时只有100ns。该电路已用于实现高速固态存储设备的ECC模块的设计,提高了存储系统的带宽和IOPS,降低了整个存储系统的延时,减少上层软件的IO操作等待时间。
已经为了示出和描述的目的而展现了对本发明的描述,并且不旨在以所公开的形式穷尽或限制本发明。对所属领域技术人员,许多调整和变化是显而易见的。