Re: [sv-bc] .* port instanti

From: Rakesh Gulati <rakesh_at_.....>
Date: Tue May 31 2005 - 23:26:22 PDT
So, whether passing a interface instance to a genric port or modport
using .* is correct?
  Both interface instance and its modport or genric interface can be
treated as equivalent.

Is there any type for interface that should be mapped to equivalent type
in .* instance creation?

Thanks
Rakesh


Greg Jaxon wrote:

 > That's an interesting construction which seems to invite the
 > compiler to do a mindreading trick:  You'd like the leaf module's
 > formal port (named i1) to match via .* with the parent module's
 > interface declaration (also named i1), but you want the leaf module's
 > formal type (intf.m1) to make the modport selection within that
 > interface.
 >
 > This extra resolution step is not specified in the current LRM.
 >
 > Instead the LRM explains .* connection as a shorthand for
 > .portname(portname).   You need the connection .i1(i1.m1),
 > which goes beyond the pattern of straightforward redundancy.
 >
 > So we're talking "language extension" here.
 >
 > On first examination it seems unambiguous.  But I don't see how
 > adding this improves the language.  In your example, the
 > advantage it offers is that modport4 does not need to know the
 > names of the interface modports, or which one leaf would like to use.
 > But "implementation hiding" is not a goal of .* port connection.
 > Connecting via .* requires coordination of otherwise independent
 > implementation choices (the formal & actual port names), which
 > presumes that no port choices can be hidden.
 >
 > As written, intf, modport4, and leaf are all in the same source file.
 > Implementation hiding is typically used with separate source files
 > so two teams can operate more independently of each other.
 > I have some operational questions related to how that would work here.
 >
 > The declarative order question: don't we need either the "module leaf
 > ..."
 > definition, or an "extern module leaf ..." declaration in the source
 > text BEFORE "leaf inst (.i2(i2.m2), .* )" instantiates it?
 > Or is the separation of "analyze" and "elaborate" activity supposed to
 > give elaboration the ability to look ahead in the source text?
 >
 > The separate elaboration question:  We can elaborate modport4 provided
 > the leaf team gives us leaf's extern module declaration.  By
 > discarding the
 > generic interface port (which does not connect via .*), leaf could also
 > elaborate separately from modport4.
 >
 >            But, both teams need the interface definition.
 >
 > When it comes time to link them, we'd like the "type matching" rule for
 > ports to insure that both teams used the /same/ definition of intf.
 >
 > Currently the type-match rules concern themselves with the strong
 > datatypes.
 > How should linkers decide whether two interface ports can connect?
 > Is there a similar strong typing for interfaces?
 >
 > Greg Jaxon
 >
 >
 > Rakesh Gulati wrote:
 >
 >> Hi
 >>
 >>  In the example below,  I am passing the the interface instance using
 >> .* port connections, but i am trying to catch the modport for the
 >> interface instance i1. As per IEEE P1800 D4 instance portname and
 >> type should match. So
 >>
 >> 1. A interface instance and its modports are of equivalent type.
 >> 2. Interface instance is equivalent to generic interface type
 >>
 >> or we should consider that a interface is having no type and hence no
 >> such check is required.
 >>
 >> Thanks
 >> Rakesh
 >>
 >> `timescale 1ns/1ns
 >>
 >> interface intf(input clk, output int count);
 >>  modport m1(import task doincr(input int incr),output count);
 >>  modport m2(output count, import getincr);
 >>  modport m3(output count, export task doincr(input int incr));
 >>  modport m4(export function int getincr(input int count, incr));
 >> endinterface
 >>
 >>
 >> module modport4(input clk, output int count[1:0]);
 >> intf i1(clk, count[0]), i2(clk, count[1]);
 >> leaf inst(.i2(i2.m2), .*);
 >> endmodule
 >>
 >> module leaf(input clk, intf.m1 i1, interface i2);
 >> endmodule
 >>
 >>
 >>
 >>
 >
 >
 >
 >
Received on Tue May 31 23:23:42 2005

This archive was generated by hypermail 2.1.8 : Tue May 31 2005 - 23:23:51 PDT