ISO/IEG18000-6B標(biāo)簽邏輯電路低面積設(shè)計(jì)
射頻識(shí)別技術(shù)(RFID)是利用射頻方式進(jìn)行遠(yuǎn)距離通信以達(dá)到物品識(shí)別的目的,可以用來追蹤和管理幾乎所有物理對(duì)象。RFID系統(tǒng)一般包括閱讀器和標(biāo)簽兩個(gè)部分,按照這兩部分通信頻率的不同,系統(tǒng)分為低頻(135 kHz以下)、高頻(13.56 MHz)、超高頻UHF(860~960 MHz)和微波(2.4 GHz以上)頻段幾大類。ISO/IEC 18000是基于物品管理的射頻識(shí)別的國際標(biāo)準(zhǔn),按工作頻率分為7部分,其中第6部分規(guī)定的UHF頻段因?yàn)檫m合遠(yuǎn)距離識(shí)別并且對(duì)環(huán)境影響較小而成為目前RFID產(chǎn)品發(fā)展的熱點(diǎn)。以下簡要介紹了ISO/IEC18000-6B協(xié)議的內(nèi)容,并給出了一種標(biāo)簽邏輯部分的設(shè)計(jì)方法。
1 ISO/IEC18000-6B協(xié)議簡介
1.1 傳輸機(jī)制
ISO/IEC18000-6B協(xié)議的傳輸機(jī)制是基于“閱讀器先發(fā)言”的。閱讀器到標(biāo)簽之間的數(shù)據(jù)傳輸采用ASK調(diào)制曼徹斯特(Manchester)編碼,調(diào)制深度是11%或99%,位速率為10 kb/s或40 kb/s(采用40 kb/s)。標(biāo)簽到閱讀器之間的數(shù)據(jù)傳輸是反向散射調(diào)制,即通過調(diào)制入射并反向散射給閱讀器來傳輸信息,采用FM0編碼,數(shù)據(jù)速率是40 kb/s。
1.2 閱讀器命令格式
閱讀器與標(biāo)簽以幀為單位進(jìn)行數(shù)據(jù)傳輸。閱讀器到標(biāo)簽的一幀通常由幀頭探測(cè)段、幀頭、分隔符、命令、參數(shù)、數(shù)據(jù)和CRC組成,見圖1。各部分內(nèi)容、功能介紹如下。
幀頭探測(cè)段(preamble detect):400μs穩(wěn)定的未經(jīng)調(diào)制的載波信號(hào),用來給標(biāo)簽充電;
幀頭(preamble):包含9 bit的曼徹斯特碼格式0,標(biāo)志著通信的起始,即:010101010101010101;
分隔符(delimiter):一定數(shù)量、一定格式的數(shù)據(jù),作為間隔,為將來的命令擴(kuò)展做準(zhǔn)備;
命令參數(shù)(parameter)和數(shù)據(jù)(data):取決于前面的命令;
校檢(CRC-16):檢驗(yàn)錯(cuò)誤,采用標(biāo)準(zhǔn)的16 bitCRC-CCITT。
1.3 標(biāo)簽的回答格式
標(biāo)簽以幀為單位把數(shù)據(jù)傳送回閱讀器,一幀通常由靜默、返回幀頭、數(shù)據(jù)和CRC組成,見圖2。以下為各部分介紹。
靜默(quiet):標(biāo)簽在沒有接收到命令之前或者接收到錯(cuò)誤的命令之后,始終保持一種靜止?fàn)顟B(tài)。只有接收到有效的閱讀器命令,才返回幀頭和數(shù)據(jù);
返回幀頭:為一固定數(shù)據(jù)“00 00 01 01 01 0101 01 01 01 00 01 10 11 00 01”;
數(shù)據(jù):取決于命令以及命令處理的結(jié)果;
CRC采用16 bit的數(shù)據(jù)編碼。
1.4 工作流程與防沖突機(jī)制
ISO/IEC18000-6B協(xié)議支持多枚標(biāo)簽同時(shí)工作。多枚標(biāo)簽同時(shí)工作時(shí),先用選擇或反選擇命令選出UID的某些位符合要求的標(biāo)簽(即處于識(shí)別狀態(tài)),之后進(jìn)入防沖突機(jī)制進(jìn)行沖突處理,隨機(jī)選出一枚標(biāo)簽,對(duì)其進(jìn)行讀寫等操作。完成一枚標(biāo)簽的操作后再次進(jìn)入防沖突,尋出并處理另一枚標(biāo)簽,直到全部操作完畢。
防沖突機(jī)制需要兩種硬件電路,一個(gè)8位的計(jì)數(shù)器和一個(gè)01隨機(jī)數(shù)發(fā)生器。防沖突時(shí),閱讀器發(fā)命令,所有處于識(shí)別狀態(tài)并且內(nèi)部計(jì)數(shù)器為0的標(biāo)簽將發(fā)送它們的UID。若這樣的標(biāo)簽有一個(gè)以上,閱讀器發(fā)“FAIL”命令,令內(nèi)部計(jì)數(shù)器不等于0的標(biāo)簽將自己的計(jì)數(shù)器加1;內(nèi)部計(jì)數(shù)器等于0的標(biāo)簽將加上一個(gè)“1”或“0”的隨機(jī)數(shù),如若仍然為0再次發(fā)送它們的UID。這之后有三種結(jié)果:處于識(shí)別狀態(tài)并且內(nèi)部計(jì)數(shù)器為0的標(biāo)簽多于1,重復(fù)前面步驟;處于識(shí)別狀態(tài)并且內(nèi)部計(jì)數(shù)器為0的標(biāo)簽等于1,選出了標(biāo)簽;沒有處于識(shí)別狀態(tài)并且內(nèi)部計(jì)數(shù)器為0的標(biāo)簽,那么閱讀器發(fā)“SUCCESS'’命令使標(biāo)簽計(jì)數(shù)器全減1,重復(fù)前面加隨機(jī)數(shù)的步驟。這是種基于概率的防沖突機(jī)制。
2 邏輯部分設(shè)計(jì)與低面積方案
2.1 邏輯部分設(shè)計(jì)
閱讀器與標(biāo)簽以幀為單位進(jìn)行數(shù)據(jù)傳輸,設(shè)計(jì)的時(shí)候則以標(biāo)簽一幀的接收處理直至返回幀結(jié)束為一次完整命令。一次完整命令從上電復(fù)位或者上一命令結(jié)束開始,按照幀的格式,進(jìn)入400μs幀頭探測(cè)段,然后從幀頭的第一個(gè)0中采樣取得半bit信息,用于以后的編解碼。等確認(rèn)過幀頭和分割符,則進(jìn)入Manchester解碼和相關(guān)數(shù)據(jù)處理的階段,此為接收幀信號(hào)的主要階段。解碼結(jié)束如果CRC正確,就可以開始對(duì)命令進(jìn)行相應(yīng)處理。先進(jìn)行命令相關(guān)的狀態(tài)處理,同時(shí)返回幀的靜默。約200μs后,發(fā)送返回幀頭,進(jìn)入命令相關(guān)的讀寫數(shù)據(jù)處理,編碼返回值,并加上CRC的結(jié)果,最后復(fù)位,等待下一命令的到來。圖3為按照命令執(zhí)行步驟而設(shè)計(jì)的電路結(jié)構(gòu)框圖。以下詳細(xì)說明各個(gè)部分。
上電復(fù)位Rst:Rst是剛上電時(shí)的異步復(fù)位,標(biāo)簽的各種狀態(tài)初始化,標(biāo)簽一次上電只工作一次。
命令結(jié)束復(fù)位Nrst:Nrst為工作中的同步復(fù)位。當(dāng)標(biāo)簽命令接收上有錯(cuò)誤(如解碼錯(cuò)、CRC錯(cuò)等,指錯(cuò)誤命令),或者處理完一次正確命令,都對(duì)其中的一些寄存器清零,等待下一次命令到來。
幀頭探測(cè):幀頭探測(cè)段探測(cè)400μs穩(wěn)定的未經(jīng)調(diào)制的載波信號(hào)。探測(cè)時(shí)進(jìn)行信號(hào)輸入Din為1的記數(shù),預(yù)設(shè)1 M工作頻率下400μs。當(dāng)Din為0時(shí)則清零重新開始記數(shù),得到穩(wěn)定的400 μs。這也可以去除解碼錯(cuò)誤導(dǎo)致的復(fù)位之后還有可能存在Din的剩余部分?jǐn)?shù)據(jù),以避免當(dāng)成下一次幀頭。
半bit采樣:采樣為幀頭9個(gè)01的第一個(gè)0的一段,記錄其點(diǎn)數(shù)到5位的C_halfbit,用于以后的編解碼。由于模擬部分進(jìn)來的時(shí)鐘會(huì)有偏差,設(shè)計(jì)時(shí)并不將半bit理論上12.5個(gè)采樣點(diǎn)定死。5位C halfbit值從0到31,解碼時(shí)要求C_halfbit加6不能溢出,所以最多25,是12.5的2倍,即工作頻率上限2 MHz。另外解碼時(shí)要求C_halfbit加5不能大于一個(gè)bit的點(diǎn)數(shù),C halfbit至少有6,約12.5的一半,即工作頻率下限為0.5 MHz。
確認(rèn)幀頭和分割符:幀頭和分割符是固定值,根據(jù)C_halfbit點(diǎn)數(shù)設(shè)定電平變換范圍和次數(shù)。如果出錯(cuò),進(jìn)入Nrst,復(fù)位重新開始下一命令。Manchester解碼:曼徹斯特碼以0到1二位表示傳輸值零(圖4中11~13),以1到0二位表示傳輸值1(圖4中13~15),其特點(diǎn)是一位碼中間(如12和14處)必有0與1的跳變。解碼時(shí)從跳變處開始計(jì)數(shù),在C_halfbit值加5與2倍的C_halfbit加6之間,若是出現(xiàn)Din與上一個(gè)時(shí)鐘的Din不同,則說明有變號(hào),也就是說解碼成功,碼值為上一個(gè)Din的值。如圖4中13~14那一段,為1解出傳輸值1然后重新開始記數(shù)解下一碼。若是記數(shù)超出上面的范圍,那么認(rèn)為解碼錯(cuò)誤,進(jìn)入Nrst。至于第1位碼,它前面是分割符,從分割符“1100111010'’的最后一個(gè)0起始處開始解曼徹斯特碼即可。解碼的同時(shí)判斷Cmd、Add1(解碼時(shí)用)、Add2(編碼時(shí)用)、Byt等,并將相應(yīng)內(nèi)容存下來,在需要與EEPROM比較時(shí)進(jìn)行實(shí)時(shí)比較。全部解碼值隨解碼的過程都送入CRC,到設(shè)定的判定條件進(jìn)行判斷,正確的話繼續(xù)進(jìn)行下一步,錯(cuò)誤則進(jìn)Nrst。
多種狀態(tài)處理:多種狀態(tài)處理是指標(biāo)簽的4種工作狀態(tài)之間的轉(zhuǎn)換(斷電、準(zhǔn)備、識(shí)別、數(shù)據(jù)交換)、防沖突時(shí)用的8位記數(shù)器、隨機(jī)數(shù)的處理以及退出到Nrst等。根據(jù)命令以及當(dāng)前標(biāo)簽狀態(tài),會(huì)有多種不同的結(jié)果,決定后面數(shù)據(jù)返回的形式及有無。
靜默與返回幀頭:CRC正確后,在處理各種狀態(tài)的同時(shí),標(biāo)簽進(jìn)入返回信號(hào)的靜默狀態(tài)。這里開始使用一個(gè)記數(shù)器,從0到C_halfbit一個(gè)周期,以這樣的一個(gè)周期執(zhí)行一次操作,相當(dāng)于用了一個(gè)比較精確頻率80 kHz的新時(shí)鐘。靜默約200μs以后返回固定的幀頭。
FM0編碼返回與CRC:FM0編碼如圖5,編碼時(shí)設(shè)計(jì)一個(gè)反相器,01翻轉(zhuǎn),0的時(shí)候讓輸出變號(hào),1的時(shí)候根據(jù)碼值變號(hào),即碼值0輸出變號(hào),碼值1輸出不變。在編碼返回值的同時(shí)根據(jù)需要完成對(duì)EEPROM的讀寫操作。最后加上翻轉(zhuǎn)了的CRC值。
2.2 設(shè)計(jì)中采用減少面積的方案
2.2.1 命令分類
不同命令在收、發(fā)、狀態(tài)處理階段都作了分類,命令有8個(gè)選擇/反選命令、FAIL、SUCCESS、INITIALIZE, RESEND、 READ、DATA_READ、WRITE、LOCK和自己加的命令代碼為“10”的CHIP_ERASE。
在接收信號(hào)時(shí),按信號(hào)中有沒有值與EEPROM比較、與EEPROM中UID還是給定地址比較分類;存Add1、Add2、Byt時(shí),按有沒有存儲(chǔ)需求分類;用CRC判斷正誤,按應(yīng)該接收的長度分類;在狀態(tài)處理時(shí),按狀態(tài)操作的相似性分類;在發(fā)送信號(hào)時(shí),按發(fā)送固定值還是EEPROM中值、EEPROM中UID還是給定地址值分類;判斷CRC開始與結(jié)束,按發(fā)送的長度分類。比如8個(gè)選擇/反選命令,在接收信號(hào)與發(fā)送信號(hào)時(shí)是相同的操作,只有狀態(tài)處理不同。
2.2.2 實(shí)時(shí)處理
在接收與發(fā)送信號(hào)的過程中,有比較多的命令有一次性的比較或讀取值,設(shè)計(jì)中采用了實(shí)時(shí)處理避免存儲(chǔ)這些信號(hào)。接收信號(hào)時(shí),解碼一位,送入CRC校驗(yàn)一位,并根據(jù)命令分類,到達(dá)比較條件時(shí)比較一位,然后留下比較的大小,舍棄該位。發(fā)送信號(hào)時(shí),也是逐位讀取逐位發(fā)送,并送入CRC,舍棄該位。
2.2.3 資源共享
設(shè)計(jì)中比較多地應(yīng)用了資源共享,以減少硬件,如編碼解碼CRC不同時(shí)間下的共享、地址寄存器和數(shù)據(jù)寄存器在不同命令下的共享、信號(hào)接收時(shí)所有64 bit比較的共享|返回幀新時(shí)鐘的共享等。下面說明地址寄存器、數(shù)據(jù)寄存器的共享與64 bit比較的共享。
標(biāo)簽一次只處理一個(gè)命令,所以地址寄存器、數(shù)據(jù)寄存器可以進(jìn)行不同命令下的共享。地址寄存器Addl存接收時(shí)給EEPROM的地址,在Nrst或Rst時(shí)清零,選擇/反選命令時(shí)存下新地址。Addl存下新地址,則讀取的為新地址下的值;Addl未存新地址,那么命令不是選擇/反選命令,由于幀開始時(shí)的清零,讀取的為UID。地址寄存器Add2存發(fā)送時(shí)給EEPROM的地址,同樣,存下新地址則讀該地址值,未存時(shí)則由于清零讀取UID。數(shù)據(jù)寄存器Byt在WRITE命令時(shí)存要寫的值,選擇/反選命令時(shí)存用于比較的掩碼。
64 bit比較的共享指接收時(shí)所有要求比較的命令下的共享。比較時(shí)設(shè)計(jì)了一個(gè)大于與一個(gè)小于的標(biāo)志,只要有一個(gè)標(biāo)志置位(值為1),表明比較已出結(jié)果,結(jié)束比較。在未出結(jié)果的情況下,進(jìn)行一位的比較,并根據(jù)結(jié)果改變大于與小于標(biāo)志,如果相等,則不改變,等待下一次比較。根據(jù)大于與小于兩個(gè)標(biāo)志,可以得到狀態(tài)處理時(shí)用的等于、不等于、大于、小于這4個(gè)值。
3 設(shè)計(jì)結(jié)果
3.1 FPGA功能驗(yàn)證
將代碼下載到FPGA板上輸入測(cè)試信號(hào),在邏輯分析儀中查看波形,如圖6,Bus1_0為輸入,Bus1_1為標(biāo)簽的返回信號(hào)。Bus1_1根據(jù)Busl_0不同而做出相應(yīng)不同的反應(yīng),并且能屏蔽返回值時(shí)可能有的Busl_0信號(hào),如第二、四幀不做處理(處理一、三幀中)。圖7與圖8為接受信號(hào)與返回信號(hào)的起始處放大圖。
3.2 規(guī)模與功耗
本設(shè)計(jì)用DC綜合,在SMIC 0.18 μm工藝下cell數(shù)為837個(gè)(其中寄存器約160),總面積為24 791μm2,以最小與非門9.98μm2估算,約2 500門。
用Primepower對(duì)仿真進(jìn)行功耗分析,在讀與寫操作時(shí)都約為10.6 μW。功耗集中在時(shí)鐘上,從SMIC 0.18 μm工藝文檔中得測(cè)試頻率下面一個(gè)典型寄存器時(shí)鐘翻轉(zhuǎn)產(chǎn)生約0.032μW,乘上個(gè)數(shù)約160以及2(一個(gè)時(shí)鐘二次翻轉(zhuǎn)),約10.2 μW,與仿真軟件結(jié)果相近。
3.3 版圖
自動(dòng)布局線設(shè)計(jì)的版圖如圖9所示,有三個(gè)輸入,分別為Clk、Din、Rst,一個(gè)輸出為Dout。版圖通過了DRC(設(shè)計(jì)規(guī)則檢查)和LVS(版圖與電路圖一致比較),正在流片中。
4 結(jié)語
本文基于ISO/IEC 18000-6B協(xié)議設(shè)計(jì)了標(biāo)簽的邏輯部分,并運(yùn)用命令分類、實(shí)時(shí)處理、資源共享等技術(shù)減少資源,在SMIC 0.18 μm工藝下綜合生成電路面積約24 791 μm2,約2 500門,功耗10.6μW,工作于1 MHz附近(0.5~2 MHz)。電路在面積、規(guī)模上比較小,但功耗比較大,與國外目前較低的0.318 μW還存在不少差距,用門控時(shí)鐘技術(shù)以及設(shè)計(jì)低功耗器件以減少功耗是以后的目標(biāo)。