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

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

3天内不再提示

SystemVerilog中的Unpacked Unions

芯片验证工程师 来源:芯片验证工程师 作者:芯片验证工程师 2022-11-11 09:33 次阅读

unpacked union中各个成员的大小可以是不同的。

举一个例子

 typedef Union {
 logic [5:0] a;
 logic [3:0] b;
 logic c;
 } myUnionType
 myUnionType myUnion;

上面的union成员大小都是不同的,这个union整体的大小取决于其中size最大的成员,如下图示例:

logic [5:0] a

c4d9bdb0-6111-11ed-8abf-dac502259ad0.png

再看一下unpacked union中存在struct成员内存分配的示例:

typedef struct packed {
 bit [3:0] s1;
 bit s2;
 } myStruct;
 typedef union {
 logic [7:0] u1;
 myStruct b2;
 } mUnionT;
 mUnionT Union1;

对于这个union,最大 size的成员是“logic [7:0]
b1.”所以,这个union整体的大小是

c501a5f0-6111-11ed-8abf-dac502259ad0.png

对于一个union,如果你写入成员1,再读取成员2,实际上你读取的就是刚刚写入的成员1,这恰恰也说明了union的本质,即同一个物理存储实体。

module union_example;
 logic [31:0] x;
 typedef union { 
 int a;
 byte b;
 bit [15:0] c;
 } data;
 data d1;
 initial begin
 d1.a = 32'h ffff_ffff; //write to d1.a
 x = d1.b; //read from d1.b
 $display("x = %h",x);
 d1.b = 8'h 01; //write to d1.b
 x = d1.a; //read from d1.a
 $display("x = %h",x);
 d1.c = 16'h 1010; //write to d1.c
 x = d1.a; //read from d1.a
 $display("x = %h",x);
 end
 endmodule

仿真log:

x = ffffffff
x = 00000001
x = 00001010
 V C S S i m u l a t i o n R e p o r t

上面的例子声明了一个unpacked union “data.”,然后例化了一个data 类型的数据"d1"

在initial语句块中,我们首先写入union中的成员“int a”:

d1.a = 32'h ffff_ffff; //write to d1.a

注意,此时我们没有向“d1.b”写入任何内容。但既然union只有一个物理存储实体,所以这些成员具有相同的值。所以,当我们从" d1 "读取数据b

 x = d1.b; //read from d1.b

仿真log会打印

x = ffffffff

反之亦然,当我们向b写入数据,数据也会反映到a上。

d1.b = 8'h 01; //write to d1.b

此时a会打印:

x = 00000001

成员c的写入同样也会反映到成员a,如打印log所示。

这再次表明union中的所有成员共享一个物理存储空间,对于RTL的可综合性,要求这些成员的大小相同。

审核编辑:汤梓红

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

    关注

    28

    文章

    1343

    浏览量

    109974
  • System
    +关注

    关注

    0

    文章

    165

    浏览量

    36878
  • union
    +关注

    关注

    0

    文章

    10

    浏览量

    4252

原文标题:SystemVerilog中的Unpacked Unions

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

收藏 人收藏

    评论

    相关推荐

    SystemVerilog 各种不同的联合解析

    联合分两种类型:打包 (packed) 和解包 (unpacked)。在上述示例,我们指定的是打包联合。
    的头像 发表于 11-19 15:16 2068次阅读
    <b class='flag-5'>SystemVerilog</b> <b class='flag-5'>中</b>各种不同的联合解析

    SystemVerilog的Virtual Methods

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

    SystemVerilog的“const”类属性

    SystemVerilog可以将类属性声明为常量,即“只读”。目的就是希望,别人可以读但是不能修改它的值。
    发表于 11-29 10:25 2094次阅读

    SystemVerilog的联合(union)介绍

    SystemVerilog ,联合只是信号,可通过不同名称和纵横比来加以引用。
    的头像 发表于 10-08 15:45 1306次阅读
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的联合(union)介绍

    SystemVerilog的断言手册

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:12 20次下载

    SystemVerilog$cast的应用

    SystemVerilog casting意味着将一种数据类型转换为另一种数据类型。在将一个变量赋值给另一个变量时,SystemVerilog要求这两个变量具有相同的数据类型。
    的头像 发表于 10-17 14:35 2788次阅读

    unpacked数组和packed数组的主要区别

    unpacked数组和packed数组的主要区别是unpacked数组在物理存储时不能保证连续,而packed数组则能保证在物理上连续存储。
    的头像 发表于 10-18 09:13 2725次阅读

    SystemVerilog的操作方法

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

    SystemVerilog可以嵌套的数据结构

    SystemVerilog除了数组、队列和关联数组等数据结构,这些数据结构还可以嵌套。
    的头像 发表于 11-03 09:59 1557次阅读

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同数据类型的集合。
    的头像 发表于 11-07 10:18 2391次阅读

    SystemVerilog的tagged Unions是什么

    tagged union包含一个隐式成员,该成员存储tag,也就是标记,它表示这个union最终存储的到底是哪一个成员。
    的头像 发表于 11-10 10:02 1428次阅读

    SystemVerilog的Packed Union

    packed union相比unpacked union最大的一个区别就是,在packed union,所有成员的大小必须相同,这就保证了不管union存储了哪一个成员,最终这个union的大小是一样的。也正是加了这个限制,
    的头像 发表于 11-12 09:05 1082次阅读

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄赋值和对象复制的概念是有区别的。
    的头像 发表于 11-21 10:32 868次阅读

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗语)是一个多个进程之间同步的机制之一,这里需要同步的原因是这多个进程共享某些资源。
    的头像 发表于 12-12 09:50 3300次阅读

    Systemverilog的Driving Strength讲解

    systemverilog,net用于对电路连线进行建模,driving strength(驱动强度)可以让net变量值的建模更加精确。
    的头像 发表于 06-14 15:50 1501次阅读
    <b class='flag-5'>Systemverilog</b><b class='flag-5'>中</b>的Driving Strength讲解