// 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