UVM知识点总结

chap3 uvm基础

3.1.1 uvm

component和object类是uvm中的两大概念。uvm_object是uvm中最基本的类,所有的类都继承uvm_object,uvm_component也是派生来自uvm_object。

3.1.2 常用的uvm_object类

3.1.3常见的uvm_componbent类

3.1.4uvm_object的相关宏

与factory相关的宏

`uvm_object_utils(my_object)
`uvm_object_param_utils(my_object)

`uvm_object_utils_begin(my_object)
`uvm_object_utils_begin(my_object)

`uvm_object_param_utils_begin(my_object)
`uvm_object_param_utils_end(my_object)
//将一个参数化的类注册到factory中
class A#(int width) extends uvm_object

3.1.5与uvm_component相关的宏,

通过将这些component注册到factory中,以及变量进行域的自动化。可以1)使得component获得object的拥有的compare、print函数,2)还可以自动调用:config_db::get来得到变量的值

`uvm_component_utils(my_object)
`uvm_component_param_utils(my_object)

`uvm_component_utils_begin(my_object)
`uvm_component_utils_begin(my_object)

`uvm_component_param_utils_begin(my_object)
`uvm_component_param_utils_end(my_object)
//将一个参数化的类注册到factory中
class A#(int width) extends uvm_component

3.1.6UVM componen与object的区别

优点:uvm_componnent一是可以在实例化的时候指定parent参数形成uvm拓扑结构,二是uvm component具有phase的自动执行。

限制:uvm_component作为UVM树的结点,这一特性使得它失去了uvm_object的某些特征。clone函数无法用于uvm_component,因为新克隆出来的类,parent的参数无法确定。

但是可以使用copy函数,copy之前,目标实例已经使用new函数分配好空间指定好parent。而使用clone函数,目标实例可以只是一个空指针。clone=new+copy

3.2 uvm的树形结构 

uvm树通过uvm component构成节点最后构成树,所以uvm component在实例化的时候需要指定parent。

//object
function new(string name+);
//component
function new(string name , uvm_component parent);

3.2.2UVM树的根

 为什么uvm不以uvm_test派生出来的测试用例(uvm_test_top)作为树根?

因为(1)uvm_root的存在可以保证所有的而验证平台都只有一颗树。当实例化一个对象的parent=null时,那这个component在实例化时,会将他的parent设置为uvm_root.(2)个人觉得uvm-top包含了dut,当环境里要访问某个变量时,绝对路径的开始就是uvm_top。

3.2.3层次结构相关的函数

通过comp.get_parent(),可以返回comp的parent_comp

通过comp.get_child(name),name为child实例化的名字,可以返沪comp的child。(感觉没什么用,直接引用不香吗?)

3.3 field_automation机制

3.3.1field_automation机制的相关宏(如何注册)

        将不同的类型进行域的自动化。就是将整数、实数、枚举类型等进行注册

3.3.2field_automation机制常用函数(注册了又有啥用)

进行了域的自动化可以直接使用的函数:copy,clone,compare……

3.3.3field_automation机制标志位的作用

通过这些标志位表示打开哪些自动化的功能,可以使用哪函数

3.3.4field_automation中宏和if的结合

if(a==0) 是否对某些变量进行域的自动化。

3.4uvm打印信息

1、冗余度阈值

由上至下越来越冗余

 3.5 config_db机制

1、uvm中的路径:config_db中使用的路径是对象的路径,不是句柄的路径

2、set和get函数

使用不说了,只一点第一个参数如果=null相当于uvm_root::get()=uvm_top                     

3、省略get语句

        1)接收的组件在工厂中注册

         2)传输的变量在工厂中注册

        3)调用super.build_phase(),会自动执行get语句

4、跨层次的多重设置

当有多个地方进行set,以哪个为准?

1、看发信人,set的第一个参数,谁靠近树根,谁重要

2、看时间。当发信人一致时,后发的起作用。(注意可能要根据build_phase的启动顺序判断谁后发)

5、同一层次的多重设置.

6、非直线的设置和获取

scb和drv的通信,首先这可能会面临一个还没有set,就get的风险,需要注意。

至于非直线的set路径是通过1)this.m_parent,再来设置路径2)通过绝对路径

7、conffig_db对通配符的支持

 

get函数

//得到某个类的唯一实例
top = uvm_root::get();
//uvm_top

//component 获取这个节点的完整层次(路径实例名,不是类名 )
//object 实例名,object不作为uvm树的节点,会有不同的返回值
get_full_name()
//uvm_test_top.env_inst.comp1_inst

//获取当前节点的实例名,不是类名(创建对象时,传入的字符串)
get_name()
//comp1_inst


//获取对象的类的名字,以string形式返回,string是在注册时产生的
get_type_name();
//my_comp


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值