汪永峰,卜 剛
(南京航空航天大學 電子信息工程學院,江蘇 南京 211106)
隨著人工智能和物聯網概念的不斷普及,作為核心技術之一的射頻識別技術已經在交通、電網、物流、存儲等眾多領域得到了廣泛應用,其中UHF RFID技術由于識別距離遠、識別速度快、使用壽命長等優點成為了國際上研究的熱點。隨著對UHF RFID研究的不斷深入,在設計時對傳輸速率以及通信數據量等許多方面提出了更高的要求[1]。
本文在深入研究ISO/IEC 18000-6C標準協議的基礎上,采用SystemVerilog語言對UHF RFID標簽數字基帶通信系統中的關鍵模塊進行了硬件建模。由于SystemVerilog擁有類似于C語言的數據類型、斷言、接口等特性,在建模方面有著獨特的優勢,可以更加快速準確地對功能進行描述,因此該設計采用SystemVerilog語言進行建模[2]。本文對UHF RFID通信系統中的標簽數字基帶發送與接收部分進行了SystemVerilog硬件建模與仿真,標簽數字基帶發送模塊主要實現了CRC校驗碼生成、FM0/Miller編碼以及同步碼添加等功能,而標簽數字基帶接收模塊則實現了同步碼檢測、PIE解碼和CRC校驗碼檢測等功能,并最終在Modelsim SE-64 10.4中進行了仿真,驗證了該設計功能的正確性。
SystemVerilog是由Accellera標準組織在Verilog的基礎上提出的,是一種硬件描述語言和驗證語言(HDVL)[3]。SystemVerilog是Verilog設計語言的高層次拓展,這些拓展為Verilog提供了強有力的增強,在一個更高的抽象層上提高了設計的建模能力[4]。具體來說,SystemVerilog有以下幾點優勢。第一,SystemVerilog增加了新的數據類型,如:結構體、枚舉類型、打包和非打包數組等,在編寫有限狀態機等方面可以更加簡潔準確。第二,相同的聲明集合可以被靜態驗證和仿真工具同時使用。第三,SystemVerilog增加了接口概念,模塊之間的通信可以通過接口來實現,大大簡化了模塊的代碼量,同時也可以在更高的抽象層次上建立連接。第四,SystemVerilog增加了斷言的概念,這使得對功能的描述可以更加精準,也為設計中錯誤的定位提供了方便,對代碼的可讀性、可維護性和設計效率有顯著的提高[5]。
標簽數字基帶的整體設計原理基于ISO/IEC 18000-6C協議進行,該協議對通信過程中的各個方面都做了嚴格的規定來確保通信的準確性與可靠性,例如:通信時序、幀格式以及編解碼的方式等。因此需要各個模塊的緊密配合來滿足協議對數據編碼以及時序的要求。該設計采用摩爾型狀態機進行編碼和時序控制,最終產生滿足協議要求的數據格式[6]。標簽數字基帶頂層總線模型設計如圖1所示,各子模塊之間采用SystemVerilog接口進行數據通信。
標簽發送模塊主要包括BLF模塊、CNT模塊、P2S模塊、CRC_GEN模塊、FIFO模塊、ENCODE模塊、PREAMBLE模塊7個部分,各模塊功能為:
(1)BLF模塊:產生標簽反向散射頻率;
(2)CNT模塊:計算輸入數據長度;
(3)P2S模塊:將并行輸入數據轉換成串行數據;
(4)CRC_GEN模塊:產生循環冗余校驗碼添加在數據尾部,用于數據校驗;
(5)FIFO模塊:數據緩存;
(6)ENCODE模塊:對從FIFO中讀取到的數據進行FM0/MILLER編碼;
(7)PREAMBLE模塊:在編碼后的數據前端添加同步碼。
2.1.1 標簽反向散射頻率
ISO/IEC 18000-6C協議規定,在接收到閱讀器發送的信息后,標簽需要反向散射信息回復閱讀器,其反向散射頻率(BLF)由DR和TRcal兩個參數來設定,計算關系如式(1)所示:

其中DR表示除法比例,為Query命令中設定的參數,可以取 8或者 64/3[7]。
2.1.2 CRC校驗
ISO/IEC 18000-6C協議中規定了標簽發送鏈路中采用數據檢驗方式為CRC16校驗,并規定了CRC16校驗的多項式為:X16+X12+X5+1。
綜合考慮電路資源的節省以及標簽發送電路輸出的數據類型,該CRC16計算電路采用加法器與異或來實現,圖2為CRC16校驗碼的計算原理圖。
2.1.3 FIFO設計
由于數據編碼會對數據長度產生變化,因此在數據編碼之前,需要一個FIFO對需要編碼的數據進行緩存。該設計中FIFO深度為128位,在FIFO的設計中加入了SystemVerilog所特有的斷言方法,對FIFO的只讀、只寫以及同時讀寫的行為進行了描述,若在仿真過程中FIFO的行為不符合描述,那么斷言也會失敗,從而確保了FIFO設計的正確性,也為FIFO設計出現錯誤時的錯誤定位提供了方便。下面的代碼是FIFO模塊的SystemVerilog斷言。

圖1 標簽數字基帶頂層總線模型

圖2 CRC16校驗碼的計算原理圖

2.1.4 發送數據編碼模塊設計
標簽發送模塊的編碼方式為FM0編碼或Miller編碼方式,具體的編碼方式和碼元速率是由閱讀器發送的Query命令決定的。FM0編碼的基本編碼符號和生成FM0編碼狀態圖如圖3所示,FM0在每個編碼符號的邊界會翻轉相位,此外,數據0通過其在編碼符號中間進行額外的翻轉來表示這個數據,而數據1除數據起始外無其他相位變化[8]。在FM0編碼結束后需要在碼元數據的尾端添加結束位,結束位以一個1的“冗余“”數據”(dummy1)來表示。

圖3 FM0基本編碼符號和編碼狀態圖
Miller編碼又稱為副載波調制編碼,其編碼也是通過相位的翻轉來實現的,基本編碼符號和編碼狀態圖如圖4所示。根據Miiller編碼規則及ISO/IEC 18000-6C協議規定,Miller編碼的方式與Query命令中m的取值有關。 如果 m 值為 2′b01,2′b10,2′b11,則對應的編碼方式分別為 Miller2,Miller4,Miller8,每個數據都將分別編成 4位、8位、16位碼元[9],Miller副載波序列如圖 5所示。與FM0編碼類似,在Miller編碼尾部同樣需要添加一個dummy1作為結束位。

圖4 Miller基本編碼符號和編碼狀態圖
2.1.5 同步碼添加模塊設計
為了使閱讀器能夠正確探測接收到數據的起始位置從而正確接收到數據,標簽在發送數據時需要在數據前端添加同步碼。如圖6所示,同步碼會根據m[1:0]和TRext兩個參數的值的不同而不同。
標簽接收模塊頂層主要包括HEAD_CHECK模塊、DECODE模塊、CRC_CHECK模塊、S2P模塊四個部分,各模塊功能為:
(1)HEAD_CHECK模塊:同步碼檢測;
(2)DECODE模塊:PIE解碼;
(3)CRC_CHECK模塊:CRC校驗;
(4)S2P模塊:串行數據傳換成并行數據。
2.2.1 同步碼檢測模塊
接收到閱讀器發送的數據后,首先要對數據進行同步碼檢測,閱讀器發送鏈路添加的同步碼分為前同步碼和幀同步碼兩種類型,如果檢測到的同步碼包括界定符、數據 0、RTcal校準符號三個部分,則該同步碼為幀同步碼且說明不是Query命令,數據緊跟在RTcal標準符號后。如果檢測到的同步碼包括界定符、數據0、RTcal校準符號、TRcal校準符號四個部分,則該同步碼為前同步碼且該命令為Query命令,數據緊跟在TRcal標準符號后。

圖5 Miller副載波序列

圖6 同步碼
2.2.2 接收數據解碼模塊設計
ISO/IEC 18000-6C協議規定的閱讀器到標簽的通信使用 PIE(Pulse Interval Encoding)編碼,因此標簽接收側應當對接收到的數據進行PIE解碼。PIE編碼規則如圖7所示,在一次盤存周期中,PW和tari為固定值,PW為射頻脈沖寬度,Tari為一個數據“0”的參考時間間隔,數據“1”高電平持續時間在 tari到 1.5tari之間取值,該設計取數據“1”的編碼高電平持續時間為1.5tari。通過對 PIE編碼方式的研究,數據“0”和數據“1”的編碼結 果均由高電平開始低電平結束,由此可得到PIE解碼模塊的實現算法為,設置變量high和變量low,分別對高低電平進行計數,檢測到低電平到高電平的跳變則表示上一個數據已結束,根據變量high和變量low的值的關系,可以確定接收到的數據是0還是1,接著對變量清零重新計數,從而實現PIE的解碼操作。

圖7 PIE編碼規則
2.2.3 CRC校驗模塊設計
協議規定,閱讀器發送Query命令時,在數據尾部添加CRC5校驗碼,而發送其他命令時則為CRC16校驗碼,因此標簽需要根據接收到的數據的不同進行CRC5和CRC16校驗碼的檢測,確保接收數據的正確性。CRC校驗開始時對 CRC16計算結果寄存器預置為 16′hFFFF,CRC5計算結果寄存器預置為5′b01001,若標簽得到的最終校驗結果為全0,則校驗通過。

圖8 標簽發送基帶仿真波形圖

圖9 標簽接收基帶仿真波形圖
以上各模塊均使用SystemVerilog語言實現,在Modelsim SE-64 10.4里編譯并進行仿真驗證。圖8所示為標簽發送基帶仿真波形圖,選取編碼方式為Miller2編碼且標簽反向散射16位隨機數(RN16),從圖上可以看出 RN16為16′h8d73,首先經過了并行數據轉換成串行數據的處理,其次為其計算CRC16校驗碼并添加在串行RN16尾部,從圖中可以看出該文中CRC16校驗碼為16′b00111-11000111111,接著數據經過Miller2編碼處理,最后在數據前端添加同步碼并發送。
圖9為標簽接收基帶仿真波形圖,文中閱讀器發送的是Query命令,標簽基帶接收到命令后首先經過了同步碼檢測并去除同步碼,PIE解碼以及CRC5校驗,最后將串行數據轉換成并行數據,可以看出接收到的數據為17′h11a5e,數據以1000開始,為Query命令,數據接收正確。
本文主要介紹了在ISO/IEC 18000-6C協議下,利用SystemVerilog語言實現UHF RFID通信算法中標簽數字基帶的實現方法。經過軟件仿真,實現了標簽數字基帶的發送以及接收操作,完成了該設計的仿真驗證,仿真結果滿足協議要求。由于SystemVerilog語言中增加的數據類型、過程塊、接口、斷言等一些定義,使得利用SystemVerilog語言進行建模時更加簡潔、出錯率更低、代碼更易維護,同時SystemVerilog進行建模和驗證將成為今后發展的趨勢。