0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

芯片验证工程师 来源:芯片验证工程师 作者:验证哥布林 2022-11-18 09:31 次阅读

在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 access
testbench.sv, 9
class_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;
 endfunction
endclass
 
module tbTop;
 initial begin
 setIt::set(10);
 $display("k = %0d",setIt::k);
 setIt::set(20);
 $display("k = %0d",setIt::k);
 end
endmodule

仿真log:

k = 110
k = 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 usage
testbench.sv, 32
Invalid use of class item qualifers. Cannot use virtual and static keywords
together for method declarations.





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8224

原文标题:SystemVerilog中的Static方法

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SystemVerilog的Virtual Methods

    SystemVerilog多态能够工作的前提是父类方法被声明为virtual的。
    发表于 11-28 11:12 698次阅读

    在Boost电源怎样选择电容的型号和电容容量

    我们之前了解过电容的作用,不外乎储能、滤波等作用。那么在Boost电源又该怎样选择电容的型号和电容容量
    发表于 08-14 15:44 2977次阅读
    在Boost电源<b class='flag-5'>中</b>该<b class='flag-5'>怎样</b><b class='flag-5'>去</b>选择电容的型号和电容容量<b class='flag-5'>呢</b>?

    SystemVerilog 的VMM验证方法学教程教材

    SystemVerilog 的VMM 验证方法学教程教材包含大量经典的VMM源代码,可以实际操作练习的例子,更是ic从业人员的绝佳学习资料。SystemVerilog 的VMM 验证方法
    发表于 01-11 11:21

    怎样设计开关电源的电感

    怎样为开关电源选择合适的电感?怎样设计开关电源的电感
    发表于 10-14 08:05

    怎样使用Matlab的编程语句

    怎样使用Matlab的编程语句?Matlab中常用的编程语句有哪些
    发表于 11-18 06:12

    怎样使用STM32的DAC接口

    DAC数字/模拟转换模块是什么?有何作用?怎样使用STM32的DAC接口
    发表于 11-25 09:03

    怎样使用ARM的伪操作及指令

    怎样使用ARM的伪操作及指令?加载程序地址的方法有哪几种
    发表于 11-29 06:50

    怎样使用Cortex-M内核的精确延时方法

    为什么要学习这种Cortex-M内核的精确延时方法怎样使用Cortex-M内核的精确延
    发表于 11-30 06:00

    怎样使用一种异域加密的方法

    怎样使用一种异域加密的方法
    发表于 01-20 07:01

    怎样使用ROS的launch启动文件

    怎样使用ROS的launch启动文件?ROS的launch启动文件该怎样
    发表于 02-14 07:23

    SystemVerilog的操作方法

    SystemVerilog提供了几个内置方法来支持数组搜索、排序等功能。
    的头像 发表于 10-31 10:10 2811次阅读

    JAVAstatic、final、static final如何区分

    当我们在使用java写类的属性时总会用到很多的类型修饰它,比如字符串String,整数型int,但是我们偶尔也会遇到 static、final、static final,那么他们的区别是什么
    的头像 发表于 02-14 14:55 1190次阅读
    JAVA<b class='flag-5'>中</b><b class='flag-5'>static</b>、final、<b class='flag-5'>static</b> final如何区分

    UVM通过静态类实现对全局资源实现管理

    Systemverilog可以使用static修饰变量,方法,得到静态变量和静态函数。static也可以直接修饰class,获得静态类。但
    的头像 发表于 08-07 17:35 2106次阅读
    UVM<b class='flag-5'>中</b>通过静态类实现对全局资源实现管理

    SystemVerilog的随机约束方法

    上一篇文章《暗藏玄机的SV随机化》介绍了SystemVerilog的各种随机化方法,本文将在其基础上引入SystemVerilog的随机约束方法(constraints)。通过使用随机
    的头像 发表于 09-24 12:15 1719次阅读

    Javastatic关键词的介绍

    static 是Java的一个关键字,可以用来修饰成员变量、修饰成员方法、构造静态代码块、实现静态导包以及实现静态内部类,下面我们来分别介绍。 1、修饰成员变量 用 static 修饰成员变量
    的头像 发表于 10-11 15:26 478次阅读
    Java<b class='flag-5'>中</b>对<b class='flag-5'>static</b>关键词的介绍