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