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

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

3天内不再提示

参数化Class中的静态属性

芯片验证工程师 来源:片验证工程师 作者:片验证工程师 2022-12-02 09:17 次阅读

static属性一般是在编译的时候就已经分配了内存,并被这个类的所有实例共享,

也就是在仿真时刻0之前就已经完成了静态属性的内存分配。

但是,参数化类中的静态属性可能有所区别。参数化类中的静态属性(参数化)是在参数初始化的时候才会分配。

 // Class with parameters
 class with_param #(type T = int);
 static T static_with_p;
 endclass
 
 // Class without Parameters
 class without_param;
 static int static_wo_p;
 endclass
 
 module top;
 initial begin
 $display("static_wo_p = %0d", without_param :: 
static_wo_p);
 $display("static_with_p = %0d", with_param :: 
static_with_p);
 end
 endmodule: top

在上面的两个class中,一个包含parameter (with_param),还有一个不包含parameter(without_param).

在各自class中,我们都声明了静态属性。在访问静态属性“static_wo_p”时没有问题,而在访问静态属性
“static_with_p”时,编译器会报错(Error或者Warning):

Warning-[PCSRMIO] Class scope used outside of class
testbench.sv, 59
"with_param::static_with_p"
An unspecialized class scope '::' reference was seen.  To access
a static member of the default specialization outside the class
'with_param', use 'with_param#( )::' instead. This will be an
error in a future release.

需要修改成下面这样的写法才能编译通过。

$display("static_with_p = %0d", with_param # ( ) :: static_with_p);

下面这个例子更能够展示参数化类中的静态属性非参数类中的静态属性的区别:

class with_param #(type T = int);
static T counter = 2;
function new;
counter++;
endfunction: new
endclass: with_param


class with_param_extend extends with_param #(real);
endclass: with_param_extend


typedef with_param #(byte) s_byte;
s_byte S1 = new( );
s_byte S2 = new( );
with_param S3 = new( );
with_param #(bit[2:0]) S4 = new( );
with_param_extend S5 = new( );
initial begin
$display ("Counter value of S1 instance = %0d", with_param 
#(byte)::counter);
$display ("Counter value of S2 instance = %0d", s_byte:: 
counter);
$display ("Counter value of S3 instance = %0d", with_param 
#()::counter);
$display ("Counter value of S4 instance = %0d", with_param 
#(bit[2:0])::counter);


$ d i s p l a y ( " C o u n t e r 
value of S5 instance =%0d",with_param_extend::counter);
end

仿真log:

Counter value of S1 instance = 4
Counter value of S2 instance = 4
Counter value of S3 instance = 3
Counter value of S4 instance = 3
Counter value of S5 instance = 3.000000
 V C S S i m u l a t i o n R e p o r t

上面的例子中S1、S2、S3、S4、S5中的参数T分别被覆盖成byte、byte、int、bit[2:0]、real,所以只有S1(s_byte)和S2(s_byte)中的静态属性counter彼此共享。

参数类的扩展类

class class1 #(type T = int);
 ….
endclass
 
class class2 #(type P = real) extends class1;


class class3 #(type P = real) extends class1 #(integer);


class class4 #(type P = real) extends class1 #(P);

上面是一个参数化类的扩展类示例,class1是一个参数化类,参数T默认为"int"。

class2增加了一个参数P,此时参数T为默认的"int"

class3增加了一个参数P,此时参数T覆盖成"integer"

class4增加了一个参数P,此时参数T也覆盖成为P

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

    关注

    0

    文章

    22

    浏览量

    8479
  • static
    +关注

    关注

    0

    文章

    33

    浏览量

    10243

原文标题:参数化Class中的静态属性

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

收藏 人收藏

    评论

    相关推荐

    FPGA设计,对SPI进行参数结构设计

    今天给大侠带来FPGA设计,对SPI进行参数结构设计,话不多说,上货。 为了避免每次SPI驱动重写,直接参数,尽量一劳永逸。S
    发表于 04-11 18:29

    arcgis中如何在属性表中选择多个属性

    在ArcGIS中,你可以通过多种方式来选择属性表中的多个属性。下面是一些常用的方法: 方法一:使用Select by Attributes工具 在ArcGIS的属性表中,选择“Selection
    的头像 发表于 02-25 11:10 4229次阅读

    dataflash静态变量值初始会变吗,怎么改变变量的值?

    dataflash静态变量值初始会变吗,怎么改变变量的值? 若系统启动初始化时,不改变变量的值该怎么设变量?
    发表于 01-15 06:27

    placeholder属性和value属性的差别

    在现代的Web设计和开发中,表单是至关重要的元素之一。与此同时,placeholder属性和value属性在表单中扮演着重要的角色。本文将详细探讨这两个属性的区别,深入探究它们在不同场景下的应用及其
    的头像 发表于 11-30 10:13 462次阅读

    Class-F VCO的实现方法

    图1给出了传统Class-B和Class-C结构的LCVCO。其中Class-B是最简单、最常见,也是最常用的结构,但其噪声性能和FoM并不是最优的。
    的头像 发表于 10-31 17:04 1241次阅读
    <b class='flag-5'>Class</b>-F VCO的实现方法

    静态代码块、构造代码块、构造函数及普通代码块的执行顺序

    代码块)使用static关键字和{}声明的代码块: public class CodeBlock { static { System.out. println ( "静态代码块" ); }} ②、执行
    的头像 发表于 10-09 15:40 433次阅读
    <b class='flag-5'>静态</b>代码块、构造代码块、构造函数及普通代码块的执行顺序

    高电压大电流igbt静态参数测试系统解决方案

    IGBT静态参数测试系统,可提供IV、CV、跨导等丰富功能的综合测试,具有高精度、宽测量范围、模块化设计、轻松升级扩展等优势,旨在全面满足从基础功率二极管、MOSFET、BJT、IGBT到宽禁带半导体SiC、GaN等晶圆、芯片、器件及模块的
    的头像 发表于 09-19 14:57 563次阅读
    高电压大电流igbt<b class='flag-5'>静态</b><b class='flag-5'>参数</b>测试系统解决方案

    HarmonyOS实现静态与动态数据可视图表

    一. 样例介绍 本篇Codelab基于switch组件和chart组件,实现线形图、占比图、柱状图,并通过switch切换chart组件数据的动静态显示。要求实现以下功能: 实现静态数据可视图表
    发表于 09-06 14:21

    dataflash静态变量值初始会变吗,怎么改变变量的值?

    dataflash静态变量值初始会变吗,怎么改变变量的值? 若系统启动初始化时,不改变变量的值该怎么设变量?
    发表于 08-21 06:52

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

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

    嵌入软件静态解析工具

    的微机或个别微机的机型增加新的命令语,用户只要在参数文件增加新命令语的定义,就可以立即使用。对于C语言代码,不仅支持ANSI C语言,也支持#ifdef这样的设定编译条件的预编
    发表于 08-02 11:51

    Class-AB输出级静态工作点的偏置设计浅析

    采用Class-AB输出级设计的运放可在较低的静态电流下实现轨对轨输出,推挽的输出方式使得其在大信号建立时的电流不受静态电流的限制,可以实现更好的压摆率。
    的头像 发表于 07-07 11:38 627次阅读
    <b class='flag-5'>Class</b>-AB输出级<b class='flag-5'>静态</b>工作点的偏置设计浅析

    CLASS-AB输出级及偏置设计浅析

    采用Class-AB输出级设计的运放可在较低的静态电流下实现轨对轨输出,推挽的输出方式使得其在大信号建立时的电流不受静态电流的限制,可以实现更好的压摆率。
    的头像 发表于 06-18 15:49 1130次阅读
    <b class='flag-5'>CLASS</b>-AB输出级及偏置设计浅析

    dataflash静态变量值初始会变吗,怎么改变变量的值?

    dataflash静态变量值初始会变吗,怎么改变变量的值? 若系统启动初始化时,不改变变量的值该怎么设变量?
    发表于 06-13 06:41

    Systemverilog里class类型的记录

    class里面包含data和对data进行操作的subroutines(functions and tasks)。class的data称为class properties,subroutines称为methods。两者都是
    的头像 发表于 05-24 14:29 383次阅读
    Systemverilog里<b class='flag-5'>class</b>类型的记录