一個(gè)packed structure有很多的bits組成,這些bit在物理上連續(xù)存儲(chǔ)。packed structure只允許包含packed數(shù)據(jù)類(lèi)型。
struct packed signed { byte BE; //2-state int addr; //2-state int data; //2-state } pStruct; //signed, 2-state
在上面的例子中,我們顯式地將packed struct聲明為“signed”。
如果一個(gè)packed structure中的所有數(shù)據(jù)類(lèi)型都是2-state,structure作為一個(gè)整體被視為一個(gè)2-state向量。
如果一個(gè)packed structure中的存在一個(gè)數(shù)據(jù)的數(shù)據(jù)類(lèi)型是4-state,structure作為一個(gè)整體被視為一個(gè)4-state向量。
一個(gè)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變量,所以整個(gè)結(jié)構(gòu)體被視為一個(gè)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
在這個(gè)例子中,我們給結(jié)構(gòu)體中的單個(gè)成員賦值(通過(guò)名稱(chēng)或者位置索引),也可以將結(jié)構(gòu)體作為一個(gè)整體賦值和算術(shù)運(yùn)算。
給整個(gè)結(jié)構(gòu)體賦值需要使用‘{…},這個(gè){}在這里不是連接的含義,而是結(jié)構(gòu)體中各個(gè)成員的集合。
下面是一個(gè)packed結(jié)構(gòu)體,以及其在內(nèi)存中的存放示意圖。
struct packed { logic frame_; logic [15:0] address; logic [31:0] data; } control;
審核編輯:湯梓紅
-
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110400 -
System
+關(guān)注
關(guān)注
0文章
165瀏覽量
37078 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
10872
原文標(biāo)題:SystemVerilog中的Packed Structure
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
SystemVerilog 中各種不同的聯(lián)合解析
![<b class='flag-5'>SystemVerilog</b> <b class='flag-5'>中</b>各種不同的聯(lián)合解析](https://file.elecfans.com/web1/M00/C8/50/pIYBAF9t9h-AeGwGAABa58sJqk4023.png)
SystemVerilog中的Virtual Methods
SystemVerilog中的“const”類(lèi)屬性
SystemVerilog中的聯(lián)合(union)介紹
![<b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的聯(lián)合(union)介紹](https://file1.elecfans.com/web2/M00/A9/08/wKgZomUiXlyAX_iLAAAhIiPxz_8340.jpg)
基于事件結(jié)構(gòu)的SystemVerilog指稱(chēng)語(yǔ)義
SpinalHDL中Bundle數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
SystemVerilog中$cast的應(yīng)用
unpacked數(shù)組和packed數(shù)組的主要區(qū)別
SystemVerilog中可以嵌套的數(shù)據(jù)結(jié)構(gòu)
SystemVerilog中的struct
SystemVerilog中的Packed Union
SystemVerilog中的Shallow Copy
SystemVerilog中的Semaphores
SystemVerilog中至關(guān)重要的結(jié)構(gòu)體和自定義類(lèi)型
![<b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>至關(guān)重要的結(jié)構(gòu)體和自定義類(lèi)型](https://file.elecfans.com/web2/M00/89/B4/pYYBAGO35QqAHZ9gAAbWQS5GGmY652.jpg)
Systemverilog中的Driving Strength講解
![<b class='flag-5'>Systemverilog</b><b class='flag-5'>中</b>的Driving Strength講解](https://file1.elecfans.com/web2/M00/89/AC/wKgaomSJcSWAUfCrAAF04gZw8WE916.jpg)
評(píng)論