TWiki
>
P1800 Web
>
SystemVerilogAssertionCommittee
>
SVACMeetingMinutes
>
SV-ACMinutes2011_03_04
(2011-03-10,
ErikSeligman
)
(raw view)
E
dit
A
ttach
Notes from the SV-AC Face-to-Face Meeting, March 3,4, 2011 ---------------------------------------------------------- I. Present: Tom Thatcher, Dmitry Korchemny, Scott Little, Anupam Prabhakar Erik Seligman Gordon Vreugdenhil, Dave Rich Attending by Phone: Tapan Kapoor, Manisha Kulshrestha II. Dmitry gave a presentation which outlined the SV-AC's wants/needs. The presentation covered the following topics: Some discussion is presented inline - Checker output arguments Needed for exporting status from a checker - Continuous assignments, and blocking assignments. - Procedural control and looping constructs within checkers - Functions in checkers Gord: Are you talking about automatic or static functions? - Calling tasks from checkers Need to limit this to $display - Allow calling checkers from functions - Would have to avoid output connections for checkers appearing in functions. - Would need to avoid static variables - An alternative would be to use a macro in a package. - Allow checker instances to appear in classes. - Use checkers in a way consistent with UVM - Gord: Classes have a defined point of creation, but no defined point of destruction. - Only the simplest checkers would work in a class. - Allow forcing of design variables from checkers. - Would allow formal verification to do pruning of design. - Currently done by tool command. - Why wouldn't you simply drive from checker output? - Allow interfaces as checker arguments. - Gord: Should be straightforward. Nothing new here. III. Discussions of topics in Dmitry's presentation - Sampling: Dmitry had proposed a "more flexible" form of sampling. For some types of variables, $sampled would mean the current value. Gord: Don't mess with the definition of sampling. Rather, have very clear semantics which define what types of variables are sampled. To keep things concise, define the rules once and refer to them. - Continous Assignmnets Dmitry's slide had an example of how a a simulator could produce inconsistent results because of the different regions that different variables are updated. The slide said, "This should Pass" Gord: I disagree, this should NOT pass. - Deferred Assertions Gord: Could move the deferred assertion reporting to the postponed region. However, if an action block performs any signal assignment, the update will not occur until the next simulation time-step. IV. Scott's Presentation - Scott Little presented a proposal for the semantics of adding concurrent assignments - Goal: Keep checker rules consistent with the reset of SystemVerilog. - i.e continuous assignments would use current values of RHS variables, and would update in the Reactive region. - Rather than sampling at checker boundary, each construct within a checker would have its sampling semantics - assertions would sample all inputs. - Non-blocking assignments would sample RHS variables - Random checker: These would be solved asynchronously V. Gord: Language Future - It seems that there are two different worlds which use the language: - The formal world, relies on a flattened, synthesized design - The simulation world can't assume a flattened design. - How do we bridge the gap? - Should there be more of a split between formal verification and simulation? - Assertions as generators is a big problem. - Action blocks that generate data - Powerful constructs for formal verification may not work well in simulation. - One precedent is the synthesis sub-set. Many simulation constructs were dis-allowed for synthesis. - Perhaps we should create a formal super-set. Would allow powerful formal constructs, while maintaining clean simulation semantics. - But don't know if the working group would agree to this direction in the language. - Dave Rich: But synthesis subset had problems. For example the simulation/synthesis mismatch. VI. More discussions - Continuous Assignments: Do we need them in checkers? - Dave: Can't we just fix let? - Dmitry: example: let a = b[15:0]; How can we reference a[5] - Gord: Instead, define like this: let a = {b[15:0]}; Now, the reference a[5] becomes legal - Dmitry: example: struct { bit a; bit b; } s Without assign, how can you set the struc elements? - Gord & Dave: typedef struct { bit a; bit b; } s_t; let s = s_t'{ . . ., . . .} - Assignments needed for checker outputs: Gord: Agree, outputs are the one compelling reason why continous assignments are needed. For a let, there is no process Gord: Continuous assignments updating in the Reactive region should be OK. - In simulation, assigns could only target outputs of checker. - Allow continuous assigns in checkers: needed for outputs. - Can't expect assigns to update in time for assertion in the same cycle. - Can't expect that updated values will be seen by assertions. i.e. Dmitry's example will still not work. - Checkers appearing in tasks/functions - Gord: In simulation - would need to limit to checkers containing only deferred assertions. - This would require the compiler to elaborate the statement. - Essentially the same support requires as a generate block. - Could different calls to the function result in different elaborations of the checker? - If the checker contains only deferred assertions, it should be OK. - Can't allow anything which would require function inlining. examples: $inferred_clk - Alternative idea: treat checker as a parameterized type example: checker check(. . ., p) checker ck1 = check(. . ., 1) - Note that in SystemVerilog, the whole universe of types is known after elaboration. - Checker argument Sampling: - We got to checker input argument sampling because we wanted the non-blocking assignments to sample their arguments. - Manisha: What about checker inputs that have a const cast? The const cast means the checker input is not sampled. it gets the current value. - Dave: Any place where a variable triggers a process should not be sampled. - Scott: Free checker variables are never sampled. - Checker output arguments - May be assigned only from a continous assignment. - Should it be typed? - Dave: It will have to be typed. - Major use case supported: Driving result indication to other parts of the model - Dmitry: What about having action block drive assertion output. - Anupam: Currently deferred assert may only have single subroutine call. - Why is deferred assertion action block limited to single subroutine call? Text mentions "no begin-end block" -- Seems arbitrary Concurrent assertions don't have this restriction. - Forcing in checkers - Use cases: 1. Substituting module with abstract model in a system. 2. Pruning the design - Checkers in classes - Use case: OVM/UVM allows monitors in classes. Why couldn't these be implemented as checkers? - Note: Only expect, and immediate assertions allowed in classes - Dave: Note that immediate assertions are turned off by $assertoff and other assertion control tasks. Thus, a monitor implemented with assertions could also be turned off. - He recommended against using assertions in the monitor implementation. - No defined destruction point for a class: A checker/assertion could fail long after it is useful. - Scott: Checkers might make sense in some static classes. - Dave: Problem with clocking blocks: #1 sampling semantics. - Vacuity - Scott: We had discussed vacuity before. However, research is not mature in this area. We should just fix implies and leave the rest for later. Day 2 ===== V. Discussions - Local Variables: 3 Mantis items open - 2555 is just a clarification - 3057 Allows first-class local variables - Would allow declaration within any parenthesized scope - Annex F would already support this - Manisha: Would conflicting definitions be well defined? (local variables with same name defined in different scopes) - 3195 Ben Cohen's proposal on local variable flow-out - Ask Ben if he wants to write the proposal. - AMS Assertions: - Scott: Details of AMS Group - Freescale developed realtime sequence syntax - They just don't know how to implement it. - Definition for non-overlapping implication needs work. - Did a realtime LTL implementation - Scott: Application to P1800 - Annex F does have unclocked support - Published work on extending PSL for unclocked use. - PSL has unclocked support. However, nobody implements it because it would mean evaluating every time step. - Dmitry: It would be good to have a notion of stability. (even for regular assertions: could use it to check for glitches) - Dynamic data types in assertions - Existing use: Inside procedural code, an automatic variable can be considered an example of how this might work. The value of the variable is captured and preserved throughout the assertion attempt. - Erik: Would similar mechanism work for dynamic data types? - Scott: Might not want ot capture the value right away. What abou a temporal assertion? - Erik: But the object might be destroyed before the temporal assertion attempt completes. - What's the difference between these examples? string s; always @ (posedge clk) if (s == "yes") . . . and string s; assert property ( @(posedge clk) s == "yes" ); - One difference is sampling. Sampling captures the value in the Preponed region It doesn't refer to the original object. - Could we sample dynamic types? - If the index is not constant, we would have to sample the entire array. e.g. assert property ( myqueue[i] == 4 ); - Manisha: Same problem if we use a local variable for the index. - Dmitry: Example Would like to do something like this: property p (x, set); x inside set; endproperty assert property p(y, '{1,3,7}); - Dave: for this, you would need to declare the type of "set". Can't have it untyped. - Tom: What is the motivation for allowing dynamic types in assertions? - Scott: Would like to put assertions in test bench to catch test bench bugs. - Adding real types to assertions - Dave: Language in other parts of the LRM say, "The expression must return an integral type" Using language like this would easily permit the referencing of real types in assertions. - Dmitry: Displayed presentation slide, which proposed adding an "integral" type. A formal argument typed "ingegral" would accept any integral type, but would not accept arguments of sequence & property, for example. - Dave: But then what about real types? - Dave: Note that you can already type an expression like this: if ( type(x) == int ) - Dave: There is already the type "packed" Any packed type can be interpreted as an integral type. Probably need to discuss this more with the SV-BC. - What about variables of type time - Problem: If you use $time direcly in an assertion, you will get the current value. If you capture $time in a variable in a process, then try to use that variable in an assertion, you will instead get the sampled value of the variable, not the current time. - Don't try to fix this. Variables of type time should be sampled just as any other variable appearing in assertions. The user will have to know that this is a problem. You can't capture time in a variable, and refer to it in an assertion and expect to get the correct time. - Global Clocking - Dmitry: Want to allow multiple global clocks. - Tom: Doesn't this mean that global clock is now essentially the same as default clocking? - Anupam: This proposal requires that the global clock appears at the very top level of the model. Before, global clock could appear anywhere in the model, and it would affect the entire design. - Dave: Now the global clocking must be in a higher level of hierarchy than the call to $global_clock - Backward incompatibilities: - Modules could get different global clock than they did before - Modules which used to have a valid global clock might not have one with this proposal. - Assertions could get different values for future value functions if the effective global clock changes. - Assertionns and Covergroups - Dmitry: Proposed temporal coverage covergroup A : coverpoint a { bins a[] = {1,2}; } B : coverpoint b { bins b[] = {[1:3]}; } cover property ( trig #-# A[*2] ##1 B[*2] ); endcovergroup This cover property would report coverage for sequences where coverpoint A matches 2 cycles in a row, and coverpoint B matches in the following two cycles. In addition it would create a cross over the different possible bins of coverpoints A and B. - Tom: It's not really clear from the syntax that the cover property is crossing the bins of A and B. - Dave: There is already existing syntax for transition bins. But the syntax only allows for transitions between one coverpoint bin, and another bin in that same coverpoint. - Dave: Maybe you need to include the cross somehow in the syntax. - Dave: If this type of thing is needed, you should write up a detailes spec of requirements, ignoring syntax. - Dave: One other enhancement: it might be desireable to specify that illegal bins in a cover point will act like an assertion, and fire if they are hit.
E
dit
|
A
ttach
|
P
rint version
|
H
istory
: r1
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r1 - 2011-03-10 - 19:31:31 -
ErikSeligman
P1800
Log In
or
Register
P1800 Web
Create New Topic
Index
Search
Changes
Notifications
Statistics
Preferences
Webs
Main
P1076
Ballots
LCS2016_080
P10761
P1647
P16661
P1685
P1734
P1735
P1778
P1800
P1801
Sandbox
TWiki
VIP
VerilogAMS
Copyright © 2008-2026 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback