verilator/test_regress/t/t_iface_array_multidim_rang...

82 lines
3.6 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
// Multi-dim iface arrays with ascending (left<right) ranges and negative
// indices. The descending/zero-based case is covered by t_iface_array_multidim*;
// this test exercises the ascending() branch in V3Inst and negative lo() in
// name mangling.
interface simple_if;
logic [7:0] data;
endinterface
module t;
// Both dims ascending, zero-based.
simple_if asc [0:1][0:2] ();
// Outer descending, inner ascending (mixed endianness).
simple_if mix [1:0][0:2] ();
// Negative indices: outer descending (1..-1), inner ascending (-2..0).
simple_if neg [1:-1][-2:0] ();
initial begin
asc[0][0].data = 8'd10;
asc[0][1].data = 8'd11;
asc[0][2].data = 8'd12;
asc[1][0].data = 8'd13;
asc[1][1].data = 8'd14;
asc[1][2].data = 8'd15;
mix[0][0].data = 8'd20;
mix[0][1].data = 8'd21;
mix[0][2].data = 8'd22;
mix[1][0].data = 8'd23;
mix[1][1].data = 8'd24;
mix[1][2].data = 8'd25;
neg[-1][-2].data = 8'd50;
neg[-1][-1].data = 8'd51;
neg[-1][0].data = 8'd52;
neg[0][-2].data = 8'd53;
neg[0][-1].data = 8'd54;
neg[0][0].data = 8'd55;
neg[1][-2].data = 8'd56;
neg[1][-1].data = 8'd57;
neg[1][0].data = 8'd58;
end
initial begin
#1;
if (asc[0][0].data !== 8'd10) begin $write("%%Error: asc[0][0]=%0d\n", asc[0][0].data); $stop; end
if (asc[0][1].data !== 8'd11) begin $write("%%Error: asc[0][1]=%0d\n", asc[0][1].data); $stop; end
if (asc[0][2].data !== 8'd12) begin $write("%%Error: asc[0][2]=%0d\n", asc[0][2].data); $stop; end
if (asc[1][0].data !== 8'd13) begin $write("%%Error: asc[1][0]=%0d\n", asc[1][0].data); $stop; end
if (asc[1][1].data !== 8'd14) begin $write("%%Error: asc[1][1]=%0d\n", asc[1][1].data); $stop; end
if (asc[1][2].data !== 8'd15) begin $write("%%Error: asc[1][2]=%0d\n", asc[1][2].data); $stop; end
if (mix[0][0].data !== 8'd20) begin $write("%%Error: mix[0][0]=%0d\n", mix[0][0].data); $stop; end
if (mix[0][1].data !== 8'd21) begin $write("%%Error: mix[0][1]=%0d\n", mix[0][1].data); $stop; end
if (mix[0][2].data !== 8'd22) begin $write("%%Error: mix[0][2]=%0d\n", mix[0][2].data); $stop; end
if (mix[1][0].data !== 8'd23) begin $write("%%Error: mix[1][0]=%0d\n", mix[1][0].data); $stop; end
if (mix[1][1].data !== 8'd24) begin $write("%%Error: mix[1][1]=%0d\n", mix[1][1].data); $stop; end
if (mix[1][2].data !== 8'd25) begin $write("%%Error: mix[1][2]=%0d\n", mix[1][2].data); $stop; end
if (neg[-1][-2].data !== 8'd50) begin $write("%%Error: neg[-1][-2]=%0d\n", neg[-1][-2].data); $stop; end
if (neg[-1][-1].data !== 8'd51) begin $write("%%Error: neg[-1][-1]=%0d\n", neg[-1][-1].data); $stop; end
if (neg[-1][0].data !== 8'd52) begin $write("%%Error: neg[-1][0]=%0d\n", neg[-1][0].data); $stop; end
if (neg[0][-2].data !== 8'd53) begin $write("%%Error: neg[0][-2]=%0d\n", neg[0][-2].data); $stop; end
if (neg[0][-1].data !== 8'd54) begin $write("%%Error: neg[0][-1]=%0d\n", neg[0][-1].data); $stop; end
if (neg[0][0].data !== 8'd55) begin $write("%%Error: neg[0][0]=%0d\n", neg[0][0].data); $stop; end
if (neg[1][-2].data !== 8'd56) begin $write("%%Error: neg[1][-2]=%0d\n", neg[1][-2].data); $stop; end
if (neg[1][-1].data !== 8'd57) begin $write("%%Error: neg[1][-1]=%0d\n", neg[1][-1].data); $stop; end
if (neg[1][0].data !== 8'd58) begin $write("%%Error: neg[1][0]=%0d\n", neg[1][0].data); $stop; end
$write("*-* All Finished *-*\n");
$finish;
end
endmodule