摘 要: 在分析密勒調(diào)制副載波技術(shù)的基礎(chǔ)上,根據(jù)其編碼特征,設(shè)計(jì)了一種簡(jiǎn)單的解碼器。首先對(duì)來(lái)自標(biāo)簽的突發(fā)數(shù)據(jù)幀進(jìn)行異或運(yùn)算,然后根據(jù)異或運(yùn)算結(jié)果解碼,最后根據(jù)解出碼判斷數(shù)據(jù)幀的開(kāi)始與結(jié)束。
關(guān)鍵詞: Verilog HDL;密勒碼;異或運(yùn)算;仿真
超高頻射頻識(shí)別UHF RFID技術(shù)具有可讀距離長(zhǎng)、閱讀速度快、防碰撞能力強(qiáng)及作用范圍廣的特點(diǎn),可廣泛應(yīng)用于物流管理、交通管理、物品跟蹤等領(lǐng)域。在實(shí)際應(yīng)用中,為實(shí)現(xiàn)電子標(biāo)簽和讀寫器之間的數(shù)據(jù)通信,需要對(duì)數(shù)據(jù)進(jìn)行編碼。密勒(Miller)編碼含有豐富的時(shí)鐘信息且具有較好的抗干擾能力,因此是RFID中進(jìn)行數(shù)據(jù)通信的優(yōu)選碼型。為改善讀寫器在擁堵環(huán)境或容易發(fā)生干擾環(huán)境中的工作能力,ISO/IEC 18000-6C協(xié)議規(guī)定,電子標(biāo)簽返回讀寫器的數(shù)據(jù)除可以選用FM0編碼外,還可以選用密勒調(diào)制副載波序列(M=2、4、8),以改變編碼速率[3]。在射頻通信領(lǐng)域,有少量文獻(xiàn)對(duì)密勒解碼進(jìn)行研究,但總體上缺乏對(duì)密勒解碼技術(shù)尤其是對(duì)密勒調(diào)制副載波序列解碼技術(shù)的詳細(xì)研究。本文分析ISO/IEC 18000-6C協(xié)議中采用的密勒調(diào)制副載波技術(shù),設(shè)計(jì)并實(shí)現(xiàn)一種符合該協(xié)議的密勒解碼器。
1 密勒碼[3]
1.1 Miller基本功能和狀態(tài)圖
圖1顯示了生成Miller編碼的基本功能和狀態(tài)圖。基帶Miller按順序在2個(gè)數(shù)據(jù)0之間變換相位。基帶Miller還在數(shù)據(jù)1符號(hào)的中間放置一個(gè)相轉(zhuǎn)化。圖1(b)所示的狀態(tài)圖描繪了基帶Miller基本功能的邏輯數(shù)據(jù)序列。S1~S4狀態(tài)標(biāo)記表明4種可能的Miller編碼符號(hào),代表各Miller碼基本功能的2個(gè)相位。這些狀態(tài)標(biāo)簽還表示鍵入狀態(tài)后即傳輸?shù)腗iller波形。狀態(tài)轉(zhuǎn)換標(biāo)簽表示被編碼的數(shù)據(jù)序列的邏輯值。例如,從狀態(tài)S2轉(zhuǎn)換到狀態(tài)S3是不允許的,因?yàn)橛纱水a(chǎn)生的傳輸在數(shù)據(jù)0和數(shù)據(jù)1之間的符號(hào)邊界上沒(méi)有相轉(zhuǎn)化。圖1(b)所示的狀態(tài)圖不暗示任何特殊執(zhí)行。
1.2 副載波序列和結(jié)尾特征
Miller調(diào)制副載波序列,每位應(yīng)包含2、4或8個(gè)副載波周期,具體情況視啟動(dòng)該盤存周期的Query命令規(guī)定的M值而定。在調(diào)制器輸出時(shí)測(cè)得的0或1符號(hào)的工作循環(huán)最低為45%,最高為55%,標(biāo)稱值為50%。Miller發(fā)信應(yīng)始終在每次傳輸結(jié)束時(shí)以“dummy”數(shù)據(jù)-1結(jié)尾[3]。
2 解碼器的設(shè)計(jì)與實(shí)現(xiàn)
傳統(tǒng)的密勒解碼是根據(jù)一個(gè)同步時(shí)鐘和一個(gè)計(jì)數(shù)器計(jì)值來(lái)判斷輸出,通過(guò)對(duì)輸入信號(hào)進(jìn)行異或運(yùn)算,結(jié)合編碼特征,判斷輸出,實(shí)現(xiàn)比較復(fù)雜。
2.1 異或運(yùn)算
首先,通過(guò)時(shí)鐘的上升沿來(lái)激勵(lì),一旦數(shù)據(jù)開(kāi)始,就將輸入的數(shù)據(jù)與時(shí)鐘異或。如圖2,M=2(2個(gè)副載波周期),輸入data_in(010111000),與clk異或,結(jié)果就是re_mark。re_mark的波形與圖1 Miller基本功能的波形相似,從而可以解出的碼為‘010111000’,如圖2。
2.2 密勒解碼
整個(gè)解碼過(guò)程用一個(gè)有限狀態(tài)機(jī)控制,圖3為解碼狀態(tài)機(jī)的程序說(shuō)明圖。M_value的值表示副載波周期的個(gè)數(shù),計(jì)數(shù)器counter用來(lái)記錄clk的周期數(shù),pre_one記錄當(dāng)讀到re_mark=1時(shí),之前有幾個(gè)re_mark=1,pre_zero記錄當(dāng)讀到re_mark=0時(shí),之前有幾個(gè)re_mark=0。其中State<={M_value,counter,pre_one,pre_zero}。
2.3 幀頭檢測(cè)
根據(jù)Miller副載波前同步碼的特性,解碼出的數(shù)據(jù)首先要進(jìn)行前同步碼的檢測(cè)。程序中定義2個(gè)寄存器TRext、register。前同步碼的幀頭0的個(gè)數(shù)由TRext所決定。幀頭檢測(cè)模塊如圖4。當(dāng)幀頭檢測(cè)到時(shí),輸出data_begin_valid=1,否則data_begin_valid=0。
2.4 數(shù)據(jù)零的相位判斷
根據(jù)編碼特征:符號(hào)‘0’期間不發(fā)生相位翻轉(zhuǎn);符號(hào)‘1’中間處發(fā)生相位翻轉(zhuǎn);只有在相鄰符號(hào)都為‘0’時(shí),符號(hào)分界處才發(fā)生相位翻轉(zhuǎn),解出的碼,要進(jìn)行0相位的判斷。
2.4.1 數(shù)據(jù)存儲(chǔ)
模塊的程序流程圖如圖5。其中newdata0_zero_flag、newdata1_zero_flag、zero_flag、one_flag來(lái)自解碼模塊。newdata0_zero_flag是數(shù)據(jù)0由連續(xù)低電平解碼的標(biāo)志位;newdata1_zero_flag是數(shù)據(jù)0由連續(xù)高電平解碼的標(biāo)志位;zero_flag是數(shù)據(jù)0的標(biāo)志位;one_flag是數(shù)據(jù)1的標(biāo)志位。
2.4.2 相位判斷
數(shù)據(jù)儲(chǔ)存模塊有2個(gè)功能,一個(gè)功能是儲(chǔ)存用于幀頭檢測(cè)的數(shù)據(jù),另一個(gè)功能用于零相位的判斷。其中寄存器data_begin_valid、counter_zero0、counter_zero1、zero_flag、data_valid來(lái)自數(shù)據(jù)存儲(chǔ)模塊。counter_zero0表示連續(xù)幾個(gè)時(shí)鐘周期(具體個(gè)數(shù),由M_value決定)的低電平而輸出的解碼數(shù)據(jù)0。counter_zero1表示連續(xù)幾個(gè)時(shí)鐘周期(具體個(gè)數(shù),由M_value決定)的高電平而輸出的解碼數(shù)據(jù)0。模塊程序流程圖如圖6。
2.4.3 幀尾檢測(cè)
解碼過(guò)程中,當(dāng)輸出數(shù)據(jù)為100時(shí),如果符號(hào)0之間發(fā)生相位翻轉(zhuǎn)了,則error=0,反之,error=1。之后再判斷解碼數(shù)據(jù)是否為連續(xù)的低電平。如果是,則判斷1為結(jié)束位,反之則判斷相位翻轉(zhuǎn)錯(cuò)誤。輸出data_over脈沖表示解碼結(jié)束,同時(shí)error=1,然后停止解碼,等待下一幀數(shù)據(jù)的到來(lái)。
2.5 解碼器的實(shí)現(xiàn)
數(shù)據(jù)由data_in輸入,由data_begin控制數(shù)據(jù)的開(kāi)始;由data_out輸出,同時(shí)data_out_valid必須等于1,error必須等于0,否則0的相位有錯(cuò)。整個(gè)模塊如圖7。
3 仿真結(jié)果
本文設(shè)計(jì)的密勒調(diào)制副載波序列解碼器采用數(shù)字邏輯設(shè)計(jì),用Verilog HDL對(duì)該方法進(jìn)行編程實(shí)現(xiàn)。為了驗(yàn)證設(shè)計(jì)的正確性,本文使用Altera的Quartus II(V6.1)對(duì)設(shè)計(jì)進(jìn)行電路綜合。 由于前同步碼格式,副載波數(shù)取值的難易關(guān)系到仿真圖的坐標(biāo)長(zhǎng)短,本文為便于解釋,M取2,即M_value=0,TRext=0。
3.1 幀頭檢測(cè)測(cè)試
當(dāng)檢測(cè)到幀頭時(shí),輸出data_begin_valid=1。如果輸入data_in只是一個(gè)前同步碼,則data_begin_valid輸出,如圖8。
3.2 數(shù)據(jù)輸出仿真結(jié)果
數(shù)據(jù)‘10110001’從同步碼后輸入,即從215 ns后輸入。解碼后,從端口data_out輸出,如圖9。同時(shí)data_out_valid必須為高電平,error必須為低電平。每來(lái)一個(gè)時(shí)鐘上升沿,從端口讀取解碼后的數(shù)據(jù)。
3.3 相位出錯(cuò)仿真
數(shù)據(jù)從395 ns之后就輸入一串如同時(shí)鐘一樣的電平。根據(jù)編碼特性,符號(hào)0之間必須相位翻轉(zhuǎn),否者就違反編碼規(guī)則。數(shù)據(jù)符號(hào)0之間沒(méi)有相位翻轉(zhuǎn),結(jié)果仿真就輸出error置高電平了,如圖10。
3.4 幀尾檢測(cè)仿真
幀尾檢測(cè),用到一個(gè)5位的寄存器register_data。其功能是存儲(chǔ)解碼輸出數(shù)據(jù),一旦出現(xiàn)error=1,便判斷其存儲(chǔ)值是否為‘10000’。結(jié)果為1就是結(jié)束標(biāo)志。從395 ns后,輸入1,之后的數(shù)據(jù)如同時(shí)鐘數(shù)據(jù)。符號(hào)0相位未翻轉(zhuǎn),之后再存儲(chǔ)幾個(gè)解碼數(shù)據(jù),判斷是相位翻轉(zhuǎn)錯(cuò)誤還是幀結(jié)尾標(biāo)志。如圖11,出現(xiàn)了幀結(jié)尾標(biāo)志。
本文分析了應(yīng)用于超高頻RFID數(shù)據(jù)通信的密勒調(diào)制副載波技術(shù)的特點(diǎn),并基于該特點(diǎn)設(shè)計(jì)了一種密勒調(diào)制副載波序列解碼器。該設(shè)計(jì)采用硬件描述語(yǔ)言編程實(shí)現(xiàn),并進(jìn)行FPGA硬件驗(yàn)證。硬件測(cè)試結(jié)果驗(yàn)證了該方法能夠正確地對(duì)副載波密勒編碼數(shù)據(jù)進(jìn)行解碼。
參考文獻(xiàn)
[1] 羅杰.Verilog HDL與數(shù)字ASIC設(shè)計(jì)基礎(chǔ)[M].武漢:華中科技大學(xué)出版社,2008,3.
[2] 王鈿,卓興旺.基于Verilog HDL的數(shù)字系統(tǒng)應(yīng)用設(shè)計(jì)[M]. 北京:國(guó)防工業(yè)出版社,2007,8.
[3] ISO/IEC 18000-6C:Information technology-Radio frequency identification for item management-Part 6:Parameters for air interface communications at 860 MHz to 960 MHz,final draft[S].
[4] 樊昌信,張甫祤,徐炳祥,等.通信原理(第五版)[M].北京:國(guó)防工業(yè)出版社,2001:280-318.
[5] Takao Rokutan,Hachioqi.Modified Miller Data Demodulator[P]. US:4,612,508,1986.