VHDL Issue Number: IR1.99.07 Classification: Language Definition Problem Language Version: VHDL-1076.1'99 Summary: Q'integ'dot and q'dot'integ are ambiguous Related Issues: IR1.99.01 Relevant LRM Sections: 6.1, 12.6.5, 14.1 Key Words and Phrases: q'integ'dot, q'dot'integ Current Status: Analyzed 1076.1-99 Disposition: Unknown Closed (All Issues Completely Addressed) Bugs Fixed, Enhancements Outstanding (No ISAC Issues) Superseded (ISAC Issues Outstanding) Disposition Rationale: Superseded By: N/A ----------------------- Date Submitted: June 14, 2002 Author of Submission: Craig Winters Author's Affiliation: Cadence, Inc. Author's Post Address: Author's Phone Number: Author's Fax Number: Author's Net Address: cwinters@cadence.com ----------------------- Date Analyzed: 10 Jul 2005 Author of Analysis: Ernst Christen Revision Number: 2 Date Last Revised: 10 Jul 2005 EC: added analysis and recommendation Description of Problem ---------------------- The LRM says we have an augmentation set entry for each Q'INTEG and for each Q where there exists a Q'DOT in the text of the model. In each of these cases we have an INTEG and a DOT expression in the augmentation set. Based on this observation: What happens with Q'INTEG'DOT? In the case of Q'INTEG'DOT we have an X'INTEG and a Y'DOT (where X is "Q" and Y is "Q'INTEG") with corresponding expressions in the augmentation set. Each expression should be selectable for a break element. The problem is they both share the same break selector, Q'INTEG. If we then have a break statement such as BREAK FOR Q'INTEG USE x => 1.0; the selector quantity, "Q'INTEG" could refer to Q'INTEG or Q'INTEG'DOT. If a model requires a specific augmentation set expressions to be replaced, or both expressions, how are the expressions selected? What happens with Q'DOT'INTEG? In the case of Q'DOT'INTEG we have an X'INTEG and a Y'DOT (where X is "Q'DOT" and Y is "Q") with corresponding expressions in the augmentation set. The quiescent state augmentation set entry for "X'INTEG" is "X == 0" or its equivalent. The quiescent state augmentation set entry for "Y'DOT" is "Y'DOT == 0" or its equivalent. By substitution, Q'DOT'INTEG gives us two equations for the augmentation set: X == 0 produces Q'DOT == 0 Y'DOT == 0 produces Q'DOT == 0 Likewise, the discontinuity augmentation set entries for X'INTEG is X'INTEG == X'INTEG(t-) and for Y'DOT is Y == Y(t-). By substitution, Q'DOT == Q'DOT(t-) and Q'DOT == Q'DOT(t-) Again, we have identical equations producing a singular matrix. Proposed Resolution ------------------- If my analysis is correct, and these are ambiguous constructs, I see two possible resolutions. 1. We simply make the constructs illegal 2. We declare both constructs to be identity expressions with Q, and require the implementation to replace them with Q, thereby produce no augmentation set expressions. This way we remove both the break element possibility and the conflicting 1076.1-ISAC Analysis & Rationale -------------------------------- The issue raised by this IR points to a problem in the definition of the augmentation sets for quantities of the forms Q'DOT'INTEG and Q'INTEG'DOT. The problem affects all augmentation sets, not just the quiescent state augmentation set and the discontinuity augmentation set as described by the author. The problem is due to the fact that the definition of the augmentation sets does not anticipate mathematical relationships between a quantity of the form Q'DOT or Q'INTEG and a quantity that is the prefix of Q if Q is itself an attribute name. It has to be noted that the problem exists only if an attribute name Q'DOT or Q'INTEG is defined to be a static name if its prefix Q is a static name. This is not the case for IEEE Std. 1076.1-1999, but planned for IEEE Std. 1076.1-2005 (see IR1.99.01). T dx Mathematically, integral -- dt = x(T) - x(0), which differs from x(T) by 0 dt d T the initial condition x(0) of x. Conversely, -- integral x dt = x(T). dt 0 This implies that from a mathematical perspective Q'INTEG'DOT is identical to Q, but Q'DOT'INTEG is not identical to Q. We conclude that defining both Q'DOT'INTEG and Q'INTEG'DOT to be identity expressions with Q, as suggested by the second proposed resolution, would be wrong for the former. There are now two choices: a) Q'DOT'INTEG is defined to be an illegal construct, and Q'INTEG'DOT is defined to be mean Q. b) Both contructs are defined to be illegal. We propose to adopt the second choice as neither construct seems to have any utility. 1076.1-ISAC Recommendation for IEEE Std 1076.1-1999 --------------------------------------------------- Deal with staticness of quantity attributes in the next language revision. 1076.1-ISAC Recommendation for Future Revisions ----------------------------------------------- Change the definition of Q'DOT as follows: Q'DOT Kind: Quantity. Prefix: Any quantity denoted by the static name Q, except a quantity whose name is of the form Q'INTEG. Result Type: The same type as Q. Result: The derivative with respect to time of Q at the time the attribute is evaluated. Change the definition of Q'INTEG as follows: Q'INTEG Kind: Quantity. Prefix: Any quantity denoted by the static name Q, except a quantity whose name is of the form Q'DOT. Result Type: The same type as Q. Result: The time integral of Q from time 0 to the time the attribute is evaluated.