SYSTEM VERILOG 中組合陣列與非組合陣列
阿新 • • 發佈:2021-05-03
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的真是面目是這樣的
總結
SV中陣列的用法還是很靈活的!
需要說明的一點是:陣列的賦值需要加’
比如說
int dyn[] = '{1,2,3};
但是佇列不需要!
比如說:
q[$] = {0,1,2};