汪永峰,卜 剛
(南京航空航天大學(xué) 電子信息工程學(xué)院,江蘇 南京 211106)
隨著人工智能和物聯(lián)網(wǎng)概念的不斷普及,作為核心技術(shù)之一的射頻識別技術(shù)已經(jīng)在交通、電網(wǎng)、物流、存儲等眾多領(lǐng)域得到了廣泛應(yīng)用,其中UHF RFID技術(shù)由于識別距離遠(yuǎn)、識別速度快、使用壽命長等優(yōu)點(diǎn)成為了國際上研究的熱點(diǎn)。隨著對UHF RFID研究的不斷深入,在設(shè)計時對傳輸速率以及通信數(shù)據(jù)量等許多方面提出了更高的要求[1]。
本文在深入研究ISO/IEC 18000-6C標(biāo)準(zhǔn)協(xié)議的基礎(chǔ)上,采用SystemVerilog語言對UHF RFID標(biāo)簽數(shù)字基帶通信系統(tǒng)中的關(guān)鍵模塊進(jìn)行了硬件建模。由于SystemVerilog擁有類似于C語言的數(shù)據(jù)類型、斷言、接口等特性,在建模方面有著獨(dú)特的優(yōu)勢,可以更加快速準(zhǔn)確地對功能進(jìn)行描述,因此該設(shè)計采用SystemVerilog語言進(jìn)行建模[2]。本文對UHF RFID通信系統(tǒng)中的標(biāo)簽數(shù)字基帶發(fā)送與接收部分進(jìn)行了SystemVerilog硬件建模與仿真,標(biāo)簽數(shù)字基帶發(fā)送模塊主要實(shí)現(xiàn)了CRC校驗(yàn)碼生成、FM0/Miller編碼以及同步碼添加等功能,而標(biāo)簽數(shù)字基帶接收模塊則實(shí)現(xiàn)了同步碼檢測、PIE解碼和CRC校驗(yàn)碼檢測等功能,并最終在Modelsim SE-64 10.4中進(jìn)行了仿真,驗(yàn)證了該設(shè)計功能的正確性。
SystemVerilog是由Accellera標(biāo)準(zhǔn)組織在Verilog的基礎(chǔ)上提出的,是一種硬件描述語言和驗(yàn)證語言(HDVL)[3]。SystemVerilog是Verilog設(shè)計語言的高層次拓展,這些拓展為Verilog提供了強(qiáng)有力的增強(qiáng),在一個更高的抽象層上提高了設(shè)計的建模能力[4]。具體來說,SystemVerilog有以下幾點(diǎn)優(yōu)勢。第一,SystemVerilog增加了新的數(shù)據(jù)類型,如:結(jié)構(gòu)體、枚舉類型、打包和非打包數(shù)組等,在編寫有限狀態(tài)機(jī)等方面可以更加簡潔準(zhǔn)確。第二,相同的聲明集合可以被靜態(tài)驗(yàn)證和仿真工具同時使用。第三,SystemVerilog增加了接口概念,模塊之間的通信可以通過接口來實(shí)現(xiàn),大大簡化了模塊的代碼量,同時也可以在更高的抽象層次上建立連接。第四,SystemVerilog增加了斷言的概念,這使得對功能的描述可以更加精準(zhǔn),也為設(shè)計中錯誤的定位提供了方便,對代碼的可讀性、可維護(hù)性和設(shè)計效率有顯著的提高[5]。
標(biāo)簽數(shù)字基帶的整體設(shè)計原理基于ISO/IEC 18000-6C協(xié)議進(jìn)行,該協(xié)議對通信過程中的各個方面都做了嚴(yán)格的規(guī)定來確保通信的準(zhǔn)確性與可靠性,例如:通信時序、幀格式以及編解碼的方式等。因此需要各個模塊的緊密配合來滿足協(xié)議對數(shù)據(jù)編碼以及時序的要求。該設(shè)計采用摩爾型狀態(tài)機(jī)進(jìn)行編碼和時序控制,最終產(chǎn)生滿足協(xié)議要求的數(shù)據(jù)格式[6]。標(biāo)簽數(shù)字基帶頂層總線模型設(shè)計如圖1所示,各子模塊之間采用SystemVerilog接口進(jìn)行數(shù)據(jù)通信。
標(biāo)簽發(fā)送模塊主要包括BLF模塊、CNT模塊、P2S模塊、CRC_GEN模塊、FIFO模塊、ENCODE模塊、PREAMBLE模塊7個部分,各模塊功能為:
(1)BLF模塊:產(chǎn)生標(biāo)簽反向散射頻率;
(2)CNT模塊:計算輸入數(shù)據(jù)長度;
(3)P2S模塊:將并行輸入數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù);
(4)CRC_GEN模塊:產(chǎn)生循環(huán)冗余校驗(yàn)碼添加在數(shù)據(jù)尾部,用于數(shù)據(jù)校驗(yàn);
(5)FIFO模塊:數(shù)據(jù)緩存;
(6)ENCODE模塊:對從FIFO中讀取到的數(shù)據(jù)進(jìn)行FM0/MILLER編碼;
(7)PREAMBLE模塊:在編碼后的數(shù)據(jù)前端添加同步碼。
2.1.1 標(biāo)簽反向散射頻率
ISO/IEC 18000-6C協(xié)議規(guī)定,在接收到閱讀器發(fā)送的信息后,標(biāo)簽需要反向散射信息回復(fù)閱讀器,其反向散射頻率(BLF)由DR和TRcal兩個參數(shù)來設(shè)定,計算關(guān)系如式(1)所示:
其中DR表示除法比例,為Query命令中設(shè)定的參數(shù),可以取 8或者 64/3[7]。
2.1.2 CRC校驗(yàn)
ISO/IEC 18000-6C協(xié)議中規(guī)定了標(biāo)簽發(fā)送鏈路中采用數(shù)據(jù)檢驗(yàn)方式為CRC16校驗(yàn),并規(guī)定了CRC16校驗(yàn)的多項(xiàng)式為:X16+X12+X5+1。
綜合考慮電路資源的節(jié)省以及標(biāo)簽發(fā)送電路輸出的數(shù)據(jù)類型,該CRC16計算電路采用加法器與異或來實(shí)現(xiàn),圖2為CRC16校驗(yàn)碼的計算原理圖。
2.1.3 FIFO設(shè)計
由于數(shù)據(jù)編碼會對數(shù)據(jù)長度產(chǎn)生變化,因此在數(shù)據(jù)編碼之前,需要一個FIFO對需要編碼的數(shù)據(jù)進(jìn)行緩存。該設(shè)計中FIFO深度為128位,在FIFO的設(shè)計中加入了SystemVerilog所特有的斷言方法,對FIFO的只讀、只寫以及同時讀寫的行為進(jìn)行了描述,若在仿真過程中FIFO的行為不符合描述,那么斷言也會失敗,從而確保了FIFO設(shè)計的正確性,也為FIFO設(shè)計出現(xiàn)錯誤時的錯誤定位提供了方便。下面的代碼是FIFO模塊的SystemVerilog斷言。
圖1 標(biāo)簽數(shù)字基帶頂層總線模型
圖2 CRC16校驗(yàn)碼的計算原理圖
2.1.4 發(fā)送數(shù)據(jù)編碼模塊設(shè)計
標(biāo)簽發(fā)送模塊的編碼方式為FM0編碼或Miller編碼方式,具體的編碼方式和碼元速率是由閱讀器發(fā)送的Query命令決定的。FM0編碼的基本編碼符號和生成FM0編碼狀態(tài)圖如圖3所示,F(xiàn)M0在每個編碼符號的邊界會翻轉(zhuǎn)相位,此外,數(shù)據(jù)0通過其在編碼符號中間進(jìn)行額外的翻轉(zhuǎn)來表示這個數(shù)據(jù),而數(shù)據(jù)1除數(shù)據(jù)起始外無其他相位變化[8]。在FM0編碼結(jié)束后需要在碼元數(shù)據(jù)的尾端添加結(jié)束位,結(jié)束位以一個1的“冗余“”數(shù)據(jù)”(dummy1)來表示。
圖3 FM0基本編碼符號和編碼狀態(tài)圖
Miller編碼又稱為副載波調(diào)制編碼,其編碼也是通過相位的翻轉(zhuǎn)來實(shí)現(xiàn)的,基本編碼符號和編碼狀態(tài)圖如圖4所示。根據(jù)Miiller編碼規(guī)則及ISO/IEC 18000-6C協(xié)議規(guī)定,Miller編碼的方式與Query命令中m的取值有關(guān)。 如果 m 值為 2′b01,2′b10,2′b11,則對應(yīng)的編碼方式分別為 Miller2,Miller4,Miller8,每個數(shù)據(jù)都將分別編成 4位、8位、16位碼元[9],Miller副載波序列如圖 5所示。與FM0編碼類似,在Miller編碼尾部同樣需要添加一個dummy1作為結(jié)束位。
圖4 Miller基本編碼符號和編碼狀態(tài)圖
2.1.5 同步碼添加模塊設(shè)計
為了使閱讀器能夠正確探測接收到數(shù)據(jù)的起始位置從而正確接收到數(shù)據(jù),標(biāo)簽在發(fā)送數(shù)據(jù)時需要在數(shù)據(jù)前端添加同步碼。如圖6所示,同步碼會根據(jù)m[1:0]和TRext兩個參數(shù)的值的不同而不同。
標(biāo)簽接收模塊頂層主要包括HEAD_CHECK模塊、DECODE模塊、CRC_CHECK模塊、S2P模塊四個部分,各模塊功能為:
(1)HEAD_CHECK模塊:同步碼檢測;
(2)DECODE模塊:PIE解碼;
(3)CRC_CHECK模塊:CRC校驗(yàn);
(4)S2P模塊:串行數(shù)據(jù)傳換成并行數(shù)據(jù)。
2.2.1 同步碼檢測模塊
接收到閱讀器發(fā)送的數(shù)據(jù)后,首先要對數(shù)據(jù)進(jìn)行同步碼檢測,閱讀器發(fā)送鏈路添加的同步碼分為前同步碼和幀同步碼兩種類型,如果檢測到的同步碼包括界定符、數(shù)據(jù) 0、RTcal校準(zhǔn)符號三個部分,則該同步碼為幀同步碼且說明不是Query命令,數(shù)據(jù)緊跟在RTcal標(biāo)準(zhǔn)符號后。如果檢測到的同步碼包括界定符、數(shù)據(jù)0、RTcal校準(zhǔn)符號、TRcal校準(zhǔn)符號四個部分,則該同步碼為前同步碼且該命令為Query命令,數(shù)據(jù)緊跟在TRcal標(biāo)準(zhǔn)符號后。
圖5 Miller副載波序列
圖6 同步碼
2.2.2 接收數(shù)據(jù)解碼模塊設(shè)計
ISO/IEC 18000-6C協(xié)議規(guī)定的閱讀器到標(biāo)簽的通信使用 PIE(Pulse Interval Encoding)編碼,因此標(biāo)簽接收側(cè)應(yīng)當(dāng)對接收到的數(shù)據(jù)進(jìn)行PIE解碼。PIE編碼規(guī)則如圖7所示,在一次盤存周期中,PW和tari為固定值,PW為射頻脈沖寬度,Tari為一個數(shù)據(jù)“0”的參考時間間隔,數(shù)據(jù)“1”高電平持續(xù)時間在 tari到 1.5tari之間取值,該設(shè)計取數(shù)據(jù)“1”的編碼高電平持續(xù)時間為1.5tari。通過對 PIE編碼方式的研究,數(shù)據(jù)“0”和數(shù)據(jù)“1”的編碼結(jié) 果均由高電平開始低電平結(jié)束,由此可得到PIE解碼模塊的實(shí)現(xiàn)算法為,設(shè)置變量high和變量low,分別對高低電平進(jìn)行計數(shù),檢測到低電平到高電平的跳變則表示上一個數(shù)據(jù)已結(jié)束,根據(jù)變量high和變量low的值的關(guān)系,可以確定接收到的數(shù)據(jù)是0還是1,接著對變量清零重新計數(shù),從而實(shí)現(xiàn)PIE的解碼操作。
圖7 PIE編碼規(guī)則
2.2.3 CRC校驗(yàn)?zāi)K設(shè)計
協(xié)議規(guī)定,閱讀器發(fā)送Query命令時,在數(shù)據(jù)尾部添加CRC5校驗(yàn)碼,而發(fā)送其他命令時則為CRC16校驗(yàn)碼,因此標(biāo)簽需要根據(jù)接收到的數(shù)據(jù)的不同進(jìn)行CRC5和CRC16校驗(yàn)碼的檢測,確保接收數(shù)據(jù)的正確性。CRC校驗(yàn)開始時對 CRC16計算結(jié)果寄存器預(yù)置為 16′hFFFF,CRC5計算結(jié)果寄存器預(yù)置為5′b01001,若標(biāo)簽得到的最終校驗(yàn)結(jié)果為全0,則校驗(yàn)通過。
圖8 標(biāo)簽發(fā)送基帶仿真波形圖
圖9 標(biāo)簽接收基帶仿真波形圖
以上各模塊均使用SystemVerilog語言實(shí)現(xiàn),在Modelsim SE-64 10.4里編譯并進(jìn)行仿真驗(yàn)證。圖8所示為標(biāo)簽發(fā)送基帶仿真波形圖,選取編碼方式為Miller2編碼且標(biāo)簽反向散射16位隨機(jī)數(shù)(RN16),從圖上可以看出 RN16為16′h8d73,首先經(jīng)過了并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)的處理,其次為其計算CRC16校驗(yàn)碼并添加在串行RN16尾部,從圖中可以看出該文中CRC16校驗(yàn)碼為16′b00111-11000111111,接著數(shù)據(jù)經(jīng)過Miller2編碼處理,最后在數(shù)據(jù)前端添加同步碼并發(fā)送。
圖9為標(biāo)簽接收基帶仿真波形圖,文中閱讀器發(fā)送的是Query命令,標(biāo)簽基帶接收到命令后首先經(jīng)過了同步碼檢測并去除同步碼,PIE解碼以及CRC5校驗(yàn),最后將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),可以看出接收到的數(shù)據(jù)為17′h11a5e,數(shù)據(jù)以1000開始,為Query命令,數(shù)據(jù)接收正確。
本文主要介紹了在ISO/IEC 18000-6C協(xié)議下,利用SystemVerilog語言實(shí)現(xiàn)UHF RFID通信算法中標(biāo)簽數(shù)字基帶的實(shí)現(xiàn)方法。經(jīng)過軟件仿真,實(shí)現(xiàn)了標(biāo)簽數(shù)字基帶的發(fā)送以及接收操作,完成了該設(shè)計的仿真驗(yàn)證,仿真結(jié)果滿足協(xié)議要求。由于SystemVerilog語言中增加的數(shù)據(jù)類型、過程塊、接口、斷言等一些定義,使得利用SystemVerilog語言進(jìn)行建模時更加簡潔、出錯率更低、代碼更易維護(hù),同時SystemVerilog進(jìn)行建模和驗(yàn)證將成為今后發(fā)展的趨勢。