我有一个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][]; ?
任何建议或更正都会有所帮助。
答案 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];
...