循环移位寄存器的改进的进位输出字计算的制作方法

文档序号:6443741阅读:675来源:国知局
专利名称:循环移位寄存器的改进的进位输出字计算的制作方法
技术领域
本发明涉及对循环移位寄存器的进位输出字计算,例如CRC编码器,解码器和错误设陷电路。
这样,

图1表示具有生成多项式的CRC编解码器G(X)=X3+X+1图1(a)表示CRC编码器,而图1(b)表示解码器。在这些电路的一般操作中,移位寄存器的内容(对编码器称为奇偶位,而对解码器称为校正子(syndrome))是按逐位方式移位的。
对于校正子计算已提出逐字节地而不是逐位地移位该移位寄存器的内容。其公开在Jack Crenshaw的文章中,该文章发表在“EmbededSystems Programming,January 1992,Pages 34-40”上。
在我们的未决(未公布)的专利申请0116157.9中“多位移位”被扩展到处理错误设备和错误检测。此外,建议这些处理以逐字方式而不以逐字节方式执行。
该逐字CRC计算包括两个主要步骤,反馈字计算和寄存器内容更新。假定抽头数是L而字长度是K。该反馈字包括在电路左端丢失的第一个K位(见图1)。该反馈字可使用下列等式递归地计算fdbk_wordn=fdbk_wordn-1(fdbk_wordn-1>>tap1)(fdbk_wordn-1>>tap2)……(fdbk_wordn-1>>tapL)[1]n=1,2,3……N取一个解码器例子fdbk_word0=current_syndrome_word,在上述内容中,syndrome_word是该移位寄存器的现存内容,而tapx可确定为相应抽头的阶和该生成程序多项式的最高阶之间的差。
例如,给定一个生成程序多项式,G(X)=X6+X5+X3+X2+X1+1,则抽头位置tap0-6被确定为Tap0=0(相应X6),Tap1=1(相应X5)Tap2=3(相应X3),Tap3=4(相应X2)Tap4=5(相应X1),Tap5=6(相应X0)递归数(N)可使用下列等式确定N=(K-1)/tap1[2]在取得该反馈字之后,该校正子字可使用下列公式更新new_sydrome=next_word[fdbk_word<<(K-tap1)][fdbk_word<<(K-tap2)]……[fdbk_word<<(K-tapL)] [3]如下列计算将指出的那样,如果CRC编解码器具有大量反馈抽头,则反馈字的计算可能是费时的而且复杂,并且还占去不少的处理电能。这样,只要这种处理有可能进行得比较快则可能是有益的。
事实上,定义“编码器”和“解码器”是有些任意的,因为它能用实例说明该两个移位寄存器在数学上是等效的,参见下列文章Lin/Costello“Error Control codingFundamentals andApplication”Prentice Hall 1983,Pages100 and 101,figs 4.6and 4.7。
由于Select_word仅依赖于生成程序多项式,所以可以单独地计算(例如脱机)和储存它,和表示出有效的节省处理电能并因此节省时间。另一方面该top_word_matrix需要按照输入的二进制数据进行计算。
在从属权利要求中描述本发明的优选特征。
给定生成程序多项式,G(X)=X6+X5+X3+X2+X1+1和一个接收到的二进制序列10011101101101如图2中所示,6位校正子是由逐位地计算从而给出结果111101。也可使用逐字节方法计算同样的校正子反馈字节计算使用等式[2],计算的递归数为Recursion_num=(8-1)/1=7fdbk_word1=fdbk_word0(fdbk_word0>>1)(fdbk_word0>>3)(fdbk_wordn-1>>4)(fdbk_word0>>5)(fdbk_word0>>6)=100111010100111000010011000010010000010000000010=11001111重复以上计算,接着得到下列结果fdbk_word2=10111000,fdbk_word3=11111111,fdbk_word4=10010100,fdbk_word5=11000011,fdbk_word6=10110011,fdbk_word7=11110000fdbk_word=fdbk_word7=11110000置换该fdbk_word于等式[3]中,寄存器内容被更新为new_register_content=next_word[fdbk_word<<7][fdbk_word<<5][fdbk_word<<4][fdbk_word<<3][fdbk_word<<2]=101101000000000000000000000000001000000011000000=11110100该最高有效6位表示新的校正子。
该结果准确匹配图2中所指示的结果。
如在上例中所表示的,如果一个CRC编解码器包括大量反馈抽头,则进位输出字的计算可能相当地复杂和费时。为加速反馈字的运行时间计算,发明了一种新技术,从而能用一个步骤而不是许多递归计算该进位输出字。
通常该进位输出字是顶部字的一个函数(见图2),而且可用下列等式描述它们的关系carryout_word=select_word.top_word_matrix[4]这里,carryout_word表示一个1×K行矢量,包括K个反馈位。Top_word_matrix是一个K×K矩阵,其包括K个右移位的顶部字,表示如下 top_word表示一个1×K行矢量。Select_word是可以使用下列等式脱机计算的一个常数1×16行矢量。 m=1,2,3……M,select_word0=generator_polynomial_word [7]M是要求来估算选择字的递归数,它是使用下列等式计算的M=((K-1)/tap1)-1[8]generator_polynomial_word也是代表生成程序多项式的一个1×K行矢量。例如,如果K等于8和生成程序多项式G(X)=X6+X5+X3+X2+X1+1,则generator_polynomial_word被确定为[11011110]。例2在下列例子中,应用了以上表示的新技术,使得能够仅仅在一个步骤中完成一个逐字节校正子更新给定生成程序多项式,G(X)=X6+X5+X3+X2+X1+1(如例1),则generator_polynomial_word被确定为[11011110]。
使用等式[6],[7]和[8],相应于该特定的生成程序多项式的select_word如下计算M=((8-1)/1)-1=6select_word1=[11011110]·1101111001101111001101110001101100001101000001110000001100000001=[10100010]]]>接着,select_word2=[10100010],select_word3=[11101010],select_word4=[10001000],select_word5=[11100100],以及,select_word=select_word6=[11100100]。使用和例1中相同的接收的序列,10011101101101,使用等式[4]能够仅仅在一个步骤中计算该反馈字。fdbk_word=[11100100]·1001110101001110001001110001001100001001000001000000001000000001=[11110000]]]>以上所示结果准确地匹配例1中计算的fdbk_word。
已出现一种新技术,允许用一个预计算的select_word仅仅在一个步骤中计算反馈字或更一般地计算一个进位输出字。
在逐字CRC编码解码器中,可能正常地使用一种递归操作计算该反馈字。如果该编解码器具有大量的反馈抽头,则这样的操作将变得复杂和费时。
考虑一个特定的CRC编解码器,它具有P个反馈抽头,而第一个抽头的位置是tap1,则对反馈字计算要求的逻辑操作(包括逐字移位和XOR)的数(N)估算如下N=2×P×M=2×P×(K-1)tap1]]>其中,P≤K,tap1≥1,N的最大值估算为Nmax=2×K×(K-1)1=2K(K-1)----[9]]]>这里,K是字长度。假定K恒大于1,得出Nmax≈2K2[10]另一方面,如果使用新技术,用等式[4],则所要求的最大逻辑操作数N’max仅为N′max=2K, [11]对于最坏情况,该select_word只包含1s。
如上所述,新技术要求很少的逻辑操作,因此,通过在一个逐字CRC编解码器中使用该技术,能获得处理速度的显著的改善。
权利要求
1.一种从一个循环移位寄存器计算长度K的进位输出字的方法,该循环移位寄存器在由一个生成程序多项式确定的位置具有反馈抽头,其中该进位输出字是使用下列等式计算的carryout_word=select_word.top_word_matrix其中 其中该top_word包括一个1×K行矢量和其中 with m=1,2,3,…………M其中m=1,2,3,……M和M=(K-1/tap1)-1,其中tap1是在该生成程序多项式中最高和次高阶项的阶之间的差并且>>表示在对该移位寄存器的移位方向相反方向的移位。
2.如权利要求1的方法,其中select_word由该生成程序多项式计算,并先于计算进位输出字储存。
3.如权利要求1或2的方法,用于形成包括附加该进位输出字到一个输入二进制序列的下一个K位的模2的循环代码字,以形成一个反馈字,和施加该反馈字到该移位寄存器的反馈抽头。
4.如权利要求1或2的方法,用于编码一个输入二进制序列,其中移位寄存器的更新内容由下列公式计算fdbk_word=carryout_wordnext K bits of input binary sequencenew_register_content=[fdbk_word<<(K-tap1)][fdbk_word<<(K-tap2)]………………[fdbk_word<<(K-tapL)]其中L是抽头数。
5.如权利要求1或2的方法,用于计算一个校正子形成一个循环代码字,其中一个新校正子由下列公式计算new_syndrome=next_word[carryout_word<<(K-tap1)][carryout_word<<(K-tap2)]…[carryout_word<<(K-tapL)]其中next_word是输入到移位寄存器的循环代码字的下一个K位和L是抽头数。
6.使用权利要求1或2的方法,用于更新一个错误设陷电路的内容,其中新寄存器内容使用下列公式计算new_register_content=[carryout_word<<(K-tap1)][carryout_word<<(K-tap2)]……[carryout_word(K-tapL)]这里L是抽头数。
全文摘要
一种从一个移位寄存器,例如一个CRC编码器,解码器或错误设陷电路计算进位输出字的方法,该移位寄存器在由一个生成程序多项式确定的位置处具有多个反馈抽头,其中长度K的进位输出字由下列公式计算carryout_word=select_word.top_word_matrix carryout_word是1xk行矢量,top_word_matrix是从该移位寄存器的顶部的K位计算的,而select.word是从该生成程序多项式确定的一个1xk行矢量。
文档编号G06F7/72GK1449120SQ0310797
公开日2003年10月15日 申请日期2003年3月28日 优先权日2002年3月28日
发明者匡文韬 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1