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表中看是否存


posted @ 2024-03-13 16:29  Icer_Newer  阅读(77)  评论(0编辑  收藏  举报