怎样去使用SystemVerilog中的Static方法呢

在systemverilog中方法也可以声明为“static”。静态方法意味着对类的所有对象实例共享。
在内存中,静态方法的声明存储在一个同一个地方,所有对象实例都可以访问。
另外,静态方法可以在类外部访问,即使还没有实例化任何一个类对象。
静态方法只能访问静态属性。
从静态方法访问非静态属性会导致编译错误,静态方法也不能是virtual的,也不能使用“this”句柄。
module class_top( ); class base; static logic [31:0] data ; //static property logic [31:0] addr; //dynamic property static task munge; //static method data = 32'h f0f0_f0f0; //ok to access static variable //addr = 32'h ff_0000; //not ok since 'addr' is not static $display(data = %h, data); endtask endclass : base base base1; initial begin base1.munge; end initial #10 $fnish(2); endmodule  
仿真log:
data = f0f0f0f0$fnish at simulation time 10 v c s s i m u l a t i o n r e p o r t  
在本例中,我们在类“base”中声明了一个名为“munge”的静态方法。
我们访问“munge”可以使用尚未完成实例化的对象句柄“base1”。
需要注意的是,静态方法“munge”只能索引静态变量“data”,如果取消下面这行代码的注释,则会发生编译错误。
因为“addr”不是静态变量,需要实例化后使用对象的句柄才能访问。
//addr = 32'h ff_0000; //not ok since 'addr' is not static  
静态函数访问非静态变量,会导致编译错误:
error-[sv-amc] non-static member accesstestbench.sv, 9class_top, addr illegal access of non-static member 'addr' from static method 'base::munge'.  
还可以使用类解析操作符访问静态方法,建议使用这种方法,因为它清楚地标识了我们正在访问一个静态方法。
class setit; static int k; static function set (int p ); k = p + 100; endfunctionendclass module tbtop; initial begin setit::set(10); $display(k = %0d,setit::k); setit::set(20); $display(k = %0d,setit::k); endendmodule  
仿真log:
k = 110k = 120 v c s s i m u l a t i o n r e p o r t  
静态变量和静态方法隶属于一个类,而不是类的某个对象实例。如果在静态方法前面加上virtual,你会得到一个编译错误:
class base; virtual static task munge(); endtask endclass  
编译log:
error-[wuciq] invalid qualifer usagetestbench.sv, 32invalid use of class item qualifers. cannot use virtual and static keywordstogether for method declarations.


中国铁塔赴港IPO,电池及储能行业需从哪几个方面进行观测?
为什么Docker会这样火?
美国保安机器人自杀调查结果出炉:并非人为或机械故障 修复后讲恢复使用
基于模糊神经混合系统的自适应控制的应用方案设计及仿真验证研究
VM电压PWM控制器介绍
怎样去使用SystemVerilog中的Static方法呢
意法半导体将与高通合作,扩大传感器市场优势
京东陈琤:光电合封技术在数据中心网络应用前景可期
ZigBee协议栈的用处及开发的基本思路
中科院半导体所成功研制视觉芯片
Beacon架构及模块特点
TransCAD的土地利用混合程度计算原理和详细应用
红米5A和荣耀畅玩6哪个值得买?最全面的评测分析
有颜有实力的华为荣耀9降至最低价:外观和价格差不多的小米6有危机了
谷歌Nexus 7平板港行开卖 定价1966元
电动机配用交流接触器的选用原则
电机和电机驱动概述-小型电机的结构
汉源高科关于高层电梯监控无线网桥传输解决方案
电子工程之嵌入式系统
ADI推出两款RF驱动放大器ADL5605和ADL5606