本实验主要完成UVM的基本概念和仿真操作:
- 懂得如何编译UVM代码
- 理解SV和UVM之间的关系
- 了解UVM验证顶层盒子与SV验证顶层盒子之间的联系
- 掌握启动UVM验证的必要步骤
编译
编译文件uvm_compile.sv,待正常编译正常结束。在work库中仿真模块uvm_compile,在命令窗口敲入“run -all”,可以观察到仿真输出语句:
在验证顶层都将需要这两句话:
import uvm_pkg::*;
`include "uvm_macros.svh"
这两句话代表着从预编译的UVM库可以在Library view中观察到:
SV和UVM之间的关系
添加sv_class_inst.sv文件,编译,仿真,实际上这个实验是SV模块实验环节的抽象,它只是在顶层module容器中要例化软件验证环境的顶层,即SV class top。
由仿真结果可知代码执行顺序。
接下来再添加加 uvm_class_inst.sv,编译仿真,从打印的信息来看,也是再模拟验证结构的传力,只不过这一次利用了UVM的类uvm_component来定义了top类,继而在创建了这个顶层的验证结构。
我们所谓的 UVM 验证环境指的首先是提供一个 UVM 的“容器”,即接下来所有的 UVM 对象都会放置在其中,这样也可以成为 UVM 的顶层,这就类似于之前 SV 模块实验中的顶层容器 test 一样。
UVM 验证顶层与 SV 验证顶层的对比
启动 UVM 验证的必要步骤
这个例子即 uvm_test_inst 显然与 uvm_class_inst 带给人的感官不同,如果问你哪个可以作为 UVM 验证顶层容器的话,你估计会选择 uvm test inst 吧。没错,我们之所以这样选择,是基于下面几处代码的不同以及它们所带来的影响所造成的:
- 只有继承于 uvm test 的类,才有"资格”可以作为 UVM 验证环境的顶层。
- 创建顶层验证环境, 有且只能依赖于 run_test( “UVM_TEST_NAME” )来传递,或者稍后可以学习到可以通过仿真参数传递,而不是通过构建函数new()来实验的。尽管 new()可以创建一个对象, 但是不能做与顶层验证环境相关的其它工作。