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

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

3天内不再提示

SystemVerilog中的Packed Structure

芯片验证工程师 来源:芯片验证工程师 作者:芯片验证工程师 2022-11-07 10:17 次阅读

一个packed structure有很多的bits组成,这些bit在物理上连续存储。packed structure只允许包含packed数据类型。

 struct packed signed {
 byte BE; //2-state
 int addr; //2-state
 int data; //2-state
 } pStruct; //signed, 2-state

在上面的例子中,我们显式地将packed struct声明为“signed”。

如果一个packed structure中的所有数据类型都是2-state,structure作为一个整体被视为一个2-state向量。

如果一个packed structure中的存在一个数据的数据类型是4-state,structure作为一个整体被视为一个4-state向量。

一个unsigned structure示例:

 struct packed unsigned {
 integer addr; //4-state
 logic [31:0] data; //4-state
 int burst; //2-state
 } upStruct; //unsigned, 4-state

在上面的例子中,成员中存在4-state变量,所以整个结构体被视为一个4-state变量。

module SU;
struct packed {
bit [7:0] intr; //packed struct
logic [23:0] addr;
} SUR;
initial begin
SUR.intr = 'hFF;
$display($stime,,, "SUR = %h",SUR);
$display($stime,,, "SUR Intr = %h",SUR.intr);
//Assign by position
SUR = '{'h00,'hFF_FF_FF};
$display($stime,,, "SUR = %h",SUR);
//Assign by name
SUR = '{intr:'h01, addr:'hf0f0f0};
$display($stime,,, "SUR = %h",SUR);
//Assign default
SUR = '{default:'h123456};
$display($stime,,, "SUR = %h",SUR);//Assign default
SUR = '{default:'h78};
$display($stime,,, "SUR = %h",SUR);
SUR = 0;
SUR = SUR+'h12; //Arithmetic operation.
// packed structure can be used as a vector
$display($stime,,, "SUR = %h",SUR);
end
endmodule

仿真log:

 0 SUR = ffxxxxxx
 0 SUR Intr = ff
 0 SUR = 00ffffff
 0 SUR = 01f0f0f0
 0 SUR = 56123456
 0 SUR = 78000078
 0 SUR = 00000012
 V C S S i m u l a t i o n R e p o r t

在这个例子中,我们给结构体中的单个成员赋值(通过名称或者位置索引),也可以将结构体作为一个整体赋值和算术运算。

给整个结构体赋值需要使用‘{…},这个{}在这里不是连接的含义,而是结构体中各个成员的集合。

下面是一个packed结构体,以及其在内存中的存放示意图。

struct packed {
 logic frame_;
 logic [15:0] address;
 logic [31:0] data;
 } control;

7cafcc7c-5d25-11ed-a3b6-dac502259ad0.png

审核编辑:汤梓红

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

    关注

    28

    文章

    1343

    浏览量

    109980
  • System
    +关注

    关注

    0

    文章

    165

    浏览量

    36883
  • 结构体
    +关注

    关注

    1

    文章

    129

    浏览量

    10833

原文标题:SystemVerilog中的Packed Structure

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

收藏 人收藏

    评论

    相关推荐

    SystemVerilog 各种不同的联合解析

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

    SystemVerilog的Virtual Methods

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

    SystemVerilog的“const”类属性

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

    SystemVerilog的联合(union)介绍

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

    基于事件结构的SystemVerilog指称语义

    本文利用形式化的方法对SystemVerilog的指称语义进行研究,采用EBES(extendedbundle event structure)作为抽象模型,以便更好的描述SystemVerilog真并发的特点。我们的主要工作是
    发表于 12-22 14:01 12次下载

    SpinalHDLBundle数据类型的转换

    SpinalHDLBundle与SystemVerilogpacked struct很像,在某些场景下,与普通数据类型之间的连接赋值可以通过asBits,assignFromBi
    的头像 发表于 10-17 09:51 1278次阅读

    SystemVerilog$cast的应用

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

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

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

    SystemVerilog可以嵌套的数据结构

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

    SystemVerilog的struct

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

    SystemVerilogPacked Union

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

    SystemVerilog的Shallow Copy

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

    SystemVerilog的Semaphores

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

    SystemVerilog至关重要的结构体和自定义类型

    在上一篇文章《SystemVerilog至关重要的的数据类型》,介绍了枚举类型的本质和使用语法。本文接着介绍SV同样不可忽略的结构体(stru
    的头像 发表于 01-21 17:18 2054次阅读
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>至关重要的结构体和自定义类型

    Systemverilog的Driving Strength讲解

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