verilator/test_regress/t/t_interface_array2.v

71 lines
1.4 KiB
Systemverilog
Raw Normal View History

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2015 Johan Bjork
// SPDX-License-Identifier: CC0-1.0
interface intf;
2026-03-08 23:26:40 +01:00
logic logic_in_intf;
modport source(output logic_in_intf);
modport sink(input logic_in_intf);
endinterface
2026-03-08 23:26:40 +01:00
module modify_interface (
input logic value,
intf.source intf_inst
);
2026-03-08 23:26:40 +01:00
assign intf_inst.logic_in_intf = value;
endmodule
function integer return_3();
2026-03-08 23:26:40 +01:00
return 3;
endfunction
2026-03-08 23:26:40 +01:00
module t #(
parameter N = 6
2026-03-08 23:26:40 +01:00
) ();
intf ifs[N-1:0] ();
logic [N-1:0] data;
assign data = {1'b0, 1'b1, 1'b0, 1'b1, 1'b0, 1'b1};
2026-03-08 23:26:40 +01:00
generate
genvar i;
for (i = 0; i < 3; i++) begin
assign ifs[i].logic_in_intf = data[i];
end
endgenerate
// verilator lint_off SIDEEFFECT
modify_interface m3 (
.value(data[return_3()]),
.intf_inst(ifs[return_3()])
);
// verilator lint_on SIDEEFFECT
2026-03-08 23:26:40 +01:00
modify_interface m4 (
.value(data[4]),
.intf_inst(ifs[4])
);
2026-03-08 23:26:40 +01:00
modify_interface m5 (
.value(~ifs[4].logic_in_intf),
.intf_inst(ifs[5])
);
2026-03-08 23:26:40 +01:00
generate
genvar j;
for (j = 0; j < N - 1; j++) begin
initial begin
#1;
if (ifs[j].logic_in_intf != data[j]) $stop;
end
end
2026-03-08 23:26:40 +01:00
endgenerate
initial begin
#1;
if (ifs[5].logic_in_intf != ~ifs[4].logic_in_intf) $stop;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule