高 曄
(山西晉中高速公路管理有限公司,山西 晉中 030800)
ETC(electronic toll collection),即不停車(chē)收費(fèi)。ETC系統(tǒng)是采用專(zhuān)用短程無(wú)線(xiàn)通信(dedicated short range communication,DSRC)技術(shù)來(lái)完成整個(gè)收費(fèi)過(guò)程,該技術(shù)是一種短距離無(wú)線(xiàn)傳輸技術(shù),支持點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多點(diǎn)的通信,保障車(chē)載單元OBU(on-board unit)與路側(cè)單元RSU(rate-sensor unit)之間的通信[1]。
現(xiàn)代化通信技術(shù)不斷發(fā)展變化,數(shù)字基帶通信由于其功耗小、成本低廉等方面的優(yōu)勢(shì),受到了廣泛應(yīng)用。當(dāng)信息的原始信號(hào)形式不符合信道的頻率特性時(shí),必須對(duì)原始信號(hào)進(jìn)行變換,以適應(yīng)傳輸信道的要求。信道編碼技術(shù)的研究實(shí)現(xiàn),能夠有效地解決這一問(wèn)題,提高數(shù)據(jù)抗干擾能力,從而將數(shù)據(jù)進(jìn)行準(zhǔn)確的傳輸,保證了人與人之間的正常通信,促進(jìn)社會(huì)經(jīng)濟(jì)的發(fā)展。目前有多種形式的編碼方式,例如非歸零碼、曼徹斯特碼、差分曼徹斯特碼、FM0碼等,每種編碼方式都有自己的特點(diǎn),而FM0碼以其便于位同步提取、頻譜寬度較窄、實(shí)現(xiàn)電路簡(jiǎn)單而在數(shù)字通信中得到廣泛的應(yīng)用。
2007年5 月實(shí)施的ETC中國(guó)國(guó)家標(biāo)準(zhǔn)[2]GB/T20851—2007以及2007年10月國(guó)家交通部頒布的《收費(fèi)公路聯(lián)網(wǎng)收費(fèi)技術(shù)要求》,規(guī)定我國(guó)ETC系統(tǒng)的無(wú)線(xiàn)數(shù)據(jù)通信采用FM0編碼[3]。
本文設(shè)計(jì)了ETC電子標(biāo)簽的FM0編碼。
FM0(bi-phase space coding)編碼的全稱(chēng)為雙相間隔碼編碼,工作原理是在一個(gè)比特的持續(xù)時(shí)間窗口內(nèi)采用電平變化來(lái)表示邏輯。如果電平從持續(xù)時(shí)間窗口的起始處翻轉(zhuǎn),則表示邏輯“1”。如果電平除了在持續(xù)時(shí)間窗口的起始處翻轉(zhuǎn),還在持續(xù)時(shí)間窗口中間翻轉(zhuǎn)則表示邏輯“0”[4]。ETC系統(tǒng)中規(guī)定OBU與RSU的上行鏈路數(shù)據(jù)速率為512 kbit/s,RSU與OBU的下行鏈路數(shù)據(jù)速率為256 kbit/s。
ETC電子標(biāo)簽的FM0編碼通過(guò)使用VERILOG語(yǔ)言在QuartusⅡ編譯環(huán)境里實(shí)現(xiàn),硬件選擇的是CYCLONE系列的現(xiàn)場(chǎng)可編程邏輯門(mén)陣列(field programmable gate array ,F(xiàn)PGA)[5],為了實(shí)現(xiàn)速率為512 kbit/s上行鏈路數(shù)據(jù),本設(shè)計(jì)選擇的晶振頻率為1.024 MHz,定義了一個(gè)位寬為1比特的變量time_cnt1,該變量在每個(gè)時(shí)鐘的上升沿加1,相當(dāng)于該變量一個(gè)時(shí)鐘周期為0,一個(gè)時(shí)鐘周期為1,在0和1之間來(lái)回變換,這樣可以認(rèn)為該變量為1的時(shí)刻就是1.024 MHz晶振頻率的一半即512 kHz的速率,在該時(shí)刻且在時(shí)鐘信號(hào)的上升沿對(duì)原始數(shù)字信號(hào)進(jìn)行翻轉(zhuǎn),就實(shí)現(xiàn)了對(duì)邏輯“1”的FM0編碼。如果原始數(shù)字信號(hào)為邏輯“0”,則除了上述time_cnt1為1的時(shí)刻的操作外,還需要在該時(shí)刻跟隨的下個(gè)time_cnt1為0的時(shí)刻再次對(duì)信號(hào)進(jìn)行翻轉(zhuǎn),從而實(shí)現(xiàn)了對(duì)邏輯“0”的FM0編碼[6]。
由于原始數(shù)據(jù)是字節(jié)的形式,需要對(duì)其進(jìn)行變形,變?yōu)楸忍匦问剑簿褪遣⑿修D(zhuǎn)串行,為實(shí)現(xiàn)這種變化,定義了一個(gè)位寬為1比特的變量bit_temp1和位寬為3比特的變量bit_cnt,同時(shí)也定義了位寬為1比特的變量start,start_temp1,start_temp2和start_temp3,當(dāng)start的狀態(tài)為“0”時(shí),代表沒(méi)有新的原始數(shù)據(jù)到來(lái),不需要進(jìn)行FM0編碼。當(dāng)start的狀態(tài)從“0”跳變?yōu)椤?”時(shí)代表字節(jié)形式的原始信號(hào)同步到來(lái),需要進(jìn)行FM0編碼。start_temp1是start延遲一個(gè)周期之后的狀態(tài),start_temp2是start_temp1延遲一個(gè)周期之后的狀態(tài),start_temp3是start_temp2延遲一個(gè)周期之后的狀態(tài)。bit_cnt會(huì)在time_cnt1為1的時(shí)刻且在時(shí)鐘信號(hào)的上升沿加1,這樣相當(dāng)于實(shí)現(xiàn)每?jī)蓚€(gè)時(shí)鐘周期變化一次,從0逐步累積到7,bit_cnt的每次變化,就從原始的字節(jié)數(shù)據(jù)code中取出對(duì)應(yīng)的比特位賦給bit_temp1,這樣bit_temp1就成為了串行的原始信號(hào),對(duì)bit_temp1進(jìn)行FM0編碼后就完成了整個(gè)編碼過(guò)程。
定義一組位寬為1比特的變量code_end1,code_end2和code_end3,這3個(gè)變量用來(lái)指示對(duì)某個(gè)字節(jié)形式的原始信號(hào)進(jìn)行完FM0編碼后,停止繼續(xù)編碼。code_end2是code_end1延遲一個(gè)周期之后的狀態(tài),code_end3是code_end2延遲一個(gè)周期之后的狀態(tài),相當(dāng)于code_end3是code_end1延遲兩個(gè)周期之后的狀態(tài),對(duì)code_end1延遲兩個(gè)周期是為了對(duì)原始信號(hào)的最后一個(gè)比特進(jìn)行編碼,2個(gè)周期后最后一個(gè)比特編碼完成,利用code_end3的狀態(tài)來(lái)停止FM0編碼。具體程序[7]如下:
設(shè)置QuartusⅡ軟件,使其在設(shè)計(jì)文件編譯綜合后產(chǎn)生反應(yīng)布局布線(xiàn)結(jié)果的門(mén)級(jí)網(wǎng)表文件(該文件格式類(lèi)型為.VO)和標(biāo)準(zhǔn)延時(shí)文件(該文件格式類(lèi)型為.SDO),針對(duì)本文設(shè)計(jì)的FM0編碼實(shí)現(xiàn)方式,編寫(xiě)了testbench測(cè)試文件,測(cè)試文件運(yùn)行在modelsim環(huán)境中,測(cè)試文件中設(shè)定時(shí)間單位為10 ns,時(shí)間精度為1 ns,輸入時(shí)鐘周期為48.83×10×2=976.6 ns(頻率1.024 MHz),復(fù)位信號(hào)rst在測(cè)試程序開(kāi)始運(yùn)行10 000 ns后有一個(gè)負(fù)跳變,低電平持續(xù)時(shí)間為10 000 ns,該復(fù)位信號(hào)將設(shè)計(jì)文件中的相關(guān)變量進(jìn)行復(fù)位,使這些變量處于要求的初始狀態(tài)。字節(jié)形式的原始信號(hào)code初始化為0x00,變量start的初始狀態(tài)為“0”,在程序開(kāi)始運(yùn)行30 000 ns后start的初始狀態(tài)跳變?yōu)椤?”時(shí),同時(shí)字節(jié)形式的原始信號(hào)code同步到來(lái)新的數(shù)據(jù),變?yōu)?xEC,開(kāi)始進(jìn)行FM0編碼,具體代碼如下:
關(guān)聯(lián)QuartusⅡ編譯后生產(chǎn)的門(mén)級(jí)網(wǎng)表文件encode.vo和標(biāo)準(zhǔn)延時(shí)文件encode_v.sdo文件后進(jìn)行modelsim后仿真,運(yùn)行仿真程序后便得到如圖1所示的仿真結(jié)果。
圖1 FM0編碼的modelsim仿真結(jié)果
由圖1的仿真結(jié)果顯示,本設(shè)計(jì)很好地實(shí)現(xiàn)了FM0編碼,達(dá)到了ETC系統(tǒng)中規(guī)定的OBU與RSU之間上行鏈路512 kbit/s的數(shù)據(jù)速率。同時(shí)也可以看到將輸入時(shí)鐘周期改為48.83×5×2=488.3 ns(頻率512 kHz)或者保持原輸入時(shí)鐘周期不變,對(duì)原輸入時(shí)鐘周期利用鎖相環(huán)或VERILOG語(yǔ)言進(jìn)行2分頻,得到頻率為512 kHz的時(shí)鐘周期,就可以實(shí)現(xiàn)ETC系統(tǒng)中規(guī)定的RSU與OBU之間下行鏈路256 kbit/s的數(shù)據(jù)速率。
在FM0編碼設(shè)計(jì)中,關(guān)鍵的問(wèn)題就在于對(duì)于接收到的字節(jié)形式的原始信號(hào)進(jìn)行變換,變?yōu)楸忍匦问降拇袛?shù)據(jù),然后再進(jìn)行編碼。本文給出了采用VERILOG語(yǔ)言實(shí)現(xiàn)FM0編碼的一種具體實(shí)現(xiàn)方法,設(shè)計(jì)靈活巧妙且方便移植,能夠大大縮短開(kāi)發(fā)時(shí)間,設(shè)計(jì)選擇的是CYCLONE系列的FPGA,但是對(duì)于其他系列或廠(chǎng)家的復(fù)雜可編程邏輯器件(complex programmable logic device,CPLD)或FPGA,本設(shè)計(jì)依然有效,甚至對(duì)于內(nèi)嵌了可編程邏輯門(mén)陣列的其他類(lèi)型處理器,例如:數(shù)字信號(hào)處理器(digital signal processor,DSP)、ARM(advanced RISC machine)等 ,也仍然可以正常地完成編碼工作,對(duì)ETC系統(tǒng)中車(chē)載單元OBU與路側(cè)單元RSU實(shí)現(xiàn)FM0編碼具有現(xiàn)實(shí)的借鑒意義。