SystemVerilog中的Packed Structure

描述

一个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;

 

Verilog

 审核编辑:汤梓红

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分