Quote:
> The example in 1364 section 12.4.1 is not legal according to the
> text above it, because the expression "b.i = 1;" in module c
> refers to module name b and not the names of one of the instances of b,
> a_b1 or d_b1.
> Several clones reject this example, however XL accepts it. Looking at
> the XL manual, whose Framemaker was the ancestor of 1364, it says that
> upwards hierarchical names are composed of module names, not module
> instance names.
> One solution would be the union of these two schemes. This would also
> require explicit resolution of the case where an instance name and
> module name are both in view of the upward hierarchical expression.
> -- Mitchell Perilstein
Read 12.4.1 again, closely.
The examples are IEEE 1364 compliant. IEEE 1364 indeed specifies the
behavior you are proposing. The first token of a hierarchical
reference can be either a module_identifer, or a module_instance_name.
Indeed, a fully qualified path name has to start with a
module_identifier, as top level modules are those modules that are
never instantiated, and hence have no module_instance_name.
I agree that the language of section 12.4 could be tightened up a bit;
especially in the loose use of "name" to mean sometimes
module_identifier, and sometimes module_instance_name.
In any case, looking just at section 12.4.1, you see a BNF syntax block
that says:
<QUOTE>
upward_name_reference := module_identifier.item_name
item_name := ...
</QUOTE>
and then there is the sentence:
<QUOTE>
Upwards name references can also be done with names of the form
module_instance_name.item_name.
</QUOTE>
The key word here is "also"
In the instantiation
foo f1(a,b)
foo is the module_identifier.
f1 is the module_instance_name.
So, your clones are not IEEE 1364 compliant, nor are they XL compliant.
--
Michael McNamara Silicon Sorcery < http://www.*-*-*.com/ >
Get my verilog emacs mode (subscribe for free updates!) at
< http://www.*-*-*.com/ ;