verilator/test_regress/t/t_interface_gen.v

70 lines
1.4 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2013 Wilson Snyder
// SPDX-License-Identifier: CC0-1.0
// Very simple test for interface pathclearing
module t (
input clk
);
integer cyc = 1;
ifc #(1) itopa ();
ifc #(2) itopb ();
sub #(1) ca (
.isub(itopa),
.i_value(4)
);
sub #(2) cb (
.isub(itopb),
.i_value(5)
);
always @(posedge clk) begin
cyc <= cyc + 1;
if (cyc == 1) begin
if (itopa.MODE != 1) $stop;
if (itopb.MODE != 2) $stop;
end
if (cyc == 20) begin
if (itopa.get_value() != 4) $stop;
if (itopb.get_value() != 5) $stop;
$write("*-* All Finished *-*\n");
$finish;
end
end
endmodule
module sub #(
parameter MODE = 0
) (
ifc.out_modport isub,
input integer i_value
);
always @* isub.value = i_value;
endmodule
interface ifc;
parameter MODE = 0;
// Modports under generates not supported by all commercial simulators
integer value;
modport out_modport(output value);
function integer get_value();
return value;
endfunction
// IEEE 1800-2017 deprecated alowing modports inside generates
// generate if (MODE == 0) begin
// integer valuea;
// modport out_modport (output valuea);
// function integer get_valuea(); return valuea; endfunction
// end
endinterface