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

    文章

    23

    浏览量

    8556
  • static
    +关注

    关注

    0

    文章

    33

    浏览量

    10383

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

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

收藏 人收藏

    评论

    相关推荐

    如何使SOLIDWORKS参数设计软件提升效率

    SOLIDWORKS参数设计软件-SolidKits.AutoWorks可实现智能选型、自动修改产品属性、产品参数、产品状态、图纸更新、
    的头像 发表于 12-19 15:53 333次阅读

    如何使用ADC_PRO来测试ADC的INL与DNL等静态特性参数

    使用ADC-PRO来评估ADC的性能,动态特性参数已可以通过MultiFFT来计算,但静态特性参数似乎无法计算,MultiHistogram似乎只能给出与噪声有关的参数,INL与DN
    发表于 12-10 06:29

    请问静态变量如何放到flash

    比如有有很多的静态变量,如何防到flash。 我用了const修饰,编译出来,但是还是在rodate段,该段不是在80k的ram吗?
    发表于 07-12 09:26

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

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

    如何设置静态IP代理

    静态IP
    jf_60146132
    发布于 :2024年04月29日 07:46:31

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

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

    如何调整S7-1500S7-GRAPH FB的保持性属性

    FB 块属性“优化的块访问”默认勾选并且显示灰色无法操作,如图 2 所示。对于需要从CPU停止时所处步号继续运行的应用场合,必须设置保持性属性为“保持”。
    发表于 04-03 09:17 796次阅读
    如何调整S7-1500<b class='flag-5'>中</b>S7-GRAPH FB的保持性<b class='flag-5'>属性</b>

    arcgis图层字段怎么批量输入属性

    对于ArcGIS图层字段的批量输入属性,可以通过以下步骤完成: 打开ArcMap软件,并加载需要编辑属性的图层。 在ArcMap的主菜单,选择“编辑(Edit)”选项,然后选择“开始编辑
    的头像 发表于 02-25 14:15 5081次阅读

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

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

    arcgis按属性选择not(t)怎么用

    ArcGIS是一款强大的地理信息系统软件,用于处理和分析地理数据。通过属性选择工具,用户可以基于数据的属性条件来选择特定的要素。 在ArcGIS属性选择的语法是基于结构
    的头像 发表于 02-25 11:08 4235次阅读

    arcgis如何关联两个属性

    在ArcGIS,关联两个属性表是一个重要的操作,可以通过此操作将两个表的数据关联起来,以便进行分析和查询。下面是详细介绍如何在ArcGIS实现
    的头像 发表于 02-25 11:01 4345次阅读

    mapgis如何进行属性连接

    MapGIS是一种强大的GIS(地理信息系统)软件,它提供了许多功能来处理和分析空间数据。在MapGIS属性连接是一种非常有用的功能,它可以将两个或多个地图层属性信息进行关联和
    的头像 发表于 02-25 10:59 1717次阅读

    mapgis区属性参数

    MapGIS是一种基于地图信息系统的软件平台,它提供了丰富的地理空间数据处理和空间数据分析功能,可以帮助用户进行空间数据的可视、查询、分析和决策。其中一项重要的功能就是区属性参数,也称为区域
    的头像 发表于 02-25 10:56 1119次阅读

    mapgis如何给区属性赋值

    地进行数据分析和可视。 在MapGIS给区属性赋值有多种方法,下面将详细介绍其中的几种常用方法。 1.手动赋值 手动赋值是最直接和简单的方法。首先,在MapGIS打开需要进行
    的头像 发表于 02-23 17:49 2349次阅读

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

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