RE: [sv-ec] RE: [sv-bc] Question on compilation units & compiler directives

From: Rich, Dave <Dave_Rich_at_.....>
Date: Wed Jan 25 2006 - 07:57:52 PST
Shalom,

(IMHO) this is clearly described in the normative section 6.9 about type
compatibility.

Dave


> -----Original Message-----
> From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of
> Bresticker, Shalom
> Sent: Wednesday, January 25, 2006 2:39 AM
> To: Vreugdenhil, Gordon
> Cc: sv-bc@eda.org; sv-ec@eda.org
> Subject: [sv-ec] RE: [sv-bc] Question on compilation units & compiler
> directives
> 
> In order to prevent wrong conclusions by the reader, this should be
> noted in the LRM.
> 
> Shalom
> 
> > -----Original Message-----
> > From: owner-sv-bc@eda.org [mailto:owner-sv-bc@eda.org] On
> > Behalf Of Gordon Vreugdenhil
> > Sent: Wednesday, January 25, 2006 6:53 AM
> > To: Symons, Tom H
> > Cc: Karen Pieper; Warmke, Doug; Brad Pierce; sv-bc@eda.org;
> > LaFlamme, Jamie; Mehdi Mohtashemi
> > Subject: Re: [sv-bc] FW: [sv-ec] Question on compilation units
> > & compiler directives
> >
> > Tom,
> >
> > Just to bring in a small warning here about language
> > expectations.
> >
> > SystemVerilog is *very* different than C++ in terms of what
> > constitutes class assignment legality.  C++ ensures that two
> > files with the same class hierarchy included via #include
> > represent
> > the same types.  Not true in SV.
> >
> > If you have:
> >     my_include.svh:
> >        `ifndef _MY_INCLUDE
> >        `define _MY_INCLUDE
> >             class C;
> >             endclass;
> >        `endif
> >
> > and then include "my_include.svh" into two different
> > compilation
> > units (say "unit1" and "unit2"), you end up with two different
> > and
> > completely incompatible versions of class C.  Objects of type C
> > within
> > unit1 are not assignment compatible with objects of type C in
> > unit2.
> >
> > This behavior in SystemVerilog makes it more than just a
> > methodology decision to have class types in packages.  If you
> > want a class to be usable across different compilation units,
> > it MUST be in a package and be imported or else the resulting
> > types will not be the same types.  This severely limits ones
> > ability to use `include for class type inclusion unless you
> > want just similar behavior in multiple regions of the design.
> >
> > Most people on the committees are aware of this kind of issue,
> > but since I hadn't heard it raised yet, I just wanted to
> > reinforce that the C++ view of "compilation unit" and type
> > inclusion does not map into SystemVerilog's `include in a
> > way that you might expect.
> >
> > Gord.
Received on Wed Jan 25 07:58:42 2006

This archive was generated by hypermail 2.1.8 : Wed Jan 25 2006 - 07:58:51 PST