專利名稱:一種多通道多位并行計算crc碼的方法
技術(shù)領域:
本發(fā)明涉及數(shù)據(jù)傳輸技術(shù)領域,具體地說是一種用多通道多位并行計算循環(huán)冗余校驗(CRC)碼計算的方法。
背景技術(shù):
在各種各樣的傳輸系統(tǒng)和網(wǎng)絡中,為保證數(shù)據(jù)在對等端點間正確傳遞,需要一定的糾檢錯編碼。通常發(fā)送端要將需傳送的數(shù)據(jù)用CRC進行校驗碼計算,并將校驗碼附在傳送的數(shù)據(jù)后一起發(fā)送。接收端要用相同的方法進行校驗碼計算,將所得的CRC碼與接收的CRC碼進行比較,如果一致說明數(shù)據(jù)傳送無誤,反之數(shù)據(jù)傳送有差錯。如果出現(xiàn)差錯,可采用編碼原理進行差錯糾正或用各種自動重發(fā)請求(ARQ)技術(shù)讓發(fā)送端重新傳送該數(shù)據(jù)副本。
現(xiàn)有技術(shù)中,CRC編碼產(chǎn)生和解碼校驗計算均可由軟件或硬件完成。軟件計算和硬件計算均分為串行與并行兩種方式。其中,硬件串行計算可用已有芯片或由除法電路完成,如高級數(shù)據(jù)鏈路控制(HDLC)實現(xiàn)芯片等。硬件并行計算由異或邏輯電路和余數(shù)緩存器及相關控制電路組成,并采用可編程邏輯器件(PLD)、現(xiàn)場可編程門陣列(FPGA)等器件實現(xiàn)。由于硬件或軟件采用并行運算均可有效地提高計算速度,故已有文獻多為研究特定位數(shù)的并行計算原理與性能。例如,達雷爾K·考克斯和芒索A·基希泰發(fā)明的“用于循環(huán)冗余校驗的有效計算方法及裝置”(申請?zhí)?0132908),就是“在一個使用流水線處理器上,通過將輸入數(shù)據(jù)分為若干獨立的數(shù)據(jù)流,對每個獨立的數(shù)據(jù)流進行一個循環(huán)冗余校驗計算,同時執(zhí)行對循環(huán)冗余校驗查詢表的訪問。因為該循環(huán)兀余校驗處理獨立的數(shù)據(jù)流,從查詢表讀出循環(huán)冗余校驗的等待時間被有效地減少”,如圖4所示。該方法由于采用交替取出數(shù)據(jù)放入每個隊列,每一個隊列用軟件查表法計算CRC碼。因而存在以下缺點
1)交替取出數(shù)據(jù)控制復雜,而且降低了計算速度。假定待計算數(shù)據(jù)分為3個隊列,計算數(shù)據(jù)表示為d1d2d3d4d5d6…(d1為每次計算數(shù)據(jù),i=1,2,…),它將數(shù)據(jù)分為(d1d4…),(d2d5…),(d3d6…)三個隊列,每個隊列依次交替取數(shù)。這種方法比將數(shù)據(jù)直接分為三塊控制復雜,直接分為三個隊列的數(shù)據(jù)可表示為(d1,d2,…,dN-1,dN),(dN+1,dN+2,…,dN+N-1,dN+N),(d2N+1,d2N+2,…,d2N+N-1,d2N+N);
2)每一個隊列采用軟件查表法計算CRC碼,無法滿足10G以太網(wǎng)(1G=109)、40Gbps同步數(shù)字序列SDH所需超高速CRC計算(bps=bit per second,比特(位)/秒);
3)該專利申請中輸入數(shù)據(jù)與循環(huán)冗余校驗進行異或,只適用于輸入數(shù)據(jù)寬度與循環(huán)冗余校驗碼寬度相等,而不能用于輸入數(shù)據(jù)寬度大于或小于循環(huán)冗余校驗碼寬度,如圖5所示。
又如,G·梅斯貝格發(fā)明的“用于生成循環(huán)冗余校驗代碼的并行循環(huán)冗余校驗生成電路”(國際申請?zhí)枠薖CT/EP99/06207,國際申請日990824),主要涉及一個并行CRC生成電路,通過輸入T位并行數(shù)據(jù)和前一次的CRC碼值,求得當前的CRC碼值。其主要貢獻是將某一位CRC碼與并行數(shù)據(jù)、前一次的CRC碼值的相關項數(shù),最大限度地減少。但刪除并行數(shù)據(jù)和的一次的CRC碼值的相關項數(shù)中重復項需要軟件計算,而且沒有考慮數(shù)據(jù)的對齊處理,即如果按某一特定位數(shù)(如16)完成CRC碼計算,但如果最后一次計算時的數(shù)據(jù)位數(shù)小于特定位數(shù),則該電路無法工作。
在已有的CRC碼計算方法中,一般僅有一個計算器,這對于10G以太網(wǎng)和40Gbps SDH傳輸中所需超高速計算來說是非常困難的。如morethanip公司提供的10G以太網(wǎng)CRC計算集成電路中間產(chǎn)品(IP),采用64位并行計算,需要156MHz的工作時鐘。由于該計算的工作時鐘頻率高,因而存在著抗干擾能力差和可靠性差,及成本高的缺陷。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述已有技術(shù)的不足,提出了一種用多通道多位并行計算CRC碼的方法。
實現(xiàn)本發(fā)明目的技術(shù)方案是將計算數(shù)據(jù)直接分成多塊,由多個計算器同時運行計算CRC碼,每一塊數(shù)據(jù)在每個計算器中獨立計算,且每個計算器采用多位并行CRC碼硬件計算法,還考慮對齊處理而適用于任意數(shù)據(jù)長度,通過對所有單個通道的CRC碼進行相關合并計算,得到整個待計算數(shù)據(jù)的CRC碼。其過程如下
(1)直接將整個待計算CRC碼的數(shù)據(jù)按每個長度為LS位分割成多個數(shù)據(jù)塊,并設最后一個數(shù)據(jù)塊的長度為LF位(1≤LF≤LS);
(2)將各數(shù)據(jù)塊按順序依次放入第(1,2,3,…,N-1,N)個(隊列)通道,由該N個通道同時對各自通道中的數(shù)據(jù)塊進行CRC計算,得到第(1、2、…N)個通道中數(shù)據(jù)塊的CRC子碼(r1,r2,…,rN-1,rN);
(3)構(gòu)建除法余數(shù)變換表,用該表對第1到第N-1個通道的CRC子碼(r1,r2,…,rN-1)進行除法余數(shù)查表,得到變換后的(N-1)個CRC子碼(R1,R2,…,RN-1);
(4)對變換后的(N-1)個CRC子碼(R1,R2,…,RN-1)逐一進行異或計算,再將其結(jié)果與rN進行異或計算,得到整個待計算數(shù)據(jù)的CRC碼。
上述用多通道實現(xiàn)多位并行計算CRC碼方法,對每個通道中數(shù)據(jù)的并行計算,是通過普通數(shù)據(jù)余數(shù)表,根據(jù)除法器的輸入位數(shù)W與CRC碼的位數(shù)R的不同關系進行,即
當初始W>R時,其工作過程為
(1)給余數(shù)r[R-1,...,1,0]置初值(一般為全0或全1),設指針p指向待計算數(shù)據(jù)開始處,令計數(shù)器c的初值等于(Kj-W),Kj是第j(1≤j≤N)個通道數(shù)據(jù)塊總位數(shù);
(2)從p處取W位到b[W-1,...,1,0]。如果W>R,將b[W-1,...,1,0]的高R位b[W-1,...,W-R-1,W-R]與r[R-1,...,1,0]對應位異或(即模2加,用+表示),結(jié)果送入W位除法器,除法器的輸出送入r[R-1,...,1,0],作為計算數(shù)據(jù)塊的CRC碼;否則根據(jù)W=R或W<R從圖3b或3c的步驟(2)處進行最后一次計算。
(3)如果c=0,結(jié)束計算,r[R-1,...,1,0]為數(shù)據(jù)塊的CRC碼;否則,令p=p+W,執(zhí)行{若c≥W,則c=c-W;否則令W=c,c=0},轉(zhuǎn)步(2)。
當W=R時,其工作過程為
(1)給余數(shù)r[R-1,...,1,0]置初值(一般為全0或全1),設指針p指向待計算數(shù)據(jù)開始處,令計數(shù)器c的初值等于(Kj-W),Kj是第j(1≤j≤N)個通道數(shù)據(jù)塊總位數(shù);
(2)從p處取W比特到b[W-1,...,1,0],如果W=R,將b[W-1,...,1,0]與r[R-1,...,1,0]對應位異或,結(jié)果送入W位除法器,除法器的輸出送入r[R-1,...,1,0],做為計算數(shù)據(jù)塊的CRC碼;否則,根據(jù)W<R從3c的步驟(2)處進行最后一次計算;
(3)如果c=0,結(jié)束計算,r[R-1,...,1,0]為數(shù)據(jù)塊的CRC碼;否則,令p=p+W,執(zhí)行{若c>W(wǎng),則c=c-W;否則令W=c,c=0},轉(zhuǎn)步(2)。
當W<R時,其工作過程為
(1)給余數(shù)r[R-1,...,1,0]置初值(一般為全0或全1),設指針p指向待計算數(shù)據(jù)開始處,令計數(shù)器c的初值等于(Kj-W),Kj是第j(1≤j≤N)個通道數(shù)據(jù)塊總位數(shù);
(2)從p處取W比特到b[W-1,...,1,0]。將r[R-1,...,1,0]的最高W位r[R-1,...,R-W]與待計算數(shù)據(jù)b[W-1,...,1,0]異或,結(jié)果作為W位除法器的輸入;除法器輸出t[R-1,...,1,0]的高(R-W)位t[R-1,...,W+1,W]需要與r[R-W-1,...,1,0]對應位異或,結(jié)果送入r[R-1,...,W+1,W],而t[W-1,...,1,0]直接送入r[W-1,...,1,0];
(3)如果c=0,結(jié)束計算,r[R-1,...,1,0]為數(shù)據(jù)塊的CRC碼;否則,令p=p+W,執(zhí)行{若c≥W,則c=c-W;否則W=c,c=0},轉(zhuǎn)步(2)。
上述多通道多位實現(xiàn)并行計算CRC碼方法,其除法余數(shù)變換表按如下過程進行相關計算與列表
(1)設待計算CRC碼的數(shù)據(jù)比特序列為{mK-1,mK-2,...,mi,...,m2,m1,m0},其多項式為
m(x)=mK-1xK-1+mK-2xK-2+...+mixi+...+m2x2+m1x1+m0x0①
其中mi=1或0(i=0,1,2,...,K-1);
(2)設m(x)的CRC碼的長度為R位,其多項式為
r(x)=rR-1xR-1+rR-2xR-2+...+rixi+...+r2x2+r1x1+r0x0 ②
其中ri=1或0(i=0,1,2,...,R-1);
(3)對于數(shù)據(jù)位數(shù)為K,CRC校驗碼的位數(shù)為R組成的碼字一般記為(K+R,K),根據(jù)CRC原理有
xRm(x)=a(x)g(x)+r(x) ③
其中xRm(x)表示m(x)與xR的乘積,g(x)是生成多項式,a(x)為xRm(x)除以g(x)所得商的多項式,r(x)是式②定義的余數(shù)多項式;
(4)設待計算數(shù)據(jù)如式①,N個通道的CRC子碼分別為ri(x)(1≤i≤N),則N個隊列中數(shù)據(jù)塊多項式uj(x)可表示為
(5)將最后一個隊列中數(shù)據(jù)塊表示為
(6)由式④和式⑤,式①計算的數(shù)據(jù)表示為
(7)用Rg(x)[c(x)]表示c(x)除以g(x)所得的余數(shù)多項式式,則由CRC碼計算定義,并依⑥式經(jīng)整理可知m(x)的CRC碼為
r(x)=Rg(x)[xRm(x)]
故
取LS等于Q*R(Q為正整數(shù)),一般為實現(xiàn)簡單,取LS等于每次計算位數(shù)W的整倍數(shù)。設最后一個隊列長度LF=P*R+LR,此處非負整數(shù)P滿足0≤P≤Q和0≤LR<R;
(8)在LR=0時
將式⑦等效于
由⑧式可從(r1,r2,...,rN-1)求得(R1,R2,...,RN-1)
即R1=Rg(x)[r1(x).x{(N-2)*Q+P}*R],
R2=Rg(x)[r2(x).x{(N-3)*Q+P}*R],
...,
RN-1=Rg(x)[rN-1(x).xP*R] ⑨
(9)由式⑦或⑧按如下過程求出每個隊列不同次數(shù)的CRC余數(shù)運算;
i.將輸入數(shù)據(jù)c[R-1,..., 1,0]多項式中的系數(shù)從全0到全1進行全排列變化(共有2R種可能組合),并將某個輸入數(shù)據(jù)對應的多項式系數(shù)ci為1所對應的典型數(shù)據(jù)余數(shù)(即Rg(x)[xRcixi])進行異或,得到該數(shù)據(jù)對應普通數(shù)據(jù)余數(shù);例如我們可從(00000001)和(00000100)的典型數(shù)據(jù)余數(shù)的異或(模2加)得到普通數(shù)據(jù)(00000101)的余數(shù);
ii.將輸入數(shù)據(jù)c[R-1,...,1,0]的2R種組合對應的普通數(shù)據(jù)余數(shù)列表,該表占2R·R比特,它也就是常見的軟件計算CRC碼中使用的列表。當輸入余數(shù)數(shù)據(jù)D0(x)時(di(0)代表D0(x)的多項式系數(shù),即),從該表處取出R位輸出D1(x),則D1(x)是D0(x)的第一次除法輸出;
iii.將D1(x)作為輸入余數(shù)數(shù)據(jù),從該表處取出R位輸出D2(x),則D2(x)是D0(x)的第二次除法輸出;依此類推,將DQ-1(x)作為輸入余數(shù)數(shù)據(jù)(Q>1),從該表處取出R位輸出DQ(x),則DQ(x)是D0(x)第Q次除法輸出。
iv.將所有可能的D0(x)(共有2R種可能組合)到DQ(x)的變換列表,即余數(shù)變換表。
上述實現(xiàn)多通道多位并行計算CRC碼方法,第1到第N-1個通道的CRC子碼(r1,r2,...,rN-1)需進行變換得到CRC子碼(R1,R2,...,RN-1),其除法余數(shù)變換表的構(gòu)建按如下步驟進行
(1)假定某CRC的校驗位有8位(即R=8),先構(gòu)建從rN-1求出RN-1的P次除法余數(shù)變換表(設P=4);
(2)從普通數(shù)據(jù)余數(shù)表2a可查出輸入數(shù)據(jù)為(0.1,...,255)的余數(shù)輸出,該余數(shù)輸出分別是0、10H、12H、25H、3BH、...、A8H;
(3)由于0的任意次余數(shù)輸出必為0,我們直接將0放入P次余數(shù)變換表2b的存儲單元0(即第1項)。當輸入余數(shù)數(shù)據(jù)1時,從該表字節(jié)1(即第8比特,D(X)*R處,D(X)=1和R=8)處取出R位輸出10H,則10H是數(shù)據(jù)1的第1次除法余數(shù)輸出(即Rg(x)[D(x)*xR]);
(4)將10H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)10H(即第128比特)處取出R位輸出21H,則21H是數(shù)據(jù)1的第2次除法余數(shù)輸出;
(5)將21H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)21H(即第264比特)處取出R位輸出04H,則04H是數(shù)據(jù)1的第3次除法余數(shù)輸出;
(6)將04H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)04H(即第32比特)處取出R位輸出3BH,則3BH是數(shù)據(jù)1的第4次除法余數(shù)輸出;
(7)將數(shù)據(jù)3BH放入表2b的存儲單元1即第2項,依據(jù)相同的操作過程,得到剩下的余數(shù)數(shù)據(jù)(2,3,...,255)的P次余數(shù)輸出,將256個余數(shù)數(shù)據(jù)(0,1,2,3,...,255)的P次余數(shù)輸出列表,就得到從rN-1求出RN-1的P次除法余數(shù)變換表;
(8)在硬件計算的P次除法余數(shù)變換表中,僅需列出8個典型余數(shù)數(shù)據(jù)(1,2,4,8,16,32,62,128)的P次余數(shù)輸出列表,就可用與圖2相似的方法,得到從rN-1求出RN-1的P次除法余數(shù)變換;
(9)用同樣的方法可得到從(r1,r2,...,rN-2)求得(R1,R2,...,RN-2)時,分別進行{(N-2)*Q+P,(N-3)*Q+P,...,Q+P}次除法余數(shù)所需的(N-2)個除法余數(shù)變換表。
上述實現(xiàn)多通道多位并行計算CRC碼方法,是將得到的隊列[1,2,...,N-1]數(shù)據(jù)塊的CRC子碼(r1,r2,...,rN-1)作為N-1個除法余數(shù)變換輸出表的輸入,由軟件通過除法余數(shù)變換查得其輸出(R1,R2,...,RN-1),或由硬件電路在一個時鐘內(nèi)通過除法余數(shù)變換查得其輸出(R1,R2,...,RN-1),再用軟件或硬件電路將(R1,R2,...,RN-1)和第N路CRC碼輸出rN進行異或運算,就得到整個計算數(shù)據(jù)的循環(huán)冗余校驗碼。
本發(fā)明由于采用N個通道,每個通道采用W位并行算法,因而使硬件實現(xiàn)的計算速度提高到單比特計算速度的N*W倍;同時由于本發(fā)明直接將計算數(shù)據(jù)分塊,多隊列依次取數(shù),故比已有交替計算控制簡單;有效地降低了超高速CRC計算電路工作頻率,顯著地降低計算成本,如提供10G以太網(wǎng)CRC計算,采用64位并行計算,在P=4時僅需要39MHz的工作時鐘;此外,由于本發(fā)明的每一個隊列中的CRC計算用多位并行硬件實現(xiàn),每次并行計算的位數(shù)可大于、等于、或小于循環(huán)冗余校驗碼的位數(shù),計算數(shù)據(jù)長度與循環(huán)冗余校驗碼的位數(shù)無關,所以計算方法具有通用性,容易實現(xiàn)10G以太網(wǎng)和40(Gbps SDH等未來高速網(wǎng)絡中的CRC計算。
圖1是本發(fā)明多通道多位并行CRC計算原理框圖
圖2是本發(fā)明一個除法器硬件實現(xiàn)電路原理圖
圖3a~3c是本發(fā)明在不同情況下的單個通道多位并行計算實現(xiàn)框圖
圖4是已有技術(shù)使用多個中間數(shù)據(jù)流進行循環(huán)冗余校驗計算的框圖
圖5是已有技術(shù)并行循環(huán)冗余校驗計算框圖
具體實施例方式
參照圖1,本發(fā)明的多通道多位并行CRC計算方法是將整個待計算CRC碼的數(shù)據(jù)按每LS位分割成N個數(shù)據(jù)塊(N≥2),依次放入隊列(1,2,3,...,N-1,N)。因為待計算數(shù)據(jù)的總比特位數(shù)不一定被LS整除,令最后一個隊列長度是LF位(1≤LF≤LS)。N個通道同時對各自通道中的數(shù)據(jù)塊進行CRC計算,得到第(1,2,...,N)個通道中數(shù)據(jù)塊的CRC了碼(r1,r2,...,rN-1,rN),通過余數(shù)變換表對(r1,r2,...,rN-1)用軟件或硬件進行查表得到(R1,R2,...,RN-1),再對(R1,R2,...,RN-1,rN)進行異或計算,得到整個待計算數(shù)據(jù)的CRC碼。隊列1的CRC碼初值設置為原米整個數(shù)據(jù)的約定初值(一般為R位全1或全0),其余隊列的CRC碼初值均置全0。其中在每一個通路的計算中,W位硬件除法器是高速CRC計算的關鍵部件。其構(gòu)建過程是首先計算輸入W位數(shù)據(jù)b[W-1,...,1,0]從最低位(0位置)到最高位(W-1位置)逐位置1(其余位是0),將xR·b(x)或xR·xi(i=0~W-1)被g(x)除所得余數(shù)構(gòu)成一個由W行*R列組成的典型數(shù)據(jù)余數(shù)表1如下
表1 不同寬度(W)的典型數(shù)據(jù)余數(shù)列表
表1(a) 表1(b)表1(c)
W=4 W=8 W=10
表1中給出了ATM信元頭中CRC的生成多項式g(x)=x8+x2+x+1,在不同的W值時對應的典型數(shù)據(jù)余數(shù)列表,其中
表1a是W值為4時的典型數(shù)據(jù)余數(shù)列表;
表1b是W值為8時的典型數(shù)據(jù)余數(shù)列表;
表1c是W值為16時的典型數(shù)據(jù)余數(shù)列表;
例如,從表1b知數(shù)據(jù)1000,0000B(即16進制10H)的CRC碼為表1b的最后一項(對應i=7)10001001(二進制),從表1c知數(shù)據(jù)0100,000,0000,0000B(即16進制4000H)的CRC碼為表1c的倒數(shù)第二項(對應i=14)01011011。
W位除法器可用軟件或硬件實現(xiàn)。軟件實現(xiàn)是讓輸入數(shù)據(jù)b[W-1,...,1,0]多項式中的系數(shù)從全0到全1進行2W種全排列變化,將某個輸入數(shù)據(jù)對應多項式系數(shù)bi為1所對應的那些典型數(shù)據(jù)余數(shù)異或,得到該數(shù)據(jù)對應余數(shù)。將輸入數(shù)據(jù)b[W-1,...,1,0]的2W種組合對應的余數(shù)列表,該表占2W·R比特。當輸入數(shù)據(jù)時,從處取出R位,該R位是W位除法器的輸出。
參照圖2,本發(fā)明依據(jù)表1b的典型數(shù)據(jù)余數(shù)輸出,給出了W和R均為8時除法器的硬件實現(xiàn)邏輯電路,其中輸入數(shù)據(jù)是[bW-1,...,b2,b1]或bW-1,...,b2,b1,除法器輸出是[tR-1,...,t2,t1,t0]或tR-1,...,t2,t1,t0。表1a中MSB位是第7列,LSB位是第0列,某一位ti(i=0~R-1)等于典型數(shù)據(jù)余數(shù)表中第i列所有為“1”的輸入數(shù)據(jù)bj(j=0~W-1)的異或(模2加)。例如在表1a中,對W=4和R=8有[t7=t6=0,t5=b3,t4=b3b2,t3=b3b2b1,t2=b2b1b0,t1=b1b0,t0=b0]。
參照圖3,每個通道的并行計算法依據(jù)W和R間的關系進行。其中圖3a是W>R時的CRC并行計算框圖,3b是W=R時的CRC并行計算框圖,3c是W<R時的CRC并行計算框圖。圖3a的工作步驟是
(1)給余數(shù)r[R-1,...,1,0]置初值(一般為全0或全1),設指針p指向待計算數(shù)據(jù)開始處,令計數(shù)器c的初值等于(Kj-W),Kj是第j(1≤j≤N)個通道數(shù)據(jù)塊總位數(shù);
(2)從p處取W位到b[W-1,...,1,0]。如果W>R,將b[W-1,...,1,0]的高R位b[W-1,...,W-R-1,W-R]與r[R-1,...,1,0]對應位異或(即模2加,用+表示),結(jié)果送入W位除法器,除法器的輸出送入r[R-1,...,1,0],作為計算數(shù)據(jù)塊的CRC碼;否則根據(jù)W=R或W<R從圖3b或3c的步驟(2)處進行最后一次計算。
(3)如果c=0,結(jié)束計算,r[R-1,...,1,0]為數(shù)據(jù)塊的CRC碼;否則,令p=p+W執(zhí)行{若c≥W,則c=c-W;否則令W=c,c=0},轉(zhuǎn)步(2)。
圖3b的工作過程與圖3a相似,區(qū)別是圖3b中b[W-1,...,1,0]與r[R-1,...,1,0]對應位異或。
圖3c與圖3a的區(qū)別是僅r[R-1,..,1,0]的最高W位r[R-1,R-2,....,R-W]與待計算數(shù)據(jù)b[W-1,...,1,0]異或,結(jié)果作為W位除法器的輸入。除法器輸出t[R-1,...,1,0]的高(R-W)位t[R-1,...,W+1,W]需要與r[R-W-1,...,1,0]對應位異或,結(jié)果送入r[R-1,...,W+1,W],而t[W-1,...,1,0]直接送入r[W-1,...,1,0]。
在得到每個通路的CRC子碼(r1,r2,...,rN-1,rN)后,需要用余數(shù)變換表對其前(N-1)個CRC子碼(r1,r2,...,rN-1)進行除法余數(shù)變換得到(R1,R2,...,RN-1)。該除法余數(shù)變換表按上述構(gòu)建方法如表2。表2給出P=4時(符號#表示表2b的數(shù)值是示意性的),從普通余數(shù)列表得到變換余數(shù)列表的過程如表2。
表2 普通數(shù)據(jù)余數(shù)列表得到余數(shù)變換表的過程
a普通余數(shù)列表 b變換余數(shù)列表
存儲單元 存儲內(nèi)容存儲單元 存儲內(nèi)容
從表2可知輸入數(shù)據(jù)(0,1,...,255)的余數(shù)輸出分別是(0,10H,12H,25H,3BH,...,A8H)。由于輸入數(shù)據(jù)0的余數(shù)必然為0,故將0放入P次余數(shù)變換表2b的存儲單元0(第1項)。當輸入余數(shù)數(shù)據(jù)1時,處理過程是1)從普通余數(shù)表字節(jié)1(第8比特,即D(X)*R處,D(X)=1和R=8)處取出R位輸出得到10H,則10H是數(shù)據(jù)1的第1次除法余數(shù)輸出(即Rg(x)[D(x)*xR]);2)將10H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)10H(第128比特)處取出R位輸出得到21H,則21H是數(shù)據(jù)1的第2次除法余數(shù)輸出;3)將21H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)21H(第264比特)處取出R位輸出04H,則04H是數(shù)據(jù)1的第3次除法余數(shù)輸出;4)將04H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)04H(第32比特)處取出R位輸出3BH,則3BH是數(shù)據(jù)1的第4次除法余數(shù)輸出。我們將數(shù)據(jù)3BH放入表2b的存儲單元1(第2項)。依據(jù)相同的操作過程,很容易得到剩下的余數(shù)數(shù)據(jù)(2,3,...,255)的P次余數(shù)輸出,將這些余數(shù)輸出列表如表2b。同理,我們?nèi)菀椎玫綇?r1,r2,...,rN-2)求得(R1,R2,...,RN-2)進行{(N-2)*Q+P,(N-3)*Q+P,...,Q+P}次除法余數(shù)變換所需的N-2個列表。
當隊列[1,2,...,N-1]的數(shù)據(jù)塊的CRC碼(r1,r2,...,rN-1)得到后,將(r1,r2,...,rN-1)作為上述N-1個表的輸入,硬件電路在一個時鐘內(nèi)查表取得輸出(R1,R2,...,RN-1)。用硬件將(R1,R2,...,RN-1)和第N路CRC碼輸出rN共N個數(shù)進行異或運算,就得到整個計算數(shù)據(jù)的循環(huán)冗余校驗碼。
如果最后一個隊列長度LF=P*R+LR中余數(shù)LR不等于零,我們可根據(jù)上述方法先計算前[(N-1)*Q+P]*R位,設得到的CRC碼表示為R(X)’(即R1+R2+...+RN-1+rN)。將LR位數(shù)據(jù)作為圖3c的數(shù)據(jù)輸入b[LR-1,LR-2,...,1,0],將R(X)’放入圖3c的r[R-1,...,1,0],根據(jù)LR<R的假定采用圖3c進行CRC計算。計算結(jié)束后,寄存器r[R-1,...,1,0]中就是整個待計算數(shù)據(jù)的CRC碼。
下面舉例說明實現(xiàn)該多通道多位并行算法的計算過程。假設待計算數(shù)據(jù)為
共576字節(jié),第一個0為最高位字節(jié)(MSB),最后一字節(jié)63為最低位字節(jié)(LSB)。CRC生成多項式采用HDLC生成多項式G(x)=x16+x12+x5+1,初值全1。余數(shù)采用(MSB,LSB)表示法,如x16被G(x)余數(shù)為0001000000100001。按一般單通道計算法,在不同W(1,8,16)時,上述數(shù)據(jù)的CRC碼均為8CFDh。將該數(shù)據(jù)分為(128,128,128,128,64)字節(jié)的5個隊列,第一個隊列CRC初值為全1,其余隊列CRC初值為全0。經(jīng)計算5個隊列的CRC子碼(r1,r2,r3,r4,r5)分別是(95B1h,F(xiàn)F66h,F(xiàn)254h,F(xiàn)F66h,2A57h)。按式⑦有Q=64和P=32,用余數(shù)變換表對前4個CRC子碼(r1,r2,r3,r4)分別進行(224,160,96,32)次求CRC余數(shù)運算,得到變換后的(R1,R2,R3,R4)為(23DCh,9044h,4435h,5107h)。將(R1,R2,R3,R4)這4個數(shù)和第五個隊列的CRC子碼r5(2A57h)進行異或,得到CRC碼為8CFDh,驗證式⑦成立。對上述數(shù)據(jù)也可分為(144,144,144,144)字節(jié)的4個隊列,采用類似方法可得CRC碼為8CFDh,說明式⑧正確。另外,如果CRC初值為全0,將第一個隊列CRC初值全設0,上述兩種多通道下CRC碼與單多通道下相同(均為710Fh),表明算法適用各種CRC初值。
對于單通道W位并行CRC硬件計算,則需經(jīng)過異或、除法器運算兩個步驟,而在W小于R時還需加入除法器輸出與余數(shù)邏輯運算的一個步驟,經(jīng)FPGA電路仿真驗證三種情形(W>R,W=R,W<R)的每W位CRC計算過程均可在一個時鐘內(nèi)完成。設CRC計算電路時鐘頻率為fcHz,則計算速度可達(W*fc)位/秒,對于W取32和fc為31.25MHz,計算速度超過1G位/秒,完全滿足千兆以太網(wǎng)、ATM網(wǎng)絡所需的高速CRC計算及校驗要求。在多通道計算時,計算需加入前(N-1)個隊列中每個隊列CRC碼求多次余數(shù)運算的一個時鐘(采用余數(shù)變換表查表法),以及所有隊列CRC子碼求異或運算(即R1+R2+...+RN-1+rN)的一個時鐘,則計算速度可提高到單通道時的(N*LS/W)/(Ls/W+2)。一般2W/LS遠小于1,則計算速度達(N*W*fc)位/秒,前述條件在N大于10時,可實現(xiàn)10G位/秒,滿足10G以太網(wǎng)、40Gbps SDH所需超高速CRC計算。
權(quán)利要求
1.一種多通道多位并行計算CRC碼的方法,按如下過程進行
(1)直接將整個待計算CRC碼數(shù)據(jù)按每個長度為LS位分割成多個數(shù)據(jù)塊,并設最后一個數(shù)據(jù)塊的長度為LF位(1≤LF≤LS);
(2)將各數(shù)據(jù)塊按順序依次放入第(1,2,3,…,N-1,N)通道,由該N個通道同時對各自通道中的數(shù)據(jù)塊進行CRC計算,得到第(1,2,3,…,N-1,N)個通道中數(shù)據(jù)塊的CRC子碼(r1,r2,…,rN-1,rN);
(3)構(gòu)建除法余數(shù)變換表,用該表對第1到第N-1個通道的CRC子碼(r1,r2,…,rN-1)進行除法余數(shù)輸出查表得到變換后的CRC子碼(R1,R2,…,RN-1);
(4)對變換后的多個CRC子碼(R1,R2,…,RN-1)逐一進行異或計算,再將其結(jié)果與rN進行異或計算,得到整個待計算數(shù)據(jù)的CRC碼。
2.根據(jù)權(quán)利要求1所述的多通道多位并行計算CRC碼方法,其特征在于每個通道對其數(shù)據(jù)塊進行的CRC計算,是通過普通數(shù)據(jù)余數(shù)表根據(jù)除法器的位數(shù)W與CRC碼的位數(shù)R之間的關系進行,即
當初始W>R時,其工作過程為
(1)給余數(shù)r[R-1,...,1,0]置初值(一般為全0或全1),設指針p指向待計算數(shù)據(jù)開始處,令計數(shù)器c的初值等于(Kj-W),Kj是第j(1≤j≤N)個通道數(shù)據(jù)塊總位數(shù);
(2)從p處取W位到b[W-1,...,1,0],如果W>R,將b[W-1,...,1,0]的高R位b[W-1,...,W-R-1,W-R]與r[R-1,...,1,0]對應位異或(即模2加,用+表示),結(jié)果送入W位除法器,除法器的輸出送入r[R-1,...,1,0],作為計算數(shù)據(jù)塊的CRC碼;
(3)如果c=0,結(jié)束計算,r[R-1,...,1,0]為數(shù)據(jù)塊的CRC碼;
當W=R時,其工作過程為
(1)給余數(shù)r[R-1,...,1,0]置初值(一般為全0或全1),設指針p指向待計算數(shù)據(jù)開始處,令計數(shù)器c的初值等于(Kj-W),Kj是第j(1≤j≤N)個通道數(shù)據(jù)塊總位數(shù);
(2)從p處取W比特到b[W-1,...,1,0],如果W=R,將b[W-1,...,1,0]與r[R-1,...,1,0]對應位異或,結(jié)果送入W位除法器,除法器的輸出送入r[R-1,...,1,0],作為計算數(shù)據(jù)塊的CRC碼
(3)如果c=0,結(jié)束計算,r[R-1,...,1,0]為數(shù)據(jù)塊的CRC碼;
當W<R時,其工作過程為
(1)給余數(shù)r[R-1,...,1,0]置初值(一般為全0或全1),設指針p指向待計算數(shù)據(jù)開始處,令計數(shù)器c的初值等于(Kj-W),Kj是第j(1≤j≤N)個通道數(shù)據(jù)塊總位數(shù);
(2)從p處取W比特到b[W-1,...,1,0],將r[R-1,...,1,0]的最高W位r[R-1,...,R-W]與待計算數(shù)據(jù)b[W-1,...,1,0]異或,結(jié)果作為W位除法器的輸入;除法器輸出t[R-1,...,1,0]的高(R-W)位t[R-1,...,W+1,W]需要與r[R-W-1,...,1,0]對應位異或,結(jié)果送入r[R-1,...,W+1,W],而t[W-1,...,1,0]直接送入r[W-1,...,1,0];
(3)如果c=0,結(jié)束計算,r[R-1,...,1,0]為數(shù)據(jù)塊的CRC碼;
3.根據(jù)權(quán)利要求1所述的多通道多位并行計算CRC碼方法,其特征在于除法余數(shù)變換表的建立,按如下過程進行
(1)設待計算CRC碼的數(shù)據(jù)位數(shù)為K,其多項式為
m(x)=mK-1xK-1+mK-2xK-2+...+mixi+...+m2x2+m1x1+m0x0①
其中mi=1或0(i=0,1,2,...,K-1);
(2)設m(x)的CRC碼的位數(shù)為R,其多項式為
r(x)=rR-1xR-1+rR-2xR-2+...+rixi+...+r2x2+r1x1+r0x0②
式中ri=1或0(i=0,1,2,...,R-1);
(3)根據(jù)CRC原理得
xRm(x)=a(x)g(x)+r(x) ③
式中xRm(x)表示m(x)與xR的乘積,g(x)是生成多項式,a(x)為xRm(x)除以g(x)所得商的多項式,r(x)是式②定義的余數(shù)多項式;
(4)設待計算數(shù)據(jù)如式①,N個通道的CRC碼分別為ri(x)(1≤i≤N),則N個隊列數(shù)據(jù)塊多項式ui(x)可表示為
式中LS是隊列(1,2,3,…,N-1)中的數(shù)據(jù)塊位數(shù),
LF是隊列N中的數(shù)據(jù)塊位數(shù);
(5)將最后一個隊列表示為
(6)由式④和式⑤,式①計算的數(shù)據(jù)表示為
(7)用Rg(x)[c(x)]表示c(x)除以g(x)所得的余式,則由CRC碼計算定義,并依⑥式經(jīng)整理可知m(x)的CRC碼r(x)為
r(x)=Rg(x)[xRm(x)]
故
式中rj(x)為隊列j(1≤j≤N-1)中數(shù)據(jù)塊uj(x)的CRC子碼多項式,
rN(x)為隊列N中數(shù)據(jù)塊uN(x)的CRC子碼多項式;
取LS等于Q*R(Q為正整數(shù)),取LS每次計算位數(shù)W的整倍數(shù),設最后一個隊列數(shù)據(jù)位數(shù)LF=P*R+LR,此處非負整數(shù)P滿足0≤P≤Q和0≤LR<R;
(8)在LR=0
將式⑦等效于
其中rj(x)為隊列j(1≤j≤N-1)中數(shù)據(jù)塊uj(x)的CRC子碼多項式,rN(x)為隊列N中數(shù)據(jù)塊uN(x)的CRC子碼多項式;
由⑧)求得變換后的CRC子碼(R1,R2,...,RN-1),即
R1=Rg(x)[r1(x).x{(N-2)*Q+P}*R]
R2=Rg(x)[r2(x).x{(N-3)*Q+P}*R],
...,
RN-1=Rg(x)[rN-1(x).xP*R]; ⑨
其中(R1,R2,...,RN-1)是對CRC子碼(r1,r2,...,rN-1)變換后的CRC子碼;
R1需對r1(x)進行{(N-2)*Q+P}次CRC余數(shù)運算;
R2需對r2(x)進行{(N-3)*Q+P}次CRC余數(shù)運算;
...,
RN-1)需對rN-1(x)進行{P}次CRC余數(shù)運算;
(9)由式⑦或⑧按如下過程求出每個隊列不同次數(shù)的CRC余數(shù)運算;
i.將輸入數(shù)據(jù)c[R-1,...,1,0]多項式中的系數(shù)從全0到全1進行全排列變化(共有2R種可能組合),并將某個輸入數(shù)據(jù)對應的多項式系數(shù)ci為1所對應的典型數(shù)據(jù)余數(shù)(即Rg(x)[xRcixi]進行異或,得到該數(shù)據(jù)對應普通數(shù)據(jù)余數(shù);
ii.將輸入數(shù)據(jù)c[R-1,...,1,0]的2R種組合對應的普通數(shù)據(jù)余數(shù)列表,當輸入余數(shù)數(shù)據(jù)D0(x)時,從該表處取出R位輸出D1(x)(di(0)代表D0(x)的多項式系數(shù),即),則D1(x)是D0(x)的第一次除法輸出;
iii.將D1(x)作為輸入余數(shù)數(shù)據(jù),從該表處取出R位輸出得到D2(x),D2(x)是D0(x)的第二次除法輸出;依此類推,將DQ-1(x)作為輸入余數(shù)數(shù)據(jù)(Q>1),從該表處取出R位輸出DQ(x),則DQ(x)是D0(x)的第Q次除法輸出;
iv.將所有可能的D0(x)(共有2R種可能組合)到DQ(x)的變換列表,得到余數(shù)變換表。
4.根據(jù)權(quán)利要求3所述的多通道多位并行計算CRC碼方法,其特征在于除法余數(shù)變換表實現(xiàn)從輸入余數(shù)數(shù)據(jù)D0(x)變換到輸出DQ(x)的過程,按如下步驟進行
(1)假定某CRC的校驗位有8位(即R=8),先構(gòu)建從rN-1求出RN-1的P次除法余數(shù)變換表(設P=4);
(2)從普通數(shù)據(jù)余數(shù)表2a可查出輸入數(shù)據(jù)為(0,1,...,255)的余數(shù)輸出,該余數(shù)輸出分別是0、10H、12H、25H、3BH、...、A8H;
(3)由于0的任意次余數(shù)輸出必為0,我們直接將0放入P次余數(shù)變換表2b的存儲單元0(即第1項),當輸入余數(shù)數(shù)據(jù)為1時,從該表字節(jié)1(即第8比特,D(X)*R處,D(X)=1和R=8)處取出R位輸出10H,則10H是數(shù)據(jù)1的第1次除法余數(shù)輸出(即Rg(x)[D(x)*xR]);
(4)將10H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)10H(即第128比特)處取出R位輸出21H,則21H是數(shù)據(jù)1的第2次除法余數(shù)輸出;
(5)將21H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)21H(即第264比特)處取出R位輸出04H,則04H是數(shù)據(jù)1的第3次除法余數(shù)輸出;
(6)將04H作為輸入余數(shù)數(shù)據(jù),從該表字節(jié)04H(即第32比特)處取出R位輸出3BH,則3BH是數(shù)據(jù)1的第4次除法余數(shù)輸出;
(7)將數(shù)據(jù)3BH放入表2(b)的存儲單元1即第2項,依據(jù)相同的操作過程,得到剩下的余數(shù)數(shù)據(jù)(2,3,...,255)的P次余數(shù)輸出,將256個余數(shù)數(shù)據(jù)(0,1,2,3,...,255)的P次余數(shù)輸出列表,就得到從rN-1求出RN-1的P次除法余數(shù)變換表;
(8)在硬件計算的P次除法余數(shù)變換表中,僅需列出8個典型余數(shù)數(shù)據(jù)(1,2,4,8,16,32,62,128)的P次余數(shù)輸出列表,就可得到從rN-1求出RN-1的P次除法余數(shù)變換;
(9)用同樣的方法可得到從(r1,r2,...,rN-2)求得(R1,R2,...,RN-2)時,分別進行{(N-2)*Q+P,(N-3)*Q+P,...,Q+P}次除法余數(shù)所需的(N-2)個除法余數(shù)變換表。
5.根據(jù)權(quán)利要求1所述的多通道多位并行計算CRC碼方法,其特征在于對(R1,R2,…,RN-1,rN)進行異或計算,是將得到的隊列[1,2,...,N-1]數(shù)據(jù)塊的CRC子碼(r1,r2,...,rN-1)作為N-1個除法余數(shù)變換輸出表的輸入,由軟件通過除法余數(shù)變換查得其輸出(R1,R2,...,RN-1),或由硬件電路在一個時鐘內(nèi)通過除法余數(shù)變換查得其輸出(R1,R2,...,RN-1),再用軟件或硬件電路將(R1,R2,..,RN-1)和第N路CRC碼輸出rN進行異或運算,就得到整個計算數(shù)據(jù)的循環(huán)冗余校驗碼。
全文摘要
本發(fā)明公開了一種利用多通道多位并行計算循環(huán)冗余校驗(CRC)碼的方法。該方法直接將整個待計算CRC碼數(shù)據(jù)按每個長度為LS位分割成多個數(shù)據(jù)塊,并將各數(shù)據(jù)塊按順序依次放入第(1,2,3,…,N-1,N)個通道,由該N個通道同時對各自通道中的數(shù)據(jù)塊進行CRC計算,得到第(1,2,3,…,N-1,N)個通道中數(shù)據(jù)塊的CRC子碼(r1,r2,…,rN-1,rN);再通過構(gòu)建除法余數(shù)變換表,對第1到第N-1個通道的CRC子碼(r1,r2,…,rN-1)進行除法余數(shù)變換查表,得到變換后的CRC子碼(R1,R2,…,RN-1);最后對變換后的CRC子碼(R1,R2,…,RN-1)逐一進行異或計算后,再與rN進行異或計算,得到整個待計算數(shù)據(jù)CRC碼。該方法具有計算速度快、易于實現(xiàn)、成本低之優(yōu)點,可用于10G以太網(wǎng)和40 Gbps SDH等未來高速網(wǎng)絡中的CRC計算。
文檔編號G06F11/08GK1431594SQ0311446
公開日2003年7月23日 申請日期2003年1月27日 優(yōu)先權(quán)日2003年1月27日
發(fā)明者徐展琦 申請人:西安電子科技大學