[SystemVerilog语法拾遗] 类作用符::使用总结
先看下systemverilog2017的标准里关于::的定义描述
分析总结如下:
:: 中文叫做类作用域解析描述符,顾名思义表示引用的是类中定义的对象,区别于instance的作用符 (.) ,具体的用法包含以下几类:
1、包packet的使用,如import packets:😗,引用包中定义的成员
2、类中静态static成员的引用,包括静态变量和静态方法,因为静态类型不属于类的任何对象,而是归属于整个类,因而必须用类作用符::,比如内建类process::self,std::randomize(),自定义的类如uvm中常使用的config_db#(int)::set/get都属于类中静态成员的引用,静态成员不仅包括静态方法、静态变量,还包括定义在类中的结构体、枚举类型里的枚举值,比如通过typedef enum {RD, WR} kind_e;定义在类seq_item中,那么就可以用下面的方法引用枚举类型seq_item::RD
3、class中方法的声明用extern修饰表示方法的定义在外部时,也需要在class外面方法定义的前面添加类作用符来讲该方法跟类进行关联。
4、引用class内部定义的parameter或者localparam
5、还有些例如local关键字使用::以及function coverage相关使用::由于使用场景非常局限,这里就不做过多解释了,留着后面的话题再展开讨论
关于上面截图中的最后一个例子只是想说明嵌套类可以直接访问外部类里的静态变量,非静态变量无法直接访问。