UVM = universal verification methodology(通用验证方法学,基于sv)
- encapsulation(封装)
- inheritance(继承)
- polymorphism(多态)
基于verilog的验证语言:
- verilog(功能模块化、随机化验证的不足)
- systemC(基于C++,需要用户自己管理内存)
- systemverilog(兼容verilog)
基于systemverilog的验证方法学:
- VMM
- OVM
- UVM(三大EDA厂商均支持)
driver:将获取的事务转化为pin级信号驱动DUT
sequencer:启动sequence产生事务,并将事务发送给driver
monitor:检测接口上的有效信号,并转化为事务,再发送到reference model 进行分析
agent:将sequencer、driver和monitor封装起来,连接sequencer和driver
reference model:模拟DUT的行为,根据激励来产生结果,该结果会送入scoreboard中比对
slave agent中的monitor往往是捕获DUT的输出信号并转化为事务的功能组件
scoreboard:比较预期的结果与DUT的输出结果是否一致
env:可包含多个agent、reference model、scoreboard以及其他连接组件和配置组件
testcase:测试案例,实例化env,配置env,启动测试平台
需要从UVM的基类扩展:
一个只有driver的UVM验证平台:
1、创建用户所需的transaction
2、创建sequence(产生并控制sequence)
//req是指向产生事务对象的指针,repeat 10 ->产生10个事务对象
3、创建sequencer
由于sequence不能启动body中的事务对象,需要由sequencer启动
4、创建driver
5、创建monitor
6、创建agent
7、创建env
8、创建testcase
//config 1、 调用set的位置(mytest所调用)2、调用的路径 3、目标变量的标识符 4、启动sequence的类型(default_sequence指向my_sequence)
9、运行测试平台
由于之前在testcase中加入了打印平台结构的函数