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