在systemverilog中将2D数组转换为3D数组

时间:2017-09-16 06:01:49

标签: system-verilog dynamic-arrays

我有一个2D动态数组

      logic [511:0] array[];

我想将它转换为定义为

的3D动态数组
     logic [32][16]M[];  

例如

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

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

等等。

有些人可以建议如何完成这项任务。我正确地声明了我的3D数组。我知道动态数组只能在解包数组中定义。我可以将数组定义为

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

任何建议或更正都会有所帮助。

1 个答案:

答案 0 :(得分: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];
...
相关问题