在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

unpacked數組和packed數組的主要區別

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 作者:芯片驗證工程師 ? 2022-10-18 09:13 ? 次閱讀

unpacked數組和packed數組的主要區別是unpacked數組在物理存儲時不能保證連續,而packed數組則能保證在物理上連續存儲。

另一種看待unpacked數組和packed數組差異點的角度是,packed數組可以看成一個整體,一個單一向量。

unpacked數組的維度是在數組名稱之后聲明的,數組中內容可以是任何數據類型或者其他數組。

bit uP [3:0]; //1-D unpacked
 //unpacked dimensions declared after the data identifed name.

c789901e-4e36-11ed-a3b6-dac502259ad0.png

正如你所注意到的,uP0到uP3分散在多個word中,它們不是連續的。

packed數組的維度是在數組名稱之前聲明的,下面是一個packed數組的例子:

bit [3:0] p; //1-D packed
 //packed dimensions declared before the data identifer name

這個打包數組可以表示為如下所示:

c79bbe10-4e36-11ed-a3b6-dac502259ad0.png

正如上圖所示的,p3到p0在物理空間上是連續的。

某種意義上,這個所謂的packed就是表示是否在物理空間連續存放。

2-D Packed Array

module tb;
// 2-D packed array

// 4 entries(rows) of 8 bits(columns) each
// Total packed dimension (contiguous bits) = 4*8 = 32 bits
bit [3:0][7:0] m_data;
initial begin
m_data = 32'h0102_0304;//Assign to 32 contiguous bits
//display 2-d packed array as a contiguous set of bits
$display ("m_data = 0x%h", m_data);
//display 1 byte each stored at m_data[0]...m_data[3]
for (int i = 0; i < 4; i++) begin
$display ("m_data[%0d] = 0x%h", i, m_data[i]);
end
end
endmodule

仿真log:

m_data = 0x01020304
m_data[0] = 0x04
m_data[1] = 0x03
m_data[2] = 0x02
m_data[3] = 0x01
 V C S S i m u l a t i o n R e p o r t

在上面的例子中,我們聲明了一個名為“m_data”的二維packed數組。請注意,所有維度的聲明都位于數組名稱的左側。

這個數組一共有4(行),每行8bit(列),總的大小是4*8 = 32bit。因為是packed數組,其中所有的bit都是連續存儲的,所以可以按照bit單獨索引到。

我們給這個數組賦值(32'h 0102_0304),然后打印相應的4行數據。

0x04、0x03、0x02、0x01

3-D Packed Array

3維數組和2維數組類似。

module tb;
bit [2:0][1:0][7:0] m_data; // 3-D packed array

initial begin
// Assign 16-bits ([1:0][7:0]) at each of the three
//([2:0])locations
m_data[0] = 16'h0102;
m_data[1] = 16'h0304;
m_data[2] = 16'h0506;
// m_data as a single packed value
$display ("m_data = 0x%h", m_data);
//Assign the entire array with a single value
m_data = 48'hcafe_face_0708;
// m_data as a single packed value
$display("m_data = 0x%h", m_data);
foreach (m_data[i]) begin
$display ("m_data[%0d] = 0x%h", i, m_data[i]);
foreach (m_data[, j]) begin
$display ("m_data[%0d][%0d] = 0x%h", i, j, m_
data[i][j]);
end
end
end
endmodule

仿真log:

m_data = 0x050603040102
m_data = 0xcafeface0708
m_data[2] = 0xcafe
m_data[2][1] = 0xca
m_data[2][0] = 0xfe
m_data[1] = 0xface
m_data[1][1] = 0xfa
m_data[1][0] = 0xce
m_data[0] = 0x0708
m_data[0][1] = 0x07
m_data[0][0] = 0x08
 V C S S i m u l a t i o n R e p o r t

在上面的例子中,我們聲明了一個三維packed數組,命名為“m_data”,一共是328 = 48bit。由于這是一個packed數組,48bit在物理空間上是連續分配的。
我們可以理解為:

1*48
或者 3*16
或者 6*8
或者48*1

1-D Packed and1-D Unpacked Array

下面是一個一維packed數組和1維unpacked數組的示例:

module PU;
logic [31:0] v1 [7:0]; //1-D packed & 1-D unpacked 
(memory)
initial begin
//Array Index 7 of unpacked
v1[7] = 'h FF_FF_FF_FF; //equivalent to v1[7][31:0]
$display(v1);
//Array Index 6 of unpacked; 31:0 of packed
v1[6][31:0] = 'h 11_11_11_11;
$display(v1);
//Array Index 5 of unpacked; 15:0 of packed
v1[5][15:0] = 'h aa_aa;
$display(v1);
//Array Index 4 of unpacked; 0th bit of packed
v1[4][0] = 1;
$display(v1);
end
endmodule

仿真log:

'{‘h ffffffff, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h 
xxxxxxxx, ‘h xxxxxxxx}
'{‘h ffffffff, ‘h 11111111, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h 
xxxxxxxx, ‘h xxxxxxxx}
'{‘h ffffffff, ‘h 11111111, ‘h xxxxaaaa, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h 
xxxxxxxx, ‘h xxxxxxxx}
'{‘h ffffffff, ‘h 11111111, ‘h xxxxaaaa, ‘h xxxxxxx1, ‘h xxxxxxxx, ‘h xxxxxxxx, ‘h 
xxxxxxxx, ‘h xxxxxxxx}
V C S S i m u l a t i o n R e p o r t

在上面的例子中,我們聲明了一個1維unpacked數組("v1",共包含8項),數組中的每一個內容又是一個packed數組(bit [31:0])“v1”。我們可以理解為一個深度為8,寬度為32的存儲器。

4-D Unpacked Array

我們聲明一個4維unpacked數組,所有維度相關的聲明都在數組名稱的右邊

logic uP [3:0][2:0][1:0][7:0];

如果一個unpacked數據項使用1word存儲,上面的數組就需要物理空間

4*3*2*8*1 word

1-D Packed and3-D Unpacked Array

logic [7:0] uP [3:0][2:0][1:0];

上面這個示例,是一個4*3*2個unpacked數組,其中每一個數據項都是一個8bit的packed數組。

如果每一個unpacked數據項使用1word存儲,那么數組uP總的存儲空間就是

4*3*2*1word

2-D Packed and2D-Unpacked Array

logic [1:0] [7:0] uP[3:0] [2:0];

上面聲明了一個2維unpacked 數組,每個數組項都是一個2維的packed數組。所以,如果每個unpacked數據項使用1word存儲,那么總的存儲空間是:

4*3*1word

3-D Packed and1-D Unpacked Array

logic [2:0][1:0][7:0] uP [3:0];

上面聲明了一個1維unpacked數組uP,一共4項,每項是一個3維packed數組。如果每個unpacked數據項使用1word存儲,那么總的存儲空間是

4*1word * 2

因為1word裝不下一個packed數組

原文標題:SystemVerilog中的Packed和Unpacked數組

文章出處:【微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4458

    瀏覽量

    86855
  • Verilog
    +關注

    關注

    28

    文章

    1363

    瀏覽量

    111357
  • 數組
    +關注

    關注

    1

    文章

    419

    瀏覽量

    26274

原文標題:SystemVerilog中的Packed和Unpacked數組

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言中指針數組數組指針的區別

    指針和數組之間存在著緊密的關系。在本文中,我們將探討指針和數組的關系、指針算術和數組遍歷、多維數組與指針以及指針數組
    發表于 08-17 15:29 ?529次閱讀

    VB數組的使用

    實驗六  數組的使用 一、實驗目的    (1)掌握數組的聲明和數組元素的引用。    (2)掌握固定數組和動
    發表于 09-23 19:28 ?6071次閱讀

    詳談數組和指針的區別與聯系

    詳談數組和指針的區別與聯系
    的頭像 發表于 06-29 15:18 ?2.3w次閱讀
    詳談<b class='flag-5'>數組</b>和指針的<b class='flag-5'>區別</b>與聯系

    指針數組數組指針的區別

    這里我們區分兩個重要的概念:指針數組數組指針。
    的頭像 發表于 06-29 15:30 ?2w次閱讀
    指針<b class='flag-5'>數組</b>和<b class='flag-5'>數組</b>指針的<b class='flag-5'>區別</b>

    C語言指針和數組區別

    在C語言教程中我們使用通過數組名通過偏移和指針偏移都可以遍歷數組,那么指針和數組到底有什么區別??
    的頭像 發表于 07-18 16:29 ?2133次閱讀

    二維數組數組指針以及指針數組

    二維數組數組指針以及指針數組
    的頭像 發表于 08-16 09:02 ?2959次閱讀

    柔性數組與指針的區別

    柔性數組在實際中應用還是挺多的,看過上一篇文章分享一種靈活性很高的協議格式(附代碼例子)的小伙伴不知有沒有注意到我們有使用了柔性數組
    的頭像 發表于 09-02 15:32 ?1249次閱讀

    變長數組和動態數組區別

    動態數組是指在聲明時,沒有確定數組大小的數組,它可以隨程序需要而重新指定大小。動態數組的內存空間是從堆動態分配的,當程序執行到我們編寫的分配語句時,才為其分配存儲空間。
    的頭像 發表于 09-28 15:20 ?2138次閱讀

    數組的定義 什么是數組

    數組 數組是內置類型,是一組同類型數據的集合,它是值類型,通過從0開始的下標索引訪問元素值。 在初始化后長度是固定的,無法修改其長度。當作為方法的參數傳入時將復制一份數組而不是引用同一指針。
    的頭像 發表于 10-09 09:39 ?2186次閱讀

    python列表和數組區別

    內部實現、性能、操作方式等多個方面進行詳細分析,以幫助讀者更好地理解它們之間的區別和適用場景。 一、內部實現: 列表(List): Python中的列表是一種有序的、可變的、可包含不同類型元素的數據結構。列表的實現基于動態數組,可以動態分配
    的頭像 發表于 11-21 15:13 ?2746次閱讀

    字符數組和字符串有沒有區別

    字符數組和字符串有沒有區別
    的頭像 發表于 11-30 16:39 ?885次閱讀

    數組和指針不相同嗎?數組和指針有哪些區別

    數組就是指針,指針就是數組,這樣的言論在評論區看到不下于10次。
    的頭像 發表于 12-13 16:34 ?1924次閱讀
    <b class='flag-5'>數組</b>和指針不相同嗎?<b class='flag-5'>數組</b>和指針有哪些<b class='flag-5'>區別</b>

    數組和鏈表有何區別

    數組和鏈表的區別,這個問題,不僅面試中經常遇到,考研的同學也得掌握才行。
    的頭像 發表于 02-19 15:33 ?754次閱讀
    <b class='flag-5'>數組</b>和鏈表有何<b class='flag-5'>區別</b>

    數組和鏈表在內存中的區別 數組和鏈表的優缺點

    數組和鏈表在內存中的區別 數組和鏈表的優缺點? 數組和鏈表是常見的數據結構,用于組織和存儲數據。它們在內存中的存儲方式以及優缺點方面存在一些顯著的差異。本文將詳細探討這些差異以及它們的
    的頭像 發表于 02-21 11:30 ?1345次閱讀

    指針數組和二維數組有沒有區別

    指針數組和二維數組有沒有區別?比如這樣的兩個代碼。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的頭像 發表于 11-24 11:12 ?404次閱讀
    主站蜘蛛池模板: 四虎影院在线免费观看 | 亚洲天天操 | 欧美人成网站免费大全 | 日韩在线免费看网站 | 精品国产三级a∨在线 | 五月网址| freesex性| 中文字幕一区二区三区视频在线 | 精品国产一区二区三区国产馆 | 五月天精品在线 | 我被黑人巨大开嫩苞在线观看 | 4hu四虎永久免在线视 | 另类性欧美喷潮videofree | 黄色成人免费网站 | qvod高清在线成人观看 | 美女被异性狂揉下部羞羞视频 | 亚洲欧美圣爱天天综合 | 国产美女精品久久久久中文 | 色欧美色| 给个网站可以在线观看你懂的 | 欧美极品bbbbⅹxxxx | 奇米777狠狠 | 国产特黄一级一片免费 | 久青草视频免费视频播放线路1 | 亚洲国产系列 | 在线观看日本亚洲一区 | 亚洲综合色在线观看 | 五月激情婷婷综合 | 4hc44四虎www视频 | 1024手机在线看 | 人人狠狠综合88综合久久 | 羞羞视频靠逼视频大全 | 一区二区三区午夜 | 99久久免费中文字幕精品 | 色视频网址 | 成 人 色综合 | 糖心vlog麻豆精东影业传媒 | 成年人网站在线 | 婷婷国产成人久久精品激情 | 成人a毛片视频免费看 | 亚洲精品福利网站 |