// DESCRIPTION: Verilator: Get parameter from array of interfaces
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2024 Todd Strader
// SPDX-License-Identifier: CC0-1.0

interface intf #(
    parameter int FOO = 4
) (
    input wire clk,
    input wire rst
);
  modport modp(input clk, rst);
endinterface

module sub (
    intf.modp the_intf_port[4],
    intf.modp single_intf_port
);
  localparam intf_foo = the_intf_port[0].FOO;
  localparam single_foo = single_intf_port.FOO;

  initial begin
    if (intf_foo != 4) $stop;
    if (single_foo != 4) $stop;
  end
endmodule

module t (
    clk
);
  logic rst;
  input clk;

  intf the_intf[4] (.*);
  intf single_intf (.*);

  sub the_sub (
      .the_intf_port(the_intf),
      .single_intf_port(single_intf)
  );

  always @(posedge clk) begin
    $write("*-* All Finished *-*\n");
    $finish;
  end
endmodule
