朱衛(wèi)華 張 奇
朱衛(wèi)華:西門子信號(hào)有限公司 工程師 710016 西安
張 奇:西門子信號(hào)有限公司 工程師 710016 西安
地-車信息傳輸系統(tǒng)是列車運(yùn)行控制系統(tǒng)的核心構(gòu)成部分之一。車載列控設(shè)備需要獲取從列車控制中心發(fā)送的臨時(shí)限速命令、前方線路的允許速度、線路坡度、區(qū)段長(zhǎng)度等信息,從而對(duì)高速行駛列車進(jìn)行自動(dòng)控制。
應(yīng)答器(Balise)作為地-車信息傳輸通道中的地面信息傳輸載體,廣泛應(yīng)用在我國(guó)高鐵領(lǐng)域。主要用途是向列控車載設(shè)備提供可靠的地面固定信息和可變信息。應(yīng)答器分為固定(無(wú)源)應(yīng)答器和可變(有源)應(yīng)答器。當(dāng)應(yīng)答器被車載天線激活后,將持續(xù)的發(fā)送存儲(chǔ)在其內(nèi)部的報(bào)文,從而將地面信息傳遞給車載設(shè)備。
CRC即循環(huán)冗余校驗(yàn)碼(Cyclic Redundancy Check),是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯(cuò)校驗(yàn)碼,為了保證地面到車載設(shè)備傳輸信息的正確,應(yīng)答器報(bào)文系統(tǒng)采用75位的CRC校驗(yàn)。當(dāng)車載設(shè)備接收到報(bào)文數(shù)據(jù)后,需要對(duì)報(bào)文CRC校驗(yàn)和解碼,從而獲得正確的報(bào)文。75位CRC校驗(yàn)是整個(gè)報(bào)文接收過(guò)程中最復(fù)雜和關(guān)鍵的環(huán)節(jié),為此介紹CRC校驗(yàn)的編碼策略、軟件實(shí)現(xiàn)和硬件實(shí)現(xiàn),以及各自特點(diǎn),為開(kāi)發(fā)報(bào)文CRC校驗(yàn)?zāi)K提供參考。
FFFS編碼策略(Form Fit Function Specification Coding Strategy)是由EUROSIG聯(lián)盟為推進(jìn)歐洲鐵路信號(hào)標(biāo)準(zhǔn)化而制定的標(biāo)準(zhǔn),它定義了應(yīng)答器報(bào)文的格式。報(bào)文格式對(duì)隨機(jī)位錯(cuò)誤、突發(fā)錯(cuò)誤、位滑動(dòng)和位插入,以及它們的所有組合設(shè)計(jì)有完全的安全性證明。應(yīng)答器長(zhǎng)報(bào)文原始數(shù)據(jù)為830位,經(jīng)過(guò)加擾和編碼后,產(chǎn)生了1023位的數(shù)據(jù)。在該數(shù)據(jù)循環(huán)發(fā)送的過(guò)程中從任意字節(jié)開(kāi)始取1023位可以被編碼的多項(xiàng)式整除。利用報(bào)文的這個(gè)特點(diǎn),可以采用多項(xiàng)式除法(模2除法)對(duì)報(bào)文進(jìn)行CRC校驗(yàn)。取1023位長(zhǎng)度的報(bào)文數(shù)據(jù)M(x),表示為:校驗(yàn)公式G(x)的最高次數(shù)為75,表示為:
以G(x)為模對(duì)M(x)作模運(yùn)算,表示為:
其中Q(x)和R(x)分別是商和余項(xiàng)。
當(dāng)CRC余數(shù)R(x)為零時(shí),說(shuō)明報(bào)文數(shù)據(jù)CRC校驗(yàn)正確,非零表示存在位錯(cuò)誤,重新選1023位數(shù)據(jù)進(jìn)行校驗(yàn)。
隨著微處理器的不斷發(fā)展,及高速低功耗處理器的不斷推出,使用軟件進(jìn)行CRC校驗(yàn)成為可能。軟件算法主要有程序法、查表法和眾多優(yōu)化設(shè)計(jì)。限于篇幅這里只列出程序法和查表法2種方法。
2.2.1 程序法(比特型算法)
1.將1023位數(shù)據(jù)流高75位(先收到的為高)放入一個(gè)長(zhǎng)度為75位的寄存器。
2.如果寄存器的首位為1,則與生成多項(xiàng)式G(x)做異或運(yùn)算;否則僅將寄存器左移1位(寄存器的最低位從下一個(gè)字節(jié)獲得)。
3.重復(fù)第2步,直到數(shù)據(jù)流(1023位)全部移入寄存器。
4.寄存器中的值為全0則報(bào)文CRC校驗(yàn)正確,否則報(bào)文存在錯(cuò)位,繼續(xù)下一個(gè)1023位的檢驗(yàn)。
該算法通過(guò)左移位和異或運(yùn)算來(lái)完成模2除法運(yùn)算。原理簡(jiǎn)單易懂,易于維護(hù)和更新。對(duì)1023位數(shù)據(jù)完成一次CRC校驗(yàn),大概需要1023-75=948次移位運(yùn)算,和948×75=71100次異或運(yùn)算(最不利情況下)。
2.2.2 查表法(字節(jié)型算法)
1.75位的CRC寄存器組初始化為全“0”。注意:CRC寄存器組初始化全為1時(shí),最后CRC應(yīng)取反。
2.CRC寄存器組向左移8位,并保存到CRC寄存器組。
3.原CRC寄存器組高8位(右移8位)與數(shù)據(jù)字節(jié)進(jìn)行異或運(yùn)算,得出一個(gè)指向值表的索引。
4.索引所指的表值與CRC寄存器組做異或運(yùn)算。
5.?dāng)?shù)據(jù)指針加1,如果數(shù)據(jù)沒(méi)有全部處理完,則重復(fù)步驟2。
6.1023位全部處理完畢后,寄存器中的值為全0則報(bào)文CRC校驗(yàn)正確,否則報(bào)文存在錯(cuò)位,繼續(xù)下一個(gè)1023位的檢驗(yàn)。
字節(jié)型算法一次移出待測(cè)數(shù)據(jù)的8位,即一次進(jìn)行一個(gè)字節(jié)的計(jì)算,則余數(shù)表格有28=256個(gè)表值,每個(gè)表值為75位。對(duì)1023位數(shù)據(jù)完成一次CRC校驗(yàn)大概需要1024/8=128次移位運(yùn)算、128次查表運(yùn)算和128×8+128×75=10624次異或運(yùn)算。
在硬件中實(shí)現(xiàn)該過(guò)程需要使用移位寄存器(CRC寄存器)。該移位寄存器長(zhǎng)度為75位。圖1為實(shí)現(xiàn)該算法的線性反饋移位寄存器(LFSR)的框圖。
報(bào)文CRC校驗(yàn)過(guò)程如下。
1.初始化75位CRC寄存器。
2.每次獲取報(bào)文位后,將輸入數(shù)據(jù)和上一次異或運(yùn)算的結(jié)果組成新的數(shù)據(jù),進(jìn)行循環(huán)異或運(yùn)算。
3.?dāng)?shù)據(jù)未滿1023則返回步驟2,收到1023位數(shù)據(jù)后,判斷CRC寄存器內(nèi)的值。如果余數(shù)為0,則表示收到的1023位報(bào)文可以被75位多項(xiàng)式整除,可以進(jìn)一步判斷1023位是否為正式報(bào)文;如果余數(shù)非0,則表示不能整除,該1023位存在錯(cuò)位。
以上即為單線程的CRC校驗(yàn)算法原理。為了能夠及時(shí)收到正確的報(bào)文,達(dá)到接收1位報(bào)文數(shù)據(jù)就可以判斷整個(gè)1023數(shù)據(jù)流是否滿足CRC校驗(yàn),可以采用如下2種方式進(jìn)行實(shí)現(xiàn)。
方式1:并行設(shè)計(jì)。
在設(shè)計(jì)CRC校驗(yàn)時(shí),將報(bào)文數(shù)據(jù)同時(shí)輸入到1023路CRC校驗(yàn)電路中,每路信號(hào)開(kāi)始校驗(yàn)的時(shí)間依次后移1位。該方法理論上對(duì)于數(shù)據(jù)可以做到1位數(shù)據(jù)就可以計(jì)算出整個(gè)數(shù)據(jù)段的CRC校驗(yàn)碼,但是,由于每位CRC寄存器的值都是由有效數(shù)據(jù)位和CRC寄存器的前一個(gè)狀態(tài)組成的異或電路運(yùn)算所得,并且需要1023個(gè)相差1位的硬件電路,硬件單元使用較多。筆者以ACTEL公司的FPGA工作頻率40 MHz為例,制作的單一線程CRC校驗(yàn)需要消耗大概500個(gè)硬件單元,1023路需要消耗大概511500個(gè)硬件單元。
方式2:并行優(yōu)化設(shè)計(jì)。
應(yīng)答器報(bào)文以565 kb/s速率按位進(jìn)行串行傳輸,因此一個(gè)數(shù)據(jù)周期為1.77 μs。而現(xiàn)有的FPGA等硬件設(shè)備的工作頻率均遠(yuǎn)遠(yuǎn)高于報(bào)文傳輸速率。以頻率為40 MHz的FPGA為例,其工作周期為0.025 μs,在等待接收1位報(bào)文數(shù)據(jù)的過(guò)程中,F(xiàn)PGA可以進(jìn)行大概70次運(yùn)算,由于1023次移位運(yùn)算即可判斷CRC校驗(yàn)的正確性,因此單線程計(jì)算一次CRC的過(guò)程內(nèi)可以收到15位報(bào)文數(shù)據(jù)。為了實(shí)現(xiàn)1位數(shù)據(jù)即可判斷CRC正確性,需要擴(kuò)展到15線程,如圖2所示。
圖2 15線程循環(huán)校驗(yàn)
接收到1位數(shù)據(jù)與前1022位構(gòu)成M(x)1,將該1023位數(shù)據(jù)輸入一路CRC校驗(yàn)電路;再接收到1位數(shù)據(jù)與前1022位構(gòu)成M(x)2,同樣輸入一路CRC校驗(yàn)電路,直到M(x)15,一共15個(gè)CRC校驗(yàn)線程。這樣當(dāng)?shù)贛(x)1數(shù)據(jù)CRC校驗(yàn)完畢后,可以繼續(xù)接收數(shù)據(jù)重新構(gòu)成新的M(x)1,周而復(fù)始,每收到一位數(shù)據(jù)都可以計(jì)算出CRC校驗(yàn)的結(jié)果。
一路CRC校驗(yàn)需要消耗500個(gè)硬件單元,15路則需要消耗7500個(gè)硬件單元。
以軟件校驗(yàn)使用40 MHz主頻的MCU為例,且2個(gè)時(shí)鐘周期為一個(gè)指令周期,則一個(gè)指令周期大概為0.05 μs。在接收滿1023位報(bào)文后,比特型算法大概需要(948+71100) ×0.05=3.602 ms可以計(jì)算出CRC余數(shù);字節(jié)型算法大概需要(128+128×256/2+10624) ×0.05=1.356 ms可以計(jì)算出CRC余數(shù)。實(shí)際設(shè)計(jì)中由于軟件為串行處理機(jī)制,因此用時(shí)會(huì)大于估算結(jié)果。
硬件校驗(yàn)以使用40 MHz主頻的FPGA為例,則并行設(shè)計(jì)和優(yōu)化的并行設(shè)計(jì)每隔1.77 μs即可以校驗(yàn)一個(gè)1023位數(shù)據(jù)。
由此可見(jiàn)軟件校驗(yàn)的運(yùn)算時(shí)間保持在毫秒的數(shù)量級(jí),而硬件則保持在微秒的數(shù)量級(jí)。
軟件校驗(yàn)可以集成在MCU的程序內(nèi),查表法需要占用75×255=19125位的程序存儲(chǔ)空間來(lái)放置余數(shù)表。軟件設(shè)計(jì)的靈活性高,可移植性強(qiáng),且修改方便。
硬件校驗(yàn)需要相應(yīng)的硬件電路作為支持,設(shè)計(jì)復(fù)雜。1023線程的并行設(shè)計(jì)方案占用大量硬件資源,在不要求1位即可校驗(yàn)的情況下,可以通過(guò)減少線程的方式來(lái)降低硬件資源的消耗。優(yōu)化的并行設(shè)計(jì)方案需要15路并行校驗(yàn)代碼,消耗大概7500個(gè)硬件單元。
軟件一次CRC校驗(yàn)時(shí)間遠(yuǎn)遠(yuǎn)大于1.77 μs的報(bào)文接收時(shí)間,因此不能達(dá)到同步校驗(yàn)。校驗(yàn)延時(shí)將隨報(bào)文接收誤碼的增多而逐漸累積,例如報(bào)文內(nèi)存在1000位誤碼,則校驗(yàn)時(shí)間將大于1 s。因此軟件校驗(yàn)實(shí)時(shí)性差。硬件校驗(yàn)1.77 μs內(nèi)即可判斷數(shù)據(jù)的CRC是否正確,并且對(duì)報(bào)文接收誤碼沒(méi)有時(shí)間積累,能夠達(dá)到同步校驗(yàn),因此實(shí)時(shí)性最好。
軟件CRC校驗(yàn)占用資源較少,設(shè)計(jì)簡(jiǎn)單、靈活,代碼可移植性強(qiáng),修改方便。但由于校驗(yàn)用時(shí)較長(zhǎng),且存在延時(shí)積累,導(dǎo)致實(shí)時(shí)性差,因此可以應(yīng)用在對(duì)實(shí)時(shí)性要求不高的場(chǎng)合,比如使用便攜式手持設(shè)備對(duì)報(bào)文讀取測(cè)試等場(chǎng)合。
硬件CRC校驗(yàn)需要相應(yīng)的硬件電路,設(shè)備成本較高,設(shè)計(jì)復(fù)雜。通過(guò)減少并行設(shè)計(jì)的線程數(shù)可以在校驗(yàn)時(shí)間和資源占用之間進(jìn)行適當(dāng)平衡;優(yōu)化并行設(shè)計(jì)方案,需要硬件時(shí)鐘周期和報(bào)文傳輸時(shí)鐘周期的配合,對(duì)硬件電路的設(shè)計(jì)精度和可靠性要求較高,但占用資源較少,可以做到同步校驗(yàn),實(shí)時(shí)性好,可以應(yīng)用在車載報(bào)文傳輸通道等設(shè)備上。
針對(duì)不同的使用場(chǎng)合,應(yīng)該合理的選擇報(bào)文CRC校驗(yàn)的方法,以達(dá)到速度、資源和成本的平衡,使設(shè)計(jì)達(dá)到最優(yōu)化。
[1]肖甜,趙會(huì)兵.歐洲應(yīng)答器編碼策略的安全性研究[J].鐵道學(xué)報(bào),2008.
[2]朱榮華.一種CRC并行計(jì)算原理及實(shí)現(xiàn)方法[J].電子學(xué)報(bào),1999.
[3]李劍峰.新的高性能CRC查表算法[J].計(jì)算機(jī)應(yīng)用,2011(6).
[4]張樹(shù)剛,張遂南,黃士坦.CRC校驗(yàn)碼并行計(jì)算的FPGA實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007.
[5]徐寧,楊志杰.歐洲應(yīng)答器報(bào)文譯碼的研究以及FPGA實(shí)現(xiàn)[J].鐵路通信信號(hào),2008.