typedef class函数new变量use_uvm_seeding成员变量和局部变量的区别set_name get_name get_full_name上述函数有一些是virtual function还有一些是静态函数上述函数有一些是与uvm_object_wraper有关属于factory的范畴暂时搞不懂后面再说还有很多函数packPRintcopyclonerecord之类的先看uvm class reference文档再结合代码理解
typedef class uvm_component; 表示uvm_object
会使用到uvm_component
类,但是uvm_component
类还没有定义。 不过,在uvm_object,暂时没发现使用。所以,个人理解,这一句删掉也没关系。
相关源代码:
static protected int m_inst_count; //m是member,成员的意思吧。类实例化的个数。local int m_inst_id; //类实例化的id。跟类实例化个数有关系,比如类实例化3个,则类实例化的id为1,2,3local string m_leaf_name; //类的实例化名称,是uvm树形层次结构的一个枝叶。function uvm_object::new (string name=""); m_inst_id = m_inst_count++; m_leaf_name = name;endfunctionfunction int uvm_object::get_inst_count(); return m_inst_count;endfunctionfunction int uvm_object::get_inst_id(); return m_inst_id;endfunction注意: 如果基类构造函数new()有参数,那么扩展类,必须有一个构造函数,并在构造函数的第一行调用基类的构造函数。
Class basel Function new(input int var); this.var = var;//利用this关键词,把new函数的参数,传递给类成员变量。 endfunction endclassclass extended extends basel function new(input int var); super.new(var); endfunctionendclass相关源代码:
static bit use_uvm_seeding = 1; //静态变量,所以systemverilog全部对象,都可以访问它,可写可读。function void uvm_object::reseed (); if(use_uvm_seeding) this.srandom(uvm_create_random_seed(get_type_name(), get_full_name())); //类的方法,如果使用成员函数和成员变量的话,需要this关键词定位为当前类。理解这个,需要了解成员变量和局部变量的区别。见下面介绍。//这里的意思,个人理解,是重新产生一个uvm_object类的随机种子,默认随机种子是与process进程有关。endfunction参考: 类声明中的静态方法,类的全范围内可以调用,也可以无创建对象的方式被访问,不可以访问非静态的成员(属性和其他方法); 不能声明为virtual,声明中不能使用this句柄; this指针,涉及类的属性、变量参数、对象本地的变量参数或方法,应用在非静态方法中。
function | description |
---|---|
get_type | Returns the type-proxy (wrapper) for this object. |
get_object_type | Returns the type-proxy (wrapper) for this object. |
get_type_name | This function returns the type name of the object, which is typically the type identifier enclosed in quotes. |
有需要的时候,再看吧。
新闻热点
疑难解答