RE: [sv-ec] $root vs $unit

From: Mark Hartoog <Mark.Hartoog_at_.....>
Date: Tue Nov 06 2007 - 10:03:48 PST
As Gord indicates $root.<typeName> is illegal in P1800.

In System Verilog 3.0/3.1 this was legal. In SV 3.0/3.1 declarations
outside of modules were in $root and you could refer to types in
$root this as $root.<typeName>.

When $unit was introduced to replace $root, a new meaning was attached
to $root as the root of the instance hierarchy. 

Tools may currently have backwards compatibility modes with SV 3.0/3.1
where
they are still accepting $root.<typeName>, but this is now illegal and
should
be changed to $unit::<typeName>. 

> -----Original Message-----
> From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On 
> Behalf Of Gordon Vreugdenhil
> Sent: Tuesday, November 06, 2007 6:55 AM
> To: danielm
> Cc: 'Bresticker, Shalom'; sv-ec@eda.org
> Subject: Re: [sv-ec] $root vs $unit
> 
> 
> Please see 1800-2005 4.9:
> 
>     User-defined type identifiers have the same scoping rules 
> as data identifiers,
>     except that hierarchical reference to type identifiers 
> shall not be allowed.
> 
> As in all programming languages, even though something is 
> syntactically derivable, it may not be semantically legal.
> 
> So $root.type_name is not legal.
> 
> 
> I don't know what you mean by $unit ambiguity.  There isn't 
> any that I know of.  Can you give an example of what you 
> consider to be ambiguous?
> 
> Originally you said:
> 
>  >     1st compilation:
>  >       typedef int T;
>  >     2nd compilation
>  >       typedef reg T;
>  >       T v; //this will be int?
>  >       $unit::T v; //this will be reg?
>  >
>  >     2nd compilation to the same lib for sure override T 
> from 1st one.
>  >     What is the sens of using $unit?
> 
> There is no "override" going on.
> 
> The "T v;" declaration refers to "reg" as does "$unit::T v".
> 
> Each compilation unit is a distinct name space and there is 
> no mechanism to have visibility across different $unit contexts.
> 
> Gord.
> 
> 
> 
> 
> danielm wrote:
> > 1. Instantation tree is not defined within LRM, while $root 
> usage is 
> > defined as:
> > 
> > hierarchical_identifier ::= [ *$root . *] { identifier 
> > constant_bit_select *. *} identifier
> > 
> > and
> > 
> > type_identifier ::= identifier
> > 
> > so from both above I can say that
> > 
> > $root.TYPE_IDENTIFIER
> > 
> > is  ok
> > 
> > 2. lets stay close to an example can you give me one. Does it deal 
> > with some separate compilation ambiguity or it works only in single 
> > compilation scope?
> > 
> > 
> > 
> ----------------------------------------------------------------------
> > --
> > *From:* Bresticker, Shalom [mailto:shalom.bresticker@intel.com]
> > *Sent:* Tuesday, November 06, 2007 1:53 PM
> > *To:* danielm; sv-ec@server.eda.org
> > *Subject:* RE: [sv-ec] $root vs $unit
> > 
> > 1. The LRM says,
> > 
> > The name $root is used to unambiguously refer to a 
> top-level instance 
> > or to an instance path starting from
> > 
> > the root of the instantiation tree. $root is the root of the 
> > instantiation tree.
> > 
> > For example:
> > 
> > $root.A.B // item B within top instance A
> > 
> > $root.A.B.C // item C within instance B within instance A
> > 
> > $root allows explicit access to the top of the instantiation tree. 
> > This is useful to disambiguate a local path
> > 
> > (which takes precedence) from the rooted path. If $root is not 
> > specified, a hierarchical path is ambiguous.
> > 
> > For example, A.B.C can mean the local A.B.C or the top-level A.B.C 
> > (assuming there is an instance A that
> > 
> > contains an instance B at both the top level and in the 
> current module). 
> > The ambiguity is resolved by giving
> > 
> > priority to the local scope and thereby preventing access to the 
> > top-level path. $root allows explicit access
> > 
> > to the top level in those cases in which the name of the top-level 
> > module is insufficient to uniquely identify
> > 
> > the path.
> > 
> > T is not within the instantiation tree.
> >  
> > 2. $unit refers to the local compilation unit. If you 
> compile together 
> > into the same compilation unit the two typedef 
> declarations, then the 
> > second will generate an error because you are redeclaring T 
> within the 
> > same compilation unit.
> >  
> > If the two compilations are to different compilation units, 
> then only 
> > the second declaration of T will be seen by the code that follows.
> >  
> > Why use $unit?
> >  
> > For example, for declarations that you want to be available to more 
> > than one design element within the compilation unit, a 
> common typedef 
> > for example.
> >  
> > This avoids naming collisions with declarations within other 
> > compilation units.
> >  
> > Shalom
> >  
> > 
> >     
> --------------------------------------------------------------
> ----------
> >     *From:* owner-sv-ec@server.eda.org
> >     [mailto:owner-sv-ec@server.eda.org] *On Behalf Of *danielm
> >     *Sent:* Tuesday, November 06, 2007 2:36 PM
> >     *To:* Bresticker, Shalom; sv-ec@server.eda.org
> >     *Subject:* RE: [sv-ec] $root vs $unit
> > 
> >     1. I've checked the LRM and I cannot find any statement 
> forbidding
> >     $root.T
> >      
> >     2.about $unit:: you claim that I can do for example :
> >      
> >     1st compilation:
> >       typedef int T;
> >     2nd compilation
> >       typedef reg T;
> >       T v; //this will be int?
> >       $unit::T v; //this will be reg?
> >      
> >     2nd compilation to the same lib for sure override T 
> from 1st one.
> >     What is the sens of using $unit?
> >      
> >      
> >     DANiel
> > 
> >     
> --------------------------------------------------------------
> ----------
> >     *From:* Bresticker, Shalom [mailto:shalom.bresticker@intel.com]
> >     *Sent:* Tuesday, November 06, 2007 12:57 PM
> >     *To:* danielm; sv-ec@server.eda.org
> >     *Subject:* RE: [sv-ec] $root vs $unit
> > 
> >     I don't think $root.T is legal.
> >     T exists in $unit, not $root.
> >     Consider what would happen if T were defined in two different
> >     compilation units. $unit always refers to the local compilation
> >     unit, but what would $root.T refer to? There are two 
> different T's.
> >      
> >     Shalom
> > 
> >         
> --------------------------------------------------------------
> ----------
> >         *From:* owner-sv-ec@server.eda.org
> >         [mailto:owner-sv-ec@server.eda.org] *On Behalf Of *danielm
> >         *Sent:* Tuesday, November 06, 2007 12:43 PM
> >         *To:* sv-ec@server.eda.org
> >         *Subject:* [sv-ec] $root vs $unit
> > 
> >         What is the diff between $root and $unit ie in below case.
> >         What should be the types of a,b,c.
> >          
> >         typedef reg T;
> >         module top;
> >          typedef int T;
> >          typedef $root.T T1;
> >          typedef $unit::T T2;
> >          
> >          T a;
> >          T1 b;
> >          T2 c;
> >         endomdule
> >          
> >          
> >         DANiel
> > 
> >         -- 
> >         This message has been scanned for viruses and
> >         dangerous content by *MailScanner*
> >         <http://www.mailscanner.info/>*, and is
> >         believed to be clean. *
> > 
> >     
> *---------------------------------------------------------------------
> >     Intel Israel (74) Limited
> > 
> >     This e-mail and any attachments may contain 
> confidential material for
> >     the sole use of the intended recipient(s). Any review 
> or distribution
> >     by others is strictly prohibited. If you are not the intended
> >     recipient, please contact the sender and delete all copies.
> >     *
> > 
> >     *
> >     -- 
> >     This message has been scanned for viruses and
> >     dangerous content by 
> <http://www.mailscanner.info/>**MailScanner*
> >     <http://www.mailscanner.info/>*, and is
> >     believed to be clean. *
> > 
> > 
> ---------------------------------------------------------------------
> > Intel Israel (74) Limited
> > 
> > This e-mail and any attachments may contain confidential 
> material for 
> > the sole use of the intended recipient(s). Any review or 
> distribution 
> > by others is strictly prohibited. If you are not the intended 
> > recipient, please contact the sender and delete all copies.
> > 
> > 
> > --
> > This message has been scanned for viruses and dangerous content by 
> > *MailScanner* <http://www.mailscanner.info/>, and is believed to be 
> > clean.
> 
> --
> --------------------------------------------------------------------
> Gordon Vreugdenhil                                503-685-0808
> Model Technology (Mentor Graphics)                gordonv@model.com
> 
> 
> -- 
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
> 
> 

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Tue Nov 6 10:04:16 2007

This archive was generated by hypermail 2.1.8 : Tue Nov 06 2007 - 10:04:50 PST