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

// bug789 generates

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.i != 4) $stop;
      if (itopb.i != 5) $stop;
      $write("*-* All Finished *-*\n");
      $finish;
    end
  end
endmodule

module sub #(
    parameter MODE = 0
) (
    ifc isub,
    input integer i_value
);

  // Commercial unsupported Xmrs into scopes within interfaces
  generate
    always_comb isub.i = i_value;
  endgenerate
endmodule

interface ifc;
  parameter MODE = 0;
  // Commercial unsupported Xmrs into scopes within interfaces
  generate
    integer i;
  endgenerate
endinterface
