This release also includes a new SAT solver called "smvsat" which is now the default SAT solver for the various techniques that use SAT, including bounded model checking (-bmc), proof-based abstraction (-absref) and SAT-based model checking (-smcsat2). This is a "proof generating" SAT solver, meaning that in the unsatisfiable case it produces a proof of the empty clause using resolution steps. SMV can still use zChaff (or other SAT solvers) for bounded model checking, but this cannot be used with the new model checking techniques since they rely on proofs of unsatisfiability.
x[y] in {a,b,c}
could result in unnecessary combinational variables. This caused some verification runs that previoiusly terminated to diverge. The problem is now fixed.
@(#)report.c 3.2: apply_func_op:op=367
Now provides meaningful error message. Fix is to use boolean equivalence "<->" instead of equality "=".
@(#)report.c 3.2: unref_bdd: negative reference count
This is now fixed.
"file.out", line XX:XX: unterminated string or character constant
This is now fixed.
x : boolean resolve;
init(x) := 0;
x := 1;
The symptom was:
@(#)report.c 3.2: apply_func_op: op = 415
This now produces a meaningful error message.
This makes it possible to treat bit vectors, such as address, as scalarset vectors, in both SMV and Synchronous Verilog. A scalarset bit vector can be treated as a symetric scalar quantity at a high level of abstraction and as a bit vector at a lower level. In particular, bit vectors in Synchronous Verilog can be declared as scalarsets, while maintaining "synthesizable" code, using macros for the types.
In support of the above. Should also allow some compositional verification to be done directly in SV, although the type structure of SV is still too poor to support writing abstract models.
This uses a SAT solver to search for counterexamples of a bounded depth. The bounded model checker "bmc" and the SAT solver "sato" must be installed separately. This option only works on Unix-like systems. At present, it depends on various Unix programs like sh, awk and sed, which means there may be incompatbilities due to variations in these programs on different systems.
Previously, SMV could not handle more than one ordset parameter in a property, thus "double induction" was impossible. This is now fixed, although the nember of representative cases generated with multiple orderset parameters of the same type can be quite large! Also, inequality operators can now be applied to ordsets.
You can now split cases on a variable or expression of a non-symmetric type. The variable or expression must be statically typable, so that SMV can determine whether the specified cases are exhaustive. Thus, for example, if x is of type boolean, then the following is legal:
forall(i = 0..1)
subcase bar[i] of foo for x = i;
Note, this could just as well be written out as separate subcase declarations without the loop:
subcase bar[0] of foo for x = 0;
subcase bar[1] of foo for x = 1;
That is, because we do not need to obey symmetry rules, we can write out the expansion of the loop using constants. This also allows us to split cases on a variable of enumerated type, for example:
y : {red, green, blue};
subcase red_case of foo for x = red;
subcase green_case of foo for x = green;
subcase blue_case of foo for x = blue;
Of course, we can't use a parameterized property name, like bar[i], since array subscripts can't be of enumerated type. Notice this also means that we can split cases on any expression that can be stactically typed as boolean. Thus for example:
subcase special_mode_case of foo for (mode = special) = 1;
subcase normal_mode_case of foo for (mode = special) = 0;
Added "Using" pane to VW.
Displays all the assertions used to prove the current property, and whether
they are assumed "upt to t", "up to t - 1" or "always".
Added SMV language pretty printer (Unix only)
See smvps(1).
Bugs fixed since previous release
- 4-20-99: SMV was confusing "unkown" (i.e., bottom) with "universal
nondeterministic choice, leading to possible false positives.
- 7-16-99: "while" statement in smv and SV was broken.
- 8-5-99: catastrophe "improve_bool" during sifting, caused by saturated
reference counts. reference counts during sifting are now unbounded.
- 8-5-99: Catastrophe "improve_bool" during sifting, caused by saturated
reference counts. reference counts during sifting are now unbounded.
- 8-5-99: Fixed: garbage collected far too infrequently when sifting was effective,
since the garbage collection threshold was based on the pre-sifted BDD node count.
- 8-11-99: Fixed: wasn't sifting during evaluation of CTL ops.
- 8-24-99: Was incorrectly handling the case where an LTL property contained
a parameter not present in the property name. The symptom was a skolem constant
like "k0" appearing the the model, which in turn resulted in a syntax error in
the .out file.
- 9-1-99: Some incompatibilities with CMU SMV:
1) In old SMV modules, X, F and G should not be keywords
2) In old SMV modules, next(x=y) should be O.K.
3) In old SMV modules, E[p U q] should be treated as E(p U q)
Known bugs in current release
- 7-24-98 Bug: combining input/output and process
- 10-20-98 Bug: vl2smv truncates parameters to 32 bits.
- 10-20-98 Bug: Model checker computed bogus hash code for property
when using "Verify All" but not "Verify
" (or with smv, while
not using -check ). This resulted in false positive verification
which is fixed when .smv_history is removed. Note hash codes must have
been different for "Verify All" and "Verify ". Only one property in file.
This bug may have been fixed by new hash code scheme.
- 10-22-98 Bug: "Goto" in vw doesn't work when no property is specified.
- 10-23-98 Bug: in mc.c, CTL formulas, XOR and IFF are not implemented monotonically
- 11-7-98 Bug: When using ordsets, a combinational dependency
of i on i+1 will cause the circular dependency checking
to diverge, and finally crash when stack space is exhausted.
For example:
ordset foo;
x : array foo of boolean;
forall(i in foo)
x[i] := x[i+1];
On the other hand, next(x[i]) := x[i+1] would be O.K.
The same comment probably holds true for "refines"
declarations. For example
spec[i] refines spec[i+1]
- 1-13-98 Bug: SMV treats scalar type variables with large range in a very
inefficient way. This leads to long run times building transition relation.
- 7-22-98: Abstraction heuristics shouldn't use layers that are subcases.
Since SMV doesn't take this into account, it sometimes leaves a signal
free when there is one obvious abstraction choice, but that assignment has
been subcased. Workaround is just to specify the desired layer by hand
in a using..prove declaration.
- 7-22-98: scalar_to_vector doesn't handle "weak".
An expression like "foo ? [0,1] : weak" won't be handled correctly.
-
8-9-99: If we break the symmetry of a scalarset bit vector, we may get a
nondeterministic chocie over vectors. Since we can't handle this, right now
the choice will simply return "bottom". However, this is likely to be very confusing
to users. See the comment in "element_of_expr()".
Release notes for SMV release 03-19-99
Changes from previous release
- Date unknown: Added "incremental search" to browser, properties and cone
panes. Incremental search doesn't work in trace pane.
Known bugs in current release
- 7-24-98 Bug: combining input/output and process
- 10-20-98 Bug: vl2smv truncates parameters to 32 bits.
- 10-20-98 Bug: Model checker computed bogus hash code for property
when using "Verify All" but not "Verify
" (or with smv, while
not using -check ). This resulted in false positive verification
which is fixed when .smv_history is removed. Note hash codes must have
been different for "Verify All" and "Verify ". Only one property in file.
This bug may have been fixed by new hash code scheme.
- 10-22-98 Bug: "Goto" in vw doesn't work when no property is specified.
- 10-23-98 Bug: in mc.c, CTL formulas, XOR and IFF are not implemented monotonically
- 11-7-98 Bug: When using ordsets, a combinational dependency
of i on i+1 will cause the circular dependency checking
to diverge, and finally crash when stack space is exhausted.
For example:
ordset foo;
x : array foo of boolean;
forall(i in foo)
x[i] := x[i+1];
On the other hand, next(x[i]) := x[i+1] would be O.K.
The same comment probably holds true for "refines"
declarations. For example
spec[i] refines spec[i+1]
- 1-13-98 Bug: SMV treats scalar type variables with large range in a very
inefficient way. This leads to long run times building transition relation.
Bugs fixed since previous release
- 11-11-98 Fixed: vl2smv crashed on casez. Now maps both casez and casex to case.
- 11-11-98 Fixed: SMV objected to vectors as conditions in if-then-else. This is
apparently used in verilog. Semantics of vectors as conditions to i-t-e is now
as follows: the condition is the OR of all the elements of the vector. This should
be consistent with the verilog interpretation, since any non-zero vector will
yield true.
- 1-12-98 Fixed: Circular proofs of temporal logic formulas (assert statements)
are now allowed provided
1) All properties on cycle begin with "G" operator
2) At least one using..prove declaration on the cycle
is "unit delay", thus:
using (x) prove y
Any used assertions on a cycle with the the assertion being proved will
be assumed only up to time t (or t-1 in unit delay case).
- 2-22-98: Fixed. Seg faulted on Linux in "Explain Layer" code.
- Date unknown: Fixed: Identical subformulas in LTL formulas caused multiple
copies of tableau variables, resulting in catastrophe in model checker.
- 3-6-98: Fixed: Possible false positive (!) on AG property without
forward search.
Release notes for SMV release 11-7-98
Changes from previous release
- 8-19-98 Change: Now attempts to translate LTL formulas into CTL
formulas.
- 8-20-98 Change: Cleaned up the options menu in VW.
- 10-14-98 Change: Allow options on command line in form option=value
- 10-14-98 Change: VW no longer uses separate abstraction files for
each property. Instead, abstraction changes made by VW are stored
in a single file "file.env" for all properties. Manually created
abstraction files can still be used, with the -abs switch. However,
these files are not modified by VW, so user's comments are preserved.
- 10-15-98 Change: Implemented "assume" declaration.
- 10-20-98 Change: Goto (in vw) now finds both backward and forward dependencies.
- 10-30-98 Changed: Added "drag and drop" to traces pane
Bugs fixed since previous release
- 7-24-98 Fixed: error when next() operator
used outside the lhs of an assignment.
- 7-27-98 Fixed: catastrophe when AG operator in "assert" statement.
- 8-3-98 Fixed: vector on RHS of << caused smv to hang.
- 8-4-98 Fixed: apparent circularity in the following case:
always @(...) begin
if (x) begin end
y = ...;
end
assign x = y;
circularity is caused by misconstrued dependency of y on x.
- 8-18-98 Fixed: Tcl error when mouse used in trace pane on
Openwindows. Caused by Tix not handling enter and leave events.
- 8-19-98 Fixed: vl2smv crashes when concatenation on LHS of assignment,
e.g.:
assign {x,y} = expr;
- 8-20-98 Fixed: A single quote mark in a comment introduced by --
resulted in "unterminated string constant" error.
- 8-20-98 Fixed: empty "default" in "case" caused vl2mv crash
- 8-20-98 Fixed: Could not override standard options "-v 1 -f -h"
from options panel. This is now fixed. Also, on the smv command
line, the default options can be turned off with the switch "--"
- 8-20-98 Fixed: Goto menu in VW did no "zap" cause the selected
signal to be visible in the browser.
- 8-20-98 Fixed: Brought man pages (closer to) up-to-date.
- 8-21-98 Fixed: Using fairness constraints formulas not beginning
with a temporal op gave false negative because initial states
were not restricted to fair initial states. This in turn led
to a catastrophe during the counterexample generation.
- 10-14-98 Fixed: vectors as temporal formulas, or temporal ops applied
to vectirs produced catastrophe. Now produces error message.
- 10-14-98 Fixed: Catastrophe when undefined signal is assigned in a layer
when using -lax option (first found 8-17-98).
- 10-14-98 Fixed: Properly inserts error messages from verification
subprocess in source file, if source file location provided.
- 10-14-98 Fixed: "Requested Layer" in view menu now works
- 10-15-98 Fixed: Tableau variables break variable order file syntax. As
a result, variable order files for LTL formulas could not be read back
in via -i option.
- 10-15-98 Fixed: Vl2smv now supports "inout" declarations
- 10-15-98 Fixed: Failed to produce looping counterexamples for
formulas not ending in EG.
- 10-15-98 Fixed: Synopsys "translate_off" and "translate_on" implemented.
- 10-15-98 Fixed: Now supports names begin/end blocks and local variables
in begin/end blocks.
- 10-20-98 Fixed: SMV and VW can now find line numbers of assignments, type
declarations and module instances in verilog files.
- 10-20-98 Fixed: vl2smv did not allow parameters in vector iterators (reported 9-9-98).
- 10-20-98 Fixed: vl2smv did not allow bit ranges on paremeters (e.g.
parameter [1:0] y = 2'd3;
- 10-20-98 Fixed: History menu in VW did not work. (reported 8-20-98 )
- 10-30-98 Fixed: When reopening after an error in SMV, sometimes
would incorrectly report scalarset mismatches.
- 10-30-98 Fixed: Fixed keyboard shortcuts and traversal in vw
- 10-30-98 Fixed: Vw did not set property when trace is selected
Ken McMillan
Last modified: Fri Oct 11 18:05:32 PDT 2002