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

    浏览量

    8519
  • static
    +关注

    关注

    0

    文章

    33

    浏览量

    10356

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

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

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

    arcgis如何关联两个属性

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

    mapgis如何进行属性连接

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

    mapgis区属性参数

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

    mapgis如何给区属性赋值

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

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

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

    静态电流什么意思 静态电流和动态电流的区别

    静态电流什么意思 静态电流和动态电流的区别  静态电流是指电荷在不发生移动的情况下所产生的电流。在静电场,电荷通过金属导线或其他连续的导电体产生
    的头像 发表于 12-19 14:02 2338次阅读

    input的placeholder属性

    input的placeholder属性是HTML5添加的一项新属性,它用于在输入框显示提示文本,以帮助用户了解所期望的输入内容。当用户点击或聚焦在输入框
    的头像 发表于 11-30 10:16 2402次阅读

    placeholder属性和value属性的差别

    在现代的Web设计和开发,表单是至关重要的元素之一。与此同时,placeholder属性和value属性在表单扮演着重要的角色。本文将详细探讨这两个
    的头像 发表于 11-30 10:13 1692次阅读

    placeholder属性的作用

    placeholder属性是HTML表单的一个属性,用于为表单字段提供占位符文本。当用户点击或选择表单字段时,占位符文本会消失,用户可以输入自己的内容。它的主要作用是为用户提供一些提示信息,让用户
    的头像 发表于 11-30 10:12 1085次阅读

    input标签type的属性值有哪些

    在HTML,input标签的type属性用于指定表单输入字段的类型。下面是一些常见的type属性值及其对应的输入字段类型: text:用于输入单行文本的文本框。 password:
    的头像 发表于 11-30 10:10 4453次阅读