verilator/test_regress/t/t_array_pattern_side_effect.v

50 lines
1.3 KiB
Systemverilog

// DESCRIPTION: Verilator: Assignment pattern preserves array expression side effects
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Wilson Snyder
// SPDX-FileCopyrightText: 2026 Rowan Goemans
// SPDX-License-Identifier: CC0-1.0
// verilog_format: off
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
// verilog_format: on
module t;
// verilator lint_off ASCRANGE
typedef logic [0:2][7:0] triple_lv_t;
// verilator lint_on ASCRANGE
typedef triple_lv_t pair_t [0:1];
function automatic triple_lv_t mk3(
input logic [7:0] a,
input logic [7:0] b,
input logic [7:0] c
);
mk3 = '{0: a, 1: b, 2: c};
endfunction
pair_t pair;
initial begin
// verilator lint_off SIDEEFFECT
pair = '{
0: mk3(8'd1, 8'd2, 8'd3),
1: mk3(8'd4, 8'd5, 8'd6)
};
// verilator lint_on SIDEEFFECT
`checkd(pair[0][0], 8'd1);
`checkd(pair[0][1], 8'd2);
`checkd(pair[0][2], 8'd3);
`checkd(pair[1][0], 8'd4);
`checkd(pair[1][1], 8'd5);
`checkd(pair[1][2], 8'd6);
$write("*-* All Finished *-*\n");
$finish;
end
endmodule