背景技术
缩短码的纠错译码(下称BCH码)是由Hocquenghem于1958年以及Bose和Ray-Chaudhuri于1960年分别提出的一种可以纠正多个随机错误的循环码,它是一种纠错能力极强的纠错码,BCH就是三人名字的首字母。对于能纠正三个以下随机错误的BCH码,称为BCH-3译码。现有BCH-3译码的实现算法多种多样,但是其基本原理都是通过下面几个步骤来实现:
1、由接收到的码字R(x)计算伴随式S(x)并检出错误;
2、由S(x)确定错误位置多项式δ(x);
3、用钱搜索解出δ(x)的根,得到错误位置数,从而确定错误图样;
4、由R(x)-E(x)得到最可能发送的码字,输出纠正以后的码字V(x)。
其中实现最复杂的是第2、3两个步骤,下面是两种常见的实现方法:图1为经典译码算法的实现方案原理图。这种算法为经典的BCH码译码算法,对于码字长度很短的情况,这种方法能够很好的译码,而且对于非高速系统也能很好的运用,这种译码算法的思想是通过输入的码流计算出伴随式S,在计算伴随式的时候,如果采用的译码码字为原码,那么,只要按照几个生成多项式的表达式,对其进行求余,并作简单的替换即可完成伴随式的计算(参见 王新梅 《纠错码--原理和方法》西安电子科技大学出版社,1996),计算完成伴随式之后,通过迭代译码算法利用LFSR作迭代运算,即可得到错误位置多项式,最后通过解错误位置多项式的根可以计算出错误位置,计算出an-i是错误位置数,那么码字中第n-i位置错误的,将其与1进行异或进行纠错。
对于图1方案,采用的是经典的BCH-3译码算法,由伴随式计算错误位置多项式的时候通过迭代方法一步一步的进行迭代而得到错误位置多项式,这种方法不仅在算法上显得非常烦琐,而且运用迭代译码算法的结果是使得每作一步迭代需要运算较长时间。在求出错误位置多项以后,经过解方程的方法求出错误位置,然后进行纠错,这种方法虽然实现起来在硬件资源上不是太多浪费,但是其在作迭代算法时采用线性反馈移位寄存器的方案要得到实现,延时却非常大,这在高速系统中无法运用。
图2为在伴随式计算错误位置多项式上有所改进的方案。
此方案在由伴随式计算错误位置多项式的实现上作了改进(参见KraftBCH error-location polynomial decoder,1994),此方案的目的是为了提高速率,但是在计算中间变量的时候,大量的使用乘法和除法运算,对于有限域上的乘法和除法,要用ASIC来实现是有很大困难的,尤其是对于除法电路,因此这种实现方法的乘除法的实现是通过ROM存储的方式,通过ROM寻址来得到乘除法的结果的,这对于码字较短的码流来说,对于提高速率具有很好的效果,但是如果码字的长度很长,比如本例的4359,那么用这种方法来实现所需要的ROM(Read Only Memory只读存储器)将是非常大的,对于资源来说显得过于浪费。
图2的实现方法主要在由伴随式计算错误位置多项式的一步有所改进,但是在计算判决向量a、b、c和δ1、δ3、δ5用到了大量的乘除法运算,这些乘除法运算都是通过ROM寻址来得到乘除法的结果的,因此采用此方法对于较大数据流的纠错是非常浪费的,比如实现有限域GF(213)来说,首先将有限域上的各个元素的次幂和各次幂对应的有限域上的值进行存储,然后在作乘法时先将两个元素的指数相加,得到一个指数,根据这个指数再到存储值的ROM查到结果,这种方法虽然从根本上解决了计算δ的速度,但是在资源上形成了很大浪费。
综上所述,上述译玛算法的实现电路复杂,延时大,运算速度低,在电路资源上存在一定浪费。
发明内容
为了克服BCH译码实现算法上述的实现方案存在的不足,本发明提出了一种改进的BCH-3译码算法的ASIC实现方法及其电路,以提高运算速度,节省硬件资源。
本发明提出的高效BCH译码算法的ASIC实现方法,包括如下步骤:
a、由伴随式计算单元根据输入码字R(x)计算伴随式S(x);
b、将步骤a所述的各个伴随式S(x)分别送入相应的伴随式修正单元进行修正,得到修正后的伴随式系数P(x);
c、将步骤b所述的各个伴随式系数P(x)输入错误位置定位单元,根据条件判别式如
分析判断,在错误发生的地方错误位置定位单元输出纠错比特E(x);
d、将步骤c所述的纠错比特E(x)和通过K级缓冲器的信息码元R(x)进行异或运算,输出纠错后的码元V(x)。
实现本发明方法的电路,包括输入码元R(x)的K级缓存器、若干伴随式S(x)计算单元以及异或运算电路,异或运算电路的一个输入端接K级缓存器输出,其特征在于还包括:与伴随式S(x)相应的伴随式修正单元;以及一个错误位置定位单元,它的输出连接异或运算电路的另一个输入端,根据输入的各个伴随式系数P(x)分析判断,在错误发生的地方输出纠错比特E(x)再通过异或运算电路输出纠正后的码元V(x)。
现有技术在计算错误位置的时候,一般都是先由计算出的伴随式解出错误位置多项式,然后通过Chien搜索算法来求得错误位置,本发明巧妙利用循环码中的牛顿恒等式,直接有伴随式就得到了错误位置,完成错误位置的定位,这种计算采用组合逻辑并行实现了乘法的运算,在速度上加快了计算速度,而且由于直接由伴随式就计算输出错误位置,这样将错误位置多项式的求出和Chien搜索算法用一个电路来实现,解决了现有现有译码算法电路运算速度不高,延时过大的问题,ASIC实现方案使硬件资源大大节省。
本发明经过RTL级代码仿真,验证,证明确实有效,工作正确。
具体实施方式
如图3、4所示,实现本发明的电路包括:输入码元R(x)的K级缓存器,若干伴随式S(x)计算单元,伴随式修正单元,错误位置定位单元以及异或运算电路;K级缓存器输出和错误位置定位单元输出分别接异或运算电路的两个输入端,伴随式修正单元连接于伴随式计算单元与错误位置定位单元之间,错误位置定位单元根据输入的各个伴随式系数P(x)分析判断,在错误发生的地方输出纠错比特E(x)再通过异或运算电路输出纠正后的码元V(x)。其错误位置定位单元包括:若干P(x)乘法器,|A|=0、θ′=0、Poly1=1 判别电路,两个与门以及或门电路等;或门电路输入端分别接两与门电路的输出,一个与门电路的两输入端分别接|A|=0和Poly1=1判别电路的输出,θ′=0判别电路输出接另一个与门电路的第一输入端,|A|=0判别电路通过反相器接到另一个与门电路的第二输入端;所述三个判别电路的输入端连接相应的P1、P3及P5的输出。
本发明巧妙利用循环码中的牛顿恒等式,直接有伴随式就得到了错误位置,完成错误位置的定位,这种计算采用组合逻辑并行实现了乘法的运算,在速度上加快了计算速度,而且由于直接由伴随式就计算输出错误位置,这样将错误位置多项式的求出和Chien搜索算法用一个电路来实现,在资源上也是大大的节省。
对于循环码的伴随式,有如下牛顿恒等式:
S1-δ1=0
S3-δ1S2+δ2S1-3δ3=0
S5-δ1S4+δ2S3-δ3S2+δ4S1-5δ5=0
可以解得行列式:
可以将错误图样分为三类:
没有出现错误:E(x)={0000...0000}
出现一个错误:E(x)={100......000,0100....000,00100....000,...000....001}
出现两个错误:E(x)={1100...000,01100...000,001010...000,...00...0011}
出现三个错误:E(x)={11100...00,01110...000,0010110...000,...00...0111}
这样可以得到下面的S判别式:
没有错误时:S1=0、S3=0、S5=0
对于BCH-3,当出现一个错误时:
|A|=0可以解得
当有两个或三个错误出现时:|A|≠0但是θ=0。
错误个数大于三个时,伴随式计算电路实效,纠错会出现判断不对的情况,将出现乱纠错,但是通过仿真发现当错误大于三个以上时,出现乱纠错的概率大概是1/(!N)(其中N为加入的错误数)。对于光纤通信信道来说,其本身出现错误的概率就比较小,所以出现BCH译码失效乱纠错的情况也是几乎不可能发生的,因此在光纤传输网络中一般只考虑对电路进行纠错,而不对电路进行错误多少的判断。下面就是具体的实现方案,以缩短码(4359,4320)的译码方法为例介绍:
本发明对于原码来说不需要作计算伴随式和错误位置时的修正,直接即可实现,因此主要针对缩短码进行介绍,此也为本发明对BCH-3进行解码的一个主要优点。下面仔细进行论述。
1、伴随式计算
对于二进制BCH的解码,只需要求出S1、S3......S2t-1即可完成纠错电路的纠错功能。因此只对S1、S3......S2t-1(t为纠错能力,本例t为3)进行计算。
本例所用到的码字为(213=8192)的缩短码,缩短位数为8192-4359=3833位,所以在计算伴随式时相当于前面3833位全为“0”,也就相当于在计算伴随式之前首先乘以x3833,然后再作伴随式的计算,由于计算伴随式时相当于R(x)/m(x)的模,其中
m1(x)=x13+x4+x3+x+1
m3(x)=x13+x10+x9+x7+x5+x4+1
m5(x)=x13+x11+x8+x7+x4+x+1
在计算时乘以x3833相当于乘以x11【mod(3833/11)】,乘以x11的示意图,首先计算S1。图5为伴随式S1的计算电路实例,由本原多项式可以得到伴随式的计算电路.它由寄存器D0-D12和四个异或电路组成,寄存器D11、D12和D0依次串接,寄存器D1和D2串接,寄存器D4--D10依次串接,异或电路1接于D0和D1之间,异或电路2接于D2和D3之间,异或电路3接于D3和D4之间,异或电路4接于D10和D11之间,异或电路1、2、3的另一个输入端均接寄存器D12的输出,输入码流R(x)接于异或电路4的另一个输入端,经过4320个循环周期之后,寄存器D12-D0内存储的值就是伴随式向量的值。
计算S3和S5采用同样的方法完成,只是经过4320的循环周期之后,还必须对寄存器中的值进行处理之后才能得到伴随式S3和S5的值。其变换规则根据有限域乘除法概念可以轻松实现,在此不作详述。
2.乘于a3821实现电路
因为每一个错误图样都分别对应一组伴随式S1、S3、S5,而且它们之间的关系是由其中某一组伴随式无输入循环移位都可以得到另外的伴随式。在由伴随式计算错误位置的时候,因为是缩短码,错误位置的出现比原码要晚3833-11=3822cycle,所以在由伴随式计算错误位置的时候需要乘以一个修正因子a3822(a为有限域上的元素),因为在计算错误位置的时候至少需要一个时钟的延时(本发明按照一个时钟周期延时为例),所以纠错码元输出延时一个时钟周期,这样作通过乘以修正因子a3821即可得到伴随式的值,可使缩短码错误位置根据实际延时需求输出,纠错正常。注意上面谈到的乘(除)法都是有限域上的乘(除)法,根据有限域上的乘法概念,即可用组合逻辑实现乘法,乘以a3821的具体实现电路如图6所示。图6所示的p12-p0为修正后伴随式系数,该电路由13个异或运算单元(XOR)组成,13个异或运算单元的输出分别为P12-P0,伴随式S12-S0连接所述13个异或运算单元的相应输入端。乘于a3272、a2723方法相同,不再详细阐述。
P与S的关系:
P1=S1a3821、P3=S3a3272、P5=S5a2723
在进行错误位置定位的时候,每一个时钟Pi(i=1、3、5)分别乘于ai,然后通过下面的判决条件即可在错误发生的地方输出纠错比特,让纠错比特和信息码元进行异或即完成了错误码元的纠正。通过牛顿恒等式,在进行纠错比特计算时可以得到相应下面相应的行列式:
对于BCH-3,当出现一个错误时:
|A|=0可以解得
P1=1
当有两个或三个错误出现时:|A|≠0 但是θ′=0,亦即
,可以通过解行列式得到产生三个错误的条件:
3、纠错的电路的实现
每一个时钟周期都可以通过计算得到一组P1、P3、P5,根据上面的关系式就可以得到相应的纠错比特。在计算过程中需要求解13位二进制数的有限域上的平方以及乘法,根据二进制数有限域上的乘法概念,可以简化平方电路的算法而不必使用乘法电路来实现平方电路,通过综合发现凭此方法实现的平方电路大概只有平方电路1/10的面积大小,下面就是P1 2的实现过程:
设P1=a12a12+a11a11+a10a10+......+a1a+a0,则根据二进制数的加法概念,两个相同的数相加结果为0,可以得到P1·P1=a12a24+a11a22+a10a20+....+a1a2+a0,依据二进制数有限域上乘法的概念,依据下表可以将ai(i>12)的元素用次数小于12的元素来表示,于是可以得到P1 2相对于P1作如下变换得到:
a12→a12+a11+a6 a11→a12+a10 a10→a11+a10+a5 a9→a11+a9a8→a10+a9+a4 a7→a10+a8 a6→a12+a9+a8+a3 a5→a9+a7
a4→a12+a11+a8+a7+a2 a3→a12+a11+a8 a2→a7+a1 a1→a12+a11+a7
a0→a11+a0
根据上面的变换可以得到平方电路的实现电路图7,该电路由13个异或运算单元(XOR)组成,修正后伴随式系数P12-P0接所述13个异或运算单元的相应输入端。逐一计算出条件表达式的各个条件以后,根据结果,条件为真产生纠错比特1,与信息码元作异或就可完成二进码的纠错。如果条件不成立,则纠错比特不可能出现。
本发明经过RTL级代码仿真,验证,效果理想。其运算速度、资源的利用情况与现有技术对比如表一。
表一
实现方案 |
速度上的对比 |
资源耗费上的对比 |
|
计算Sj |
计算δ(x) |
错误定位 | 计算Sj | 计算δ(x) | 错误定位 |
方案一 |
n |
2mt |
mk |
39reg |
39treg |
39reg |
方案二 |
n |
2 |
k |
39reg |
13*8192+8192ROM | 39reg |
本发明方案 |
n |
0 |
k |
39reg |
0 | 39reg |
表一中:t表示最大能纠正的错误个数 n表示信息比特+校验比特
k表示码字的信息比特,需纠错比特 m=log2n。