[sv-bc] SV-BC64 -- multidimensional arrays of instances (17.8, A.3.1, A.4.1.1, A.5.4)


Subject: [sv-bc] SV-BC64 -- multidimensional arrays of instances (17.8, A.3.1, A.4.1.1, A.5.4)
From: Brad Pierce (Brad.Pierce@synopsys.com)
Date: Thu Feb 27 2003 - 18:19:53 PST


Issue SV-BC64 as recorded in --

       http://www.eda.org/sv-bc/hm/att-0409/01-03-01-29.txt

asks

   "Are there multiple dimensions on arrayed instances? If so, how do
    the ports get bit-blasted? If not, the BNF needs to be fixed."

Yes, there can be multiple dimensions on arrayed instances, and their
port connection rules are described in section 17.8. It would be
helpful if there were a "SystemVerilog adds the capability to ..."
paragraph about this.

However, section 17.8 does not address the issue of how to connect the
terminals in multidimensional arrays of gate instances. Nor does it
address the issue of how to connect the ports in multiple dimensional
arrays of interface instances.

Also, if there are multidimensional arrays of interface instances,
then the proposal of --

          http://www.eda.org/sv-bc/hm/0410.html

must be modified in modport_hierarchical_ports_declaration, because
that production assumes that an array of interface instances has only
one dimension.

Also, why does the BNF allow multidimensional arrays of module, interface,
and gate instances, but not of UDP instances? Should the BNF be changed
in A.5.4 from

      name_of_udp_instance ::= udp_instance_identifier [ range ]

to

      name_of_udp_instance ::= udp_instance_identifier { range }

?

If so, then the terminal connection rules should also be clarified
for multidimensional arrays of UDP instances.

An alternative fix for the above LRM problems would be to consider
whether generate is sufficient to achieve the desired effect, and,
if so, to remove the multidimensional module instance array port
connection rules from 17.8 and to modify the BNF as follows:

   --

   In A.3.1, change

          name_of_gate_instance ::= gate_instance_identifier { range }
   to
          name_of_gate_instance ::= gate_instance_identifier [ range ]

   --

   In A.4.1.1, change

          name_of_instance ::= module_instance_identifier { range }

   to
          name_of_instance ::= moudle_instance_identifier [ range ]

   --

   In A.5.4, change

          name_of_udp_instance ::= udp_instance_identifier '[' range ']'
   to
          name_of_udp_instance ::= udp_instance_identifier [ range ]

   --

-- Brad



This archive was generated by hypermail 2b28 : Thu Feb 27 2003 - 18:20:29 PST