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