一种基于UVM的RFID标签芯片验证装置

著录项
  • CN202010935322.0
  • 20200910
  • CN112069074A
  • 20201211
  • 上海明矽微电子有限公司
  • 孙晓霞;张建伟
  • G06F11/36
  • G06F11/36

  • 上海市浦东新区南汇新城镇环湖西二路888号C楼
  • 上海(31)
摘要
本发明装置是一种基于UVM的RFID标签芯片验证装置,包括静态组件:虚拟接口模块、调用run_test()方法、时钟生成模块、RFID标签的DUT和EEPROM模块。动态组件包括base_test模块、my_case模块、ENV模块、CONFIGURATION模块、agent模块、scoreboard模块、reference模块、driver模块和monitor模块。本发明采用UVM的方法学,使得验证效率更高、层次清晰,通过产生不同的测试用例和大量随机化测试,提高了验证的效率和可信程度。
权利要求

1.一种基于UVM的RFID标签芯片验证装置,其特征在于:静态组件包括调用run_test()方法、虚拟接口模块、时钟生成模块、RFID标签的DUT模块和EEPROM存储器模块;动态组件包括base_test模块、my_case模块、环境(ENV)模块、CONFIGURATION模块、代理器(agent)模块、结果比较(scoreboard)模块、参考模型(reference)模块、驱动器(driver)模块和输入监测(monitor模块。

所述静态组件包括调用run_test()方法、虚拟接口模块、时钟生成模块、RFID标签的DUT和EEPROM存储器模块。

所述初始块中调用run_test()方法,是整个验证装置的入口。它是uvm_root中的函数。运行仿真命令时,通过UVM_TESTNAME=“test_name”来执行该测试用例。本发明中,使用统一的测试用例名字my_case,每一个不同的测试用例文件夹中产生同样的文件my_case.sv。每次运行测试环境时,把每一个不同的测试用例拷贝到固定目录下,就可以用同一套测试脚本来运行测试装置了。

所述虚拟接口模块包含DUT与验证装置连接的所有信号。包括解调数据、调制数据、解调使能,调制使能、时钟、复位等信号。由于静态组件和动态组件之间不能直接通信,因此需要虚拟接口模块来实现测试装置(动态组件)与DUT(静态组件)的通信。它相对各个模块是独立的,因此降低了模块接口频繁改动带给它的影响。

所述时钟生成模块用于生成RFID系统中所用的一系列时钟信号,并连接到虚拟接口模块中。静态模块中的DUT、动态模块的驱动器和输入监控模块都通过虚拟时钟模块与时钟信号相连。

所述RFID标签的DUT就是标签设计模块,为验证模块待测模块。本发明中,DUT的所有输入和输出信号都连接至虚拟接口模块中,通过虚拟接口模块,再将DUT的输入解调信号与驱动器(driver)的输出信号相连,DUT的输出调制信号与输入监测(monitor)模块相连。

所述EEPROM模块,存储各类DUT上电时需要得到的配置信息、下电时需要记录的信息以及在读写命令中的数据操作。该EEPROM模块模拟实际EEPROM的擦写和读行为,与DUT进行数据交互。

所述动态组件是验证系统的关键组成部分,包括base_test模块、my_case模块、ENV模块、CONFIGURATION模块、agent模块、scoreboard模块、reference模块、driver模块和monitor模块。

所述base_test模块派生自uvm_test。被静态组件run_test调用。它包含了ENV和CONFIGURATION模块。同时用uvm_config_db的配置方式把CONFIGURATION模块中的所有配置参数传入至agent中。

所述my_case模块派生自base_test。而所述base_test模块派生自uvm_test,因此UVM平台验证中,所有test cases都是派生自uvm_test。在该测试用例中,产生成帧所需的事务类Transaction,比如载波数目、发送命令、写数据等等。在该测试用例my_case中,通过实例化ENV来实现对所有组件的实例化,因此事务类Transaction会同步发送给reference模块、driver模块和monitor模块。

所述CONFIGURATION是一个基类。它包含了RFID标签设计中需要的所有固化参数,不需要随机化。可以被ENV中所有的组件调用。该模块主要是为了增加验证装置代码的可读性和易修改性。

所述ENV模块派生自uvm_env,它定义了所有的组件。通过对ENV的实例化,就实现了对所有组件的实例化。本验证装置中,ENV实例化的组件包括参考模型(reference),代理(agent)模块和结果比较模块(scoreboard),其中代理(agent)模块又包含了驱动器、输入监控模块和序列发生器(Sequencer)。ENV模块也描述了各个组件之间的连接关系:代理(agent)模块中输入监测模块的输出数组连接到结果比较模块(scoreboard)中;参考模型(reference)的输出数组连接到结果比较模块(scoreboard)中;代理(agent)模块中驱动器模块的事务类相连到参考模型(reference)中。

所述agent模块,包含了驱动器(driver)、输入监控模块(monitor)和序列发生器(Sequencer)。agent模块包含了所有同一类协议的模块,目的是提供一个验证组件,允许用户生成驱动(driver)和监控DUT事务(monitor)。同时,驱动器模块把事务类连到输入监控模块(monitor)中。

所述agent模块的序列发生器(Sequencer),在序列和驱动器之间通信起到桥梁的作用。在收到驱动器(driver)的请求后,序列发生器会把测试用例中的事务类(Transaction)传送给驱动器(driver)。

所述驱动器(driver)模块,是将序列发生器(Sequencer)发送过来的抽象事务类转换成实际激励。驱动器模块产生的信号模拟解调信号,根据事务类产生具体的帧格式。所述驱动器(driver)模块功能包含产生帧头(sof)、产生帧内容(payload)、CRC16校验、随机数读取、数据加密、产生帧尾(eof)和错误格式的注入。本发明中,驱动器(driver)模块的CRC校验和加密模块,是通过DPI方式直接调用C++函数产生。

所述输入监控模块(monitor),是监测虚拟接口中与RFID待测标签相连的调制信号。本发明中,事务类中包含调制方式的参数,通过解调信号传送至标签待测DUT。输入监控模块(monitor)将待测标签DUT的调制信号还原成数据包,检测CRC16无误后将该数据包发送给scoreborad模块。

所述参考模型(reference),是根据测试用例所产生的事务类,模拟待测标签DUT的行为模型。本发明中,标签的行为模型是按照协议产生三种响应:无响应、成功响应或者失败响应。本发明中,无响应是指调制信号没有01跳变,因此用8比特全1的方式代替存放至scoreboard中;本发明中,成功响应是指对协议命令的正确回复,同时可能陪伴着对EEPROM的读写操作;本发明中,失败响应是指所发解调信号有错误注入或者命令格式不支持。这三种响应回复都以数据包形式输送到scoreboard模块,用与跟monitor产生的数据包作对比。

所述结果比较(scoreboard)模块是比较结果的模块。比较输入监测monitor模块的输出数据与参考模型(reference)是否相符。如果结果一致,则通知驱动器发送下一笔事务类(Transaction);如果比较失败,就报告UVM_ERROR,停止验证流程。

2.一种基于UVM的RFID标签芯片验证装置,包括以下步骤:

1)按图表1所示,建立验证装置。初始化验证装置,产生系统时钟信号。

2)在驱动器中发送复位信号来复位验证装置和待测DUT。

3)驱动器向序列发生器(sequencer)发送获得事务类的请求,序列发生器从测试实例中获得事务类并发送至驱动器。再通过验证装置,将该事务类发送至参考模型和输入监测模块。

4)驱动器根据事务类产生帧信号,并将该信号发送至虚接口;同时发送指示信号至输入监测模块。

5)当DUT成功接收到驱动器所发帧信号,并按协议要求发送正确响应回复。输入监测模块收到驱动器发送的指示信号后,启动搜索调制信号。输入监测模块在协议规定时间内,根据事务类中的配置,成功搜索到调制信号后,把收到的数据包通过接口传送至结果比较模块。

6)参考模型模块从驱动器中得到事务类,根据事务参数配置,得到标签RFID应该给出的预期响应,并把该响应值传送至结果比较模块。

7)结果比较模块比较输入监控模块和参考模型的两个数组,假如结果一致,则通知驱动器发送下一个请求到序列发生器,获取新的事务类;假如结果不一致,则报错,停止仿真。

说明书
技术领域

本发明属于芯片验证领域。尤其涉及标签芯片的数字系统验证方法。

随着高频或超高频RFID标签芯片数字系统模块功能复杂,协议实现和验证难度加大,验证工作成为标签芯片设计中的一个重要环节。

传统的验证方法需要大量的定向激励,人为检测波形验证,导致验证效率低下。本发明基于UVM(Universal Verification Methodology)方法学搭建了一种全新的标签芯片数字验证系统,完成了对标签芯片的RTL功能验证,有效解决了传统验证方法的许多弊端。

图2为基于UVM的RFID标签芯片验证树状架构图,按照大类可以分成静态组件和动态组件:

所述静态组件包括调用run_test()方法、虚拟接口模块、时钟生成模块、RFID标签的DUT和EEPROM存储器模块。

进一步,所述初始块中调用run_test()方法,是整个验证装置的入口。它是uvm_root中的函数。运行仿真命令时,通过UVM_TESTNAME=“test_name”来执行该测试用例。本发明中,使用统一的测试用例名字my_case,每一个不同的测试用例文件夹中产生同样的文件my_case.sv。每次运行测试环境时,把每一个不同的测试用例拷贝到固定目录下,就可以用同一套测试脚本来运行测试装置了。

进一步,所述虚拟接口模块包含DUT与验证装置连接的所有信号。包括解调数据、调制数据、解调使能,调制使能、时钟、复位等信号。由于静态组件和动态组件之间不能直接通信,因此需要虚拟接口模块来实现测试装置(动态组件)与DUT(静态组件)的通信。它相对各个模块是独立的,因此降低了模块接口频繁改动带给它的影响。

进一步,所述时钟生成模块用于生成RFID系统中所用的一系列时钟信号,并连接到虚拟接口模块中。静态模块中的DUT、动态模块的驱动器和输入监控模块都通过虚拟时钟模块与时钟信号相连。

进一步,所述RFID标签的DUT就是标签设计模块,为验证模块待测模块。本发明中,DUT的所有输入和输出信号都连接至虚拟接口模块中,通过虚拟接口模块,再将DUT的输入解调信号与驱动器(driver)的输出信号相连,DUT的输出调制信号与输入监测(monitor)模块相连。

进一步,所述EEPROM模块,存储各类DUT上电时需要得到的配置信息、下电时需要记录的信息以及在读写命令中的数据操作。该EEPROM模块模拟实际EEPROM的擦写和读行为,与DUT进行数据交互。

所述动态组件是验证系统的关键组成部分,包括base_test模块、my_case模块、ENV模块、CONFIGURATION模块、agent模块、scoreboard模块、reference模块、driver模块和monitor模块。

进一步,所述base_test模块派生自uvm_test。被静态组件run_test调用。它包含了ENV和CONFIGURATION模块。同时用uvm_config_db的配置方式把CONFIGURATION模块中的所有配置参数传入至agent中。

进一步,所述my_case模块派生自base_test。而所述base_test模块派生自uvm_test,因此UVM平台验证中,所有test cases都是派生自uvm_test。在该测试用例中,产生成帧所需的事务类Transaction,比如载波数目、发送命令、写数据等等。在该测试用例my_case中,通过实例化ENV来实现对所有组件的实例化,因此事务类Transaction会同步发送给reference模块、driver模块和monitor模块。

所述CONFIGURATION是一个基类。它包含了RFID标签设计中需要的所有固化参数,不需要随机化。可以被ENV中所有的组件调用。该模块主要是为了增加验证平台代码的可读性和易修改性。

所述ENV模块派生自uvm_env,它定义了所有的组件。通过对ENV的实例化,就实现了对所有组件的实例化。本验证装置中,ENV实例化的组件包括参考模型(reference),代理(agent)模块和结果比较模块(scoreboard),其中代理(agent)模块又包含了驱动器、输入监控模块和序列发生器(Sequencer)。ENV模块也描述了各个组件之间的连接关系:代理(agent)模块中输入监测模块的输出数组连接到结果比较模块(scoreboard)中;参考模型(reference)的输出数组连接到结果比较模块(scoreboard)中;代理(agent)模块中驱动器模块的事务类相连到参考模型(reference)中。

所述agent模块,包含了驱动器(driver)、输入监控模块(monitor)和序列发生器(Sequencer)。agent模块包含了所有同一类协议的模块,目的是提供一个验证组件,允许用户生成驱动(driver)和监控DUT事务(monitor)。同时,驱动器模块把事务类连到输入监控模块(monitor)中。

所述agent模块的序列发生器(Sequencer),在序列和驱动器之间通信起到桥梁的作用。在收到驱动器(driver)的请求后,序列发生器会把测试用例中的事务类(Transaction)传送给驱动器(driver)。

所述驱动器(driver)模块,是将序列发生器(Sequencer)发送过来的抽象事务类转换成实际激励。驱动器模块产生的信号模拟解调信号,根据事务类产生具体的帧格式。所述驱动器(driver)模块功能包含产生帧头(sof)、产生帧内容(payload)、CRC16校验、随机数读取、数据加密、产生帧尾(eof)和错误格式的注入。本发明中,驱动器(driver)模块的CRC校验和加密模块,是通过DPI方式直接调用C++函数产生。

所述输入监控模块(monitor),是监测虚拟接口中与RFID待测标签相连的调制信号。本发明中,事务类中包含调制方式的参数,通过解调信号传送至标签待测DUT。输入监控模块(monitor)将待测标签DUT的调制信号还原成数据包,检测CRC16无误后将该数据包发送给scoreborad模块。

所述参考模型(reference),是根据测试用例所产生的事务类,模拟待测标签DUT的行为模型。本发明中,标签的行为模型是按照协议产生三种响应:无响应、成功响应或者失败响应。本发明中,无响应是指调制信号没有01跳变,因此用8比特全1的方式代替存放至scoreboard中;本发明中,成功响应是指对协议命令的正确回复,同时可能陪伴着对EEPROM的读写操作;本发明中,失败响应是指所发解调信号有错误注入或者命令格式不支持。这三种响应回复都以数据包形式输送到scoreboard模块,用与跟monitor产生的数据包作对比。

所述结果比较(scoreboard)模块是比较结果的模块。比较输入监测monitor模块的输出数据与参考模型(reference)是否相符。如果结果一致,则通知驱动器发送下一笔事务类(Transaction);如果比较失败,就报告UVM_ERROR,停止验证流程。

一种基于UVM的RFID标签芯片验证装置,包括以下步骤:

1.按图表1所示,建立验证装置。初始化验证装置,产生系统时钟信号。

2.在驱动器中发送复位信号来复位验证装置和待测DUT。

3.驱动器向序列发生器(sequencer)发送获得事务类的请求,序列发生器从测试实例中获得事务类并发送至驱动器。再通过验证装置,将该事务类发送至参考模型和输入监测模块。

4.驱动器根据事务类产生帧信号,并将该信号发送至虚接口;同时发送指示信号至输入监测模块。

5.当DUT成功接收到驱动器所发帧信号,并按协议要求发送正确响应回复。输入监测模块收到驱动器发送的指示信号后,启动搜索调制信号。输入监测模块在协议规定时间内,根据事务类中的配置,成功搜索到调制信号后,把收到的数据包通过接口传送至结果比较模块。

6.参考模型模块从驱动器中得到事务类,根据事务参数配置,得到标签RFID应该给出的预期响应,并把该响应值传送至结果比较模块。

7.结果比较模块比较输入监控模块和参考模型的两个数组,假如结果一致,则通知驱动器发送下一个请求到序列发生器,获取新的事务类;假如结果不一致,则报错,停止仿真。

本发明给标签芯片的数字验证带来了几大益处:

1.在测试实例中利用随机化测试,加大对corner case的遍历性。

2.驱动器、参考模型、输入监测模块和结果比较等模块结构功能清晰,搭建平台灵活。

3.虚拟接口模块减少模块间连线工作,只需在虚拟接口模块中定义信号名,即可灵活应用。

4.注入错误帧机制更方便。

5.UVM的直接程序接口(DPI)使system verilog语言能够与C++语言实现交互。一些复杂的C++语言的加密算法可直接导入使用。

本发明的验证系统及验证方法不仅能对单个命令进行验证,也能对特定的和随机的命令流进行验证,并自动检查验证结果.本发明验证系统的层次结构保证了代码重用性,解决了RFID标签芯片验证充分性的问题,同时提高了验证效率.

图1为本发明示例基于UVM的RFID标签验证平台架构图。

图2为本发明示例基于UVM的RFID标签验证功能电路图。

为了使本发明的目的、技术方案及优点更加清楚明白,基于ISO/IEC 15693协议,结合附图及实例,对本发明进行进一步详细说明。此处所描述的具体实施列仅用以解释本发明,并不用于限定本发明。

如图2所示,时钟生成模块产生时钟(13.56Mhz)并送入虚接口模块(virtualinterface)。在验证顶层模块(top_tb.sv)中,虚接口模块中的时钟连接至DUT顶层的时钟输入端。驱动器(driver)和输入监测模块(monitor)可调用虚接口模块中的时钟信号。

如图2所示,测试用例产生所需事务类(Transaction),其包括vcd2vicc_data_code、select_flag、uid_en、cmd_code、afi_flag、dsfid_en等成帧所需参数。事务类通过序列(sequence)和序列发生器(sequencer)发送给驱动器(driver),驱动器再把事务类送到输入监控模块(monitor)和参考模型(reference model)。事务类中的factory机制,可以将所有的事务类存放在内存中,以供后续各模块组件调用;事务类模块在运行期间保持不变,直至新的事务类覆盖旧的事务类;事务类模块中根据设计需求,产生所有参数的约束范围,如果测试用例没有对事务类设置具体值,那么就在约束范围内的某个随机值作为后续模块的参数。

如图2所示,驱动器(driver)接收序列发生器(sequencer)传递过来的事务类配置值、虚拟模块的时钟和C++的DPI函数。根据参数配置,例如器件类型、发送速率、命令、帧格式、CRC校验类型和错误注入等等,驱动器产生相应调制信号,该信号连接至虚拟接口模块中。

如图2所示,输入监测模块(monitor)接收驱动器(driver)传递过来的事务类配置值、虚拟模块的时钟和驱动器(driver)发送的指示信号。驱动器(driver)发送指示信号告诉检测模块调制信号已经发送完毕,输入监测模块(monitor)根据事务类配置(如接收速率、载波数和命令等等)开始搜索帧头,一个超时计数器同步计数。标签根据测试用例的参数要求,输出对应的调制信号,例如ISO15693协议中的调制信号包含了单载波低速率、单载波高速率、双载波低速率和双载波高速率四种不同速率的副载波解码算法。当监测到所需要的帧头(sof)后,输入监测模块(monitor)把接收到的数据payload放入动态数组中,直至监测到帧尾(eof)并确认crc校验正确后,monitor把动态数组推送至scoreboard中。如果在协议规定的时间内未收到帧头信号,则产生超时信号,把8比特全1数据推送至scoreboard中表明未收到调制信号。

如图2所示,参考模型(reference)接收驱动器(driver)传递过来的事务类配置值(Transaction),产生标签相应的响应数据并推送至scoreboard。

如图2所示,结果比较模块(scoreboard)接收来自monitor和reference的数据,如果相等,则通知driver发送下一个sequence;如果不等,则停止运行,产生错误报告供debug。

如图2所示,虚拟接口模块主要包含时钟模块产生的时钟信号、驱动器的解调信号、解调使能信号、待测模块的调制信号和待测模块的调制使能信号。

如图2所示,存储器Memory是全局变量,一般由用户可操作区和配置区两大部分组成,其大小根据实际标签设计决定。驱动器(driver)所发送用户信息(uid)、密码等各类与标签强相关的信息,都存放在该Memory中的配置区。而参考模型(reference)模块在接收到读或写操作时,也要访问Memory的用户操作区域。

由于UVM有一套完整的验证装置结构,所以搭建平台结构也非常清晰。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

本文发布于:2024-09-24 06:24:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/72666.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议