Hi Matt, My intention was not to provide a good solution for your problem, since I still don't have any, but to highlight important issues in the suggested definition of the stable check of the unique case. Since we are working now on the definition of "final" assertions, the problems we are facing are very similar to the problems that you may encounter. Since stability requires some kind of sampling, it is natural to try to extend concurrent assertions for other use cases where stable assertions are required. This is not straightforward, but may eventually work. Please, see my specific comments below. Thanks, Dmitry -----Original Message----- From: Maidment, Matthew R Sent: Tuesday, September 04, 2007 10:10 AM To: Korchemny, Dmitry; 'Warmke, Doug'; 'Brad Pierce'; 'sv-bc@server.eda.org' Subject: RE: [sv-bc] Glitches in unique/priority case/if violations I don't understand why using the observed region is taboo. What parts of the system are active in the observed region and what causes re-entry into the standard design regions? [Korchemny, Dmitry] The scheduling diagram (see Fig. 4-1) shows that the new iterations may start after execution of the Observed, the Post-Observed, the Post-Re-NBA and the Pre-Postponed regions. E.g., the property specified in the expect statement is evaluated in the Observed region, and the subsequent code may cause new events so that the Observed region will be visited again. Another example provide sequence events (9.4.2.4) Not the design as far as I can tell. [Korchemny, Dmitry] The LRM does not specify a notion of the design. I believe that in most conventional RTL designs the Observed region is visited only once. But this situation may change. E.g., people may start using sequence events in their RTL code. This new assertion class should be used to fend off the effects of simulator-induced glitches due to ambiguity in evaluation of concurrent processes. If some external factors such as a testbench or interesting assertion action code cause the design to behave erratically, at least there's someone to blame and some code to adjust. [Korchemny, Dmitry] See my previous comment. What's the big hurdle to activating them in the observed region? [Korchemny, Dmitry] It is not a problem to activate assertions in the Observed region, but to sample values in the Observed region. You never know whether this is your last visit of the Observed region. You can either state that you sample values when entering the Observed region for the first time, or that you sample them each time when you enter the Observed region. In the latter case you can still have glitches. Do you really need to define a sub-region within the observed region or create a new region? [Korchemny, Dmitry] I don't think that introducing yet another region will solve the problem. If you want to sample values in the Observed region, more radical changes in the scheduling algorithm are required. Assertions without action blocks, like unique case may be checked in the Postponed region using sampling values in the Postponed region, but then you introduce yet another class of assertions in SV. Is this the motivation for trying to overload concurrent assertions? [Korchemny, Dmitry] The motivation of overloading concurrent assertions is that they can do the work for the "synthesizable" code (I am not trying to define here what this exactly means). For the true "non-synthesizable" code the immediate assertions seem to be the best choice. I'm very much opposed to attaching a clock or pseudo-clock-- precisely because it is so abhorrently inefficient. And once we have defined some system-known, every-time-step clock, simulators will optimize the clock right back out. [Korchemny, Dmitry] Exactly. Therefore introducing this clock should not slow down the simulation as compared to other concurrent assertions. Making users bear this burden is unreasonable and burdening users with the draconian task of multiple words to do so on each and every assertion doesn't add up to me. [Korchemny, Dmitry] There is no burden for users, at least in your case, since you can keep the syntax you suggested for unique case. Semantically it will mean sampling in the Preponed region at each step. As for explicitly written assertions, one can introduce a default notation, e.g., no clock = simulation tick. Regarding the for-loop, let me clarify my intentions: each iteration of the for loop initiates the evaluation of the assertion (just like an immediate assertion) but the evaluation is actually queued until the observed region. For your example, the 3 assertions (unique a[0],b[0]; unique a[1],b[1]; unique a[0], b[0]) would be queued for final evaluation in the observed region. [Korchemny, Dmitry] Yes, I understand this. But you need an unambiguous definition of unrollable and non-unrollable loops. Note also that the problem gets more complicated when an assertion/unique case, etc. is written inside a function or a task, etc. Just to make sure we don't lose sight of the problem, here's an example of code that evaluates differently on different simulators but should not be a problem at all: http://www.eda.org/sv-ac/hm/2932.html Matt -- Matt Maidment mmaidmen@ichips.intel.com >-----Original Message----- >From: Korchemny, Dmitry >Sent: Monday, September 03, 2007 11:36 PM >To: Maidment, Matthew R; Warmke, Doug; Brad Pierce; >sv-bc@server.eda.org >Subject: RE: [sv-bc] Glitches in unique/priority case/if violations > >Hi Matt, > >Unfortunately it is not easy to understand what the final >value is. Should it be in the Observed region? But the >Observed region may be visited several times in the simulation >step and it is not known whether the current visit is the last >one. To evaluate the assertions in the Postponed region is not >an option, since there is no slot for the execution of an >action block there. > >Since checking unique case does not require any action block >to execute, it may be done in the Postponed region, but then >you are implicitly introducing yet another kind of assertions >into the language. > >Our first attempt was to define "final" assertions to sample >their values in the Observed region, but we could not define >it without making major changes in the SV scheduling process. >This is why we are trying to reuse concurrent assertions for >this purpose. > >If you want to evaluate a concurrent assertion at each time >step (i.e., to be clock independent), it is enough to define a >system function, say $simulation_tick, which will return an >event at the beginning of each simulation tick (it can be >defined accurately). This function would be similar to >$global_clock which we are trying to introduce now. The main >reason why we did not want to state that the $global_clock is >ticking at each simulation step was the simulation efficiency. > >Another point that needs to be taken into account is loops. A >straightforward definition will produce unexpected results. >Consider your example modified: > >for (int i = 0; i < 3; i++) begin > assert unique case (1'b1) inside > [a[i]] out = ina; > [b[i]] out = inb; > endcase >end > >When checked in the Observed or in the Postponed region, the >check will be performed for i = 2 only, which apparently is >not your intention. > >Regards, >Dmitry > >-----Original Message----- >From: owner-sv-bc@server.eda.org >[mailto:owner-sv-bc@server.eda.org] On Behalf Of Maidment, Matthew R >Sent: Tuesday, September 04, 2007 9:03 AM >To: Warmke, Doug; Brad Pierce; sv-bc@server.eda.org >Subject: RE: [sv-bc] Glitches in unique/priority case/if violations > > > >In my opinion, there should be a class of assertions that are evaluated >at the end of the >time step in which they are triggered. The values that are sampled are >the final values for >that time step-- and no clock should be implicitly or explicitly >associated with the assertion. > >As awful as this may seem, I would propose an addition modifier to the >case statement to change >the evaluation from immediate to this new mode. Something like >postponed or observed or reuse some >keyword like assert or final. > >observed unique case (1'b1) inside > [a] out = ina; > [b] out = inb; >endcase > >assert unique case (1'b1) inside > [a] out = ina; > [b] out = inb; >endcase > >I'm not stuck on the position of a new modifier, I'm just throwing it >out there so I can >see what it might look like. > >I advocate leaving immediate assertions as they are and create this new >class to avoid >compatibility issues. > >Matt >-- >Matt Maidment >mmaidmen@ichips.intel.com > > >>-----Original Message----- >>From: owner-sv-bc@eda.org [mailto:owner-sv-bc@eda.org] On >>Behalf Of Warmke, Doug >>Sent: Monday, September 03, 2007 9:40 PM >>To: Brad Pierce; sv-bc@eda.org >>Subject: RE: [sv-bc] Glitches in unique/priority case/if violations >> >>Hi Brad, >> >>I thought of this myself when I first saw Erik's proposal. >>After I read the proposal, I thought the technique he >>is proposing to deglitch those was not appropriate for >>the unique/priority case/if glitch problem. But, maybe >>there are some things that could be done. >> >>The fundamental issue with unique/priority case/if is the >>lack of a clocking specification that would be used to >>strobe the logic at appropriate times. >> >>In the immediate assertions situation, Erik is proposing to >>replace the immediate assertions with concurrent assertions. >>There are a few modifications to concurrent assertion semantics >>to make them appropriate for replacing immediate assertions. >>And by nature, concurrent assertions must be associated with >>an implicit or explicit clocking event. >> >>So, if we could oblige users to write their unique/priority >>case/if constructs in code where clocking can be inferred, >>perhaps the technology could work. >> >>But what about cases where no clocking can be inferred? >>Should those cases turn into errors? Backwards compatibility >>problems would then arise. Though backwards incompatibility >>with glitchy unique/priority detection could be argued to >>be not such a bad thing... >> >>For the assertions proposal, I think this clocking situation >>is easier. In cases where no clocking can be inferred, >>users will continue to use immediate assertions. They >>are susceptible to glitches, but at least there are no >>compatibility issues. >> >>Regards, >>Doug >> >>-----Original Message----- >>From: owner-sv-bc@server.eda.org >[mailto:owner-sv-bc@server.eda.org] On >>Behalf Of Brad Pierce >>Sent: Monday, September 03, 2007 9:07 PM >>To: sv-bc >>Subject: [sv-bc] Glitches in unique/priority case/if violations >> >>In http://www.eda-stds.org/sv-ac/hm/4668.html the SV-AC is proposing a >>possible solution for the glitch issue in immediate assertions. >> >>Is there some way that this proposal could be leveraged into >a solution >>for the glitch issue in unique/priority case/if violoations? >> >>That is, could the violations of unique/priority be defined >in terms of >>implicit immediate assertions? >> >>Erik's SV-AC proposal is at >> >> http://www.eda-stds.org/sv-ac/hm/att-4668/assertfinal070830es.pdf >> >>-- Brad >> >> >>-- >>This message has been scanned for viruses and >>dangerous content by MailScanner, and is >>believed to be clean. >> >> >> >>-- >>This message has been scanned for viruses and >>dangerous content by MailScanner, and is >>believed to be clean. >> > >-- >This message has been scanned for viruses and >dangerous content by MailScanner, and is >believed to be clean. > -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Wed Sep 5 04:27:14 2007
This archive was generated by hypermail 2.1.8 : Wed Sep 05 2007 - 04:27:24 PDT