專利名稱:循環移位寄存器的改進的進位輸出字計算的制作方法
技術領域:
本發明涉及對循環移位寄存器的進位輸出字計算,例如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和一個接收到的二進制序列101如圖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)=100111010100111000010011000010010000010000000010=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]=101101000000000000000000000000001000000011000000=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]·000000001=[10100010]]]>接著,select_word2=[10100010],select_word3=[11101010],select_word4=[10001000],select_word5=[11100100],以及,select_word=select_word6=[11100100]。使用和例1中相同的接收的序列,101,使用等式[4]能夠僅僅在一個步驟中計算該反饋字。fdbk_word=[11100100]·00000000001000000001=[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_wordnext 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日
發明者匡文韜 申請人:松下電器產業株式會社