RE: [sv-ac] Sv-AC 1737

From: Eduard Cerny <Eduard.Cerny_at_.....>
Date: Wed Mar 21 2007 - 05:08:44 PDT
Tom,
Thanks. 
John, can you send it for a vote?
Thank you,
ed

> -----Original Message-----
> From: Thomas.Thatcher@Sun.COM [mailto:Thomas.Thatcher@Sun.COM] 
> Sent: Tuesday, March 20, 2007 6:29 PM
> To: Eduard Cerny
> Cc: john.havlicek@freescale.com; sv-ac@eda-stds.org
> Subject: Re: [sv-ac] Sv-AC 1737
> 
> Hi Ed,
> 
> This proposal looks good to me.
> 
> Tom
> 
> Eduard Cerny wrote On 03/20/07 13:51,:
> > HI,
> > 
> > I have uplodade a new version of 1737. Please review and if 
> OK, let's
> > vote...
> > 
> > Thanks,
> > ed
> > 
> > 
> > 
> > 
> --------------------------------------------------------------
> ----------
> > 
> > This proposal corrects an incomplete fix for item 1381 
> regarding when an
> > evaluation attempt takes place under inferred enabling 
> condition from an
> > always block.
> > 
> >  
> > 
> > *P1800-2008-draft1, 17.13.5, p. 289  (**IEEE Std 1800(tm)-2005**)*
> > 
> > *Replace*
> > 
> > Another inference made from the context is the enabling 
> condition for a
> > property. Such derivation takes place when a property is 
> placed in an
> > *if..else* block or a *case* block. The enabling condition 
> assumed from
> > the context is used as the antecedent of the property. A concurrent
> > assertion embedded in procedural code specifies that a new 
> evaluation
> > attempt of the underlying property_spec begins at every 
> occurrence of
> > the inferred clocking event.
> > 
> > *property *r3;
> > 
> >       @(*posedge *mclk)(q != d);
> > 
> > *endproperty*
> > 
> > *always *@(*posedge *mclk) *begin*
> > 
> > *      if *(a) *begin*
> > 
> >             q <= d1;
> > 
> >             r3_p: *assert property *(r3);
> > 
> > *      **end*
> > 
> > *end*
> > 
> > * *
> > 
> > The above example is equivalent to the following:
> > 
> >  
> > 
> > *property *r3;
> > 
> >       @(*posedge *mclk)a |-> (q != d);
> > 
> > *endproperty*
> > 
> > r3_p: *assert property *(r3);
> > 
> > *always *@(*posedge *mclk) *begin*
> > 
> > *      if *(a) *begin*
> > 
> >             q <= d1;
> > 
> > *      end*
> > 
> > *end*
> > 
> > * *
> > 
> > Similarly, the enabling condition is also inferred from 
> *case *statements.
> > 
> > * *
> > 
> > *property *r4;
> > 
> >       @(*posedge *mclk)(q != d);
> > 
> > *endproperty*
> > 
> > *always *@(*posedge *mclk) *begin*
> > 
> > *      case *(a)
> > 
> >             1: *begin *q <= d1;
> > 
> >                   r4_p: *assert property *(r4);
> > 
> > *            **end*
> > 
> > *            default*: q1 <= d1;
> > 
> > *      endcase*
> > 
> > *end*
> > 
> > * *
> > 
> > The above example is equivalent to the following:
> > 
> >  
> > 
> > *property *r4;
> > 
> >       @(*posedge *mclk)(a==1) |-> (q != d);
> > 
> > *endproperty*
> > 
> > r4_p: *assert property *(r4);
> > 
> > *always *@(*posedge *mclk) *begin*
> > 
> > *      case *(a)
> > 
> >             1: *begin *q <= d1;
> > 
> > *            **end*
> > 
> > *            default*: q1 <= d1;
> > 
> > *      endcase*
> > 
> > *end*
> > 
> > *With*
> > 
> > Another inference made from the context is the enabling 
> condition for a
> > verification statement. Such derivation takes place when a 
> verification
> > statement is placed in an *if..else* block or a *case* block. The
> > enabling condition assumed from the context is used to modify the
> > property_expr of the verification statement as follows:
> > 
> >  
> > 
> > - If the verification statement is assume property or 
> assert property
> > then the enabling condition is used as the antecedent of an 
> overlapping
> > implication of which the consequent is the property_expr 
> stated in the
> > verification statement.
> > 
> >  
> > 
> > - If the verification statement is cover property then the enabling
> > condition is used as the antecedent of a negated 
> overlapping implication
> > of which the consequent is the negated property_expr stated in the
> > verification statement. The double negation used in the property
> > expression represents the dual property to the overlapping 
> implication
> > and it is often called "followed by".
> > 
> >  
> > 
> > The resulting new property_expr then replaces the original 
> property_expr
> > in the verification statement. A concurrent assertion embedded in
> > procedural code in an *if...else* block or a *case* block 
> specifies that
> > a new evaluation attempt of the underlying property_spec 
> begins at every
> > occurrence of the (inferred) clocking event.
> > 
> >  
> > 
> > For example,
> > 
> >  
> > 
> > *property* r3;
> > 
> >       @(*posedge* mclk)((q != d) ##1 ack);
> > 
> > *endproperty*
> > 
> > *always* @(*posedge* mclk) *begin*
> > 
> >       *if* (a) *begin*
> > 
> >             q <= d1;
> > 
> >             r3_p: *assert* *property* (r3);
> > 
> >             r3_c: *cover* *property* (r3);
> > 
> >       *end*
> > 
> > *end*
> > 
> >  
> > 
> > The above example is equivalent to the following:
> > 
> >  
> > 
> > *property* r3;
> > 
> >       @(*posedge* mclk)((q != d) ##1 ack);
> > 
> > *endproperty*
> > 
> > * *
> > 
> > r3_p: *assert property* (@(*posedge* mclk) a |-> r3);
> > 
> > r3_c: *cover property* (@(*posedge* mclk) *not* (a |-> *not* r3));
> > 
> >  
> > 
> > *always* @(*posedge* mclk) *begin*
> > 
> >       *if* (a) *begin*
> > 
> >             q <= d1;
> > 
> >       *end*
> > 
> > *end*
> > 
> >  
> > 
> > Similarly, the enabling condition is also inferred from 
> case statements.
> > 
> >  
> > 
> > *property* r4;
> > 
> >       @(*posedge* mclk)((q != d) ##1 ack);
> > 
> > *endproperty*
> > 
> > *always* @(*posedge* mclk) *begin*
> > 
> >       *case* (a)
> > 
> >             1: *begin* q <= d1;
> > 
> >                   r4_p: *assert* *property* (r4);
> > 
> >                   r4_c: *cover* *property* (r4);
> > 
> >             *end*
> > 
> >             *default*: q1 <= d1;
> > 
> >       *endcase*
> > 
> > *end*
> > 
> >  
> > 
> > The above example is equivalent to the following:
> > 
> >  
> > 
> > *property* r4;
> > 
> >       @(*posedge* mclk)((q != d) ##1 ack);
> > 
> > *endproperty*
> > 
> > * *
> > 
> > r4_p: *assert property* (@(*posedge* mclk)(a==1) |-> r4);
> > 
> > r4_c: *cover property* (@(*posedge* mclk) *not*((a==1) |-> 
> *not* r4));
> > 
> > * *
> > 
> > *always* @(*posedge* mclk) *begin*
> > 
> >       *case* (a)
> > 
> >             1: *begin* q <= d1;
> > 
> >             *end*
> > 
> >             *default*: q1 <= d1;
> > 
> >       *endcase*
> > 
> > *end*
> > 
> >  
> > 
> 
> -- 
> ------------------
> Thomas J. Thatcher
> Sun Microsystems
> 408-616-5589
> ------------------
> 
> 

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Mar 21 05:09:12 2007

This archive was generated by hypermail 2.1.8 : Wed Mar 21 2007 - 05:09:36 PDT