專利名稱:獲得循環(huán)冗余碼的制作方法
技術(shù)領(lǐng)域:
本申請涉及驗證數(shù)據(jù)傳輸?shù)耐暾?,尤其涉及驗證使用循環(huán)冗余碼的數(shù)字數(shù)據(jù)傳輸?shù)耐暾浴?br>
背景數(shù)據(jù)傳輸10(
圖1)包括發(fā)送器12和接收器14之間通常稱作數(shù)據(jù)的信息的傳輸。通常,數(shù)據(jù)傳輸10包括作為1和0的數(shù)字位發(fā)送的信息,這里由mn-1到m0表示,并被稱為消息M。
在理想環(huán)境中,消息M發(fā)送無差錯。不幸地,常通過媒體16引入差錯,其中消息M通過媒體16從發(fā)送器12傳遞到接收器14(例如,媒體16可以是線路、電纜、光纖、空氣或鏈路層裝置的任何組合)。一種用于檢測消息M中存在差錯的方法采用循環(huán)冗余碼。
循環(huán)冗余碼將類似消息M的數(shù)字位的分組處理成多項式,其中分組中的每個位表示多項式Xn-1+Xn-2+X0中的系數(shù)。例如,8個位11001101的一個組可以由多項式X7+X6+X3+X2+1表示(即,1*X7+1*X6+0*X5+0*X4+1*X3+1*X2+0*X1+1*X0)。
這些多項式形成具有以Z/p為系數(shù)的被稱為可換環(huán)的代數(shù)對象,其中Z是整數(shù)而p是質(zhì)數(shù),這里是2,也被稱作以2為模的{0,1}。如果(R+)是可交換群,(R*)是半群組且遵守分配律(即,a*(b+c)=a*b+a*b),則非空集R與兩個二進制運算{+*}一起被稱作一環(huán)。
在多項式環(huán)中,不存在將一個系數(shù)攜帶或借用到下一個。在算術(shù)模2的情況下,加法和減法是一致的并可以用異或?qū)崿F(xiàn)。例如 由位的組表示的多項式的除法是以與二進制除法類似的方式完成的,區(qū)別在于以模2進行減法。如果被除數(shù)多項式與除數(shù)多項式的次數(shù)相同,則除數(shù)將‘進入’被除數(shù)(即,除數(shù)和被除數(shù)分享至少相同的最高位)。
可以通過計算消息M除以生成多項式P的余項來獲得循環(huán)冗余碼。該余項被稱作循環(huán)冗余碼(“CRC”)。
為了獲得消息M的CRC,除以生成多項式P的位組可以包括附加的零位17。零位17在數(shù)量上等于生成多項式P的次數(shù)。因此,基于次數(shù)3的生成多項式P=X3+1=1001(即X3是多項式P的最高位)的具有三個附加零位17的消息M=10111000的CRC可以如下計算 示作CRC18的最終余項可以被附加到消息M上,取代零位17,以便產(chǎn)生消息M’。發(fā)送器12將經(jīng)由媒體16將消息M’發(fā)送到接收器14作為數(shù)據(jù)傳輸10。
在接收時,接收器14將消息M’除以相同的生成多項式P以獲得M’的CRC,并檢查數(shù)據(jù)傳輸10的正確性。如果得出的余項是零(即,CRC=M’(modulo)P=0),則確認數(shù)據(jù)傳輸10的完整性。例如, 如果消息M’除以多項式P的余項不是零(即,CRC=M’(modulo)P≠0),則數(shù)據(jù)傳輸10包含一個或多個差錯。例如 附圖概述圖1示出采用循環(huán)冗余碼的數(shù)據(jù)傳輸?shù)默F(xiàn)有技術(shù)的框圖。
圖2示出用于獲得CRC的過程,其中消息M被分成多個片段。
圖3示出根據(jù)圖2過程獲得消息的CRC的CRC生成器。
圖4示出被分成四個片段的圖3的CRC生成器。
圖5示出根據(jù)圖2過程獲得消息M的CRC的CRC生成器。
圖6示出使用生成多項式的倒數(shù)近似的獲得消息的余項的取模計算單元。
圖7示出使用圖6所示取模計算單元的圖3中的CRC生成器。
圖8示出用于更新消息M的CRC的CRC生成器,其中已調(diào)整了部分消息M。
圖9示出在消息M的被調(diào)整片段上操作的圖8所示的CRC生成器。
圖10是用于實現(xiàn)本發(fā)明實施例的計算機硬件的示圖。
在各圖中相同的標號表示相同的元件。
具體實施例方式
過程20(圖2)獲得基于發(fā)生多項式P的消息M的CRC。
過程20包括將消息M分成多個消息片段Ms(201);如需要,通過生成多項式P對消息片段取模計算(以下限定)(203),以便獲得每個片段的余項R;將每個片段的余項R乘以合適的片段常數(shù)C,以獲得每個片段Ms的片段余項SR(205);累加每個片段Ms的片段余項SR,以獲得消息M的累加余項AR(207);以及如需要,由生成多項式P對累加余項取模計算(209),以獲得消息M的CRC。
將消息M分成多個消息片段Ms(201)包括分解消息M,從而
M=Ms-1*Xn*(s-1)+Ms-2*Xn*(s-2)...+M1*Xn(1)+M0*Xn(0);其中s是消息M被分成的片段的數(shù)量,n是每個片段中位的數(shù)量,X是消息M中每個片段的位置,而Ms是消息M的單個片段。如果位的數(shù)量是n,則X是X=[1000...0]的形式,其中有n個零,n+1個元素且X是n次。M乘以X將把消息向左移動n位。M乘以X2將把消息移動2n位(等等)。
如果片段Ms的最高位的次數(shù)等于或大于多項式P的最高位的次數(shù),取模計算(203)包括通過將片段Ms除以生成多項式P來獲得每個消息片段Ms的余項R。如果片段Ms的次數(shù)小于多項式P的次數(shù)(即Ms的最高位小于多項式P的最高位),則由于消息片段Ms的余項等于片段Ms自身,所以不需要取模計算(203)。在可選實施例中,可以通過將消息片段Ms乘以多項式P的倒數(shù)近似來實現(xiàn)取模計算(203),而不是將片段Ms除以多項式P,以獲得消息片段Ms的余項R。下面結(jié)合圖6討論乘倒數(shù)近似來獲得余數(shù)R的操作。
乘以步驟(205)包括獲得每個消息片段Ms的片段常數(shù)C(以下限定)并將每個片段常數(shù)C乘以其余項R以獲得每個消息片段的片段余項SR??梢愿鶕?jù)以生成多項式P或P的域擴展(field extension)為模的消息M中消息片段Ms的位置X獲得片段常數(shù)C。
累加(207)包括將每個消息片段Ms的片段余項SR相加以獲得消息M的累加余項AR。
取模計算(209)包括將累加余項AR除以生成多項式P,或者將AR乘以生成多項式P的倒數(shù)近似,以獲得消息M的CRC。但是,如果累加余項AR的次數(shù)小于多項式P的次數(shù),則由于消息M的余項(即,CRC)是累加余項AR,所以無需取模計算(209)。
圖3示出根據(jù)生成多項式P計算消息M的CRC的過程20的實現(xiàn)。例如如果M=10111000,(消息10111加3個附加的零位)且s=2,n=4,以及P=1001=(Deg(P)=3);則M可以被分成
Ms-1=M1=1011=片段33,Xn*(s-1)=X4=10000,Ms-2=M0=1000=片段35,Xn*(s-2)=X0=00001;其中M=1011*10000+1000*00001=10111000CRC生成器30根據(jù)生成多項式P獲得消息M的CRC,其中消息M的CRC是消息M除以P的余項(即,CRC=M(modulo)P=MOD(M,P)。
通常,因為是不可約的(即它們沒有因子),所以選擇生成多項式P。已知的生成多項式的幾個實例包括LRCC8 =X8+1=100000001;CRC16 =x16+x15+X2+1=11000000000000101;SDLC =x16+x12+X5+1=10001000000100001;LRCC =x16+1=10000000000000001;CRC12 =x12+x11+X3+X2+X+1=1100000001111;以及ETHERNET =x32+x26+X23+X22+x16+x11+X10+X8+x7+X5+X4+X2+X+1=100000100110000010000110110110111;其中LRCC代表最后定位控制通道(Last Registration Control Channel)。
CRC生成器30包括取模計算單元32、乘法器34、累加器36和取模計算單元38。這里,取模計算單元32具有在硬件中實現(xiàn)的取模計算單元32a和32b。
取模計算單元32a將消息片段33除以生成多項式P以獲得余項Ri+1(即Ri+1=Ms-1(modulo)P=MOD(Ms-1,P))。取模計算單元32b將消息片段35除以生成多項式P以獲得余項Ri(即Ri=Ms-2(modulo)P=MOD(Ms-2,P))。例如,如果M=10111000,Ms-1=M1=1011=片段33,Ms-2=M0=1000=片段35,且P=1001;
隨后Ri+1=R1=Ms-1(modulo)P=MOD(Ms-1,P)=1011(modulo)1001=010,且Ri=R0=Ms-2(modulo)P=MOD(Ms-2,P)=1000(modulo)1001=001;其中 乘法器34將余項Ri+1和Ri乘以片段常數(shù)Ci+1和Ci以獲得片段余項SRi+1和SRi。這里,通過生成多項式P將消息M中的片段33和35的位置X取模計算來獲得片段常數(shù)Ci+1和Ci(即,Ci+1=xn*(i+1)(modulo)P和Ci=xn*i(modulo)P)。例如如果,M=10111000,P=1001,s=2,且n=4;隨后SRi+1=SR1Ci+1=C1=X4*1(modulo)P=10000(modulo)1001=010,且SRi=SR0Ci=C0=X4*0(modulo)P=0001(modulo)1001=001;其中 根據(jù)消息M的已知片段可以預先獲得片段常數(shù)Ci+1和Ci,且它們可以被存儲在存儲單元39中,并可由CRC生成器30訪問。在其它實施例中,可以在接收到消息M時在CRC生成器30內(nèi)‘即時(on the fly)’獲得片段常數(shù)Ci+1和Ci。
乘法器34包括乘法器34a和34b。乘法器34a將余項Ri+1乘以片段常數(shù)Ci+1以獲得片段余項SRi+1。乘法器34b將余項Ri乘以片段常數(shù)Ci以獲得片段余項SRi。例如如果Ri+1=010,Ci+1=010且(從上)Ri=001,Ci=001;隨后SRi+1=Ri+1*Ci+1=010*010=00100,且SRi=Ri*Ci=001*001=00001;其中 乘法器36將片段余項SRi+1和SRi相加以獲得累加余項AR。例如如果SRi+1=SR1=00100,(從上)SRi=SR0=00001;隨后AR=00100+00001=00101,其中 取模計算單元38通過由生成多項式P將累加余項AR取模計算來獲得消息M的CRC(即,CRC=AR(modulo)P=MOD(AR,P))。例如如果AR=00101,且(從上)P =1001;隨后CRC=AR(modulo)P=MOD(AR,P)=00101(modulo)1001=101,其中
因此,CRC生成器30上實現(xiàn)的過程20獲得消息M的相同CRC,這里是10111000。在該實例中,由于AR的次數(shù)小于P的次數(shù),因此不需要通過多項式P將AR取模計算。
CRC生成器30可以被擴展成包括足夠的分量來獲得被分成N個片段的消息M的CRC。圖4示出能對被分成四個(4)片段43、45、47和49的消息M進行操作的CRC生成器40。例如如果M=M′=10111101,(例如,以上圖3中的實例中的消息M將獲得的CRC附加其上)s=4,n=2,且p=2;則M可以被分成Ms-1=M3=10=片段43,Xn*(s-1)=X6=1000000,Ms-2=M2=11=片段45,Xn*(s-2)=X4=10000,Ms-3=M1=11=片段47,Xn*(s-3)=X2=100,Ms-4=M0=01=片段49,Xn*(s-4)=X0=001;其中M=10*1000000+11*10000+11*100+01*001=10111101CRC生成器40包括取模計算單元42、乘法器44、累加器46和取模計算單元48。取模計算單元42包括取模計算單元42a、42b、42c和42d。取模計算單元42a、42b、42c和42d的每一個都用于將消息片段43、45、47和49除以生成多項式P以獲得余項R3、R2、R1和R0。例如如果M=10111101=M′,(從上)Ms-1=M3=10=segment 43,Ms-2=M2=11=segment 45,Ms-3=M1=11=segment 47,Ms-4=m0=01=segment 49,P=1001;
隨后Ri+3=R3=Ms-1(modulo)P=10(modulo)1001=10,Ri+2=R2=Ms-2(modulo)P=11(modulo)1001=11,Ri+1=R1=Ms-3(modulo)P=11(modulo)1001=11,且Ri=R0=Ms-4(modulo)P=01(modulo)1001=01乘法器44將余項R3到R0乘以片段常數(shù)C3到C0以獲得片段余項SR3到SR0。片段常數(shù)C3到C0對應(yīng)于每個特定片段43、45、47和49并可以通過由多項式P對消息M中的片段的位置取模計算來獲得。(即,C3=Xn*(3)(modulo)P,C2=Xn*2(modulo)P,C1=Xn*1(modulo)P,C0=Xn*0(modulo)P)。例如如果M=10111101,(從上)P=1001,s=4,且n=2;隨后SR3=SRi+3C3=Ci+3=X2*3(modulo)P=1000000(modulo)1001=001;SR2=SR0C2=Ci+2=X2*2(modulo)P=10000(modulo)1001=010;SR1=SR1C1=Ci+1=X2*1(modulo)P=100(modulo)1001=100;且SR0=SRiC0=Ci+0=X4*0(modulo)P=001(modulo)1001=001。
可以根據(jù)消息M的分段預先獲得片段常數(shù)C3到C0,并將其存儲在可由CRC生成器40訪問的存儲單元39中(圖3)。在其它實施例中,可以在接收到消息M時在CRC生成器40內(nèi)即時(即,實時)獲得C3到C0。
乘法器44將R3乘以C3,R2乘以C2,R1乘以C1,且R0乘以C0以獲得片段余項SR3到SR0。例如,如果Ri+3=R3=10,Ci+3=C3=001;(從上)Ri+2=R2=11,Ci+2=C2=010;Ri+1=R1=11,Ci+1=C1=100;且Ri=R0=01,Ci=Ci0=001;隨后SR3=R3*C3=10*001=0010;SR2=R2*C2=11*010=0110;SR1=R1*C1=11*100=1100;且SR0=R0*C0=01*001=0001累加器46將片段余項SR3到SR0相加以獲得累加余項AR。這里,累加器46包括累加器46a、46b和46c,其中累加器46a和46b計算臨時累加T1和T0而累加器46c組合臨時累加T1和T0以獲得累加余項AR。例如如果SRi+3=SR3=0010,(從上)SRi+2=SR2=0110,SRi+1=SR1=1100,且SRi=SR0=0001;隨后T1=0010+0110=0100,T0=1100+0001=1101,且AR=0100+1101=1001。
最終,取模計算單元48獲得消息M的CRC,這里,通過由多項式P將累加余項AR取模計算,消息M’具有如上圖3所示獲得的CRC(即,CRC=AR(modulo)P=MOD(AR,P))。例如,如果AR=1001,且(從上)P =1001;隨后CRC=AR(modulo)P=1001(modulo)1001’=0其中 因此,CRC生成器40通過圖3中的實例驗證消息M的完整性,其中附加消息M的CRC以形成M’并將其發(fā)送到接收器14,它用CRC生成器40確認該傳輸(圖4)。
根據(jù)過程20,在消息片段Ms的次數(shù)小于生成多項式P的次數(shù)的情況下(即,Deg(Ms)<Deg(P)),可以進一步地簡化CRC生成器30和40。如以上圖4的實例所示,當Ms的次數(shù)小于P的次數(shù)時,Ms(modulo)P的余項R等于Ms。因此,CRC生成器50(圖5)不需要用于獲得消息片段Ms的余項Ri的初始取模計算單元(例如,32或42),其中消息片段Ms的次數(shù)小于生成多項式P的次數(shù)。對于片段次數(shù)等于P的次數(shù)的情況(即,Deg(Ms)=Deg(P)),取模計算單元32或42可以由異或(xor)代替,因為Ms(modulo)P等于Ms-P。
這里,CRC生成器50包括乘法器54、累加器56和取模計算單元58,它們用于獲得被分成次數(shù)小于生成多項式P的次數(shù)(即,Deg(Ms)<Deg(P))的四個片段53、55、57和59的消息M的CRC。例如如果M=10111000,(如同以上的圖3,M包括三個附加的零位)s=4,n=2,且P=1001;隨后Ms-1=M3=10=片段53,Xn*(s-1)=X6=1000000,Ms-2=M2=11=片段55,Xn*(s-2)=X4=10000,Ms-3=M1=10=片段57,Xn*(s-3)=X2=100,Ms-4=M0=00=片段59,Xn*(s-4)=X0=001;且M=10*1000000+11*10000+10*100+00*001=10111000乘法器54將片段53到59乘以片段常數(shù)C3到C0以獲得片段余項SR3到SR0??梢匀缟纤龅仡A先獲得或者‘即時’計算片段常數(shù)C3到C0。例如如果M=10111000,(從上)P=1001,s=4,且n=2;隨后SR3=SRi+3C3=Ci+3=X2*3(modulo)P=1000000(modulo)1001=001;
SR2=SRi+2C2=Ci+2=X2*2(modulo)P=10000(modulo)1001=010;SR1=SRi+1C1=Ci+1=X2*1(modulo)P=100(modulo)1001=100;且SR0=SRiC0=Ci+0=X4*0(modulo)P=001(modulo)1001=001由于每個消息片段Ms等于其余項R,乘法器54將M3乘以C3,M2乘以C2,M1乘以C1,且M0乘以C0以獲得片段余項SR3到SR0。例如如果Ms-1=M3=10,Ci+3=C3=001,Ms-2=M2=11,Ci+2=C2=010,Ms-3=M1=10,Ci+1=C1=100,且Ms-4=M0=00,Ci=Ci0=001;隨后SR3=M3*C3=10*001=0010,SR2=M2*C2=11*010=0110,SR1=M1*C1=10*100=1000,且SR0=M0*C0=00*001=0000。
累加器56將片段余項SR3到SR0相加以獲得累加余項AR。這里,累加器56包括累加器56a、56b和56c,其中累加器56a和56b計算臨時累加T1和T0而累加器56c組合臨時累加T1和T0以獲得累加余項AR。例如如果SRi+3=SR3=0010,(從上)SRi+2=SR2=0110,SRi+1=SR1=1000,SRi=SR0=0000;隨后T1=0010+0110=0100;T0=1000+0000=1000;且AR=0100+1000=1100。
最終,取模計算單元58通過由多項式P將累加余項AR取模計算而獲得消息M的CRC。例如,如果AR=1100,且(從上)P=1001;
隨后CRC=AR(modulo)P=1100(modulo)1001=101;其中 因此,CRC生成器50獲得與以上圖3實例中所計算的相同的消息M的CRC,而不需要圖3和4的取模計算單元32或42。
還可以通過將消息M(或消息片段Ms)乘以生成多項式P的倒數(shù)近似D并將該結(jié)果從消息M(或消息片段Ms)中減去來獲得余項R來進行取模計算(例如,(203)和(209))。根據(jù)以下關(guān)系可以獲得通過乘以倒數(shù)近似RA進行的取模計算RA=Xp+d/P;M/P=M*RA*1/Xp+ra(對于0<=Deg(M)<=p+ra);M=(M/P)*P+M(modulo)P;R=M(modulo)P=M-(M/P)*P;R=M(modulo)P=M-(M*D/Xp+ra)*P其中Xp+ra是具有次數(shù)為p+ra的最高位的多項式(即,Deg(Xp+ra)=p+ra);p是生成多項式P的次數(shù)(即,Deg(P)=p);ra是倒數(shù)近似RA的次數(shù)(即,Deg(RA)=ra);以及余項R所需的消息M的次數(shù)大于零且小于或等于p+ra(即,0<Deg(M)<=p+ra)。例如如果M=10111000(即,Deg(M)=7)且P=1001(即,Deg(P)=3)隨后,倒數(shù)近似RA將具有至少四(4)的次數(shù)以使p+ra大于或等于M的次數(shù),這里是(7)因此
如果M=10111000(即,Deg(M)=7)P=1001(即,Deg(P)=3)且ra=4;隨后Xp+ra=10000000(i.e.,Deg(Xp+ra)=7),且D=Xp+ra/P=X3+4/1001=10000000/1001=10010;其中 取模計算單元60可以在接收到消息M之前計算倒數(shù)近似RA并將RA存儲在存儲器69中,因為在接收消息M之前生成多項式P和消息M的次數(shù)是已知的。在另一個實施例中,倒數(shù)近似RA可以包含在取模單元60中,或者可以在接收到消息M后通過取模計算單元60構(gòu)建或“即時”獲得。一旦多項式的形式被固定,就可以顯著地簡化相應(yīng)硬件的實現(xiàn)。
為了獲得消息M的余項R,取模計算單元60包括乘法單元62、舍位單元64、乘法單元66和減法單元68,其中T0=M*RA由單元62執(zhí)行,T1=T0/Xp+ra由單元64執(zhí)行,T2=T1*P由單元66執(zhí)行,以及R=M-T2由單元68執(zhí)行。
乘法單元62接收消息M并將M乘以倒數(shù)近似RA以獲得臨時結(jié)果T0。例如
如果M=10111000,(從以上的圖3)P=1001,且RA=10010;隨后T0=M*RA=10111000*10010=101011110000;其中 乘法單元62將臨時結(jié)果T0提供給舍位單元64,它將T0除以Xp+ra,這里是10000000,以獲得舍位后的結(jié)果T1。在其它實施例中,舍位單元64可以除去臨時結(jié)果T0的p+ra個最低位而不除以Xp+ra以便獲得被舍位的結(jié)果T1。例如如果p =3,ra=4,且T0=101011110000;隨后p+ra=7,且T1=10101因此,對于p+ra等于七(7)的情況,從T0中除去七(7)個最低位(這里是1110000)以獲得T1。
舍位單元64將被舍位的結(jié)果T1提供給乘法單元66,它將T1乘以生成多項式P以獲得臨時結(jié)果T2。例如
如果P=1001,T1=10101;隨后T2=T1*P=10101*1001=10111101其中 乘法單元66將臨時結(jié)果T2提供給減法單元68,它使消息M減去T2以獲得余項R。例如如果M=10111000,且(從上)隨后T2=10111101;其中R=M-T2=101 因此,取模計算單元60利用通過倒數(shù)近似的乘法獲得消息M的余項R。因此,取模計算單元60可以獨自計算整個消息M的CRC,或者可以被結(jié)合入CRC發(fā)生器30和40以獲得消息片段Ms的余項R。
例如,圖7示出采用圖6的取模計算單元60的圖3CRC發(fā)生器的實例。這里,取模計算單元60示作MH(M,RA,P)。例如如果M=10111000,(與以上圖3一樣)s=2,n=4,且P=1001;則M可以被分為
Ms-1=M1=1011=片段73Xn*(s-1)=X4=10000,Ms-2=M0=1000=片段75Xn*(s-2)=X0=00001;其中M=1011*10000+1000*00001=10111000。
CRC發(fā)生器70基于生成多項式P獲得消息M的CRC,其中消息M的CRC是消息M除以多項式P的余項。
CRC發(fā)生器70包括取模計算單元72、乘法器74、累加器76和取模計算單元78。這里,取模計算單元72包括取模計算單元72a和72b,它們將消息片段73和75乘以生成多項式P的倒數(shù)近似以獲得余項Ri+1和Ri。
取模計算單元72a將消息片段73乘以生成多項式P的倒數(shù)近似RA以獲得如圖6所示的余項R。例如如果M=10111000,Ms-1=M1=1011=片段73,Ms-2=M0=1000=片段75,Deg(Ms-1)=3Deg(Ms-2)=3P=1001,RA=Xp+ra/P=X3+1/P,從而p+ra大于或等于每個消息片段Ms-1和Ms-2的次數(shù);則RA=X3+1/P=10000/1001=10;
其中 且T0(i+1)=Ms-1*RA=1011*10=10110,T0(i)=Ms-2*RA=1000*10=10000,T1(i+1)=T0(i+1)/X3+1=10110/10000=1,T1(i)=T0(i)/X3+1=10000/10000=1,T2(i+1)=T1(i+1)*P=1*1001=1001,T2(i)=T1(i)*P=1*1001=1001,Ri+1=Ms-1-T2(i+1)=1011-1001=010Ri=Ms-2-T2(i)=1000-1001=001。
因此,取模計算單元72a和72b獲得與以上圖3所示的取模計算單元32a和32b相同的余項Ri+1′和Ri。
乘法器34將Ri+1和Ri乘以片段常數(shù)Ci+1和Ci以獲得片段余項SRi+1和SRi。這里,使用圖6所示的取模計算單元60通過生成多項式P對消息M中片段33和35的位置X取模計算來‘即時’獲得片段常數(shù)Ci+1和Ci(即,Ci+1=Xn*(i+1)(modulo)P以及Ci=Xn*i(modulo)P)。例如如果Xn*(i+1)=X4*(1)=M1=10000,Xn*i=X4*(0)=M0=00001,Deg(X4*(1))=4,Deg(X4*(0))=0,P=1001,RA=Xp+ra/P=X3+1/P,從而p+ra大于或等于每個消息片段X4*(1)和X4*(0)的次數(shù);隨后RA=10000/1001=10;且T0(i+1)=M1*RA=10000*10=100000,T0(i)=M0*RA=00001*10=000010,
T1(i+1)=T0(i+1)/X3+1=100000/10000=10,T1(i)=T0(i)/X3+1=000010/10000=0,T2(i+1)=T1(i+1)*P=10*1001=10010,T2(i)=T1(i)*P=0*1001=00000,Ci+1=M1-T2(i+1)=10000-10010=010,Ci=M0-T2(i)=00001-00000=001。
在其它實施例中,可以預先獲得片段常數(shù)Ci+1和Ci并將其存儲在存儲單元(例如39)中。
乘法器74包括乘法器74a和74b。乘法器74a將余項Ri+1乘以片段常數(shù)Ci+1以獲得片段余項SRi+1。乘法器74b將余項Ri乘以片段常數(shù)Ci以獲得片段余項SRi。例如如果Ri+1=010,Ci+1=010且(從上)Ri=001,Ci=001;隨后SRi+1=Ri+1*Ci+1=010*010=00100,且SRi=Ri*Ci=001*001=00001;累加器76將片段余項SRi+1和SRi相加以獲得累加余項AR。例如如果SRi+1=SR1=00100,SRi=SR0=00001;隨后AR=00100+00001=00101取模計算單元78通過由生成多項式P將累加余項AR取模計算來獲得消息M的CRC。這里,取模計算單元78通過使用圖6所示的倒數(shù)近似進行的乘法來獲得CRC。例如如果AR=M=00101,Deg(AR)=2P=1001,RA=Xp+ra/P=X3+1/P,從而p+ra大于或等于需要余項(這里是AR)的消息的次數(shù);
隨后RA=10000/1001=10;且T0=M*RA=00101*10=1010,T1=T0/X3+1=1010/10000=0,T2=T1*P=0*1001=0,R =CRC=M-T2=00101-0=101因此,CRC生成器70獲得與CRC生成器30的實例相同的CRC。同樣,CRC生成器70可以被擴展成包括足夠的部分以獲得被分成N個片段的消息M的CRC。
CRC發(fā)生器80(圖8)包括減法單元82、取模計算單元84以及累加器86,用于在傳輸期間更新被調(diào)整的消息M的CRC。減法單元82將新消息85減去舊消息83以獲得差值D。例如如果 隨后D=Mnew-Mold=00110000在其中 取模計算單元84通過生成多項式P將差值D取模計算以獲得差值余項DR。例如如果P=1001,且D=00110000;隨后DR=D(modulo)P=MOD(D,P)=在其中
在其它實施例中,可以采用通過倒數(shù)近似RA的乘法獲得差值余項DR(即,MH(D,RA,P))。
累加器86將差值余項DR和CRCold相加以獲得CRCnew。例如如果CRCold=101且DR =110;隨后CRCnew=CRCo1d+DR=101+110=011;其中 通過用CRCnew替換被調(diào)整的消息Mnew中的CRCold并確定Mnew(modulo)CRCnew是否等于零來確認該CRCnew的準確性。例如如果 隨后Mnew(modulo)CRCnew=O
在其中 CRC生成器90(圖9)包括減法單元92、取模計算單元94、乘法器96、取模計算單元98以及累加器99,用于在傳輸期間更新被調(diào)整的消息M的CRC。CRC發(fā)生器90與發(fā)生器80不同之處在于,它根據(jù)消息的本調(diào)整的片段調(diào)整消息M的CRC。
減法單元92將新消息片段95減去舊消息片段93以獲得差值片段DS。例如如果P =1001,n =2’s =4 Mnew=10001|101Ms-1=10Ms-2=00=片段95Ms-3=11Ms-4=01隨后DS=Ms-2(new)-Ms-2(old)=00-11=11取模計算單元94通過生成多項式P將差值片段DS取模計算以獲得差值片段余項DSR。例如如果P =1001,DS=11;隨后DSR=DS(modulo)P=MOD(DS,P)=11
在其中 這里,如上所述,如果差值片段DS的次數(shù)小于多項式P的次數(shù),由于DS的模等于DS因此無需取模計算單元94。
乘法器96將差值片段余項DSR乘以合適的片段常數(shù)Ci以獲得擴展的片段余項ESR。該實例的片段常數(shù)C3到C0可以如上所述地獲得。例如如果DSR=(M2new-M2old)(modulo)P=11且Ci=C2=X2*2(modulo)P=10000(modulo)1001=010;隨后EDR=DSR*Ci=11*010=110取模計算單元98通過由生成多項式P將擴展的差值余項取模計算來獲得消息差值余項DR。例如如果P =1001且EDR=110;隨后DR =110再次,對于擴展差值余項的次數(shù)小于多項式P的次數(shù)的情況中,DR是EDR。
最后,累加器99將消息差值余項DR和CRCold相加以獲得CRCnew。例如如果CRCold=101且DR =110;隨后CRCnew=CRCold+DR=101+110=011;在其中
所有上述算法都可以由較大環(huán)中嵌入的生成多項式P影響。例如,使得F=P*Q;其中,F(xiàn)是P的域擴展,Q是擴展因子(extender),且P和Q之間的最大公分母(greatest common denominator)是一(1)?,F(xiàn)在使用域擴展F代替p計算以及尺寸(按位)增加的消息片段Ms可以計算片段常數(shù)C,而不需要圖3和4的附加模42和42。相反,可以需要如圖5所示的通過P的模。
圖10示出通用計算機100,它用于采用過程20或者上述CRC生成單元30、40、50、60、70、80和90的任何操作獲得CRC。計算機100包括處理器102(例如,CPU)、存儲介質(zhì)104(例如,隨機存取存儲器)以及具有發(fā)送和接收數(shù)據(jù)傳輸?shù)囊粋€或多個外部連接06a、106b和106c的通信接口106(例如,網(wǎng)卡)。存儲介質(zhì)104存儲用于通過過程20或者上述CRC生成單元的操作獲得CRC的計算機指令108。在一個實施例中,計算機100基于倒數(shù)近似的乘法獲得消息M的CRC。
但是,過程20和上述CRC生成器的操作不限于與任何特殊硬件或軟件配置一起使用;它們可以在任何計算或處理環(huán)境中找到兼容性。過程20可以在硬件、軟件或這兩者的任何組合中實現(xiàn)。同樣,CRC生成單元30、40、50、60、70、80和90的操作也是如此。
上述過程20和CRC生成器可以在可編程計算機上執(zhí)行的計算機程序中實現(xiàn),該可編程計算機包括處理器、可由處理器讀取的存儲介質(zhì)(例如,易失性存儲器、非易失性存儲器等等)、一個或多個輸入裝置以及一個或多個輸出裝置??梢詫⒊绦虼a應(yīng)用到用輸入裝置輸入的數(shù)據(jù)上以執(zhí)行過程20或者上述CRC生成器的任何操作。輸出信息可以被應(yīng)用到一個或多個輸出裝置上,諸如屏幕110。
可以以高級程序或面向?qū)ο蟮木幊陶Z言來實現(xiàn)每個這種程序以便與計算機系統(tǒng)通信。但是,程序也可以采用匯編語言或機器語言實現(xiàn)。語言可以是編譯或解釋語言。
每個計算機程序都可以存儲在一制品中,諸如CD-ROM、硬盤或磁盤,它們可以由計算機100讀取以便以上述方式獲得消息M的CRC。過程20和用于實現(xiàn)上述CRC生成器的操作也可以被實現(xiàn)為機器可讀存儲介質(zhì),由一個或多個計算機程序配置,其中,在執(zhí)行時,計算機程序中的指令使得處理器102如上操作。
已描述了本發(fā)明的大量實施例。然而,可以理解,可以進行各種修改而不背離本發(fā)明的精神和范圍。例如,消息M可以被分成奇數(shù)個片段或者片段大小或域擴展F可以代替生成多項式P。因此,其它實施例也在以下權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
1.一種用于獲得消息的循環(huán)冗余碼的方法,其特征在于,包括將消息分成多個片段;基于生成多項式將每個片段的余項乘以片段常數(shù)以獲得多個片段余項;將片段余項累加以獲得累加余項;以及通過生成多項式將累加余項取模計算以獲得消息的循環(huán)冗余碼。
2.如權(quán)利要求1所述的方法,其特征在于,還包括,通過生成多項式將片段取模計算以獲得每個片段的余項。
3.如權(quán)利要求1所述的方法,其特征在于,還包括將消息分成三個或更多的片段。
4.如權(quán)利要求1所述的方法,其特征在于,將所述循環(huán)冗余碼附加到消息上且附加后的消息被發(fā)送到接收器。
5.如權(quán)利要求1所述的方法,其特征在于,循環(huán)冗余碼表明消息中存在差錯。
6.如權(quán)利要求5所述的方法,其特征在于,如果循環(huán)冗余碼是零,則驗證了消息的完整性。
7.如權(quán)利要求5所述的方法,其特征在于,如果循環(huán)冗余碼是非零,則消息的完整性無效。
8.如權(quán)利要求1所述的方法,其特征在于,取模計算包括除以生成多項式。
9.如權(quán)利要求1所述的方法,其特征在于,取模計算包括乘以生成多項式的倒數(shù)近似。
10.如權(quán)利要求1所述的方法,其特征在于,通過由生成多項式將消息中的片段位置取模計算來獲得每個片段的片段常數(shù)。
11.一種用于獲得消息的循環(huán)冗余碼的裝置,該消息被分成多個片段,其特征在于,包括乘法器,它基于生成多項式將每個片段的余項乘以片段常數(shù)以獲得多個片段余項;累加器,它累加片段余項以獲得累加余項;以及取模計算單元,它通過生成多項式將累加余項取模計算以獲得消息的循環(huán)冗余碼。
12.如權(quán)利要求11所述的裝置,其特征在于,所述裝置是網(wǎng)絡(luò)卡且取模計算單元包括多個取模計算單元以便通過生成多項式將消息的每個片段取模計算以獲得每個片段的余項。
13.如權(quán)利要求11所述的裝置,其特征在于,還包括存儲器,它用于存儲多個片段常數(shù)。
14.如權(quán)利要求11所述的裝置,其特征在于,在接收到消息時獲得片段常數(shù)。
15.如權(quán)利要求11所述的裝置,其特征在于,取模計算單元將累加余項除以生成多項式以獲得循環(huán)冗余碼。
16.如權(quán)利要求11所述的裝置,其特征在于,取模計算單元將累加余項乘以生成多項式的倒數(shù)近似以獲得循環(huán)冗余碼。
17.一種用于確定循環(huán)冗余碼的方法,其特征在于,包括將消息分成多個片段;基于生成多項式將每個片段乘以片段常數(shù)以獲得多個片段余項;將片段余項累加以獲得累加余項;以及通過生成多項式將累加余項取模計算以獲得消息的循環(huán)冗余碼。
18.如權(quán)利要求17所述的方法,其特征在于,生成多項式的最高位的次數(shù)大于每個片段的最高位的次數(shù)。
19.如權(quán)利要求17所述的方法,其特征在于,包括將消息分成三個或更多個片段。
20.如權(quán)利要求17所述的方法,其特征在于,生成多項式包括域擴展因子。
21.如權(quán)利要求17所述的方法,其特征在于,循環(huán)冗余碼表明消息中差錯的可能性。
22.如權(quán)利要求17所述的方法,其特征在于,多個片段常數(shù)中的每一個都基于生成多項式和消息中片段的位置。
23.一種獲得消息的循環(huán)冗余碼的裝置,該消息被分成多個片段,其特征在于,包括乘法器,它將每個片段乘以片段常數(shù)以獲得多個片段余項;累加器,它將片段余項累加以獲得消息的累加余項;以及取模計算單元,它通過生成多項式將累加余項取模計算以獲得消息的循環(huán)冗余碼。
24.如權(quán)利要求23所述的裝置,其特征在于,還包括存儲器,它用于存儲多個片段常數(shù)。
25.如權(quán)利要求23所述的裝置,其特征在于,取模計算單元將累加余項除以生成多項式以獲得循環(huán)冗余碼。
26.如權(quán)利要求23所述的裝置,其特征在于,取模計算單元將累加余項乘以生成多項式的倒數(shù)近似以獲得循環(huán)冗余碼。
27.一種用于增加地更新循環(huán)冗余碼的方法,其特征在于,包括將更新后的消息減去在先消息以獲得差值;通過生成多項式將該差值取模計算以獲得余項;以及將該余項與在先消息的循環(huán)冗余碼相加以獲得更新后的消息的更新循環(huán)冗余碼。
28.如權(quán)利要求27所述的方法,其特征在于,取模計算包括將累加余項乘以生成多項式的倒數(shù)近似以獲得余項。
29.一種增加地更新循環(huán)冗余碼的裝置,其特征在于,包括減法單元,它將更新后的消息減去在先消息以獲得差值;取模計算單元,它通過生成多項式將該差值取模計算以獲得余項;以及累加器,它將余項與在先消息的循環(huán)冗余碼相加以獲得更新后的消息的更新循環(huán)冗余碼。
30.如權(quán)利要求29所述的裝置,其特征在于,減法單元包括異或邏輯門電路。
31.一種用于增加地更新消息的循環(huán)冗余碼的方法,其特征在于,包括將更新后的消息片段減去在先消息片段以獲得差值片段;通過生成多項式將差值片段取模計算以獲得差值片段余項;將差值片段余項乘以片段常數(shù)以獲得擴展的片段余項;通過生成多項式將擴展的片段余項取模計算以獲得更新后的消息余項;以及將更新后的消息余項與在先消息的循環(huán)冗余碼相加以獲得更新后的消息的更新循環(huán)冗余碼。
32.如權(quán)利要求31所述的方法,其特征在于,取模計算包括除以生成多項式。
33.一種增加地更新消息的循環(huán)冗余碼的裝置,其特征在于,包括減法單元,它將更新后的消息片段減去在先消息片段以獲得差值片段;取模計算單元,它通過多項式將差值片段取模計算以獲得差值片段余項;乘法器,它將差值片段余項乘以片段常數(shù)以獲得擴展的片段余項;取模計算單元,它通過多項式將擴展的片段余項取模計算以獲得差值余項;以及累加器,它將差值余項與在先消息的在先循環(huán)冗余碼相加以獲得更新后的消息的更新循環(huán)冗余碼。
34.如權(quán)利要求29所述的裝置,其特征在于,累加器包括異或邏輯門電路。
35.一種包括機器可讀介質(zhì)的制品,其中該機器可讀介質(zhì)存儲了指令以獲得消息的循環(huán)冗余碼,所述指令使得機器將消息分成多個片段;基于生成多項式將每個片段的余項乘以片段常數(shù)以獲得多個片段余項;將片段余項累加以獲得累加余項;以及通過生成多項式將累加余項取模計算以獲得消息的循環(huán)冗余碼。
36.如權(quán)利要求35所述的制品,其特征在于,還包括指令,該指令使得機器通過生成多項式將片段取模計算以獲得每個片段的余項。
37.如權(quán)利要求35所述的制品,其特征在于,還包括指令,如果循環(huán)冗余碼是零,它使得機器驗證消息的完整性。
38.如權(quán)利要求35所述的制品,其特征在于,還包括指令,如果循環(huán)冗余碼是非零,它使得機器無效消息的完整性。
39.一種包括機器可讀介質(zhì)的制品,其中該機器可讀介質(zhì)存儲了指令以獲得消息的循環(huán)冗余碼,所述指令使得機器將消息分成多個片段;基于生成多項式將每個片段乘以片段常數(shù)以獲得多個片段余項;將片段余項累加以獲得累加余項;以及通過生成多項式將累加余項取模計算以獲得消息的循環(huán)冗余碼。
40.如權(quán)利要求39所述的制品,其特征在于,還包括指令,它使得機器將域擴展因子應(yīng)用于生成多項式。
41.一種包括機器可讀介質(zhì)的制品,其中該機器可讀介質(zhì)存儲了指令以獲得消息的循環(huán)冗余碼,所述指令使得機器將更新后的消息減去在先消息以獲得差值;以及通過生成多項式將差值取模計算以獲得余項;以及將該余項與在先消息的循環(huán)冗余代碼相加以獲得更新后的消息的更新循環(huán)冗余碼。
42.如權(quán)利要求41所述的制品,其特征在于,還包括指令,它使得機器通過將累加余項乘以生成多項式的倒數(shù)近似來獲得余項。
43.一種包括機器可讀介質(zhì)的制品,其中該機器可讀介質(zhì)存儲了指令以獲得消息的循環(huán)冗余碼,所述指令使得機器將更新后的消息片段減去在先消息片段以獲得差值片段;通過生成多項式將差值片段取模計算以獲得差值片段余項;將差值片段余項乘以片段常數(shù)以獲得擴展的片段余項;通過生成多項式將擴展的片段余項取模計算以獲得更新的消息余項;以及將更新的消息余項與在先消息的循環(huán)冗余碼相加以獲得更新后的消息的更新循環(huán)冗余碼。
44.如權(quán)利要求43所述的制品,其特征在于,還包括指令,它使得機器通過除法取模計算。
45.如權(quán)利要求43所述的制品,其特征在于,還包括指令,它使得機器通過倒數(shù)近似取模計算。
全文摘要
獲得循環(huán)冗余碼來驗證發(fā)送器和接收器之間傳輸?shù)南⒌耐暾?。一種用于獲得循環(huán)冗余碼的方法包括將消息分成片段?;谏啥囗検将@得這些片段的余項。這些片段的余項乘以片段常數(shù)以獲得每個片段的片段余項。片段余項被累加成累加余項。通過生成多項式將累加余項取模計算以獲得累加余項的余項。該累加余項的余項就是消息的循環(huán)冗余碼。
文檔編號H03M13/00GK1633749SQ03803961
公開日2005年6月29日 申請日期2003年1月24日 優(yōu)先權(quán)日2002年2月15日
發(fā)明者S·維辛格 申請人:英特爾公司