[CU]uvm典型类/function/task-uvm_object & uvm_component

1.uvm_object

(1)几乎所有的类都继承自uvm_object,包括uvm_component.

2.uvm_component

注1:uvm_component具有parent-child关系的特点(层次创建与管理);

 

注2:uvm_component具有可以相互通信的特点(借助于tlm);

注3:uvm_component具有phase自动执行的特点;

 

 

2.1new函数

(1) uvm_componentnew函数中,当发现传入的name_top_” && parentnull,认为是uvm_root在调用;这种情况下,会直接返回,不给m_parent赋值,也不会调用m_parent.m_add_child函数;

(2) 如果一个component在实例化时,parent被设置为null,那么这个component的实例的parent会被系统设置为系统中唯一的uvm_root的实例uvm_top,从而保证整个系统中只有一颗树;

2.2 parent

(1) UVM通过uvm_component来实现树形结构,所有UVM树的结点都是uvm_component;

(2) uvm_componentnew的时候,需要指定一个类型为uvm_component,名字为parent的变量. 通过指定parent,可以形成树形的组织结构.

(3) 一般在使用时, parent通常是this.

2.3 uvm_component树形结构的实现

2.3.1 记录父子信息的变量

(1) m_children

(2) m_children_by_handle

(3) m_parent

2.3.2 父子信息的记录

(1) 对于一颗完整的uvm_component树而言,由于根节点没有parent,所以根节点的parent值为null;而对于叶子节点来说,它没有任何孩子,所以其m_childrenm_children_by_handle中没有任何记录,是两个空的联合数组.

3.uvm_object与uvm_component的联系与区别

(1) uvm_objectUVM中最基本的类,几乎所有的类都继承自uvm_object,包括uvm_component;

(2) uvm_component用来实现树形结构. uvm_componentnew的时候,需要指定一个类型为uvm_component,名字是parent的变量;一般在使用时, parent通常都是this;

(3) uvm_component具有phase自动执行的特点;

(4) 由于uvm_component是作为UVM树的节点存在的,虽然其派生于uvm_object,但它依旧丧失了uvm_object的某些特征. 比如uvm_object中有clone函数,它用于分配一块内存空间,并把另一实例复制到这块新的内存空间中(clone=new+copy). clone函数无法用于uvm_component,因为一旦使用后,clone出来的类,parent参数无法指定.虽然uvm_component不能使用clone函数,但是可以使用copy函数,因为在调用copy函数之前,目标实例已经完成了实例化,其parent参数已经指定了.

4.常见uvm_object派生类与uvm_component派生类

(1) uvm_object派生类:uvm_sequence_item, uvm_sequence, config, uvm_reg_item, uvm_reg_map, uvm_mem, uvm_reg_field, uvm_reg, uvm_reg_file, uvm_reg_block,uvm_phase;

(2) uvm_component派生类:uvm_driver, uvm_monitor, uvm_sequencer, uvm_scoreboard, uvm_agent, uvm_env, uvm_test等;

5.uvm_object/uvm_component相关的factory机制宏

 

posted on 2021-11-16 15:36  知北游。。  阅读(563)  评论(0编辑  收藏  举报

导航