1. 程式人生 > 其它 >SYSTEM VERILOG 中組合陣列與非組合陣列

SYSTEM VERILOG 中組合陣列與非組合陣列

SYSTEM VERILOG 中組合陣列與非組合陣列

先看一段程式碼~

logic [3:0][7:0] ARRAY;

logic [7:0] ARRAY1[3:0];
logic ARRAY3[3:0][7:0] ;
logic [3:0][4:0] ARRAY4 [7:0][15:0]

第一步:判斷哪些是組合陣列哪些是非組合型陣列!

簡單記憶法:位寬僅僅在陣列名左邊就是PACKER型(組合型陣列),兩邊是UNPACKER型(非組合型陣列),位寬僅僅在陣列名右邊,也是非組合型陣列!!!

所以,我們很清楚的知道了陣列的型別!

第二步:判斷陣列的維度!
組合型陣列:

logic [3:0][7:0] ARRAY;

高維度在最左邊![3:0]就好比是X,[7:0]就好比是Y。可以理解成一個二維的矩陣!
在這裡插入圖片描述
對於非組合型陣列而言:

logic [3:0][4:0] ARRAY4 [7:0][15:0]

首先是右邊的維度優先順序最高![7:0][15:0]
[7:0][15:0] 當中優先順序最高的是[7:0],其次就是[15:0]!

然後是左邊的[3:0][4:0]
同樣,優先順序高的是[3:0],低優先順序是[4:0]
最終的優先順序的排序如下:[7:0][15:0][3:0][4:0]

第三步:舉一反三

logic [7:0] ARRAY1[3:0];

還是嘮叨一下!
非組合型陣列!判斷標準是兩邊都有位寬
優先順序是右邊的位寬高於左邊的位寬!實際上,ARRAY1的真是面目是這樣的

logic [3:0][7:0] ARRAY1

總結

SV中陣列的用法還是很靈活的!

需要說明的一點是:陣列的賦值需要加’
比如說

int dyn[] = '{1,2,3};

但是佇列不需要!

比如說:

q[$] = {0,1,2};