一种基于并行编码译码的循环汉明码的纠错方法
技术领域
本发明涉及纠错方法技术领域,主要适用于基于并行编码译码的循环汉明码的纠错方法。
背景技术
CRC是一种高效的纠错码,其循环编码和译码特点使其在通信、自动控制和存储器的可靠性等方面得到了广泛的应用。通常的CRC编码译码是采用串行方式来实现的。这种方案的编码译码所需电路很小,但是编码译码时间却依赖于时钟周期和码字长度,因此在对电路速度要求极高的场合显得极不适用。
(39,32)Hsiao码是一种常用的线性分组码,能够纠正一个错误并且检测两个错误的纠错码(SECDED)。通过其相应的生成矩阵和校验矩阵,可以设计出来相应的并行组合译码电路,从而大大缩短了编码译码时间。但是(39,32)Hsiao码需要7个冗余校验位,增加了SRAM和寄存器外围EDAC电路的面积。
发明内容
本发明所要解决的技术问题是提供一种基于并行编码译码的循环汉明码的纠错方法,它不仅提高了输入信号的编码译码速度,而且实现了对输入信号的纠错,且添加的校验位最少。
为解决上述技术问题,本发明提供了一种基于并行编码译码的循环汉明码的纠错方法,包括:
先分析传统的串行CRC编码电路的结构得到所述串行CRC编码电路的六个寄存器中的数据之间的递推关系式;即
其中,s0 i+1表示输入第i+1个数据后寄存器s0里面的值,s1 i+1表示输入第i+1个数据后寄存器s1里面的值,s2 i+1表示输入第i+1个数据后寄存器s2里面的值,s3 i+1表示输入第i+1个数据后寄存器s3里面的值,s4 i+1表示输入第i+1个数据后寄存器s4里面的值,s5 i+1表示输入第i+1个数据后寄存器s5里面的值,s0 i表示输入第i个数据后寄存器s0里面的值,s1 i表示输入第i个数据后寄存器s1里面的值,s2 i表示输入第i个数据后寄存器s2里面的值,s3 i表示输入第i个数据后寄存器s3里面的值,s4 i表示输入第i个数据后寄存器s4里面的值,s5 i表示输入第i个数据后寄存器s5里面的值,ui+1表示输入的第i+1个信息位;
再将所述递推关系式展开得到并行编码中校验位和信息位之间的关系表达式;即
按照所述并行编码中校验位和信息位之间的关系表达式进行并行编码;
再得到并行译码中新的校验位和新的编码字码之间的关系表达式,并进行并行译码得到码字;
最后,对通过所述并行译码得到的码字进行纠错。
进一步地,所述再得到并行译码中新的校验位和新的编码字码之间的关系表达式,并进行并行译码,并进行并行译码,包括:
先引入矩阵F:
其中P0为(63,57)CRC对应的生成多项式的0次幂系数,Pm-1为(63,57)CRC对应的生成多项式的m-1次幂系数,Pm-2为(63,57)CRC对应的生成多项式的m-2次幂系数,Im-1,m-1为一个m-1乘m-1的方阵;
再设A=[1,0,0,0,0,0]T,V=[v0,v1,v2,…,v37],其中V为编码字码的集合,则其中,H为待编码信息位矩阵;
根据串行译码的递推关系,可以推出并行译码中最终的六位校验子S和待编码信息位矩阵H之间的关系表达式为:其中,S38为将38位码字输入完成之后,寄存器中的校验子向量S,且S=(s0,s1,s2,s3,s4,s5),H1为H矩阵的第一列,H2为H矩阵的第二列,H38为H矩阵的第三十八列;
再将所述并行译码中最终的六位校验子S和待编码信息位矩阵H之间的关系表达式展开得到并行译码中新的校验位和新的编码字码之间的关系表达式;即
再按照所述并行译码中新的校验位和新的编码字码之间的关系表达式进行并行译码得到码字。
进一步地,所述对通过并行译码得到的码字进行纠错包括:
先将经所述并行译码得到的码字对应的幂乘以X6,再除以CRC对应的生成多项式p(X)=1+X+X6,并根据得到的运算结果判定是否对码字进行纠错;
若所述运算结果不为0,则说明经并行译码得到的码字不能被CRC对应的生成多项式整除,即码字发生了跳变;再将运算结果对应的系数做与门运算,并将所述与门运算的结果与码字做异或运算,实现纠错。
进一步地,所述将递推关系式展开得到并行编码中校验位和信息位之间的关系表达式包括:
先设:A=[1,0,0,0,0,0]T,U=[u0,u1,u2,...,u31],其中U为信息位码的集合,则:
再将所述串行CRC编码电路中六个寄存器中的数据之间的递推关系式简化得到:
其中,Si+1表示输入第i+1个数据后寄存器中的校验子向量,Si表示输入第i个数据后寄存器中的校验子向量,G,i+1表示G矩阵的第i+1列,且-1≤1≤30;
再将(1)式展开,得到
由于寄存器内数据初始值满足:S0=0;则可将(2)式化简为
将(3)式计算得到
将(4)式展开得到:
进一步地,所述将(3)式计算得到 包括:通过Matlab将(3)式计算得到
进一步地,所述按照并行编码中校验位和信息位之间的关系表达式进行并行编码包括:按照所述并行编码中校验位和信息位之间的关系表达式构建并行编码电路,再通过所述并行编码电路对输入信号进行并行编码。
进一步地,所述进行并行译码得到码字包括:按照所述并行译码中新的校验位和新的编码字码之间的关系表达式构建并行译码电路,再通过所述并行译码电路对编码字码进行并行译码得到码字。
进一步地,所述若运算结果不为0,则说明经并行译码得到的码字不能被CRC对应的生成多项式整除,即码字发生了跳变;再将运算结果对应的系数做与门运算,并将与门运算的结果与码字做异或运算,实现纠错,包括:若所述运算结果不为0,则说明所述经并行译码得到的码字不能被CRC对应的生成多项式整除,即码字发生了跳变;再构建纠错电路;将运算结果对应的系数做与门运算,并将与门运算的结果与码字做异或运算,实现纠错。
本发明的有益效果在于:
本发明提供的基于并行编码译码的循环汉明码的纠错方法采用并行的方式对输入数据进行编码译码,不仅提高了输入信号的编码译码速度,而且实现了对输入信号的纠错,且添加的校验位最少。
附图说明
图1为本发明实施例提供的基于并行编码译码的循环汉明码的纠错方法的流程图。
图2为传统的串行CRC编码电路的数字电路图。
图3为由本发明实施例提供的基于并行编码译码的循环汉明码的纠错方法构建的部分并行编码电路的数字电路图。
图4为由本发明实施例提供的基于并行编码译码的循环汉明码的纠错方法构建的部分并行译码电路的数字电路图。
图5为由本发明实施例提供的基于并行编码译码的循环汉明码的纠错方法构建的部分纠错电路的数字电路图。
具体实施方式
为进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的基于并行编码译码的循环汉明码的纠错方法的具体实施方式及工作原理进行详细说明。
由图1可知,本发明提供的基于并行编码译码的循环汉明码的纠错方法包括:先分析传统的串行CRC编码电路的结构得到串行CRC编码电路的六个寄存器中的数据之间的递推关系式;即
其中,s0 i+1表示输入第i+1个数据后寄存器s0里面的值,s1 i+1表示输入第i+1个数据后寄存器s1里面的值,s2 i+1表示输入第i+1个数据后寄存器s2里面的值,s3 i+1表示输入第i+1个数据后寄存器s3里面的值,s4 i+1表示输入第i+1个数据后寄存器s4里面的值,s5 i+1表示输入第i+1个数据后寄存器s5里面的值,s0 i表示输入第i个数据后寄存器s0里面的值,s1 i表示输入第i个数据后寄存器s1里面的值,s2 i表示输入第i个数据后寄存器s2里面的值,s3 i表示输入第i个数据后寄存器s3里面的值,s4 i表示输入第i个数据后寄存器s4里面的值,s5 i表示输入第i个数据后寄存器s5里面的值,ui+1表示输入的第i+1个信息位;具体的,由图2可知,时钟信号clk控制六个寄存器,分别为寄存器s0、寄存器s1、寄存器s2、寄存器s3、寄存器s4及寄存器s5;当时钟上升沿到来时,寄存器的输出送入下一级,寄存器s5的输出与一位输入进来的信号一起送入异或门1,然后再送到寄存器s0,寄存器s0的输出与异或门1一起送入异或门2;异或门2再将数据送入到寄存器s1,依此类推。当信息位输入完成之后,六个寄存器中保存的值就是六位校验位的值。六个寄存器内保存的数据与外界输入一起,循环移位。根据代数方法来理解,六位校验位就是信息位构成的信息位多项式,然后乘以X6(输入信息与最右边的寄存器的输出一同运算相当于乘以X6),再除以CPC对应的生成多项式p(X)=1+X+X6得到的余式的系数。图2所述的电路实际上就是伽罗华域GF(2m)上的一种多项式除法电路。从而得到寄存器中的数据之间的递推关系式。
再将递推关系式展开得到并行编码中校验位和信息位之间的关系表达式;即
具体方法为:
先引入矩阵F:
其中P0为(63,57)CRC对应的生成多项式的0次幂系数,Pm-1为(63,57)CRC对应的生成多项式的m-1次幂系数,Pm-2为(63,57)CRC对应的生成多项式的m-2次幂系数,Im-1,m-1为一个m-1乘m-1的方阵;
再设:A=[1,0,0,0,0,0]T,U=[u0,u1,u2,...,u31],其中U为信息位码的集合,则:
再将串行CRC编码电路中六个寄存器中的数据之间的递推关系式简化得到:
其中,Si+1表示输入第i+1个数据后寄存器中的校验子向量,Si表示输入第i个数据后寄存器中的校验子向量,G,i+1表示G矩阵的第i+1列,且-1≤1≤30;
再将(1)式展开,得到
由于寄存器内数据初始值满足:S0=0;则可将(2)式化简为
通过Matlab将(3)式计算得到
将(4)式展开推出得到:
接着按照并行编码中校验位和信息位之间的关系表达式构建并行编码电路,再通过并行编码电路对输入信号进行并行编码;
再得到并行译码中新的校验位和新的编码字码之间的关系表达式,并进行并行译码得到码字;具体方法为:
先引入矩阵F:
其中P0为(63,57)CRC对应的生成多项式的0次幂系数,Pm-1为(63,57)CRC对应的生成多项式的m-1次幂系数,Pm-2为(63,57)CRC对应的生成多项式的m-2次幂系数,Im-1,m-1为一个m-1乘m-1的方阵;
再设A=[1,0,0,0,0,0]T,V=[v0,v1,v2,…,v37],其中V为编码字码的集合,则其中,H为待编码信息位矩阵;
由于传统的串行译码实际上是一个多项式除法电路,根据递推关系,故在并行译码中最终的六位校验子S和待编码信息位矩阵H之间的关系表达式为:其中,S38为将38位码字输入完成之后,寄存器中的校验子向量S,且S=(s0,s1,s2,s3,s4,s5),H1为H矩阵的第一列,H2为H矩阵的第二列,H38为H矩阵的第三十八列;
再将并行译码中最终的六位校验子S和待编码信息位矩阵H之间的关系表达展开得到并行译码中新的校验位和新的编码字码之间的关系表达式,且展开得到的并行译码中的新的校验位和新的编码字码之间的关系表达式为
再按照并行译码中新的校验位和新的编码字码之间的关系表达式构建并行译码电路,再通过并行译码电路对编码字码进行并行译码得到码字;
最后,对通过并行译码得到的码字进行纠错,具体方法为:
先将经并行译码得到的码字对应的幂乘以X6,再除以CRC对应的生成多项式p(X)=1+X+X6,并根据得到的运算结果判定是否对码字进行纠错;
若运算结果为0,则说明经并行译码得到的码字能够被CRC对应的生成多项式整除,即码字没有发生跳变,不需要纠错;
若运算结果不为0,则说明经并行译码得到的码字不能被CRC对应的生成多项式整除,即码字发生了跳变;再构建纠错电路,并将运算结果对应的系数做与门运算,并将与门运算的结果与码字做异或运算,实现纠错。
通过本发明提供的基于并行编码译码的循环汉明码的纠错方法对32位的SRAM进行纠错,由于要处理的是32位的信息位,必须由(63,57)CRC缩短25位而来,构成(38,32)缩短循环汉明码。先设6位冗余校验位多项式为:
s(X)=s0+s1X+s2X2+s3X3+s4X4+s5X5
设32位信息位多项式为:
u(X)=u0+u1X+u2X2+…+u31X31
设38位码多项式为:
v(X)=v0+v1X+v2X2+…+v37X37
(63,57)CRC对应的生成多项式为:
p(X)=p0+p1X+…+p6X6=1+X+X6
再通过传统的CRC编码电路得到串行CRC编码电路中六个寄存器中的数据之间的递推关系式;再将递推关系式展开得到并行编码中校验位和信息位之间的关系表达式,即 接着按照并行编码中校验位和信息位之间的关系表达式构建并行编码电路,再通过并行编码电路对输入信号进行并行编码,图3为由本发明构建的部分并行编码电路的数字电路图。接着得到并行译码中新的校验位和新的编码字码之间的关系表达式,即 再按照并行译码中新的校验位和新的编码字码之间的关系表达式构建并行译码电路,再通过并行译码电路对编码字码进行并行译码得到码字,图4为由本发明构建的部分并行译码电路的数字电路图;再将经并行译码得到的码字对应的幂乘以X6,再除以CRC对应的生成多项式p(X)=1+X+X6,并根据得到的运算结果判定是否对码字进行纠错。例如:如果码字v37发生跳变,则计算出的冗余校验向量必然等于X36*X6=X42(v37对应的幂为X36,因为从电路右端输入,故乘以X6)除以生成多项式p(X)=1+X+X6得到的余式为1+X+X2+X4+X5。对应的校验子为:S=111011,设计满足逻辑运算s0&s1&s2&(!s3)&s4&s5的与门,如果结果为1,则通过与v37进行异或运算使这一位上的值发生翻转,从而使信息位得到纠正,图5为由发明构建的v37对应的纠错电路的数字电路图(其余位类似)。
本发明提供的基于并行编码译码的循环汉明码的纠错方法采用并行的方式对输入数据进行编码译码,不仅提高了输入信号的编码译码速度,而且实现了对输入信号的纠错,且添加的校验位最少。
最后所应说明的是,以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照实例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。