RE: [sv-ac] call for email vote on motion regarding Mantis 1728

From: Korchemny, Dmitry <dmitry.korchemny_at_.....>
Date: Mon May 07 2007 - 11:16:47 PDT
Hi Manisha,

I deposited an updated version of the proposal based on your comments
and I am attaching it here for convenience.

See also my answers below.

Thanks,
Dmitry

-----Original Message-----
From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On
Behalf Of Kulshrestha, Manisha
Sent: Wednesday, April 04, 2007 1:43 AM
To: sv-ac@server.eda-stds.org
Subject: RE: [sv-ac] call for email vote on motion regarding Mantis 1728

Hi,

I vote 'no' on this proposal. 

Here is the list of issues to be addressed (based on the feedback
Within Mentor):

1) points 9, 14, and 15 are outside the domain of the LRM and
    are not valid for inclusion.  If 9 (debug variables) is
    desirable, this needs to be expressed as named declaration
    with some value, not as a "debug" construct.  Debug
    handling is completely outside the scope of the LRM.

[Korchemny, Dmitry] I agree. Removed these items from the proposal.

2) the "macro" expansion and "hierarchical reference"
    expansion are contradictory.  A hierarchical reference
    "expansion" may bind differently if there is an
    upwards intervening reference.  This entire part of
    the language should be dropped.  The definition of the
    "let" should just say that non-formal idents bind to
    the names in the context of the definition; it is
    not useful (and could be incorrect) to attempt to define
    this in terms of a hierarchical reference.

[Korchemny, Dmitry] Fixed in the proposal.

3) If 'let' is allowed in any procedural context, why is there 
   restriction on the formal types as described in (3)? 

[Korchemny, Dmitry] Yes, it looks like there is no particular reason to
impose this limitation.

4) If a "let" is imported directly by name, eg:
      package p;
         int x;
         let y = x;
      endpackage
      module foo;
         import p::y;
      endmodule
    Does the import of p::y imply that p::x is also imported
    due to the macro expansion?

[Korchemny, Dmitry] p::x does not become imported

  If not, does this mean that
    such a "let" must be treated as a function call?
[Korchemny, Dmitry] Yes, I am citing the proposal: "Import from a
package should follow the same rules as when importing functions from
packages."

If not, how does one resolve the types given that "x" is not
    visible in the referring module?

5) In "Note 2" it says "a let can appear anywhere that an
    expression is allowed".  What is the impact of allowing
    a let in a default of a parameterized class parameter?
    It seems that there are going to be issues getting the
    context and the form correct.

[Korchemny, Dmitry] I don't think there should be an issue here. Let
will be instantiated at this point.

E.g.,

let s = 3 + 2;

class vector #(int size = s);
    bit [size-1:0] a;
endclass

Is evaluated to

class vector #(int size = (3 + 2));
    bit [size-1:0] a;
endclass

Could you provide an example where let instantiation would be
problematic?

6) Under what conditions is a "let" a constant expression?  As
    some as things are "hierarchical", there are issues with
    use in, for example, the RHS of a parameter default.

[Korchemny, Dmitry] When let is instantiated, it is known whether the
resulting expression is constant or not. This question cannot be
answered for the let statement itself. E.g.,

let a(x, y) = x + y;
bit b[3:0];

bit m[a(3, 5)]); // Legal - this is equivalent to m[(3 + 5)], (3 + 5) is
a constant expression

bit m[a(3, b)]); // Illegal - 3 + b is not a constant expression

7) Is a "let" permitted in a class?  If so, is it visible via
    inheritance?

[Korchemny, Dmitry] I don't think it should. Neither sequences nor
properties can be class members. Therefore neither should the let
statement be.

8) Since a "let" can be hierarchically referenced, how does
    one align seperate compilation with a reference to a "let"
    that has not yet been compiled?  If all "let" declarations
    are required to exist, they should be restricted to be in
    either the local design unit or a package since no other
    context can be guaranteed.

[Korchemny, Dmitry] The situation with let is no different than with
sequences and properties.

9) There doesn't appear to be any restriction regarding referencing
    a "let" in a deeper level of generate.  This can be used to
    create contradictory designs:
        module top;
          paramater p = genb.x;
          if (p) begin:genb
             let x = 0;
          end else begin
             let x = 1;
          end
        endmodule

[Korchemny, Dmitry] I agree, this construct should not be valid. I think
that hierarchical referencing of let statements in a deeper level of
generate should be forbidden.

10) Is a let permitted in an automatic context?  If so, how does
     one ensure that the automatic exists at the time of use?

[Korchemny, Dmitry] If I understand your question correctly the answer
is negative. Same situation as with sequences and properties.

11) Does a default of a "let" cause an identifier import even if
     the default is never used?
        package p;
          int x;
        endpackage
        module top;
          let y(z = x) = z;
          int x = y(1);
        endmodule
     This is illegal if "x" is imported since the "int x" declaration
     conflicts.  If "x" is not imported, how does one guarantee
     that a hierarchical reference to "top.y" doesn't require the
     import later?

[Korchemny, Dmitry] Again, there should be the same algorithm as in the
case of sequences or properties.

12) Is the let_identifier in the declaration a true name in the
     scope?

[Korchemny, Dmitry] If I understand your question correctly, the answer
is yes. The names should be unique in the scope. E.g., the following
should be illegal:

let x = a;
int x; // Illegal - name conflict

13) Given:
        module foo;
           let x = 1;
           initial $display(x);
        endmodule
     Does "x" bind to the "let" or is an upwards hierarchical
     reference?  What if you have:
           initial $display(x());

[Korchemny, Dmitry] "x" binds to the "let". In both cases we have
initial $display(1);

14) Why is the point of "let_actual_arg"?  I thought that a
     "let_instance" was always valid as an expression?  Isn't
     this redundant?

[Korchemny, Dmitry] I agree. Fixed in the proposal.

15) How do the "let" grammar rules tie into the rest of the
     grammar?  In particular with expressions?

[Korchemny, Dmitry] Fixed in the proposal.

16) I don't believe that point 8 can be done unless you assume
     that all "let" binding is a compile time activity (which it
     clearly cannot be).

[Korchemny, Dmitry] I deleted it. It is irrelevant to the proposal.

17) Point 11 talks about "let" as a statement.  I thought it was
     an expression.  Can a reference to a "let" ever be anything
     other than an expression??

[Korchemny, Dmitry] let is a statement. let instantiation is an
expression:

let x(y) = y + 1; // let statement
...x(a)...	// let instantiation

It is the same situation as with sequences and properties

18) This proposal does not clearly show the motivation behind the 
    proposal. All the examples are for the usage in concurrent 
    assertions (properties and sequences). Probably some examples 
    of usage in immediate assertions and other procedural contexts 
    will be useful.

[Korchemny, Dmitry] I copied the motivation section with minor changes
from our letter to SV-BC to the proposal.

Thanks.
Manisha


-----Original Message-----
From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On
Behalf Of John Havlicek
Sent: Tuesday, March 27, 2007 12:37 PM
To: sv-ac@server.eda-stds.org
Subject: [sv-ac] call for email vote on motion regarding Mantis 1728

All:

This is the call to vote on Ed's motion regarding Mantis 1728.

The text of the motion is below -- I made some very small editorial
changes to the English.

Please vote if you are eligible.  See details below.

J.H.


Ballot on the following motion:

"The P1800 SV-AC committee members consider that the concept of the
'let' statement as expressed in the Mantis item 1728 draft proposal is
very useful for defining effective assertions and assertion libraries.
Therefore, the committee recommends that the SV-BC committee consider
the proposal and work with SV-AC to formulate an effective enhancement
proposal for the IEEE 1800-2008 standard."

- Called on 2007-03-27, final ballots due by 23:59 PDT on 2007-04-03.

 v[xxxxxxxxxxxxxxxxxx-xx] Doron Bustan (Freescale)
 v[xxxxxxxxxxxxxxxxxxx-x] Eduard Cerny (Synopsys)	
 n[--------x-x-xxx-x---x] Surrendra Dudani (Synopsys)
v[-xxxxx-xxx-xxx-------] Yaniv Fais (Freescale)
t[xxxxxxxxxxxxxxxxxxxxx] John Havlicek (Freescale - Chair)
v[xxxrxxxxxxxxxxxxx-xxx] Dmitry Korchemny (Intel - Co-Chair)
v[xxxx----------xx-xxxx] Manisha Kulshrestha (Mentor Graphics)
n[--xxxxx-------x-xx-x-] Jiang Long (Mentor Graphics)
n[--x-xx--xx-xxxxxxx-x-] Hillel Miller (Freescale)
v[xx-xxxxxxxx-xxxxxxxxx] Lisa Piper (Cadence)  v[x-x..................]
Erik Seligman (Intel)  n[----xxxx-xx----------] Tej Singh (Mentor
Graphics)  v[xxxxxxxxxxxxxxxxxxxxx] Bassam Tabbara (Synopsys)
v[xxxxxx...............] Tom Thatcher (Sun Microsystems)
   |--------------------- attendance on 2007-03-27
 |----------------------- voting eligibility for this ballot
|------------------------ email ballots received


	Legend:
		x = attended
		- = missed
		r = represented
		. = not yet a member
		v = valid voter (2 out of last 3)
		n = not valid voter
                t = chair eligible to vote only to make or break a tie

--
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.

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


Received on Mon May 7 11:17:32 2007

This archive was generated by hypermail 2.1.8 : Mon May 07 2007 - 11:17:43 PDT