首页 > 其他分享 >UVM入门进阶1、2

UVM入门进阶1、2

时间:2023-07-15 15:22:58浏览次数:39  
标签:UVM 入门 object component name uvm type string 进阶

UVM入门进阶1

创建对象的四种方法

class trans extends uvm_object
    ...
endclass

class top extends uvm_test//uvm_test继承于uvm_component
    ...
endclass

class object_create extends top;
    trans t1,t2,t3,t4;
    `uvm_component_utils(object_create)
    function   new(string = "objecte_create",uvm_component_parent = this);//一般用this,如果是null,则表示uvm_top
        super.new(name,parent);
    endfunction
    function void build_phase(uvm_phase phase);
        uvm_factory f = uvm_factory::get();//get singleton factory,如果后面需要用工厂来创建对象就要写这句代码
        super.build_phase(phase);
        t1 = new("t1");//sv中的方式
        t2 = trans::type_id::create("t2",this); //以后经常用的
        void'($cast(t3,f.create_object_by_type(trans::get_type(),get_full_name(),"t3")));//利用factory创建
        void'($cast(t4,create_object("trans","t4")));//利用uvm_component创建
    endfunction
endclass

1.使用new函数进行创建

t1 = new();

2.使用type_id进行创建

创建uvm_component对象
    comp_type::type_id::create(string name, uvm_component parent)
创建uvm_object对象
    object_type::type_id::create(string name)

3.使用factory创建

uvm1.2中提供的原型
  pure virtual function
      uvm_object    create_object_by_type    (uvm_object_wrapper requested_type,  
                                              string parent_inst_path="",
                                              string name=""); 
  pure virtual function
      uvm_component create_component_by_type (uvm_object_wrapper requested_type,  
                                              string parent_inst_path="",
                                              string name, 
                                              uvm_component parent);
  pure virtual function
      uvm_object    create_object_by_name    (string requested_type_name,  
                                              string parent_inst_path="",
                                              string name=""); 

uvm_object_wrapper requested_type:用于表示对象类型
string parent_inst_path:父节点路径(object不需要)
string name:表示对象的句柄名
uvm_component parent:表示父节点句柄
string requested_type_name:表示类名

直接使用factory方法创建,注意要用全局唯一uvm_factory类对象factory调用上述方法,并且上述方法返回类型不是uvm_object就是uvm_component,所以要用$cast作类型转换。(t3为使用范例)

4.使用uvm_component方法创建

uvm1.2中提供的原型
  extern function uvm_component create_component (string requested_type_name,string name);
  extern function uvm_object create_object (string requested_type_name,string name="");

使用方法如t4,注意返回的函数类型是object类还是component类

一些常见的函数含义:

在工厂注册机制下,get_type_name(),get_name()在component组件类和object基类中的返回值是一样的,而get_full_name()在不同类型的类中,会有不同的返回值。
get_type():返回类型是uvm_object_wrapper,其为某一个类在工厂中注册时的句柄
uvm_object_wrapper requested_type其为某一个类在工厂中注册时的句柄
get_type_name():返回对象的class名,字符串类型
get_name():返回创建对象时,传入的字符串
get_full_name():在component类会返回当前component组件的完整路径,从uvm_test_top开始。在object类的返回值与get_name()一样,因为object类不是作为UVM树节点的,所以路径没有别的层次。
static function void set_type_override(uvm_object_wrapper override_type,bit replace=1); 代码中uvm_object_wrapper override_type并不是某一个具体实例的句柄,实际上是注册过后某一个类在工厂中注册时的句柄。使用new_type::get_type()可以找到

实验中遇到的一些函数

do_compare

virtual function bit do_compare (uvm_object rhs,uvm_comparer comparer)

A derived class should override this method to include its fields in a compare operation.
do_compare是用户自定义的compare的回调函数。如果比较成功返回1,比较失败返回0.

典型用法:

class mytype extends uvm_object;
    ...
    int f1;
    virtual function bit do_compare (uvm_object rhs,uvm_comparer comparer);
      mytype rhs_;
      do_compare = super.do_compare(rhs,comparer);
      $cast(rhs_,rhs);
      do_compare &= comparer.compare_field_int("f1", f1, rhs_.f1);
   endfunction
endclass

uvm_default_comparer.show_max=num设置显示比较时的最大错误数
function bit do_compare(uvm_object rhs,uvm_comparer comparer);
uvm_object rhs:右侧的,指的是在使用compare函数进行比较时右边的那个
uvm_comparer comparer:表示比较时采用的比较器
注:在使用回调函数时,一般要添加void'($cast(rhs_,rhs))来对句柄类型进行转换

消息打印函数

uvm_info("MYINFO1", $sformatf("val: %0d", val), UVM_LOW)
uvm_warning("MYWARN1", "This is a warning")
uvm_error("MYERR", "This is an error")
uvm_fatal("MYFATAL", "A fatal error has occurred")

phase机制

config机制

消息管理

set_report_id_verbosity_hier("ID",verbosity);//可以指定ID进行余度过滤
uvm_root::get().set_report_id_verbosity_hier("ID",verbosity);/可以从顶层对ID进行过滤

标签:UVM,入门,object,component,name,uvm,type,string,进阶
From: https://www.cnblogs.com/jssblog/p/17556176.html

相关文章

  • 【转】Docker入门笔记04:三大核心概念
    原文:https://zhuanlan.zhihu.com/p/312142777Docker的三大核心概念镜像Image容器Container仓库RepositoryDocker大部分的操作都围绕它的三大核心概念一、Docker镜像Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的用于创建容器的模板。例如,一个镜像可以包含一个基......
  • 【转】Docker入门笔记01:Docker容器技术的发展历程
    原文:https://zhuanlan.zhihu.com/p/304623118最近因为工作需要,要学习一些基本的Docker知识,所以整理了一些docker的入门知识,感兴趣的小白可以看看,一起学习进步。要学习一个新的东西,我的习惯一般是先了解它是什么,它是怎么来的,发展历史是怎样的,用来解决什么问题,有什么优缺点。所以......
  • 【转】Docker入门笔记02:docker的版本,你真的搞清楚了吗
    原文:https://zhuanlan.zhihu.com/p/305572519刚开始学docker的时候,被docker.io、docker-io、docker-engine、docker-ce、docker-ee这些名词搞晕了,那么到底应该安装哪个呢?docker之所以有这么多名称,是由它的发展历史决定的。为什么会有docker.io、docker-io这种命名方式在Dock......
  • How to ak 【LGR-145-Div.4】洛谷入门赛 #14?
    A数字判断#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>#definereregister#definelll__int128#definegcgetchar#defineptputchar#definei......
  • Istio 入门(五):访问控制和流量管理
    本教程已加入Istio系列:https://istio.whuanle.cn目录4,流量管理基于版本的路由配置基于Httpheader的路由配置故障注入两种故障注入比例分配流量请求超时熔断什么是熔断创建httpbin服务创建访问者服务创建productpage熔断清理4,流量管理主要演示了使用IstioGateway、......
  • 全新版Jetpack进阶提升,系统性落地短视频App
    第1章课程介绍及学习指南2节|27分钟第2章Navigation路由与框架搭建13节|136分钟第3章Gradle插件开发与Navigation路由升级改造8节|108分钟第4章Paging3fees流列表实战14节|176分钟第5章Kotlin协程与新一代数据流处理框架Flow4节|72分钟第6章列表视频自动播放方案设计与实......
  • gdb使用入门
    【GDB调试教程:1小时玩转Linuxgdb命令sudodnfdebuginfo-installglibc-2.32-2.fc33.x86_64编译时,gcc-gtest.c-otest,因为在调试二进制文件的时候,我们需要在二进制文件中加入调试信息,而调试信息是怎么添加的呢?它是在编译的时候,通过-g选项添加的,即类似于gcc-gtest.c-ot......
  • Python保姆级教程 数据类型—新手小白入门必看系列
    推荐使用压缩软件和杀毒软件7-zip使用火绒一、基本数据类型与变量(上)2.1注释优点:代码说明没注释的代码有注释的代码不让解释器执行注释的那句话2.2单行注释单行注释快捷键:ctrl+?2.3多行注释""""""(三个双引号)2.4字面量变量字面量是已经被定义好的量在......
  • ES6 标准入门 笔记1
    一、ECMAScript1.ECMAScript和JavaScript的关系:前者是后者的规格,后者是前者的实现。2.ES6指的是ES5.1版本以后的JavaScriptD下一代版本。3.初版ES6从制定到发布经历了15年(2000-2015)。(ES2015:2015年6月发布)4.ECMAScript提案阶段:4.1Strawman(展示阶段);4......
  • Java入门13(socket)
    Socket编程(网络通信)服务器端Demo(ServreSocket)​ 创建服务端时,如果不提供IP地址,则默认为本地连接(127.0.0.1),但是一定需要手动配置监听端口!publicstaticvoidmain(String[]args){//如果不提供IP地址,默认localhost//但是服务器端的端口号需要手动指令try(Serv......