2017-09-16 103 views
0

轉換2D陣列成3D陣列我有一個2 d動態陣列SystemVerilog中

 logic [511:0] array[]; 

我灣,將其轉換成被定義爲

 logic [32][16]M[]; 

例如3 d動態數組。

array[0]= 1110110000111000...512 bits.... 

    M[0][0]= 1110110000111000...32 bits.... 
    M[0][1]= next 32 bits.... 

等等。

有些人可以請建議如何完成這項任務。我聲明我的3D數組是正確的。我知道動態數組只能在解壓縮數組中定義。我可以將陣列定義爲

logic [31:0] M[16][]; ? 

任何建議或更正都會有幫助。

+1

有邏輯之間'有很大的不同[31:0] [15:0] M []'和'邏輯[31:0] M [ 16] []'你需要哪一個? – Serge

回答

0

根據你給出的例子,好像你想要一個16位32位打包字的解壓數組的動態數組。這將是:

logic [31:0] M[16][]; 

可以使用比特流鑄於一種類型的形狀,只要分配給另一種類型的形狀如在源位的數目可以是配合到完全匹配的比特數進目標。你需要一個目標類型的typedef標識符(在聲明變量時通常使用typedef是一個好習慣)。

typedef [31:0] my_3d_t[16][]; 

my_3d_t M; 

M = my_3d_t'(array); 

即不分配作爲

M[0][0][31:0] = array[0][511:480]; 
M[0][1][31:0] = array[0][479:448]; 
... 
M[0][15][31:0] = array[0][31:0]; 
M[1][0][31:0] = array[1][511:480]; 
...