朱 軍, 王惠陽, 張 元
(安徽大學 計算智能與信號處理教育部重點實驗室,安徽 合肥 230039)
ISO/IEC15693標準規(guī)定的高頻段(13.56 MHz)的射頻識別系統(tǒng),具有讀取距離遠,可以穿透金屬和多種其他的材料的特點。同時,它讀寫區(qū)域相對均勻,相對于低頻標簽其數(shù)據(jù)傳輸快,且系統(tǒng)具有抗沖突特性[1-3]。文中針對13.56 MHz的高頻射頻識別(RFID,Radio Frequency IDentification)系統(tǒng)近耦合器(VCD,Vicinity Couple Device)部分,使用二進制算法來實現(xiàn)標簽識別的模擬。通過現(xiàn)場可編程門陣列(FPGA,F(xiàn)ield Programmed Gate Array)開發(fā)板模擬實際射頻識別系統(tǒng)的閱讀器檢測標簽的抗沖突算法,算法主要集中在數(shù)字處理單元,用FPGA搭建平臺,信號信息直接由VCD和近集成電路卡(VICC,Vicinity Integrated Circuit Card)的數(shù)字處理模塊傳輸。
在VCD端,控制模塊接收VCD解碼模塊解碼出的VICC發(fā)送的用戶識別(UID,User IDentification),并解析出沖突的情況;根據(jù)沖突的位置,確定發(fā)送什么樣的請求命令來清點VICC。此模塊有串行輸入 datain,clk,reset,及串行輸出的signal信號,編碼模式選擇(sel)。在VICC端,控制模塊接收VICC解碼模塊解碼出的來自VCD端的請求命令,根據(jù)命令決定該讓哪些VICC來響應這個命令。沖突的檢測在閱讀器芯片部分,而卡的芯片只是單純的對收到的命令進行響應。
圖1是VCD與VICC之間通信的示意圖,當VICC端發(fā)出的數(shù)據(jù)經(jīng)編碼模塊編碼之后,通過天線發(fā)送,被VCD的解碼模塊接收,解碼后傳遞給后續(xù)模塊,并通過控制模塊處理,將發(fā)送的數(shù)據(jù)經(jīng)過VCD的編碼模塊進行編碼之后通過天線發(fā)送給VICC,如此循環(huán),直到檢測出所有的在工作場內(nèi)的射頻識別卡。
圖2為VCD端模塊連接關系圖,其中包括沖突檢測模塊,沖突處理模塊,控制模塊,并行16位轉8位輸出模塊,編碼模塊,解碼模塊。圖2中VCD端解碼模塊將接收到的串行信號Datainl解碼并輸出解碼后的信號vcd_decoder_out,設計過程中采用狀態(tài)機實現(xiàn)控制,當檢測到SOF時開始解碼,按8位解碼,當檢測收到EOF時,解碼結束,等待下一次SOF的到來。如果在解碼過程中出現(xiàn)錯誤,則退出解碼,等待下一個SOF,將除去幀頭幀尾的信號提取出給后續(xù)的模塊使用。由于 VICC編碼端支持 4種不同的編碼方式,所以VCD編碼接收的數(shù)據(jù)可能有4種不同的數(shù)據(jù)形式,即單載波情況下的高速率和低速率數(shù)據(jù)和雙載波情況下的高速率和低速率數(shù)據(jù)。
沖突檢測模塊中vcedecoder_dataout[N:0]表示經(jīng)過VCD解碼模塊輸出的N位寬的數(shù)據(jù),N由標簽的長度決定;num表示檢測出的沖突個數(shù);place表示沖突的位置,用N位長的數(shù)據(jù)表示,有沖突的位置 1,其余位為 0;cc_dataout等于輸入的數(shù)據(jù)vcedecoder_dataout;當有數(shù)據(jù)輸入之后,模塊實現(xiàn)相應的功能,統(tǒng)計沖突位的個數(shù)。沖突處理模塊根據(jù)得到的num,place以及輸入的數(shù)據(jù)經(jīng)過算法處理之后輸出需要發(fā)送的指令。設計中采用基本的二進制搜索算法,當知道碰撞的位置后根據(jù)最高沖突位來決定,流程根據(jù)二進制搜索的基本流程:當num=0,即沒有碰撞時,直接將數(shù)據(jù)傳出;當 num不為零時,看place的位置,將最高位置0,碰撞最高位之前和輸入數(shù)據(jù)相同,碰撞最高位之后置 1。主FSM模塊通過接收VCD解碼模塊的read信號數(shù)據(jù),以及VCD編碼的busy信號來查看模塊是否忙,若空閑則可以發(fā)送或接收數(shù)據(jù),若忙則等待空閑時刻。用狀態(tài)機控制整個處理過程,比如發(fā)送,等待發(fā)送,讀,寫,空閑,去活等。將狀態(tài)機處理后的數(shù)據(jù)通過輸出端口輸出。
VCD編碼模塊的 read有效時讀解碼模塊解碼后的數(shù)據(jù),read無效時等待解碼完成或者完成其它狀態(tài)。當busy信號有效時,將處理后的數(shù)據(jù)發(fā)送給編碼塊將數(shù)據(jù)發(fā)送出去。沒有沖突時將數(shù)據(jù)寫入存儲器,仍然存在沖突時,進入下一輪查詢過程。設計中有空閑狀態(tài)IDLE、發(fā)送狀態(tài)SEND_SELECT、發(fā)送等待狀態(tài) SELECT_WAIT、讀狀態(tài) READ、寫狀態(tài) WRITE、去選擇狀態(tài)UNSELECT。
狀態(tài)轉換如圖3所示,由于狀態(tài)機在SELECT和UNSELECT狀態(tài)都會發(fā)送指令,所以為了進行區(qū)別對發(fā)送的數(shù)據(jù)加上一組8位的數(shù)據(jù)將8位變?yōu)?6位,即SELECT狀態(tài)發(fā)送00000001+UID號;UNSELECT狀態(tài)是發(fā)送11111110+UID號,這樣在VICC端收到00000001時即知道是清點標簽的指令,收到11111110+UID即知道是讓某個標簽消聲不回答,其實需要多加一位就可以實現(xiàn),加了8位數(shù)據(jù)是因為編碼模塊設置的數(shù)據(jù)為8位讀入,而剩下的7位可以作為缺省,為以后的功能提供標志位,作為flag標志。
VCD的編碼模塊將輸入的8位datain經(jīng)過處理編碼成有幀頭幀尾的串行的輸出信號signal。在clk時鐘信號下,sel選擇信號編碼方式,可以選擇所編碼的方式是256選1還是4選1的方式。read信號為讀信號,當 busy為忙時,read為無效,當 busy為閑時,read為有效,開始讀入數(shù)據(jù)。此模塊用狀態(tài)機實現(xiàn),給狀態(tài)機分幾個狀態(tài),在讀數(shù)據(jù)狀態(tài)將數(shù)據(jù)從外部讀入,在處理狀態(tài)將數(shù)據(jù)處理成有幀頭,幀尾的一幀數(shù)據(jù),幀頭幀尾的格式根據(jù)ISO/IEC15693協(xié)議中所規(guī)定的格式,sel為 1時為256選1模式,sel為0時為4選1模式。
對上述數(shù)字部分的設計采用以下驗證環(huán)境:WindowsXp,Modelsim SE 6.2b,QuartusII7.2(32 位),首先,用Modelsim軟件建立一個VCD的工作庫,在庫里面添加上需要的VCD端的編寫模塊,如:解碼模塊,沖突檢測,沖突處理,控制模塊等。編寫Testbench對模塊進行測試,仿真結果正確則進行下一步。其次,將所有的設計文件導入到QuartusII的庫中,進行綜合,之后進行引腳設置等。最后,設置完成之后下載到 FPGA開發(fā)板中觀看結果[4]。管腳設置需要配合FPGA開發(fā)板的用戶手冊來完成,否則可能出現(xiàn)管腳引用不正確,或者不匹配等狀況。實驗驗證時設置了3個標簽,標簽的UID號分別為:11000100,11100001,11000101。VCD通過發(fā)送查詢信號00000001+11111111,使在工作場內(nèi)的所有標簽發(fā)送數(shù)據(jù)響應。當這3個標簽同時發(fā)送數(shù)據(jù)時,
沖突出現(xiàn),如圖4所示。
圖4 3個標簽同時發(fā)送的情況
第1次時,3個同時發(fā)產(chǎn)生沖突,為11x00x0x;經(jīng)過VCD處理后,VCD發(fā)送00000001+11011111,讓前3位UID號為110的標簽響應。當標簽接收了此次VCD發(fā)送的信號之后,第1號和第3號符合條件,它們同時發(fā)送數(shù)據(jù),又產(chǎn)生碰撞1100010x;VCD對這個碰撞結果進行處理,發(fā)送00000001+11000100來清點標簽,第1號標簽符合,只有它發(fā)送數(shù)據(jù),沒有沖突,VCD發(fā)送11111110+110000100來去選擇此標簽,第1號標簽只有退出工作場,再進入才會被再次清點,否則,此后它一直處于無聲狀態(tài)。VCD再次發(fā)送 00000001+11111111來清點所有標簽,這次場內(nèi)只有第2號和第3號兩個標簽,它們同時發(fā)送數(shù)據(jù),產(chǎn)生沖突11X00X01,VCD再次發(fā)送清點信號 00000001+11011111,這次只有第 3號標簽符合,沒有沖突,VCD再次發(fā)送去選擇信號11111110+11000101將第3號標簽去選擇。之后發(fā)送清點信號00000001+11111111,這次只有第2號標簽響應,無沖突,至此3個標簽都被識別。
文中結合Modelsim仿真工具和QuartusII軟件對RFID系統(tǒng)中的VCD模塊的功能進行混合仿真,使設計者在程序執(zhí)行的任何步驟和時刻都可以查看任意變量的當前值,在Dataflow窗口查看某一單元或模塊的輸入輸出的連續(xù)變化等。通過FPGA開發(fā)板模擬RFID系統(tǒng)的閱讀器檢測標簽的抗沖突算法,能完成標簽的識別,無漏檢、無錯檢。
[1] 王曉華,周曉光,孫百生. 射頻識別系統(tǒng)中的防碰撞算法設計[J].北京郵電大學學報,2007,30(02):59-62.
[2] 程良倫,林偉勇.一種穩(wěn)定高效的動態(tài)幀時隙 ALOHA算法[J].計算機應用研究,2009,26(01):85-87.
[3] 吳躍前,辜大光,范振粵,等. RFID系統(tǒng)防碰撞算法比較分析及其改進算法[J].計算機工程與應用 2009,45(03):210-213.
[4] 楊躍.FPGA應用開發(fā)實戰(zhàn)技巧精粹[M]北京:人民郵電出版社,2009.