1.一種具有單比特糾錯功能的并行CRC糾錯方法,其特征在于,
步驟一:選擇合適的CRC校驗多項式、計算相應的并行算法;
根據(jù)數(shù)據(jù)傳輸要求和數(shù)據(jù)包長度要求,選擇合適的CRC校驗多項式CRC16.X25=X16+X12+X5+1,式中Xi是碼元位置的標記,它表示由其系數(shù)所決定的碼元取值所處的對應位置;根據(jù)相應的CRC校驗多項式,經(jīng)過迭代運算得到16位CRC并行運算式
R[0]=D[12]^D[11]^D[8]^D[4]^D[0]^R[0]^R[4]^R[8]^R[11]^R[12]
R[1]=D[13]^D[12]^D[9]^D[5]^D[1]^R[1]^R[5]^R[9]^R[12]^R[13]
R[2]=D[14]^D[13]^D[10]^D[6]^D[2]^R[2]^R[6]^R[10]^R[13]^R[14]
R[3]=D[15]^D[14]^D[11]^D[7]^D[3]^R[3]^R[7]^R[11]^R[14]^R[15]
R[4]=D[15]^D[12]^D[8]^D[4]^R[4]^R[8]^R[12]^R[15]
R[5]=D[13]^D[12]^D[11]^D[9]^D[8]^D[5]^D[4]^D[0]^R[0]^R[4]^R[5]^R[8]^R[9]^R[11]^R[12]^R[13]
R[6]=D[14]^D[13]^D[12]^D[10]^D[9]^D[6]^D[5]^D[1]^R[1]^R[5]^R[6]^R[9]^R[10]^R[12]^R[13]^R[14]
R[7]=D[15]^D[14]^D[13]^D[11]^D[10]^D[7]^D[6]^D[2]^R[2]^R[6]^R[7]^R[10]^R[11]^R[13]^R[14]^R[15]
R[8]=D[15]^D[14]^D[12]^D[11]^D[8]^D[7]^D[3]^R[3]^R[7]^R[8]^R[11]^R[12]^R[14]^R[15]
R[9]=D[15]^D[13]^D[12]^D[9]^D[8]^D[4]^R[4]^R[8]^R[9]^R[12]^R[13]^R[15]
R[10]=D[14]^D[13]^D[10]^D[9]^D[5]^R[5]^R[9]^R[10]^R[13]^R[14]
R[11]=D[15]^D[14]^D[11]^D[10]^D[6]^R[6]^R[10]^R[11]^R[14]^R[15]
R[12]=D[15]^D[8]^D[7]^D[4]^D[0]^R[0]^R[4]^R[7]^R[8]^R[15]
R[13]=D[9]^D[8]^D[5]^D[1]^R[1]^R[5]^R[8]^R[9]
R[14]=D[10]^D[9]^D[6]^D[2]^R[2]^R[6]^R[9]^R[10]
R[15]=D[11]^D[10]^D[7]^D[3]^R[3]^R[7]^R[10]^R[11]
其中,R代表相應寄存器中的數(shù)值,D代表相應輸入數(shù)據(jù)的數(shù)值,^表示異或運算;
步驟二:建立查找表;
設G(X)為CRC的校驗多項式,k為傳輸數(shù)據(jù)的長度,n為發(fā)送數(shù)據(jù)的長度,則校驗位的長度為n-k;此時,設發(fā)送數(shù)據(jù)的多項式為v(x),傳輸錯誤數(shù)據(jù)多項式為e(x)及接收數(shù)據(jù)多項式為r(x),他們之間存在如下關系
r(x)=v(x)+e(x)
令CRC校驗和計算表示如下CRCG(x){v(x)},在G(x)、v(x)、n與k一定的情況下,計算結果應該為一個0;在接收端,用相同的CRC校驗多項式進行計算,可以得到以下結論
CRCG(x){r(x)}=CRCG(x){v(x)+e(x)}=CRCG(x){e(x)}
這說明如果存在一個合適的CRC多項校驗式使不同錯誤類型錯誤得到的CRC校驗結果兩兩不相同,那么數(shù)據(jù)中發(fā)生錯誤的位置可以由生成的CRC校驗結果得到;
根據(jù)包長度和相應的并行CRC運算式,計算該長度各位產(chǎn)生錯誤時的CRC值,并且將該值存放至相應的存儲空間待用;
步驟三:數(shù)據(jù)糾錯;
通過上述方式在傳輸數(shù)據(jù)中加入相應的CRC,在接收方利用相同的CRC對數(shù)據(jù)進行CRC的解算,如果數(shù)據(jù)在傳輸過程中沒有發(fā)生誤碼,則解算出的CRC應為0;如果解算出的CRC值不為零,則將該值與之前儲存好的查找表進行比較,若產(chǎn)生匹配,則將查找表中的對應位與數(shù)據(jù)的對應位進行異或運算,解算后可以獲得正確的數(shù)據(jù);若沒有產(chǎn)生匹配,則說明數(shù)據(jù)發(fā)生了未知位數(shù)的數(shù)據(jù)傳輸錯誤,應該丟棄。