摘要: 通用验证方法(UVM)是一种基于SystemVerilog类库的验证平台开发框架,其可重复使用的组件使验证工程师能够创建具有标准化层次和接口的功能性验证环境。UVM将随机生成的测试激励、自我测试平台和随机约束等方法有效地结合起来,采用最佳框架来执行基于区域覆盖范围的验证,从而使验证工程师能够降低风险并满足缩短时间的迫切需要。本文是基于UVM验证自动化方法的讨论。本文通过学习UVM框架的寄存器模型思想,提出一种新的寄存器验证解决方案,将对寄存器的验证操作封装在一个Ral模型之内,通过修改寄存器模型实现维护修改工作,大大提高验证效率。
关键词:UVM;寄存器验证;自动化方法
引言
动态验证和形式化验证是目前集成电路的两种验证方法。本文采用的是基于UVM的动态仿真验证方法。SystemVerilog是Verilog的扩展集,它既兼容Verilog,又具有所有面向对象语言的特性,同时还为验证提供带约束的随机激励等。在SystemVerilog的基础上,主要的验证方法有以下三种:OVM、VMM和UVM。UVM采纳了VMM的寄存器解决方案Ral,此外UVM还继承OVM的验证方式,目前UVM代表着验证方法学的发展方向。
1.通用验证方法学UVM
2011年,synopsys、Mentor和cadence(EDA的三大供应商)联合推出了UVM通用认证方法,这是在整个电子行业有效开发和重复使用认证环境的标准。UVM库是使用System Verilog语法和语义定义的类库,它结合了面向对象的编程概念和功能,可创建强大、可重复使用、自动化、易于维护和的测试流程组件,这些组件通常为业界所接受。UVM框架将验证的各个流程都拆分开来,包括transaction、driver、sequence、sequencer、monitor、agent、test、env、top等部分。
不同的激励通过driver上的接口施加给DUT,monitor检测DUT是否有输出。reference model的输入跟driver施加给DUT的完全一样,reference model的输出直达scoreboard,用于和monitor检测到的DUT的输出作比较。
agent将driver、monitor、sequencer封装在一起。driver、monitor、sequencer之间的关系是物理接口协议的体现,因此不同的agent体现了不同的接口协议。env相当于一个大的环境,所有的组件包含在其内部作为其成员变量。UVM框架如下图:
2.寄存器模型组成和工作方式
UVM寄存器模型的组成主要包括uvm_reg_field、uvm_reg、uvm_reg_block、uvm_reg_map。
uvm_reg_field是可以直接使用的类,是具体存储变量数值的变量也是最小的单位。uvm_reg是一个虚类,需要派生新类后加入uvm_reg_field实例化才可使用。uvm_reg_block是用来组织uvm_reg的一个类,所有的寄存器模型都必须含有uvm_reg_block。uvm_reg_map里储存着寄存器模型中各个寄存器的地址,所有的寄存器模型里也必须含有uvm_reg_map。
在通过寄存器模型的前门访问操作时,存储着操作类型和地址的uvm_reg_bus_op变量会从sequence中产生出来,uvm_reg_bus_op里传递的信息经过转换器处理之后发送给bus_sequencer,bus_sequencer再发送给bus_driver,bus_driver通过其特有的接口来对前门进行访问操作。而后门操作与前门操作实现的方法一致,不过前门消耗的运行时间要远大于后门操作的运行时间,这体现出了后门操作的优势。但是在波形文件中无法找到后门访问操作的痕迹,导致验证人员无法通过波形文件准确判断出寄存器被访问实际的读写时间,从而只能通过脚本来对后门访问操作时输出的打印信息进行提取,这无疑增加了调试难度。
3.Ral模型的生成与应用
UVM Ral是访问设计寄存器的高级面向对象抽象层。Ral模型模仿了设计寄存器,并且整个模型是完全可配置的。由于其抽象行为,Ral模型可以轻松地从模块级别迁移到系统级别,它还有一个现成的UVM寄存器序列列表。Ral模型包含用于验证寄存器和存储设备行为的验证方法,此外Ral支持两种访问模式:前门和后门。Ral方案是将寄存器验证操作封装在模板中,通过读写映射执行寄存器检查,这样所有寄存器维护和编辑任务只需修改模板即可。Ral将对寄存器的验证操作封装在一个模型之内,首先根据spec中关于寄存器属性的描述通过填表式的方法利用python工具直接生成Ralf文件。然后Ralf使用Ral附带的Ralgen命令生成Ral模型文件,然后将Ral模型集成到UVM平台中,以完成DUT中的寄存器验证,最后导出验证结果。在此方法中,生成Ral模型的过程是自动的,当寄存器更改时,只需编辑描述寄存器属性的Excel电子表格,然后在不更改整个验证环境的情况下重新生成Ralf文件进而生成Ral模型,从而降低出错的可能性并提高效率。
4.Ral模型的验证工作流程
首先只使用driver创建和验证前门操作,之后使用寄存器模型Ralf文件描述寄存器的属性和信息,通过Ralf文件利用UVM提供的Ral generator生成Ral类,这里利用python和tcl脚本语言来实现自动化操作。然后在Ral类的基础上创建Ral适配器(adapter),接着在验证环境中实例化Ral模型,使用regmodel.default_map.set_sequencer在验证环境中链接,寄存器只使用default_map作为接口,接着使用regmodel.default_map.set_auto_predict(1)作自动镜像预测,编写并运行Ral的测试案例。通过模拟CPU在总线上发出指令来读写寄存器,这是前门访问寄存器模型的实质,同时仿真时间是向前走的,有波形可依。因为后门访问寄存器模型采用对变量的操控来读写寄存器,所以验证人员只能通过信息打印来查看信息。验证是通过映射来对比期望值和镜像值,从而判断寄存器模型读写是否一致。
DUT中寄存器的值可能会随时变更,所以寄存器模型的寄存器的值有时与DUT中相关寄存器的值并不一致。对此验证中的寄存器模型需要设置专门的变量来与DUT的变量值保持一致,这个寄存器模型变量被称为DUT的镜像值。在测试案例中需要使用镜像值,并且需要合理设置镜像值。实际对于存储器而言,镜像值和期望值是不存在的,正常情况下可以使用update用期望值更新镜像值。但是镜像值的更新时序不一定精确到时钟周期,所以DUV内部的更改可能不会影响到镜像值。当完成 RAL模型在 UVM 平台的集成后就可以在测试用例中调用相应的 sequence 实现相应的验证目的,通过实验也发现这种验证方法可行并且高效可重用。
结束语
UVM是IC验证的重要工具,大大缩短了整体研究和开发验证时间。本文通过将Ral模型与验证框架结合为一体的方式大大提高了寄存器模型验证可重用性,另外通过脚本和填表的自动化方法大大节省了验证工作的前期准备时间,提高了整体的验证效率。
参考文献
[1]邓庆勇,朱鹏,习建博.基于UVM的DBF系统模块级可重用验证平台的实现[J].微电子学与计算机,2018,35(01):115-117+123.
[2]牛玉坤,孟令琴.基于UVM实现SD存储控制器的功能验证[J].工业控制计算机,2017,30(08):20-21+23.
[3]习建博.一种基于UVM的FPGA通用可配置UART协议的验证方法[J].电子技术与软件工程,2017(13):159.