动态数组
动态数组可以认为是一个非合并数组,动态数组在声明时没有指定数组的大小,在对数组初始化时(调用new[ ])需要指定数组的大小,从而分配内存空间。
动态数组的语法规则
[data_type] [data_name] = [];
int data = [];
动态数组使用
[代码示例]
module tb;
//dynamic array
int array [];
logic [7:0] data [];
initial begin
array = new[5];
data = new[3];
array = '{31,22,13,6,99};
data = '{8'd10,8'd12,8'd19};
$display("array.size() = %0d",array.size());
$display("data.size() = %0d",data.size());
foreach(data[i])begin
$display("data[%0d] = %0d",i,data[i]);
end
foreach(array[i])begin
$display("array[%0d] = %0d",i,array[i]);
end
data.delete();
$display("data.size() = %0d",data.size());
end
[代码结果]
Contains Synopsys proprietary information.
Compiler version S-2021.09; Runtime version S-2021.09; Oct 15 22:47 2023
array.size() = 5
data.size() = 3
data[0] = 10
data[1] = 12
data[2] = 19
array[0] = 31
array[1] = 22
array[2] = 13
array[3] = 6
array[4] = 99
data.size() = 0
V C S S i m u l a t i o n R e p o r t
Time: 0 ns
CPU Time: 0.540 seconds; Data structure size: 0.0Mb
Sun Oct 15 22:47:09 2023
Done
动态数组的赋值
[代码示例]
module tb;
//dynamic array
int id [];
int sum [];
string name [];
initial begin
sum = new[3];
name = new[2];
sum = '{1,3,4};
id = new[2](sum);
name = '{"zhangsan","lisi"};
foreach(id[i])
$display("id[%d] = %d",i,id[i]);
end
endmodule
[代码结果]
Contains Synopsys proprietary information.
Compiler version S-2021.09; Runtime version S-2021.09; Oct 15 23:14 2023
id[ 0] = 1
id[ 1] = 3
V C S S i m u l a t i o n R e p o r t
Time: 0 ns
CPU Time: 0.480 seconds; Data structure size: 0.0Mb
Sun Oct 15 23:14:37 2023
赋值注意事项
动态数组在new[ ]中设置动态数组大小时,并不完全需要匹配所赋数组的大小。当初始化动态数组的大小较大时,赋值的常量数组会被截断以匹配;当它较小时,初始化的数组将使用默认值填充以获得指定的大小。