朱 軍, 王惠陽, 張 元
(安徽大學 計算智能與信號處理教育部重點實驗室,安徽 合肥 230039)
ISO/IEC15693標準規定的高頻段(13.56 MHz)的射頻識別系統,具有讀取距離遠,可以穿透金屬和多種其他的材料的特點。同時,它讀寫區域相對均勻,相對于低頻標簽其數據傳輸快,且系統具有抗沖突特性[1-3]。文中針對13.56 MHz的高頻射頻識別(RFID,Radio Frequency IDentification)系統近耦合器(VCD,Vicinity Couple Device)部分,使用二進制算法來實現標簽識別的模擬。通過現場可編程門陣列(FPGA,Field Programmed Gate Array)開發板模擬實際射頻識別系統的閱讀器檢測標簽的抗沖突算法,算法主要集中在數字處理單元,用FPGA搭建平臺,信號信息直接由VCD和近集成電路卡(VICC,Vicinity Integrated Circuit Card)的數字處理模塊傳輸。
在VCD端,控制模塊接收VCD解碼模塊解碼出的VICC發送的用戶識別(UID,User IDentification),并解析出沖突的情況;根據沖突的位置,確定發送什么樣的請求命令來清點VICC。此模塊有串行輸入 datain,clk,reset,及串行輸出的signal信號,編碼模式選擇(sel)。在VICC端,控制模塊接收VICC解碼模塊解碼出的來自VCD端的請求命令,根據命令決定該讓哪些VICC來響應這個命令。沖突的檢測在閱讀器芯片部分,而卡的芯片只是單純的對收到的命令進行響應。
圖1是VCD與VICC之間通信的示意圖,當VICC端發出的數據經編碼模塊編碼之后,通過天線發送,被VCD的解碼模塊接收,解碼后傳遞給后續模塊,并通過控制模塊處理,將發送的數據經過VCD的編碼模塊進行編碼之后通過天線發送給VICC,如此循環,直到檢測出所有的在工作場內的射頻識別卡。

圖2為VCD端模塊連接關系圖,其中包括沖突檢測模塊,沖突處理模塊,控制模塊,并行16位轉8位輸出模塊,編碼模塊,解碼模塊。圖2中VCD端解碼模塊將接收到的串行信號Datainl解碼并輸出解碼后的信號vcd_decoder_out,設計過程中采用狀態機實現控制,當檢測到SOF時開始解碼,按8位解碼,當檢測收到EOF時,解碼結束,等待下一次SOF的到來。如果在解碼過程中出現錯誤,則退出解碼,等待下一個SOF,將除去幀頭幀尾的信號提取出給后續的模塊使用。由于 VICC編碼端支持 4種不同的編碼方式,所以VCD編碼接收的數據可能有4種不同的數據形式,即單載波情況下的高速率和低速率數據和雙載波情況下的高速率和低速率數據。

沖突檢測模塊中vcedecoder_dataout[N:0]表示經過VCD解碼模塊輸出的N位寬的數據,N由標簽的長度決定;num表示檢測出的沖突個數;place表示沖突的位置,用N位長的數據表示,有沖突的位置 1,其余位為 0;cc_dataout等于輸入的數據vcedecoder_dataout;當有數據輸入之后,模塊實現相應的功能,統計沖突位的個數。沖突處理模塊根據得到的num,place以及輸入的數據經過算法處理之后輸出需要發送的指令。設計中采用基本的二進制搜索算法,當知道碰撞的位置后根據最高沖突位來決定,流程根據二進制搜索的基本流程:當num=0,即沒有碰撞時,直接將數據傳出;當 num不為零時,看place的位置,將最高位置0,碰撞最高位之前和輸入數據相同,碰撞最高位之后置 1。主FSM模塊通過接收VCD解碼模塊的read信號數據,以及VCD編碼的busy信號來查看模塊是否忙,若空閑則可以發送或接收數據,若忙則等待空閑時刻。用狀態機控制整個處理過程,比如發送,等待發送,讀,寫,空閑,去活等。將狀態機處理后的數據通過輸出端口輸出。
VCD編碼模塊的 read有效時讀解碼模塊解碼后的數據,read無效時等待解碼完成或者完成其它狀態。當busy信號有效時,將處理后的數據發送給編碼塊將數據發送出去。沒有沖突時將數據寫入存儲器,仍然存在沖突時,進入下一輪查詢過程。設計中有空閑狀態IDLE、發送狀態SEND_SELECT、發送等待狀態 SELECT_WAIT、讀狀態 READ、寫狀態 WRITE、去選擇狀態UNSELECT。

狀態轉換如圖3所示,由于狀態機在SELECT和UNSELECT狀態都會發送指令,所以為了進行區別對發送的數據加上一組8位的數據將8位變為16位,即SELECT狀態發送00000001+UID號;UNSELECT狀態是發送11111110+UID號,這樣在VICC端收到00000001時即知道是清點標簽的指令,收到11111110+UID即知道是讓某個標簽消聲不回答,其實需要多加一位就可以實現,加了8位數據是因為編碼模塊設置的數據為8位讀入,而剩下的7位可以作為缺省,為以后的功能提供標志位,作為flag標志。
VCD的編碼模塊將輸入的8位datain經過處理編碼成有幀頭幀尾的串行的輸出信號signal。在clk時鐘信號下,sel選擇信號編碼方式,可以選擇所編碼的方式是256選1還是4選1的方式。read信號為讀信號,當 busy為忙時,read為無效,當 busy為閑時,read為有效,開始讀入數據。此模塊用狀態機實現,給狀態機分幾個狀態,在讀數據狀態將數據從外部讀入,在處理狀態將數據處理成有幀頭,幀尾的一幀數據,幀頭幀尾的格式根據ISO/IEC15693協議中所規定的格式,sel為 1時為256選1模式,sel為0時為4選1模式。
對上述數字部分的設計采用以下驗證環境:WindowsXp,Modelsim SE 6.2b,QuartusII7.2(32 位),首先,用Modelsim軟件建立一個VCD的工作庫,在庫里面添加上需要的VCD端的編寫模塊,如:解碼模塊,沖突檢測,沖突處理,控制模塊等。編寫Testbench對模塊進行測試,仿真結果正確則進行下一步。其次,將所有的設計文件導入到QuartusII的庫中,進行綜合,之后進行引腳設置等。最后,設置完成之后下載到 FPGA開發板中觀看結果[4]。管腳設置需要配合FPGA開發板的用戶手冊來完成,否則可能出現管腳引用不正確,或者不匹配等狀況。實驗驗證時設置了3個標簽,標簽的UID號分別為:11000100,11100001,11000101。VCD通過發送查詢信號00000001+11111111,使在工作場內的所有標簽發送數據響應。當這3個標簽同時發送數據時,
沖突出現,如圖4所示。

圖4 3個標簽同時發送的情況
第1次時,3個同時發產生沖突,為11x00x0x;經過VCD處理后,VCD發送00000001+11011111,讓前3位UID號為110的標簽響應。當標簽接收了此次VCD發送的信號之后,第1號和第3號符合條件,它們同時發送數據,又產生碰撞1100010x;VCD對這個碰撞結果進行處理,發送00000001+11000100來清點標簽,第1號標簽符合,只有它發送數據,沒有沖突,VCD發送11111110+110000100來去選擇此標簽,第1號標簽只有退出工作場,再進入才會被再次清點,否則,此后它一直處于無聲狀態。VCD再次發送 00000001+11111111來清點所有標簽,這次場內只有第2號和第3號兩個標簽,它們同時發送數據,產生沖突11X00X01,VCD再次發送清點信號 00000001+11011111,這次只有第 3號標簽符合,沒有沖突,VCD再次發送去選擇信號11111110+11000101將第3號標簽去選擇。之后發送清點信號00000001+11111111,這次只有第2號標簽響應,無沖突,至此3個標簽都被識別。
文中結合Modelsim仿真工具和QuartusII軟件對RFID系統中的VCD模塊的功能進行混合仿真,使設計者在程序執行的任何步驟和時刻都可以查看任意變量的當前值,在Dataflow窗口查看某一單元或模塊的輸入輸出的連續變化等。通過FPGA開發板模擬RFID系統的閱讀器檢測標簽的抗沖突算法,能完成標簽的識別,無漏檢、無錯檢。
[1] 王曉華,周曉光,孫百生. 射頻識別系統中的防碰撞算法設計[J].北京郵電大學學報,2007,30(02):59-62.
[2] 程良倫,林偉勇.一種穩定高效的動態幀時隙 ALOHA算法[J].計算機應用研究,2009,26(01):85-87.
[3] 吳躍前,辜大光,范振粵,等. RFID系統防碰撞算法比較分析及其改進算法[J].計算機工程與應用 2009,45(03):210-213.
[4] 楊躍.FPGA應用開發實戰技巧精粹[M]北京:人民郵電出版社,2009.