UVM - 1
- VMM/OVM - 都是验证方法学
- CDV - coverage driver verification - 覆盖率驱动的验证
课程概述
课程概述
内容
OOP:class类
OOP:封装
OOP:继承
OOP:多态
- 不是虚方法,看句柄的类型
- 是虚方法,看对象的类型
- 使用虚方法,创建通用的方法
OOP编程规则:在class之外定义子函数
参数化的class
自定义class
Static property 静态变量/数据
- 静态变量在编译的时候就会分配空间,不依赖new,是一个类的所有对象都共享的变量
Static method 静态子函数/方法
- 可以通过句柄进行调用方法,不用创建对象调用方法
- 静态方法中只能处理静态变量
- 调用方法:类名::静态方法
Singleton class 单例类
- 用于定义全局行为,比如打印和工厂,可以直接通过类名进行调用方法
- 单例类没有对象
- 只包含静态变量和静态方法
Singleton object 单例对象
- 单例对象用于创建一个全局可见可操作的对象,提供定制化服务/函数
- 先将new函数进行本地化:使用local进行修饰,在外部不能创建对象
- 定义一个get函数获取对象,在get函数中调用new函数之前,先判断该类的对象是否为null,如果为null就可以继续创建对象,如果不为null,就不创建新的对象,保证了只能创建一个对象
- 调用get函数创建单例对象
class singleton;
function new ();
endfunction
endclass
// 单例类 - 只有静态属性和方法
class print;
static int err_count=0,max_errors=10;
static function void err(string msg);
$display("@%t:Error %s",$realtime,msg);
if(err_count++ > max_errors) $finish;
endfunction
endclass
// 创建单例对象
class transaction;
static singleton me = get();
static function singleton get();
if(me == null)
me = new();
return me;
endfunction;
local function new();
endfunction
extern function void print();
endclass
// 创建单例对象
factory :: get();
Proxy class 代理类
Factory machanism 工厂机制
- registry[string] - 是一个关联数组,以字符串类型作为索引
- registry中会存在不同类(driver\transaction)的代理类
- factory也只有一个对象 - 单例
- register(proxy_base proxy) - 传入每个类的代理类,通过代理类中的名称和registry中的名称关联
- create_object_by_type(proxy_base proxy,string name) - 传入每个类的代理类和类的名称
- create_object(name) - 分配组件的对象
- override[string] - 理解为一个override表
- find_override(proxy_base proxy) - 在override表中看是否存