verilator/test_regress/t/t_iface_array_multidim_3d.v

59 lines
1.5 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Wilson Snyder
// SPDX-License-Identifier: CC0-1.0
// 3D interface instance arrays. Ensures arbitrary rank, not just 2D.
interface simple_if;
logic [15:0] data;
endinterface
module t;
localparam int A = 2;
localparam int B = 2;
localparam int C = 3;
simple_if bus[A-1:0][B-1:0][C-1:0] ();
genvar gi, gj, gk;
generate
for (gi = 0; gi < A; gi++) begin : g_a
for (gj = 0; gj < B; gj++) begin : g_b
for (gk = 0; gk < C; gk++) begin : g_c
initial bus[gi][gj][gk].data = 16'(gi * B * C + gj * C + gk + 1);
end
end
end
endgenerate
logic [15:0] chk[A-1:0][B-1:0][C-1:0];
generate
for (gi = 0; gi < A; gi++) begin : g_a_chk
for (gj = 0; gj < B; gj++) begin : g_b_chk
for (gk = 0; gk < C; gk++) begin : g_c_chk
always_comb chk[gi][gj][gk] = bus[gi][gj][gk].data;
end
end
end
endgenerate
initial begin
#1;
for (int i = 0; i < A; i++) begin
for (int j = 0; j < B; j++) begin
for (int k = 0; k < C; k++) begin
if (chk[i][j][k] !== 16'(i * B * C + j * C + k + 1)) begin
$write("%%Error: bus[%0d][%0d][%0d].data=%0d expected %0d\n",
i, j, k, chk[i][j][k], i * B * C + j * C + k + 1);
$stop;
end
end
end
end
$write("*-* All Finished *-*\n");
$finish;
end
endmodule