You can forward the whole array to the sub-module like this:
interface iface();
logic a;
logic b;
modport mport(input a, output b);
endinterface
module submod (
iface.mport iface_array
);
...
endmodule
module mod (
iface.mport iface_array
);
submod submod_inst(.iface_array(iface_array));
endmodule
module top ();
iface top_iface_array ();
mod mod_inst(.iface_array(top_iface_array));
endmodule
Or you can break out the array to a set of sub-modules like this:
interface iface();
logic a;
logic b;
modport mport(input a, output b);
endinterface
module submod (
iface.mport iface_port
);
...
endmodule
module mod (
iface.mport iface_array
);
genvar i;
generate
for(i=0; i<4; i++) begin : submod_lp
submod submod_inst(.iface_port(iface_array));
end
endgenerate
endmodule
module top ();
iface top_iface_array ();
mod mod_inst(.iface_array(top_iface_array));
endmodule