=============================================================================== 1076.1 Ballot Resolution Commitee Comment Resolution Report ------------------------------------------------------------------------------- CRR Number: 5 Topic Addressed: Break Related CRs: 2, 3, 5, 9, 10, 227, 228, 230 (Hisashi Sasaki, Toshiba Corp., affirmative) 27 (Ernst Christen, Analogy, negative changed to affirmative) 154 (Steven Greenberg, Analogy, negative changed to affirmative) 198 (Steve Bailey, Veribest, negative changed to affirmative) Relevant LRM Sections: 2.2, 4.3, 8.14, 12.6, 12.6.2, 12.6.3, 12.6.4, 12.6.5 Resolution Status: Partly in review by balloters =============================================================================== Comment Reports Summary ~~~~~~~~~~~~~~~~~~~~~~~ ---------------------------------------------------------------------- CR002 Why break is explained by using implicit break ("BREAK"?) signal ? It seems for me no need for implicit signal. For example, "suspention" of process is not explained by implicit signal SUSPEDED. Instead, the description is done by the predicate "process is suspended". For our case, "break is indicated" is candidate for this predicate. I will talk more about the difference from implicit GUARD signal. For a GUARD signal (according to the chapter of LRM 9.5, concurrent signal assignment statements), it is explicitly referred in user-defined process as follows: B2: block ((CLEAR='0') and (PRESET='1')) -- defines implicit GUARD signal. begin Q <= '1' when (not GUARD) else '0'; -- GUARD reference end block B2; On the other hand, it seems no capability of "BREAK" reference ( a reference to the implicit break signal by BREAK ) in user-defined process as far as reading the LRM draft. Therefore I assume that BREAK is not the implicit signal in essence, but rather a flag or a predicate of describing kernel status. If BREAK could be explicitly referred, we will update above. Anyway, it is not so trivial for me by reading the LRM draft. For example, I feel the following reference of BREAK is impossible. B2: block ((CLEAR='0') and (PRESET='1')) --- NOTE: no practical value as model. begin -- just a description... break on CLK ; -- defines implicit BREAK signal. Q <= '1' when (not BREAK) else '0'; -- BREAK reference end block B2; Proposed Resolution ~~~~~~~~~~~~~~~~~~~ For example, "suspention" of process is not explained by implicit signal SUSPEDED. Instead, the description is done by the predicate "process is suspended". For our case, "break is indicated" is candidate for this predicate. ---------------------------------------------------------------------- CR003 Is there any scope rule on break ? Scope rule with respect to reference ( break-indicated(P) ), scope rule with respect to the effects of break ( P PROCESS [ break-Indicated(P)=true ] ) ... I think it is global in both if possible on reference. GUARD has a scope rule with respect to block. (GUARD reference is valid only in the body of guarded block.) [ I am now under updating my semantic analysis report to reflect recent draft as faithfully as possible. I will send it at next week. (Sorry !) ] ---------------------------------------------------------------------- CR005 [page 51 line 1485] For the evaluation of a break element, ... A model is erroneous if it depends on the order of this evaluation. I have had misunderstanding on the meaning of "order of this evaluation". There is also a BNF: break_list ::= break_element {, break_element } I thought the order of break_element in above order of right hand side in BNF. Right interpretation is the order of evaluation as sequential evaluation in concurrent process. Proposed Resolution ~~~~~~~~~~~~~~~~~~~ I think the change to "For the evaluation of a break statement", improve the ========= readability. ---------------------------------------------------------------------- CR009 [page 73 line 2203] there is no defition or explanation on the predicate "active" such as "augmentation set is active". Proposed Resolution ~~~~~~~~~~~~~~~~~~~ Give definition. ---------------------------------------------------------------------- CR010 [page 74 line 2210-] I think it is much better to explain the operation for selector quantity by stating its idea at first, and then tell why selector quantity is restricted in form of Q'INTEG and Q'DOT (for quiescent state ) Q'INTEG and Q (for discontinuity ). Proposed Resolution ~~~~~~~~~~~~~~~~~~~ That is, at first, explain the operation for Q (simple form) for two cases: quiescent state and discontinuity. Then substitute Q by Q'DOT or D'INTEG for each explanation. Anyway, more kind explanation should be done. ---------------------------------------------------------------------- CR027 The LRM text at lines 376, 383 and 389 lists the implicit break signal along with other implicit signals for the determination of the explicit ancestor, either as a prefix or in the context of references made to these signals. Since the break signal cannot be referenced in the text of a model this issue doesn't come up. Proposed Resolution ~~~~~~~~~~~~~~~~~~~ Remove the break signal and adjust the remaining text at lines 376, 383, and 389. ---------------------------------------------------------------------- CR154 In Section 4.3 under the list of objects that are not named entities we find: "The implicit break signal" In section 2.2, there is a signal called "BREAK" that is frequently mentioned. BREAK is also mentioned in 8.14. Proposed Resolution ~~~~~~~~~~~~~~~~~~~ Either give the break signal a name - BREAK, or stop using the name BREAK in the rest of the document. ---------------------------------------------------------------------- CR198 [This is an additional comment (not affecting positive/negative ballot). Comments are from the change-only, nonintegrated, document] The initial waveform of the implicit BREAK signal is specified, but not the initial value. What is the initial value? ---------------------------------------------------------------------- CR227 "For the execution of a break statement the condition, if present, is first evaluated. A break is indicated if the value of the condition is TRUE or if there is no condition. ***If a break is indicated, the driver of the implicit BREAK signal is assigned the waveform TRUE after 0 ns*** and then each break element is evaluated in the order in which the elements appear." "signal" has a special object in VHDL (digital) kernel process, which will be computed as driving value, effective value, current value. It is a hardware-related object. But, in this case, "BREAK signal" is used to implement a flag functionality in order to announce "break indication" from user-defined process to analog kernel. Proposed Resolution ~~~~~~~~~~~~~~~~~~~ Separate the conceptual object to define data interaction and the implementation way. Then, we can avoid the undesirable interaction in concept. A break indication represents a status of user-defined process. We can use formulation "process is break-indicated" just like as "process is resumed" or "process is suspended". >From a view of kernel process, break indication is detected by break set. ---------------------------------------------------------------------- CR228 "5. The value of the implicit BREAK signal is set to the projected output waveform "TRUE after 0 ns"." Proposed Resolution ~~~~~~~~~~~~~~~~~~~ 5. The value of break set is set to the empty set. ---------------------------------------------------------------------- CR230 "- ***When the quiescent state augmentation set is active*** and the name of the break quantity is of the form Q'INTEG, the characteristic expression in the quiescent state augmentation set containing the corresponding scalar subelement of the prefix Q of Q'INTEG is replaced. - ***When the quiescent state augmentation set is active*** and the name of the break quantity is of the form Q, the characteristic expression in the quiescent state augmentation set containing the corresponding scalar subelement of quantity Q'DOT is replaced. - ***When the discontinuity augmentation set is active*** and the name of the break quantity is of the form Q'INTEG, the characteristic expression in the discontinuity augmentation set containing the corresponding scalar subelement of quantity Q'INTEG is replaced. - ***When the discontinuity augmentation set is active*** and the name of the break quantity is of the form Q, the characteristic expression in the discontinuity augmentation set containing the corresponding scalar subelement of quantity Q is replaced." - There is no definition of "activeness" for augmentation set. - Does activeness have duration on its effects over many simulation cycles (many Tc)? or, over single Tc? many Ti? single Ti? Proposed Resolution ~~~~~~~~~~~~~~~~~~~ If "active" means the time augmentation set is determined, change as follows: 1) When the ... augmentation set is determined for Ti, ... Another idea is 2) When the ... augmentation set is non-empty set for Ti, ... ---------------------------------------------------------------------- =============================================================================== Analysis and Action Taken ~~~~~~~~~~~~~~~~~~~~~~~~~ Based on your suggestions in CR002 and CR227 the break signal has been replaced by a break flag. As a consequence, all references to the break signal have been removed and the definitions updated to set and clear the break signal at appropriate places. The break flag has a similar status w.r.t. the language definition as the kernel variables Tc and Tn. This modification addresses the issues raised in CR002, CR027, CR154, CR198, and CR227. In addition, the modification improves on the definition of the various concepts related to the break statement, and it simplifies the definitions related to the application of the break set to an augmentation set by making use of a tag for each break element and each characteristic expression in an augmentation set. There is now a defined term for the two quantities of a break element: the selector quantity and the break quantity. Each break element is tagged with the name of the selector quantity. This change addresses the issue raised in CR010 by clarifying the definitions. However, the language used in the modification does not include any rationale as suggested by the balloter because the LRM traditionally does not provide a rationale. Each characteristic expression in an augmentation set is tagged with the name of a quantity. When the break set is applied a characteristic expression formed from a break element replaces the characteristic expression with a matching tag in the current augmentation set, which is now a defined term. This modification addresses issues raised in CR009 and CR230. The language now states explicitly that after application the break set is empty. As a consequence, step 5 of the initialization phase has become unnecessary. This addresses the issue raised in CR228. With respect to the issue raised in CR005, we believe that the language in the draft LRM is correct in stating that all break elements are evaluated in the order in which they appear, but that the evaluation of the name of the selector quantity, the name of the break quantity and the expression within a break element can happen in an implementation- defined order. Therefore, the suggestion made by the balloter in CR005 is not correct. With respect to CR003, scope is an issue at the language level. Therefore, the definitions for the break statement don't break any scope rules. =============================================================================== Revised Definitions ~~~~~~~~~~~~~~~~~~~ In the following, the first line number refers to the stand-alone LRM, the number in parentheses to the integrated LRM. Italicized text is enclosed in exclamation marks, and bold text is enclosed in asterisks. Replacing the break signal by a break flag has the following consequences: sections 2.2, 4.3, 8.14, 12.6, 12.6.2, 12.6.3, 12.6.4, 12.6.5 Remove the break signal wherever it appears. section 8.14 at line 1536 (1317) Replace first sentence by: The execution of a *break* statement notifies the analog solver that it must determine the discontinuity augmentation set for the next analog solution point. at line 1543, 1545 (1324, 1326) Replace paragraphs by: In each break element the quantity denoted by the quantity name is the !break quantity! of the break element. If the break selector clause is present, then the quantity name in the break selector clause is the !selector quantity! of the break element; otherwise the selector quantity is the same as the break quantity. The break quantity, the selector quantity and the expression must have the same type, and the selector quantity must be either the prefix Q of a quantity of the form Q'Dot that appears in the text of the model, or a quantity of the form Q'Integ. at line 1550 (1331) ... If a break is indicated, the break flag is set and then each break element is evaluated in the order in which the elements appear. at line 1553 (1334) For the evaluation of a break element, the selector quantity, the break quantity and the expression are first evaluated. ... Then the triple consisting of the selector quantity, the break quantity and the value of the expression are added to the break set for the current simulation cycle (see 12.6.4 and 12.6.5.1). after line 1556 (1337) NOTE--It is a consequence of these definitions that in the absence of a selector clause in a break element the corresponding break quantity must be either the prefix Q of a quantity of the form Q'Dot that appears in the text of the model, or a quantity of the form Q'Integ. section 12.6.3 at line 2128 (738) remove paragraph section 12.6.4 at line 2180 (791) At the beginning of initialization, the current time, Tc, is assumed to be 0.0, the simulation frequency is assumed to be 0.0, the break set is assumed to be empty, and the break flag is assumed to be cleared. at line 2197 (819) remove step 5 at line 2203 (825) 10.The time of the next simulation cycle, Tn, is set to 0.0. [Editorial: After removing step 5 this will become step 9] at line 2219 (859) h) If the break flag is set, the time of the next simulation cycle, Tn, is set to Tc. Otherwise, Tn is determined by setting it to the earliest of: section 12.6.5 at line 2259 (898) When the analog solver resumes at time Tc, if the break flag is set, the following steps occur: after line 2266 (905) 7. The break flag is cleared. section 12.6.5.1 at line 2281 (920) The !break set! is a set of triples, each consisting of a selector quantity, a break quantity, and a value. It is formed by the execution of sequential *break* statements in each simulation cycle. The application of the break set modifies the current augmentation set. at line 2288 (927) For each triple in the break set, the difference between each scalar subelement of the break quantity and the corresponding scalar subelement of the value is a characteristic expression that replaces one of the following characteristic expressions in the current augmentation set: - If the selector quantity is of the form Q'Integ, the characteristic expression tagged with the corresponding scalar subelement of Q'Integ is replaced. - If the selector quantity is of the form Q, the characteristic expression tagged with the corresponding scalar subelement of Q'Dot is replaced. Each characteristic expression formed from an element of the break set retains the expression tag and the tolerance group of the characteristic expression it replaces. It is an error if any scalar subelement of any quantity is selected more than once by any selector quantity in a break set. at line 2303 (942) remove paragraph after line 2304 (943) After the application the break set is empty. ===============================================================================