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

From: Neil Korpusik <Neil.Korpusik_at_.....>
Date: Wed Jan 23 2008 - 11:13:24 PST
<forwarding bounced email from danielm>


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.


attached mail follows:


Doug , regarding to LRM I can do the same as in yours  example by usig $unit
(in single compilation scope ofcource) since hier paths are allowed after
$unit. I must say that I was a bbit suprosed by this fact that thi is
allowed to use hier paths. 

 
module top;
    logic a = 1'b0;
    bottom top();
    initial begin
        $display("top.a = %b", top.a);                // Should print 1
        $display("$root.top.a = %b", $unit::top.a);    // Should print 0
<<<<<<<<<<<<<<<here
    end
endmodule

module bottom;
    logic a = 1'b1;
endmodule


So the diffs between $root and $path are:
1.$unit can reference to everything what is allowed for $root but the
reference is resolved in current compilation scope:	
2.$root can reference to all indentifiers which may be referenced
hierarhically (same as $unit but types, classes definition?) - identifiers
are resolved globally

LRM allows also strange case:

$unit::$root.top.a  //<<<<<<<<<<<here


DANiel

-----Original Message-----
From: Warmke, Doug [mailto:doug_warmke@mentor.com] 
Sent: Tuesday, November 06, 2007 8:16 PM
To: Steven Sharp; Vreugdenhil, Gordon; danielm@aldec.com.pl;
Mark.Hartoog@synopsys.com
Cc: shalom.bresticker@intel.com; sv-ec@server.eda.org
Subject: RE: [sv-ec] $root vs $unit

There is still at least one use for $root:
Disambiguating names during upward searches.

module top;
    logic a = 1'b0;
    bottom top();
    initial begin
        $display("top.a = %b", top.a);                // Should print 1
        $display("$root.top.a = %b", $root.top.a);    // Should print 0
    end
endmodule

module bottom;
    logic a = 1'b1;
endmodule

Regards,
Doug

-----Original Message-----
From: owner-sv-ec@server.eda.org [mailto:owner-sv-ec@server.eda.org] On
Behalf Of Steven Sharp
Sent: Tuesday, November 06, 2007 10:43 AM
To: Vreugdenhil, Gordon; danielm@aldec.com.pl; Mark.Hartoog@synopsys.com
Cc: shalom.bresticker@intel.com; sv-ec@server.eda.org
Subject: RE: [sv-ec] $root vs $unit


>As Gord indicates $root.<typeName> is illegal in P1800.

The illegality goes beyond the fact that hierarchical names are not allowed
in type references.  It would also be illegal to have $root.<varName>.  The
LRM says that $root can be added to the front of a hiearchical name.  But a
hierarchical name must start with a scope (which would have to be a
top-level instance in this case).

I don't think I have ever seen this pointed out before, but it follows from
the LRM text, and neatly avoids a problem.

As Shalom pointed out, $root.<identifier> could be ambiguous if the same
identifier name appears in multiple $units.  However, this is not a legal
hierarchical name unless <identifier> is a top-level instance.  Since
top-level instance names must be unique, the problem is avoided.

So the old meaning of $root to talk about things in the top-level scope is
completely gone, replaced by $unit.

Steven Sharp
sharp@cadence.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 Wed Jan 23 11:13:56 2008

This archive was generated by hypermail 2.1.8 : Wed Jan 23 2008 - 11:15:31 PST