How do I include a modport when I pass a part selected array of interfaces to a child module?

I have an array of 16 interfaces…

myIf intf[16](CLK);

This array is split into 4 equal parts and passed to 4 child modules with each module taking a part selected sub section of the array. The child module port is defined as…

myIf.dst intf[4],

When I pass the part selected array to the module where it is instantiated without the modport, all the tools I have access to successfully parse the rtl.

  .intf(intf[s*4:s*4+3]),       // s is a genvar (range 0 <= s <= 3)

If I try and add a modport to this line I run into problems. I’ve tried…

.intf(intf.dst[s*4:s*4+3]),     // modport on part selected interface before []

and

.intf(intf[s*4:s*4+3].dst),     // modport on part selected interface after []

It is not clear to me from 1800-2012 which version is correct. Some tools accept both versions, some accept only the first version (i.e. modport before the ), and other tools only accept the version without the modport.

What is the correct way to add the modport?

Mark

In reply to mandrews28316:

This is a know issue with the LRM. 0002975: Connecting arrays of interface instances using a modport -- slice syntax - Accellera Mantis

It’s best not to use the modport in this situation.