首页 > 其他分享 >UVM - 1

UVM - 1

时间:2024-03-13 16:34:42浏览次数:21  
标签:get 对象 UVM 单例 new class proxy

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


标签:get,对象,UVM,单例,new,class,proxy
From: https://www.cnblogs.com/Icer-newer/p/18069385

相关文章

  • UVM - 2 (补充虚基类及纯虚函数知识点)
    虚方法和纯虚方法虚方法定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。virtualfunction纯虚方法定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范......
  • UVM宏解释+odt文件转doc+merge命令和difflib+python调用命令+clog2和系统函数+java添
    UVM宏解释UVM_DISABLE_AUTO_ITEM_RECORDINGhttps://blog.csdn.net/MGoop/article/details/127295965itemrecord的方法主要是用于记录事务信息的,原理是调用accept_tr,begin_tr,end_tr。似乎和波形上显示出各个事务相关。默认情况下,在调用get_next_item()和item_done()时自动......
  • 【UVM】 【source_code】 uvm_cmdline_processor
    classuvm_cmdline_processor 函数get_arg_values()用于收集命令行(commandline)中匹配的参数,便于后续处理。返回所有匹配上的参数数量,所有匹配上的参数词尾被存放在values[$]中。sourcecodefunctionintget_arg_values(stringmatch,refstringvalues[$]);  int......
  • 2.1.一个简单的UVM验证平台------验证平台的组成
    1.1验证平台的组成:一个验证平台中通常要实现以下的功能:1.验证平台要能模拟DUT的各种真实使用情况,也就是可以提供激励,激励的功能是由driver来实现的。2.验证平台要能够根据DUT的输出来判断DUT的行为是否与预期相符合,称为计分板scoreboard3.验证平台能够收集DUT的输出并把它们传......
  • UVM Primer OOP前置部分(Chapter 6)
    资料:-UVMPrimer(英文原版)-UVMPrimer(中译版)前言:-本部分将包括UVMPrimer的第4章-第9章,仅整理OOP特性,不会涉及DUT及验证平台构建的相关内容。正文:本书的4-9章以一个动物园为例,讲述了OOP的不同特性,包括:-类-继承-多态-静态变量和方法-factory模式第六章:多态多态(polymorp......
  • UVM Primer OOP前置部分(Chapter 4-5)
    资料:-UVMPrimer(英文原版)-UVMPrimer(中译版)前言:-本部分将包括UVMPrimer的第4章-第9章,仅整理OOP特性,不会涉及DUT及验证平台构建的相关内容。正文:本书的4-9章以一个动物园为例,讲述了OOP的不同特性,包括:-类-继承-多态-静态变量和方法-factory模式第四章:OOP概述OOP的优点......
  • uvm error catcher
    classuvm_err_catcherextendsuvm_report_catcher;sringdemote_error_str[$];functionnew(stringname="uvm_err_catcher");super.new(name);endfunctionvirtualfunctionaction_ecatch();if(get_severity()==UVM_ERROR)begin......
  • 线程同步-uvm_event的用法
    在验证中可能出现一种场景:某些cfg在仿真过程中会更新,tb中用到这些cfg的component需要及时更新到最新的cfg.这里有两种解决方法方案一、通过config_dbset/get将cfg传到component的时候,由于传递的是cfg的句柄,所以在component中直接引用句柄中的值xxx_cfg.xxx,就可以实时得到cfg中......
  • UVM寄存器模型
    1.创建流程2.创建一个寄存器基类要extendsuvm_reg,然后创建寄存器的域3.调用`uvm_object_utils()注册基类4.创建DUT存储器模型5.封装到一起组成一整个寄存器6.为实现前门操作创建转换器uvm_sequence_itemreg2bus可以返回一个sequence_item数据类型,可以将寄存器类型的事......
  • C语言全局变量的extern+typedef函数指针+uvm_queue/pool/config_db/resource_db/barri
    C语言全局变量的extern全局变量在不同的文件引用,需要加上extern,才能引用到。如果没有extern关键词,则认为是一个定义,而不是引用,引发同名冲突。函数也是一样。要在本文件引用其它文件的函数,需要增补extern关键字。而其它文件,声明和定义过该函数。typedef函数指针https://zhuan......