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™-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 Tue Mar 20 15:29:04 2007
This archive was generated by hypermail 2.1.8 : Tue Mar 20 2007 - 15:29:21 PDT