1. Driver
1.1 driver类
使用UVM的原则:验证平台中所有的组件应该派生自UVM中的类。
UVM验证平台中的driver派生自uvm_driver,例:class my_driver extends uvm_driver;
*派生自uvm_driver的类中new函数的参数有两个,一个是string类型的name,另一个是uvm_component类型的parent;每一个派生自uvm_component的类都要有name和parent两个参数。
*driver中所要完成的事情在任务main_phase中执行,main_phase是uvm_driver中预先定义好的一个任务,它有一个类型为uvm_phase、名为phase的参数。
*uvm_info宏用于打印信息,它有三个参数。例:`uvm_info("my_driver","data is drivered",UVM_LOW);
对driver类的例化:
`timescale 1ns/1ns
`include "uvm_macros.svh"
import uvm_pkg::*;
`include"my_driver.sv"
module top_tb;
......
endmodule
1.2 加入factory机制
在一个类中可使用`uvm_component_utils()对类进行注册,并在tb中使用run_test语句创建类的对象,并自动执行main_phase任务,例:
class my_driver entends uvm_driver;
......
`uvm_component_utils(my_driver);
......
endclass
module top_tb;
......
initial begin
run_test("my_driver");
end
......
endmodule
*所有派生自uvm_component的类都应使用`uvm_component_utils()宏进行注册。
1.3 加入objection机制
在每个phase中,UVM会检查是否有objection被提起(raise_objection),如果有,那么等待这个objection被撤销(drop_objection)后停止仿真,如果没有则马上结束仿真。例:
phase.raise_objection(this);
phase.drop_objection(this);
raise_objection语句必须在main_phase中第一个消耗仿真时间的语句之前,raise_objection和drop_objection要成对出现。
1.4加入virtual interface
由于class中不能声明一个interface,必须使用虚接口。如:
virtual my_if vif;
config_db机制:set和get操作
在函数build_phase使用config_db来传递类和tb间的一些数据和例化成员变量等。