verilator/test_regress/t/t_interface_down.v

81 lines
1.5 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
interface ifc;
integer value;
endinterface
module t (
input clk
);
`ifdef INLINE_A //verilator inline_module
`else //verilator no_inline_module
`endif
integer cyc = 1;
ifc itop1a ();
ifc itop1b ();
ifc itop2a ();
ifc itop2b ();
wrapper c1 (
.isuba(itop1a),
.isubb(itop1b),
.i_valuea(14),
.i_valueb(15)
);
wrapper c2 (
.isuba(itop2a),
.isubb(itop2b),
.i_valuea(24),
.i_valueb(25)
);
always @(posedge clk) begin
cyc <= cyc + 1;
if (cyc == 20) begin
if (itop1a.value != 14) $stop;
if (itop1b.value != 15) $stop;
if (itop2a.value != 24) $stop;
if (itop2b.value != 25) $stop;
$write("*-* All Finished *-*\n");
$finish;
end
end
endmodule
module wrapper (
ifc isuba,
ifc isubb,
input integer i_valuea,
input integer i_valueb
);
`ifdef INLINE_B //verilator inline_module
`else //verilator no_inline_module
`endif
lower subsuba (
.isub(isuba),
.i_value(i_valuea)
);
lower subsubb (
.isub(isubb),
.i_value(i_valueb)
);
endmodule
module lower (
ifc isub,
input integer i_value
);
`ifdef INLINE_C //verilator inline_module
`else //verilator no_inline_module
`endif
always @* begin
isub.value = i_value;
end
endmodule