基于SystemVerilog的超高频RFID标签数字基带设计与研究*
2021-01-22汪永峰
汪永峰,卜 刚
(南京航空航天大学 电子信息工程学院,江苏 南京 211106)
0 引言
随着人工智能和物联网概念的不断普及,作为核心技术之一的射频识别技术已经在交通、电网、物流、存储等众多领域得到了广泛应用,其中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中进行了仿真,验证了该设计功能的正确性。
1 SystemVerilog简介
SystemVerilog是由Accellera标准组织在Verilog的基础上提出的,是一种硬件描述语言和验证语言(HDVL)[3]。SystemVerilog是Verilog设计语言的高层次拓展,这些拓展为Verilog提供了强有力的增强,在一个更高的抽象层上提高了设计的建模能力[4]。具体来说,SystemVerilog有以下几点优势。第一,SystemVerilog增加了新的数据类型,如:结构体、枚举类型、打包和非打包数组等,在编写有限状态机等方面可以更加简洁准确。第二,相同的声明集合可以被静态验证和仿真工具同时使用。第三,SystemVerilog增加了接口概念,模块之间的通信可以通过接口来实现,大大简化了模块的代码量,同时也可以在更高的抽象层次上建立连接。第四,SystemVerilog增加了断言的概念,这使得对功能的描述可以更加精准,也为设计中错误的定位提供了方便,对代码的可读性、可维护性和设计效率有显著的提高[5]。
2 标签数字基带主要模块设计
标签数字基带的整体设计原理基于ISO/IEC 18000-6C协议进行,该协议对通信过程中的各个方面都做了严格的规定来确保通信的准确性与可靠性,例如:通信时序、帧格式以及编解码的方式等。因此需要各个模块的紧密配合来满足协议对数据编码以及时序的要求。该设计采用摩尔型状态机进行编码和时序控制,最终产生满足协议要求的数据格式[6]。标签数字基带顶层总线模型设计如图1所示,各子模块之间采用SystemVerilog接口进行数据通信。
2.1 标签发送模块设计
标签发送模块主要包括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两个参数的值的不同而不同。
2.2 标签接收模块设计
标签接收模块顶层主要包括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 标签接收基带仿真波形图
3 仿真
以上各模块均使用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命令,数据接收正确。
4 结论
本文主要介绍了在ISO/IEC 18000-6C协议下,利用SystemVerilog语言实现UHF RFID通信算法中标签数字基带的实现方法。经过软件仿真,实现了标签数字基带的发送以及接收操作,完成了该设计的仿真验证,仿真结果满足协议要求。由于SystemVerilog语言中增加的数据类型、过程块、接口、断言等一些定义,使得利用SystemVerilog语言进行建模时更加简洁、出错率更低、代码更易维护,同时SystemVerilog进行建模和验证将成为今后发展的趋势。