2026-04-15 14:10:11 +02:00
|
|
|
// 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
|
2026-08-14 00:51:13 +02:00
|
|
|
typedef triple_lv_t pair_t[0:1];
|
2026-04-15 14:10:11 +02:00
|
|
|
|
2026-08-14 00:51:13 +02:00
|
|
|
function automatic triple_lv_t mk3(input logic [7:0] a, input logic [7:0] b, input logic [7:0] c);
|
2026-04-15 14:10:11 +02:00
|
|
|
mk3 = '{0: a, 1: b, 2: c};
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
pair_t pair;
|
|
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
|
// verilator lint_off SIDEEFFECT
|
2026-08-14 00:51:13 +02:00
|
|
|
pair = '{0: mk3(8'd1, 8'd2, 8'd3), 1: mk3(8'd4, 8'd5, 8'd6)};
|
2026-04-15 14:10:11 +02:00
|
|
|
// 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
|