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.Received on Tue Jun 12 08:53:33 2007
This archive was generated by hypermail 2.1.8 : Tue Jun 12 2007 - 08:53:40 PDT