RE: [sv-ac] comments on 1674

From: Eduard Cerny <Eduard.Cerny_at_.....>
Date: Wed Jun 13 2007 - 11:04:02 PDT
Hello John and all,

please find attached an updated (and hopefully w/o errors) proposal.
Also uploaded.

did not replace true/false by 1'b1/1'b0, just added both. true / false
are already used in several placesm e.g., 16.3, 16.8.3, etc.

Best regards,
ed


> -----Original Message-----
> From: owner-sv-ac@eda.org [mailto:owner-sv-ac@eda.org] On 
> Behalf Of John Havlicek
> Sent: Tuesday, June 12, 2007 11:53 AM
> To: sv-ac@eda-stds.org
> Subject: [sv-ac] comments on 1674
> 
> All:
> 
> I had a look over 1674 in preparation for calling for a vote.
> 
> I think a few things need to be fixed first.
> 
> Please see below.
> 
> J.H.
> 
> 
> notes 2007-06-11
> ----------------
> 
> . The proposal needs to be aligned to Draft 3 numbering.  I think
>   17.14.6 should be 16.14.6 and later subsubclauses need to be
>   renumbered.
> 
> . Change 
> 
>      The inferred disable expression is the reset expression from the
>      default disable expression (See 17.14 Note to editor: This is
>      after introducing proposal #1648). If there is no default disable
>      expression defined, the function $inferred_disable returns false.
> 
>   to 
> 
>      The inferred disable expression is the disable condition from the
>      default disable declaration whose scope includes the call to
>      $inferred_disable (See 16.15 Note to editor: This is after
>      introducing proposal #1648).  If the call to $inferred_disable is
>      not within the scope of any default disable declaration, then the
>      call to $inferred_disable returns 1'b0.
> 
>   Rationale: Improved clarity and alignment to the language of 1648.
>   Also, to my knowledge "false" is not defined as an expression in
>   SystemVerilog, so I think it makes better sense to say that the call
>   to the system function returns "1'b0".
> 
> . Change 
> 
>      then the cumulative condition is true (i.e., 1'b1).
> 
>   to
> 
>      then the cumulative condition is 1'b1.
> 
>   Rationale: I don't think that "true" is defined as an expression in
>   SystemVerilog.
> 
> . I am not sure if a call to an inferred expression function 
> is allowed
>   to be a proper subexpression of the default value expression for a 
>   formal argument.  I assumed not, in which case I recommend 
> the following
>   change for clarity:
> 
>      An inferred expression function may only be used as the default
>      value on a formal argument to a property or sequence, not within
>      the body of an expression. When an inferred expression system
>      function is used as the default value on a formal argument to a
>      property or a sequence, it is replaced by the inferred expression
>      as determined at the point where the property or sequence is
>      instantiated.
> 
>   to
> 
>      A call to an inferred expression function may only be used as the
>      entire default value expression for a formal argument to a
>      property or sequence declaration.  A call to an inferred
>      expression function shall not appear within the body expression
>      of a property or sequence declaration.  If a call to an inferred
>      expression function is used as the entire default value
>      expression for a formal argument to a property or sequence
>      declaration, then it is replaced by the inferred expression as
>      determined at the point where the property or sequence is
>      instantiated.
> 
>   If my assumption is not correct, then much of the above will still
>   work for clarity, but "be/is used as the entire" should be "be/is
>   used in a" or something similar.
>   
> 
> . For clarity, I recommend changing
> 
>      Therefore, if the instance is the top expression in a
>      verification statement, the event expression that is used to
>      replace the default argument $inferred_clock is that as
>      determined at the location of the verification statement. If the
>      instance is not the top-level property expression in the
>      verification statement then the event expression determined by
>      clock-flow rules up to the instance location in the property
>      expression is used as the default value of the argument.
> 
>   to
> 
>      Therefore, if the property or sequence instance is the top-level
>      property expression in a verification statement, the event
>      expression that is used to replace the default argument
>      $inferred_clock is that as determined at the location of the
>      verification statement. If the property or sequence instance is
>      not the top-level property expression in the verification
>      statement then the event expression determined by clock-flow
>      rules up to the instance location in the property expression is
>      used as the default value of the argument.
> 
> 
> . There is a font problem with the "|=>" operator in the declaration
>   of p_triggers.  The same font problem occurs in assertions 
> a1, a2, a3 of 
>   the second module m.
> 
> . Check the font of the tick in the '0 actual argument to 
> p_triggers in a2 of
>   the first module m.  Also, why is there a difference 
> between this and
>   the expression 1'b0 in the disable in a2 of the second 
> module m?  I recommend
>   making these expressions identical.  We are not trying to illustrate
>   constant equivalences in this example, so the difference is 
> noise in my
>   opinion.
> 
> . "rst" is not declared in module m.  This makes it hard to judge 
>   whether a3 in the first module m is equivalent to a3 in the
>   second module m.  If rst is 4-valued, then I don't think the two 
>   are equivalent because of the 4-value negation problem that we have
>   been discussing with other mantis items.  I think !rst needs to be
>   changed to something like !bit'(rst!='b0) as in the proposal for
>   1648.  Also, the text at the end that talks about the inferred 
>   enabling condition for a3 needs to be changed.
> 
>   It is o.k., although somewhat subtle, that the second form 
> of a3 does
>   not have to include the inferred enabling condition as 
> precondition, 
>   i.e.,
> 
>      a3:  assert property
>      (
>         @(posedge clk2) disable iff (rst1)
>         (!bit'(rst!='b0) && d) |-> 
>         (!bit'(rst!='b0) && d) throughout (a ##0 b[->]) |=> c
>      );
> 
>   This is accidental because of the form of the property.
> 
>   Also, note that "b[->]" needs to be changed to "b[->1]".
> 
> . In the a4 in the second module m, why is there a second 
> "@(posedge clk1)"
>   just before "d"?  This is not wrong, but it is not needed 
> and I find it
>   distracting since the substitution into the form of p_multiclock
>   does not yield it.
> 
> . Change
> 
>      instancein the assertion
> 
>   to 
> 
>      instance in the assertion
> 
> . Consider changing '1 to 1'b1 in the last paragraph.
> 
> 
> -- 
> 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 Jun 13 11:04:32 2007

This archive was generated by hypermail 2.1.8 : Wed Jun 13 2007 - 11:05:02 PDT