verilator/test_regress/t/t_dynarray_multid.v
Valentin Atepalikhin 4babba16d6
Support 2D dynamic array initialization (#4700) (#5122)
* Support 2D dynamic array initialization (#4700)
- new[] on sub arrays (as per original issue)
- Built-in methods for sub-arrays
- Initialization and literals assignmensts
- Dynamic array as an element for other arrays and queues
2024-06-08 22:44:45 -04:00

223 lines
5.0 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2020 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
`define stop $stop
`define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
module t (/*AUTOARG*/);
integer a1 [][];
integer a2 [2][];
integer a3 [][] = '{'{1, 2, 3}, '{4, 5, 6}};
integer a4 [][] = '{{7, 8, 9}, {10, 11, 12}};
integer a5 [][] = '{3{'{13, 14}}};
integer aa1 [string][];
integer wa1 [*][];
integer qa1 [$][];
struct {
integer i;
integer a[];
} s1;
integer a[] = '{1,2,3};
logic [7:0][3:0] a6 [][];
initial begin
`checkh(a1.size, 0);
a1 = new [3];
`checkh(a1.size, 3);
`checkh($size(a1), 3);
`checkh($high(a1), 2);
`checkh($right(a1), 2);
foreach (a1[i]) a1[i] = new [i + 1];
foreach (a1[i]) begin
`checkh(a1[i].size, i + 1);
`checkh($size(a1[i]), i + 1);
`checkh($high(a1[i]), i);
`checkh($right(a1[i]), i);
end
foreach (a1[i, j]) a1[i][j] = i * 10 + j;
`checkh(a1[0][0], 0);
`checkh(a1[1][0], 10);
`checkh(a1[1][1], 11);
`checkh(a1[2][0], 20);
`checkh(a1[2][1], 21);
`checkh(a1[2][2], 22);
`checkh(a1[2].sum, 63);
foreach (a1[i]) a1[i].delete;
foreach (a1[i]) begin
`checkh(a1[i].size, 0);
end
a1.delete;
`checkh(a1.size, 0);
a1 = new [2];
`checkh(a1.size, 2);
foreach (a1[i]) a1[i] = new [i + 2];
foreach (a1[i]) begin
`checkh(a1[i].size, i + 2);
end
foreach (a2[i]) begin
`checkh(a2[i].size, 0);
end
foreach (a2[i]) a2[i] = new [i + 1];
foreach (a2[i]) begin
`checkh(a2[i].size, i + 1);
end
foreach (a2[i]) a2[i].delete;
foreach (a2[i]) begin
`checkh(a2[i].size, 0);
end
`checkh(a3.size, 2);
foreach (a3[i]) begin
`checkh(a3[i].size, 3);
end
`checkh(a3[0][0], 1);
`checkh(a3[0][1], 2);
`checkh(a3[0][2], 3);
`checkh(a3[1][0], 4);
`checkh(a3[1][1], 5);
`checkh(a3[1][2], 6);
`checkh(a4.size, 2);
foreach (a4[i]) begin
`checkh(a4[i].size, 3);
end
`checkh(a4[0][0], 7);
`checkh(a4[0][1], 8);
`checkh(a4[0][2], 9);
`checkh(a4[1][0], 10);
`checkh(a4[1][1], 11);
`checkh(a4[1][2], 12);
`checkh(a5.size, 3);
foreach (a5[i]) begin
`checkh(a5[i].size, 2);
end
`checkh(a5[0][0], 13);
`checkh(a5[0][1], 14);
`checkh(a5[1][0], 13);
`checkh(a5[1][1], 14);
`checkh(a5[2][0], 13);
`checkh(a5[2][1], 14);
a5 = a4;
`checkh(a5.size, 2);
foreach (a5[i]) begin
`checkh(a5[i].size, 3);
end
`checkh(a5[0][0], 7);
`checkh(a5[0][1], 8);
`checkh(a5[0][2], 9);
`checkh(a5[1][0], 10);
`checkh(a5[1][1], 11);
`checkh(a5[1][2], 12);
a4 = '{'{15, 16}, '{17, 18}};
`checkh(a4.size, 2);
foreach (a4[i]) begin
`checkh(a4[i].size, 2);
end
`checkh(a4[0][0], 15);
`checkh(a4[0][1], 16);
`checkh(a4[1][0], 17);
`checkh(a4[1][1], 18);
a4 = '{{19}, {20}, {21, 22}};
`checkh(a4.size, 3);
`checkh(a4[0].size, 1);
`checkh(a4[1].size, 1);
`checkh(a4[2].size, 2);
`checkh(a4[0][0], 19);
`checkh(a4[1][0], 20);
`checkh(a4[2][0], 21);
`checkh(a4[2][1], 22);
a5 = '{2{a}};
`checkh(a5.size, 2);
foreach (a5[i]) begin
`checkh(a5[i].size, 3);
end
`checkh(a5[0][0], 1);
`checkh(a5[0][1], 2);
`checkh(a5[0][2], 3);
`checkh(a5[1][0], 1);
`checkh(a5[1][1], 2);
`checkh(a5[1][2], 3);
a5 = '{};
`checkh(a5.size, 0);
a5 = '{2{'{}}};
`checkh(a5.size, 2);
foreach (a5[i]) begin
`checkh(a5[i].size, 0);
end
aa1["k1"] = new [3];
`checkh(aa1["k1"].size, 3);
aa1["k1"].delete;
wa1[1] = new [3];
`checkh(wa1[1].size, 3);
wa1[1].delete;
qa1.push_back(a);
`checkh(qa1[0].size, 3);
qa1[0] = new [4];
`checkh(qa1[0].size, 4);
qa1[0].delete;
s1.a = new [4];
`checkh(s1.a.size, 4);
s1.a.delete;
`checkh($dimensions(a1), 3);
`checkh($dimensions(a2), 3);
`checkh($dimensions(aa1), 3);
`checkh($dimensions(wa1), 3);
`checkh($dimensions(qa1), 3);
`checkh($dimensions(a), 2);
`checkh($dimensions(a6), 4);
`checkh($unpacked_dimensions(a1), 2);
`checkh($unpacked_dimensions(a2), 2);
`checkh($unpacked_dimensions(aa1), 2);
`checkh($unpacked_dimensions(wa1), 2);
`checkh($unpacked_dimensions(qa1), 2);
`checkh($unpacked_dimensions(a), 1);
`checkh($unpacked_dimensions(a6), 2);
$write("*-* All Finished *-*\n");
$finish;
end
endmodule