[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_component的new函数中,当发现传入的name是”_top_” && parent是null时,认为是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_component在new的时候,需要指定一个类型为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_children和m_children_by_handle中没有任何记录,是两个空的联合数组.
3.uvm_object与uvm_component的联系与区别
(1) uvm_object是UVM中最基本的类,几乎所有的类都继承自uvm_object,包括uvm_component;
(2) uvm_component用来实现树形结构. uvm_component在new的时候,需要指定一个类型为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机制宏