40位以內(nèi)任意長度的CRC計(jì)算及校驗(yàn)的實(shí)現(xiàn)
1 引言
循環(huán)冗余校驗(yàn)碼,簡稱crc碼,是常用的檢測錯(cuò)誤碼,它在數(shù)據(jù)通信中得到了非常廣泛的應(yīng)用。不同crc碼的生成多項(xiàng)式各不相同,crc碼的比特?cái)?shù)也不同,且在有的通信協(xié)議中要求將余數(shù)寄存器先初始化為全0,另外的則須初始化為全1。因此,在程序設(shè)計(jì)時(shí)必須充分利用crc碼的共性及所用dsp的指令特點(diǎn)。
2 用tms320c5000實(shí)現(xiàn)不同crc計(jì)算的設(shè)計(jì)思想
本文引用地址:http://m.butianyuan.cn/article/21134.htmcrc碼的計(jì)算及校驗(yàn)都用到模2的多項(xiàng)式除法,而多項(xiàng)式除法可以采用帶反饋的移位寄存器來實(shí)現(xiàn),因此,用dsp來實(shí)現(xiàn)crc計(jì)算的關(guān)鍵是通過dsp來模擬一個(gè)移位寄存器(也就是模擬手寫多項(xiàng)式除法)??紤]到tms320c5000系列dsp的累加器a和b均為40位,因此,可以用一個(gè)40位累加器a作為移位寄存器,若crc碼不夠40位(設(shè)為k位),則僅用到a的最高k位,無用位用0填充。在編碼中涉及到碼的移位和異或操作,這可以通過c5000的safa(算術(shù)移位)和xor(異或)兩條指令來實(shí)現(xiàn)。c5000還提供了特殊指令bitt和xc,前者利用寄存器t,取出一個(gè)16位數(shù)據(jù)中的第(15-t)位,并送入tc(tc是特殊寄存器中的一位);后者是條件執(zhí)行語句,它先判斷所列條件是否滿足,再?zèng)Q定是否執(zhí)行其后的2條單周期指令或1條雙周期指令。
步驟如下:
(1)先將crc移位寄存器(即余數(shù)寄存器)a的每一位有效位均初始化為全0或全1(與協(xié)議有關(guān)),而無用位清0;
(2)將crc移位寄存器中的值左移一位,判斷移出的第一位與輸入序列的最高位異或之后是否為1;
(3)若是1,則將a與生成多項(xiàng)式進(jìn)行異或再跳到步驟2處理下一位,否則,直接跳到步驟2繼續(xù)處理下一位。在手寫多項(xiàng)式除法的過程中我們可以發(fā)現(xiàn),生成多項(xiàng)式即除式一共為k+1位,而余數(shù)寄存器a里僅有k位有效位,這可視為余數(shù)寄存器的k+1位永遠(yuǎn)為0,因此在實(shí)際異或運(yùn)算時(shí),生成多項(xiàng)式的最高位即k+1位不必參與運(yùn)算。流程圖如圖1所示。
重復(fù)(2)、(3)兩步,直到輸入信息位全部處理完為止,則a的最高k位為進(jìn)行多項(xiàng)式除后所得的余數(shù),若余數(shù)寄存器先初始化為全0,則此時(shí)a的最高k位就是crc校驗(yàn)碼,若余數(shù)寄存器先初始化為全1,則須將a取反后最高k位才是crc碼。
3 程序設(shè)計(jì)思路及設(shè)計(jì)實(shí)例
為了實(shí)現(xiàn)上述設(shè)計(jì)思想,可在程序中用指針ar2指向輸入信息(一個(gè)字表示16比特),用ar3指向輸入信息字的某一位,用ar4表示夠一個(gè)字的個(gè)數(shù)(單位為字),ar5表示不夠一個(gè)字的比特?cái)?shù),即,若參加計(jì)算的信息比特?cái)?shù)為161,則ar4=10,ar5=1。
為了依次取出一個(gè)字中的bit15、bit14、...bit0等16位信息位,在程序中用到了一個(gè)全局變量bitpos,共占16個(gè)字,并將這16個(gè)地址的內(nèi)容依次賦值為0,1,2,......15,而在程序中這些值不能被改變。為了實(shí)現(xiàn)循環(huán)長度為16的循環(huán)尋址,bitpos的地址必須為32字的整數(shù)倍,在匯編語言中用下面的語句實(shí)現(xiàn):
;若b=1,則將余數(shù)寄存器與生成多項(xiàng)式相異或(即模2減)
crc碼的校驗(yàn)過程與crc計(jì)算相似,只是參與crc計(jì)算的位須包括信息位及crc碼,若最后余數(shù)寄存器的值為全0(當(dāng)余數(shù)寄存器初始化全0時(shí))或某一特定值(當(dāng)余數(shù)寄存器初始化全1時(shí),與crc碼的生成多項(xiàng)式有關(guān)),則表示接收正確,否則表示發(fā)生錯(cuò)誤。
4 結(jié)束語
通過反復(fù)測試,證明了上述40位以內(nèi)的crc碼計(jì)算及校驗(yàn)的設(shè)計(jì)思想正確,能正確實(shí)現(xiàn)crc-3、crc-12、crc-16、crc-24、crc-32等任意40位以內(nèi)的crc計(jì)算及校驗(yàn)。所附程序具有應(yīng)用簡單、指令精簡、運(yùn)算速度快等優(yōu)點(diǎn)。該設(shè)計(jì)思路也可以很方便地在其它dsp或單片機(jī)及pc機(jī)中實(shí)現(xiàn)。
評論