1 | VIS NEWS -*-indented-text-*- |
---|
2 | History of user-visible changes. |
---|
3 | |
---|
4 | Please sent bug reports to vis-users@colorado.edu. Please let us know what |
---|
5 | version of VIS you are running and what architecture you are running it on. |
---|
6 | |
---|
7 | ====================================================================== |
---|
8 | |
---|
9 | Version 2.1 |
---|
10 | |
---|
11 | Release 2.1 of VIS improves VIS 2.0 in the following areas: |
---|
12 | |
---|
13 | 1. Revamped Bounded Model Checker with efficient termination criteria |
---|
14 | 2. Grab and Puresat algorithms for invariant checking based on |
---|
15 | abstraction refinement |
---|
16 | 3. DnC algorithm for language emptiness check based on abstraction |
---|
17 | refinement |
---|
18 | 4. CirCUs SAT solver. |
---|
19 | 5. Fate and Free Will algorithm for the analysis of counterexamples |
---|
20 | 6. Vacuity detection for CTL |
---|
21 | 7. Coverage estimation for CTL |
---|
22 | 8. Far Side algorithm for image computation |
---|
23 | 9. CUDD 2.4.1 |
---|
24 | 10. Miscellaneous |
---|
25 | |
---|
26 | |
---|
27 | Bounded Model Checking |
---|
28 | ---------------------- |
---|
29 | |
---|
30 | BMC in VIS 2.1 is much faster than it was in VIS 2.0. The |
---|
31 | construction of the circuit data structure, the encoding of the |
---|
32 | property, the use of a faster SAT solver all have contributed to this |
---|
33 | improvement. |
---|
34 | |
---|
35 | BMC in VIS 2.1 can prove properties rather than just falsifying them. |
---|
36 | The following sequence of commands is used to perform bounded model |
---|
37 | checking with termination check: |
---|
38 | |
---|
39 | read_blif_mv model.mv |
---|
40 | flatten_hierarchy |
---|
41 | build_partition_maigs |
---|
42 | bounded_model_check -k 10 -r 2 model.ltl |
---|
43 | |
---|
44 | The termination check will be performed every other step. The |
---|
45 | construction of the MDDs is not needed if termination check is needed |
---|
46 | for invariant properties only. For details on the stopping criteria, |
---|
47 | see |
---|
48 | |
---|
49 | M. Awedh and F. Somenzi, "Proving More Properties with Bounded Model |
---|
50 | Checking," CAV 2004, pp. 96-108, LNCS 3114. |
---|
51 | |
---|
52 | Other new options to the bounded_model_check command allow one to |
---|
53 | control the formula encoding, the solver to be applied (CirCUs or |
---|
54 | zChaff) and, for the former, the incremental solving algorithm. |
---|
55 | |
---|
56 | A new command ltl2snf allows one to translate an LTL formula to |
---|
57 | separation normal form. |
---|
58 | |
---|
59 | |
---|
60 | Abstraction Refinement for Invariants |
---|
61 | ------------------------------------- |
---|
62 | |
---|
63 | The check_invariant command allows the user the choice of one of two |
---|
64 | abstraction refinement algorithms for invariants. The Grab algorithm |
---|
65 | uses BDD-based model checking on the abstract model and SAT for |
---|
66 | counterexample concretization check. Its refinement strategy is |
---|
67 | game-theoretic. It is run as follows: |
---|
68 | |
---|
69 | read_blif_mv model.mv |
---|
70 | flatten_hierarchy |
---|
71 | build_partition_maigs |
---|
72 | check_invariant -A3 model.inv |
---|
73 | |
---|
74 | By default, grab enables dynamic variable reordering for the abstract |
---|
75 | model. One can override this behavior by explicitly building |
---|
76 | partition MDDs. For details of the algorithm, see |
---|
77 | |
---|
78 | C. Wang, B. Li, H. Jin, G. D. Hachtel, and F. Somenzi, "Improving |
---|
79 | Ariadne's Bundle by Following Multiple Threads in Abstraction |
---|
80 | Refinement," ICCAD 2003, pp. 408-415. |
---|
81 | |
---|
82 | The puresat algorithm uses SAT as the only decision procedure for both |
---|
83 | abstract and concrete model. It analyzes the proofs of |
---|
84 | unsatisfiability to produce refinements. It is invoked as follows: |
---|
85 | |
---|
86 | read_blif_mv model.mv |
---|
87 | flatten_hierarchy |
---|
88 | build_partition_maigs |
---|
89 | check_invariant -A4 model.inv |
---|
90 | |
---|
91 | The algorithm is described in |
---|
92 | |
---|
93 | B. Li, C. Wang, and F. Somenzi, "Abstraction Refinement in Symbolic |
---|
94 | Model Checking Using Satisfiability as the Only Decision Procedure," |
---|
95 | STTT, vol.7, n. 2, pp. 143-155. |
---|
96 | |
---|
97 | |
---|
98 | Abstraction Refinement for Language Emptiness |
---|
99 | -------------------------------------------- |
---|
100 | |
---|
101 | The lang_empty command has a new option that runs the "Divide and |
---|
102 | Compose" (DnC) algorithm described in |
---|
103 | |
---|
104 | C. Wang, R. Bloem, G. D. Hachtel, K. Ravi, and F. Somenzi, "Divide and |
---|
105 | Compose: SCC Refinement for Language Emptiness", CONCUR 2001, |
---|
106 | pp. 456-471, LNCS 2154. |
---|
107 | |
---|
108 | The algorithm, which is based on refinement of the strongly connected |
---|
109 | components of the model, is invoked as follows: |
---|
110 | |
---|
111 | read_blif_mv model.mv |
---|
112 | init_verify |
---|
113 | lang_empty -A 1 |
---|
114 | |
---|
115 | |
---|
116 | CirCUs SAT solver |
---|
117 | ----------------- |
---|
118 | |
---|
119 | VIS 2.1 includes the SAT solver CirCUs, a short description of which |
---|
120 | can be found in |
---|
121 | |
---|
122 | H. Jin, M. Awedh, and F. Somenzi, "CirCUs: A Satisfiability Solver |
---|
123 | Geared Towards Bounded Model Checking," CAV 2004, pp. 519-522, LNCS |
---|
124 | 3114. |
---|
125 | |
---|
126 | CirCUs is an incremental SAT solver that accepts input in either |
---|
127 | circuit or CNF form. It is the default solver for bounded model |
---|
128 | checking and abstraction refinement algorithms. It can also be |
---|
129 | invoked from the VIS prompt as a stand-alone CNF SAT solver on a set |
---|
130 | of clauses described in DIMACS format: |
---|
131 | |
---|
132 | cnf_sat input.cnf |
---|
133 | |
---|
134 | |
---|
135 | Fate and Free Will Algorithm |
---|
136 | ---------------------------- |
---|
137 | |
---|
138 | The counterexamples produced by model_check and check_invariant can be |
---|
139 | optionally generated with the Fate and Free Will algorithm of |
---|
140 | |
---|
141 | H. Jin, K. Ravi, and F. Somenzi, "Fate and Free Will in Error Traces," |
---|
142 | STTT, vol. 6, n. 2, pp. 102-116. |
---|
143 | |
---|
144 | This algorithm is only available when vis is linked with the cu BDD |
---|
145 | package. It assumes a partition of the inputs into variables |
---|
146 | controlled by the environment and variables controlled by the system, |
---|
147 | and divides a counterexample into fated and free segments. In a fated |
---|
148 | segment, the values of the variables controlled by the environment |
---|
149 | suffice to impose progress toward violation of the property. In a |
---|
150 | free segment, the other variables are also required. |
---|
151 | |
---|
152 | To run the Fate and Free Will algorithm, one prepares a file with the |
---|
153 | inputs that the system controls. For a failing invariant, the |
---|
154 | invocation is like this: |
---|
155 | |
---|
156 | read_blif_mv model.mv |
---|
157 | init_verify |
---|
158 | check_invariant -d1 -i -w system_inputs |
---|
159 | |
---|
160 | The last command is replaced by |
---|
161 | |
---|
162 | model_check -d2 -i -w system_inputs |
---|
163 | |
---|
164 | for a CTL property. The -W option can be used to assign all inputs to |
---|
165 | the system, while the -G option invokes a variant of the algorithm. |
---|
166 | |
---|
167 | |
---|
168 | Vacuity Detection for CTL |
---|
169 | ------------------------- |
---|
170 | |
---|
171 | VIS 2.1 implements two algorithms for the detection of vacuity in CTL |
---|
172 | model checking. A formula passes vacuously if it can be strengthened |
---|
173 | by replacement of one of its subformulae with "bottom" and still pass. |
---|
174 | Likewise, a formula fails vacuously if it can be weakened by |
---|
175 | replacement of one of its subformulae with "top" and still fail. |
---|
176 | |
---|
177 | The algorithm of Beer et al. (CAV 97) is invoked with the -B option as |
---|
178 | follows: |
---|
179 | |
---|
180 | read_blif_mv model.mv |
---|
181 | init_verify |
---|
182 | model_check -B model.ctl |
---|
183 | |
---|
184 | This algorithm applies to a subset of ACTL and considers only passing |
---|
185 | properties. If an error trace is requested with -d, in case of |
---|
186 | vacuous pass, an interesting witness is produced. |
---|
187 | |
---|
188 | The second algorithm for vacuity detection is an extension of the one |
---|
189 | describe in |
---|
190 | |
---|
191 | M. Purandare and F. Somenzi, "Vacuum Cleaning CTL Formulae," CAV 2002, |
---|
192 | pp. 485-499, LNCS 2404. |
---|
193 | |
---|
194 | This algorithm applies a thorough vacuity detection to all of CTL and |
---|
195 | to both passing and failing properties. With -d, it produces |
---|
196 | interesting witnesses for passing properties and interesting |
---|
197 | counterexamples for failing ones. |
---|
198 | |
---|
199 | The current implementation is limited in its treatment of the |
---|
200 | operators <-> (equivalence) and ^ (exclusive or). |
---|
201 | |
---|
202 | |
---|
203 | Coverage Estimation for CTL |
---|
204 | --------------------------- |
---|
205 | |
---|
206 | VIS 2.1 provides two algorithms for coverage estimation in CTL model |
---|
207 | checking. Both are invoked with options passed to the model_check |
---|
208 | command. |
---|
209 | |
---|
210 | The first algorithm is the one of Hoskote et al. (DAC 1999). It |
---|
211 | applies to a subset of ACTL. The option is -C. The second algorithm |
---|
212 | is an improved version of the same described in |
---|
213 | |
---|
214 | N. Jayakumar, M. Purandare, and F. Somenzi, "Dos and Don'ts of CTL |
---|
215 | State Coverage Estimation," DAC 2003, pp. 292-295. |
---|
216 | |
---|
217 | To invoke the improved coverage estimation algorithm one writes: |
---|
218 | |
---|
219 | read_blif_mv model.mv |
---|
220 | init_verify |
---|
221 | model_check -I model.ctl |
---|
222 | |
---|
223 | |
---|
224 | Far Side Algorithm for Image Computation |
---|
225 | ---------------------------------------- |
---|
226 | |
---|
227 | By setting image_farside_method to 1, a user of VIS 2.1 can invoke the |
---|
228 | Far Side approach to image computation which applies a compositional |
---|
229 | method based on don't cares to speed up reachability analysis. The |
---|
230 | algorithm is described in |
---|
231 | |
---|
232 | C. Wang, G. D. Hachtel, and F. Somenzi, "The Compositional Far Side of |
---|
233 | Image Computation," ICCAD 2003, pp. 334-340. |
---|
234 | |
---|
235 | See the documentation of the "set" command for the details. |
---|
236 | |
---|
237 | |
---|
238 | CUDD 2.4.1 |
---|
239 | ---------- |
---|
240 | |
---|
241 | VIS-2.0 includes CUDD 2.4.1. Compared to the version that was |
---|
242 | included in VIS-2.0, the new version has faster grabage collection, |
---|
243 | provides improved support for C++ compilation, contains a number of |
---|
244 | bug fixes and several new functions, including functions for the |
---|
245 | manipulation of prime implicants of a function. |
---|
246 | |
---|
247 | |
---|
248 | Miscellaneous |
---|
249 | ------------- |
---|
250 | |
---|
251 | * Glu and vis can be built using g++ as compiler by configuring as |
---|
252 | follows: |
---|
253 | |
---|
254 | ./configure --enable-gcc=g++ |
---|
255 | |
---|
256 | * The code in glu has gone through another round of rejuvenation. |
---|
257 | This process allows vis to be built with recent versions of gcc (3.3 |
---|
258 | and later) without producing any type-punning warning. |
---|
259 | |
---|
260 | * Two bugs have been fixed in early termination detection in CTL model |
---|
261 | checking. |
---|
262 | |
---|
263 | * A bug has been fixed in the treatment of multi-valued inputs. |
---|
264 | |
---|
265 | * Vis no longer crashes when compute_reach is invoked with the -i |
---|
266 | option. |
---|
267 | |
---|
268 | * Timeout values for model_check, check_invariant, and lang_empty are |
---|
269 | now in CPU time instead of elapsed time. This is beneficial when |
---|
270 | running regression tests in the presence of other processes. |
---|
271 | |
---|
272 | * The ctime command is no longer supported. |
---|
273 | |
---|
274 | |
---|
275 | ====================================================================== |
---|
276 | |
---|
277 | Version 2.0 |
---|
278 | |
---|
279 | Release 2.0 of VIS improves VIS 1.4 in the following areas: |
---|
280 | |
---|
281 | 1. LTL model checking |
---|
282 | 2. SAT-based Bounded Model Checking (BMC) |
---|
283 | 3. Minimum Lifetime Permutation (MLP) algorithm for conjuction scheduling |
---|
284 | 4. Generalized SCC Hull (GSH) algorithm for greatest fixpoint |
---|
285 | computation |
---|
286 | 5. Lockstep algorithm for language emptiness |
---|
287 | 6. Built-in regression test facility |
---|
288 | 7. CUDD 2.3.2 |
---|
289 | 8. Miscellaneous |
---|
290 | |
---|
291 | |
---|
292 | LTL model checking |
---|
293 | ------------------ |
---|
294 | |
---|
295 | VIS-2.0 has a new command ltl_model_check that model checks LTL |
---|
296 | formulae. The syntax for LTL is quite similar to that used for CTL. |
---|
297 | Another new command, ltl_to_aut, translates LTL formulae into Buechi |
---|
298 | automata. |
---|
299 | |
---|
300 | |
---|
301 | SAT-Based Bounded Model Checking |
---|
302 | -------------------------------- |
---|
303 | |
---|
304 | VIS-2.0 has a new command bounded_model_check for bounded LTL model |
---|
305 | checking. The SAT solver zchaff (http://www.ee.princeton.edu/~chaff/) |
---|
306 | must be in the executable path for this command to work. The following |
---|
307 | sequence of commands is used to perform bounded model checking: |
---|
308 | |
---|
309 | read_blif_mv model.mv |
---|
310 | flatten_hierarchy |
---|
311 | build_partition_maigs |
---|
312 | bounded_model_check -k 10 model.ltl |
---|
313 | |
---|
314 | where "-k 10" specifies the bound on the length of the counterexample. |
---|
315 | |
---|
316 | |
---|
317 | Minimum Lifetime Permutation (MLP) Algorithm for Conjuction Scheduling |
---|
318 | ---------------------------------------------------------------------- |
---|
319 | |
---|
320 | The MLP algorithm can considerably speed up image computations. It is |
---|
321 | selected by typing |
---|
322 | |
---|
323 | set image_method mlp |
---|
324 | |
---|
325 | For details on the algorithm, see |
---|
326 | |
---|
327 | I-H. Moon, G. D. Hachtel, and F. Somenzi, "Border-Block Triangular |
---|
328 | Form and Conjunction Schedule in Image Computation," FMCAD 2000, |
---|
329 | pp. 73-90, LNCS 1954. |
---|
330 | |
---|
331 | |
---|
332 | Generalized SCC Hull (GSH) Algorithm for Greatest Fixpoint Computation |
---|
333 | ---------------------------------------------------------------------- |
---|
334 | |
---|
335 | The commands model_check, ltl_model_check, and lang_empty use a new |
---|
336 | algorithm for greatest fixpoint computations. This algorithm has |
---|
337 | different "schedules" that can be controlled with the -S option. For |
---|
338 | details on the algorithm, see |
---|
339 | |
---|
340 | K. Ravi, R. Bloem, and F. Somenzi, "A Comparative Study of Symbolic |
---|
341 | Algorithms for the Computation of Fair Cycles," FMCAD 2000, |
---|
342 | pp. 143-160, LNCS 1954. |
---|
343 | |
---|
344 | F. Somenzi, K. Ravi, and R. Bloem, "Analysis of Symbolic {SCC} Hull |
---|
345 | Algorithms," FMCAD 2002, To appear. |
---|
346 | |
---|
347 | |
---|
348 | Lockstep Algorithm for Language Emptiness |
---|
349 | ----------------------------------------- |
---|
350 | |
---|
351 | In VIS-2.0, the commands ltl_model_check and lang_empty can use the |
---|
352 | lockstep algorithm to perform the language emptiness check. The use |
---|
353 | of the lockstep algorithm as an alternative to the GSH algorithm is |
---|
354 | controlled by the -L option. For details of Lockstep, see |
---|
355 | |
---|
356 | R. Bloem, H. N. Gabow, and F. Somenzi, "An Algorithm for Strongly |
---|
357 | Connected Component Analysis in n log n Symbolic Steps," FMCAD 2000, |
---|
358 | pp. 37-54, LNCS 1954. |
---|
359 | |
---|
360 | |
---|
361 | Built-in Regression Test Facility |
---|
362 | --------------------------------- |
---|
363 | |
---|
364 | VIS-2.0 has a new command regression_test which allows users to |
---|
365 | compare runs of two different versions of vis, or runs with different |
---|
366 | options. |
---|
367 | |
---|
368 | |
---|
369 | CUDD 2.3.2 |
---|
370 | ---------- |
---|
371 | |
---|
372 | VIS-2.0 includes CUDD 2.3.2. Compared to the version that was |
---|
373 | included in VIS-1.4, the new version contains a number of bug fixes |
---|
374 | and several new functions. |
---|
375 | |
---|
376 | In particular, there is a new function that will compute the AND of |
---|
377 | two BDDs only if the result does not require the creation of too many |
---|
378 | nodes. This function is used by VIS-2.0 to make clustering of the |
---|
379 | transition relation more robust. |
---|
380 | |
---|
381 | |
---|
382 | Miscellaneous |
---|
383 | ------------- |
---|
384 | |
---|
385 | * Improved counterexample generation in model_check with -d3 and -d4. |
---|
386 | |
---|
387 | * Changes in verbosity level (-v option) of model_check. The new |
---|
388 | verbosity levels are: |
---|
389 | -v0: unchanged (minimum verbosity) |
---|
390 | -v1: essential statistics (new) |
---|
391 | -v2: equivalent to the old -v1 |
---|
392 | -v3: equivalent to the old -v2 |
---|
393 | |
---|
394 | * Fixed bug and extended early termination detection in CTL model |
---|
395 | checking. |
---|
396 | |
---|
397 | * Fixed bug in guided search for CTL model checking which affected |
---|
398 | counterexample generation with global hints. |
---|
399 | |
---|
400 | * Vis no longer crashes when a directory name is specified in a |
---|
401 | command line instead of a regular file name. |
---|
402 | |
---|
403 | * Fixed several bugs in approximate_model_check, |
---|
404 | incremental_ctl_verification, and iterative_model_check. |
---|
405 | |
---|
406 | * The code in glu has been substantially rejuvenated. |
---|
407 | |
---|
408 | ====================================================================== |
---|
409 | |
---|
410 | Version 1.4 |
---|
411 | |
---|
412 | Release 1.4 of VIS improves VIS 1.3 in the following areas: |
---|
413 | |
---|
414 | 1. Hybrid Image Computation |
---|
415 | 2. Guided Search for Reachability Analysis and Invariant Checking |
---|
416 | 3. Guided Search for CTL Model Checking |
---|
417 | 4. Least Fix-point Machine-By-Machine Approximate FSM Traversal (LMBM) |
---|
418 | 5. Iterative Abstraction-based Model Checking (IMC) |
---|
419 | 6. Lazy Sifting |
---|
420 | 7. SPFD-based Placement and Logic Optimization |
---|
421 | 8. Truesim |
---|
422 | 9. Arithmetic Functions with Extended Double Precision (EPD) |
---|
423 | 10. CUDD 2.3.1 |
---|
424 | 11. Miscellaneous |
---|
425 | |
---|
426 | |
---|
427 | 1. Hybrid Image Computation |
---|
428 | --------------------------- |
---|
429 | Image computation is the key step in fix-point computation. |
---|
430 | Traditionally two techniques have been used: The transition relation |
---|
431 | method is based on conjunction of a partitioned transition relation, |
---|
432 | whereas the transition function method is based on splitting on an |
---|
433 | input or output variable recursively. |
---|
434 | |
---|
435 | The hybrid method chooses either splitting or conjunction at each |
---|
436 | recursion dynamically using the dependence matrix. This hybrid |
---|
437 | approach combines, in a unified framework, conjunction, input and |
---|
438 | output splitting, and a host of auxiliary techniques that can |
---|
439 | significantly speed up the computation. See: I.-H. Moon, J.H. Kukula, |
---|
440 | K. Ravi, F. Somenzi, "To Split or to Conjoin: The Question in Image |
---|
441 | Computation", Proceedings of the Design Automation Conference (DAC), |
---|
442 | pages 73-90, 2000. |
---|
443 | |
---|
444 | Also, the transition function method is implemented as a part of the |
---|
445 | hybrid computation. The transition function method itself can be used |
---|
446 | as an independent image method. However, we do not recommend to use |
---|
447 | this method in general cases, even though it may work well for |
---|
448 | approximate reachability analysis. The implementation of the |
---|
449 | transition function method is basically for experimental purposes. |
---|
450 | |
---|
451 | ** Usage: |
---|
452 | set image_method hybrid |
---|
453 | set image_method tfm |
---|
454 | |
---|
455 | Also refer to: print_hybrid_options and print_tfm_options |
---|
456 | |
---|
457 | |
---|
458 | 2. Guided Search for Reachability Analysis |
---|
459 | ------------------------------------------ |
---|
460 | VIS-1.4 introduces the use of hints to guide the exploration of the |
---|
461 | state space. This may result in orders-of-magnitude reductions in |
---|
462 | time and space requirements. Good hints can often be found with the |
---|
463 | help of simple heuristics by someone who understands the circuit well |
---|
464 | enough to devise simulation stimuli or verification properties for it. |
---|
465 | Hints are applied by constraining the transition relation of the |
---|
466 | system to be verified. They specify possible values for (subsets of) |
---|
467 | the primary inputs and state variables. The constrained traversal of |
---|
468 | the state space may proceed much faster than the standard |
---|
469 | breadth-first search, because the traversal with hints is designed to |
---|
470 | produce smaller BDDs. Once all states reachable following the hints |
---|
471 | have been visited, the system is unconstrained and reachability |
---|
472 | analysis proceeds on the original system. Given enough resources, the |
---|
473 | algorithm will therefore search all reachable states, unless a state |
---|
474 | that violates the invariant is found. See: K. Ravi, F. Somenzi, |
---|
475 | "Hints to accelerate Symbolic Traversal", Correct Hardware Design and |
---|
476 | Verification Methods (CHARME), pages 250-264, 1999. |
---|
477 | |
---|
478 | ** Usage: |
---|
479 | compute_reach -g <HintsFileName> : guided symbolic state space |
---|
480 | traverse |
---|
481 | check_invariant -g <HintsFileName> : guided search for invariant |
---|
482 | checking |
---|
483 | |
---|
484 | The file HintsFileName contains a series of hints. A hint is a |
---|
485 | formula that does not contain any temporal operators, so hints_file |
---|
486 | has the same syntax as a file of invariants used for check_invariant. |
---|
487 | |
---|
488 | Also refer to: model_check -g <HintsFileName> |
---|
489 | |
---|
490 | |
---|
491 | 3. Guided Search for CTL Model Checking |
---|
492 | --------------------------------------- |
---|
493 | Guided Search for CTL is an extension of Guided Search for |
---|
494 | reachability. It works much along the same lines, and has the same |
---|
495 | benefits. There are a few differences. First, for greatest fixpoints |
---|
496 | (EG, AU, and AF), it uses overapproximations of the transition |
---|
497 | relation, instead of underapproximations. Second, there is a |
---|
498 | distinction between local and global hints. Local hints are the |
---|
499 | default. They can be used for any kind of CTL formula, and will apply |
---|
500 | all hints to a subformula before moving up in the parse tree. Global |
---|
501 | hints are only applicable to ACTL and ECTL formulae, and evaluate the |
---|
502 | entire formula once for every hint. See: R. Bloem, K. Ravi, and |
---|
503 | F. Somenzi, "Symbolic Guided Search for CTL Model Checking", |
---|
504 | Proceedings of the Design Automation Conference (DAC), pages 29-34, |
---|
505 | 2000. |
---|
506 | |
---|
507 | ** usage: |
---|
508 | model_check -g HintsFileName : perform model check guided by the |
---|
509 | hints specified in HintsFileName |
---|
510 | |
---|
511 | Also refer to: compute_reach -g <HintsFileName> |
---|
512 | check_invariant -g <HintsFileName> |
---|
513 | |
---|
514 | |
---|
515 | 4. Least Fix-point Machine-By-Machine Approximate FSM Traversal (LMBM) |
---|
516 | ---------------------------------------------------------------------- |
---|
517 | The knowledge of the reachable states of a sequential circuit can |
---|
518 | dramatically speed up optimization and model checking. Since exact |
---|
519 | reachability may be intractable, approximate techniques are often |
---|
520 | preferable. Least Fix-point MBM (LMBM) method is such a technique. |
---|
521 | It is as efficient as MBM, but provably more accurate. LMBM can |
---|
522 | compute RFBF-quality approximations for all the large ISCAS-89 |
---|
523 | benchmark circuit in a total of less than 9000 seconds. For more |
---|
524 | information, see: I.-H. Moon, J. Kukula, T. Shiple, F. Somenzi, "Least |
---|
525 | Fixpoint Approximation for Reachability Analysis," International |
---|
526 | Conference on Computer-Aided Design (ICCAD), pages 41-44, 1999. |
---|
527 | |
---|
528 | ** Usage: |
---|
529 | set ardc_traversal_method 4: LMBM(least fix-point MBM, default) |
---|
530 | is selected for ARDC |
---|
531 | set ardc_traversal_method 5: TLMBM(combination of LMBM and TFBF) |
---|
532 | is selected for ARDC |
---|
533 | model_check -D 3 : model checking with ARDCs |
---|
534 | compute_reach -A 2 : compute over-approximate reachable |
---|
535 | states |
---|
536 | compute_reach -D : compute exact reachable states with |
---|
537 | the help of ARDCs |
---|
538 | check_invariant -D : check invariants with the help of |
---|
539 | ARDCs |
---|
540 | synthesize_network -r 3 : synthesize sequential network |
---|
541 | with ARDCs |
---|
542 | |
---|
543 | Also refer to: print_ardc_options |
---|
544 | |
---|
545 | |
---|
546 | 5. Iterative Abstraction-Based Model Checking (IMC) |
---|
547 | --------------------------------------------------- |
---|
548 | VIS-1.4 introduces an automatic abstraction/refinement algorithm for |
---|
549 | symbolic CTL model checking. This algorithm supports full CTL |
---|
550 | language without fairness constraints. The algorithm begins with |
---|
551 | initial upper- and/or lower-bound approximations that include some |
---|
552 | exact sub-transition relations of a determined set of latches for a |
---|
553 | given CTL formula. As long as a conclusive verification decision |
---|
554 | can't be reached due to potentially false positives and negatives, the |
---|
555 | system is refined. Two refinement methods are implemented: Latch Name |
---|
556 | Sorting and Latch Affinity Scheduling. For more information, See: |
---|
557 | J.-Y. Jang, I.-H. Moon, G.D. Hachtel, "Iterative Abstraction-based CTL |
---|
558 | Model Checking," Design Automation and Test in Europe (DATE), pages |
---|
559 | 502-507, 2000. IMC supersedes the AMC package, which may disappear in |
---|
560 | future releases. |
---|
561 | |
---|
562 | ** Usage: |
---|
563 | iterative_model_check -i 8 : iterative model checking with |
---|
564 | incremental refinement step set |
---|
565 | to 8 latches |
---|
566 | iterative_model_check -r 0 : iterative model checking using |
---|
567 | Latch Name Sorting refinement |
---|
568 | scheduling |
---|
569 | iterative_model_check -g 1 : iterative model checking using |
---|
570 | Positive Operational Graph only |
---|
571 | |
---|
572 | Also refer to: model_check, approximate_model_check, |
---|
573 | incremental_ctl_verification |
---|
574 | |
---|
575 | |
---|
576 | 6. Lazy Sifting |
---|
577 | --------------- |
---|
578 | Lazy sifting is a new variable reordering option that is specifically |
---|
579 | designed for sequential verification with the transition relation |
---|
580 | method (i.e., IWLS95 in VIS). Lazy sifting groups together |
---|
581 | corresponding present state and next state variables only when it |
---|
582 | expects the grouping to be beneficial. See: H. Higuchi and |
---|
583 | F. Somenzi, "Lazy Group Sifting for Efficient Symbolic State Traversal |
---|
584 | of FSMs," Proceedings of the International Conference on |
---|
585 | Computer-Aided Design (ICCAD), pages 45-49, 1999. |
---|
586 | |
---|
587 | ** Usage: |
---|
588 | dynamic_var_ordering -e lazy_sift |
---|
589 | |
---|
590 | |
---|
591 | 7. SPFD-based placement and logic optimization |
---|
592 | ---------------------------------------------- |
---|
593 | This is an algorithm based on Sets of Pairs of Functions to be |
---|
594 | Distinguished (SPFDs) that combines logic and placement optimization |
---|
595 | of combinational circuits mapped to LUT-based Field-Programmable Gate |
---|
596 | Arrays to improve circuit area and speed. The flexibilities in the |
---|
597 | circuit are represented by SPFDs. The package contains two commands: |
---|
598 | spfd_pilo - perform SPFD-based placement-independent logic optimization; |
---|
599 | and spfd_pdlo - simultaneous placement and logic optimization. |
---|
600 | |
---|
601 | spfd_pilo performs SPFD-based wire and node removal/replacement and |
---|
602 | reprogramming of combinational circuits mapped to LUT-based FPGAs to |
---|
603 | reduce the number of wires and nodes in the circuit. Instead of |
---|
604 | computing the flexibilities for every node in the network at once, the |
---|
605 | algorithm computes the flexibilities for one `cluster' at a time. |
---|
606 | Working with clusters allows us to avoid the BDD explosion problem and |
---|
607 | hence handle large circuits. The SPFDs are computed for the cluster |
---|
608 | and the cluster nodes are reprogrammed based on the flexibility |
---|
609 | derived. Switching activity (computed via simulation of user specified bit |
---|
610 | vectors or randomly generated bit vectors) is used to drive the choice |
---|
611 | of alternate function to be implemented at the node, in such a way that |
---|
612 | the total switching activity in the circuit is minimized. In the absence |
---|
613 | of bit vectors, an arbitrary implementation for a node is chosen from |
---|
614 | the bounds represented by SPFDs. |
---|
615 | |
---|
616 | The command spfd_pdlo implements a technique that tightly links the |
---|
617 | logic and placement optimization steps. The algorithm is based on |
---|
618 | simulated annealing. Two types of moves (directed towards global |
---|
619 | reduction in the cost function of total wire length), are performed: |
---|
620 | (1) wire removal/replacement, and (2) swapping of a pair of blocks in |
---|
621 | the FPGA. Feedback from placement is valuable in making informed |
---|
622 | choice of a target wire during logic optimization moves. This command |
---|
623 | produces a placement file which is used by VPR for routing. spfd_pdlo |
---|
624 | can be used only if VIS is linked with VPR 4.22, an |
---|
625 | FPGA place and route tool from the University of Toronto |
---|
626 | (http://www.eecg.toronto.edu/~vaughn/vpr/vpr.html). VPack, a tool to |
---|
627 | convert circuits (mapped to FPGA blocks) in .BLIF format to the .net |
---|
628 | format (used by VPR), is also needed. |
---|
629 | |
---|
630 | Please contact Balakrishna Kumthekar (kumtheka@avanticorp.com) for details |
---|
631 | on integrating VPR with VIS. |
---|
632 | |
---|
633 | See: B. Kumthekar and F. Somenzi, "Power and Delay Reduction via |
---|
634 | Simultaneous Logic and Placement Optimization in FPGAs," Design |
---|
635 | Automation and Test in Europe (DATE), pages 202-207, 2000. |
---|
636 | |
---|
637 | ** usage: |
---|
638 | spfd_pilo -D <depth> : sets the cluster depth for SPFD |
---|
639 | computation. |
---|
640 | spfd_pilo -f <file> : use simulation vectors from specified |
---|
641 | file. These vectors are used to compute |
---|
642 | switching activity of nodes in the circuit. |
---|
643 | spfd_pilo -S <method-number> : selects one of several methods to |
---|
644 | choose the node to be optimized. |
---|
645 | spfd_pilo -m <method-number> : selects the heuristic to use in |
---|
646 | optimizing a selected node. |
---|
647 | |
---|
648 | See 'help spfd_pilo' and 'help spfd_pdlo' for various options. |
---|
649 | |
---|
650 | 8. Truesim |
---|
651 | ---------- |
---|
652 | Simulates a network with a set of input vectors. Before calling this |
---|
653 | command, the user should create a partition (using the command |
---|
654 | build_partition_mdds). The simulation vectors can be provided by the |
---|
655 | user (using -f vectors_file), or generated randomly. When -d option is |
---|
656 | used, it performs event-driven true delay simulation. The fanout count |
---|
657 | of the nodes is used as an estimate for the node delay. Primary inputs |
---|
658 | are assumed to have arrival times of zero. |
---|
659 | |
---|
660 | 9. Arithmetic Functions with extended double precision (EPD) |
---|
661 | ------------------------------------------------------------ |
---|
662 | This is an arithmetic function package for extended double precision |
---|
663 | format floating-point numbers. It supports the IEEE-754 double |
---|
664 | (64-bit) precision floating-point number format: both the big_endian |
---|
665 | and the little_endian. The range is from 2.2631E-4932 to |
---|
666 | 1.1897E+4932. This package is used internally to provide fast and |
---|
667 | accurate counting of the states in large FSMs like those encountered |
---|
668 | in approximate reachability analysis. |
---|
669 | |
---|
670 | 10. New version of the CUDD package. |
---|
671 | ----------------------------------- |
---|
672 | VIS-1.4 includes CUDD 2.3.1. Compared to the version that was |
---|
673 | included in VIS-1.3, the new version contains a number of bug fixes |
---|
674 | and several new functions. |
---|
675 | |
---|
676 | * Miscellaneous |
---|
677 | --------------- |
---|
678 | |
---|
679 | ** One bug in the CAL package has been fixed. It affected platforms without |
---|
680 | the valloc function. |
---|
681 | |
---|
682 | ** Changes in supported platforms. Support for SunOS 5.8 (Solaris |
---|
683 | 2.8) on the Intel x86 platform has been added. Ultrix and SunOs 4 are |
---|
684 | no longer supported. |
---|
685 | |
---|
686 | ** Change of Verbosity level for debugging in model_check |
---|
687 | Debugging refers to the printing of an error-trace when a formula |
---|
688 | fails. The new debug levels are: |
---|
689 | -d0: no debugging (the old -d0) |
---|
690 | -d1: minimal debugging, with less verbosity than the old -d1 had |
---|
691 | -d2: minimal debugging with more verbosity (the old -d1) |
---|
692 | -d3: recursive debugging (the old -d2) |
---|
693 | -d4: interactive debugging (the old -d3) |
---|
694 | |
---|
695 | ** Early termination in Model Checking. In limited cases, VIS will |
---|
696 | terminate a model checking run before reaching a fixpoint. This may |
---|
697 | lead to a speedup. |
---|
698 | |
---|
699 | ** The set of fair states is not computed of there are no fairness |
---|
700 | constraints. This may lead to a speedup of the model_check command. |
---|
701 | |
---|
702 | ** Perl Script for pretty printing counter-examples. The Perl script |
---|
703 | visdbgpp, contributed by Toshi Isogai, can be run on counterexamples |
---|
704 | produced by vis to improve their readability. In particular, the |
---|
705 | script collects the bits of vectors and displays them on a single |
---|
706 | line. |
---|
707 | |
---|
708 | ** Counterexample generation. The states on an error trace now lie |
---|
709 | closer together, which means that, on average, fewer signal |
---|
710 | transitions will occur. |
---|
711 | |
---|
712 | ** Variable reordering. In flatten_hierarchy In VIS-1.4, variable |
---|
713 | reordering is invoked automatically during flatten_hierarchy. |
---|
714 | |
---|
715 | ** Changes of passing BDD cube arguments in VIS to CUDD. Some |
---|
716 | arguments in the CUDD functions are BDD cubes that are generated by |
---|
717 | the conjunctions of BDD variables on demand. VIS-1.4 pre-builds some |
---|
718 | BDD cubes that do not change, such as for present state variables, |
---|
719 | next state variables, and primary input variables. This speeds up |
---|
720 | significantly large runs, especially for approximate reachability |
---|
721 | analysis. |
---|
722 | |
---|
723 | |
---|
724 | ============================================================ |
---|
725 | |
---|
726 | Version 1.3 |
---|
727 | |
---|
728 | * Introduction |
---|
729 | |
---|
730 | Release 1.3 of VIS improves VIS 1.2 in the following areas: |
---|
731 | |
---|
732 | ** Approximate Reachability Don't Cares (ARDCs) |
---|
733 | ** High Density Reachability Analysis. |
---|
734 | ** On-the-Fly Invariant Checking. |
---|
735 | ** Seeding Reachability Analysis via Simulation |
---|
736 | ** Forward Model Checking |
---|
737 | ** Abstraction-refinement based Incremental CTL Verification |
---|
738 | ** Synthesis |
---|
739 | ** State Transition Graph Restructuring for Low Power |
---|
740 | ** Miscellaneous |
---|
741 | |
---|
742 | * Approximate Reachability Don't Cares (ARDCs) |
---|
743 | |
---|
744 | VIS-1.3 includes the use of ARDCs in model checking and reachability |
---|
745 | analysis. The power of using reachable states as a care set (RDCs) is |
---|
746 | well known; however, computing reachable states exactly is intractable |
---|
747 | in many large designs. ARDCs are an overapproximation of the |
---|
748 | reachable states, which are then used as the care set. Computing |
---|
749 | ARDCs is much cheaper than computing RDCs while their effectiveness in |
---|
750 | speeding up model checking is comparable to that of RDCs. Therefore, |
---|
751 | ARDCs are good for large designs, especially those in which exact |
---|
752 | reachability analysis is intractable. See: I.-H. Moon, J.-Y. Jang, |
---|
753 | G. D. Hachtel, F. Somenzi, "Approximate reachability don't cares for |
---|
754 | CTL model checking", ICCAD'98. |
---|
755 | |
---|
756 | ** Usage: |
---|
757 | model_check -D 3 : model checking with ARDCs |
---|
758 | compute_reach -A 2 : compute over-approximate reachable |
---|
759 | states |
---|
760 | compute_reach -D : compute exact reachable states with |
---|
761 | the help of ARDCs |
---|
762 | check_invariant -D : check invariants with the help of |
---|
763 | ARDCs |
---|
764 | synthesize_network -r 3 : synthesize sequential network |
---|
765 | with ARDCs |
---|
766 | |
---|
767 | Also refer to: print_ardc_options |
---|
768 | |
---|
769 | |
---|
770 | * High Density Reachability Analysis (HD) |
---|
771 | |
---|
772 | HD is an alternate approach to performing exact reachability |
---|
773 | analysis. Using BDD subsetting techniques, the HD method tries to keep |
---|
774 | the sizes of the BDDs small during the traversal. This is intended to |
---|
775 | keep the memory occupation under control as well as make the traversal |
---|
776 | more efficient by manipulating smaller BDDs. |
---|
777 | |
---|
778 | On large circuits, for which the default (breadth-first search) method |
---|
779 | does not complete, HD is likely to find many more reachable states. |
---|
780 | This is useful in invariant checking. |
---|
781 | For mid-size circuits, HD is sometimes faster in completing |
---|
782 | reachability analysis, but for smaller circuits, HD may result in too |
---|
783 | much overhead. It is recommended to use this option when the default |
---|
784 | method for reachability analysis fails (runs out of memory or takes |
---|
785 | very long). Refer to Ravi and Somenzi, "High-density reachability |
---|
786 | analysis", ICCAD'95. |
---|
787 | |
---|
788 | HD analysis only works with the CUDD package. |
---|
789 | |
---|
790 | ** Usage: |
---|
791 | compute_reach -A 1: reachability analysis with HD approach. |
---|
792 | |
---|
793 | Also refer to: print_hd_options |
---|
794 | |
---|
795 | |
---|
796 | * On-the-Fly Invariant Checking |
---|
797 | |
---|
798 | Checking invariants is done by performing reachability analysis and |
---|
799 | checking if all invariants hold in the reachable states. VIS-1.3 |
---|
800 | does invariant checking during reachability computation (on-the-fly |
---|
801 | verification). Invariants that fail are reported early, along with the |
---|
802 | counter examples if requested. |
---|
803 | |
---|
804 | Since reachability analysis can be expensive, one may use HD in |
---|
805 | invariant checking. For circuits on which the default reachability |
---|
806 | analysis runs out of resources, HD will typically explore more |
---|
807 | reachable states, and more invariants may prove false. However, the |
---|
808 | counter examples provided by using HD may not be of shortest length. |
---|
809 | |
---|
810 | HD invariant checking only works with the CUDD package. |
---|
811 | |
---|
812 | ** Usage: |
---|
813 | check_invariant -A 1 : check_invariant where HD is used for |
---|
814 | reachability analysis |
---|
815 | |
---|
816 | One may also start with an overapproximation of the reachable |
---|
817 | states. In this case, if all invariants hold on the overapproximation, |
---|
818 | verification is successfully completed. If not, the algorithm will |
---|
819 | compute the exact reachable states as before, and check the |
---|
820 | invariants that failed with the overapproximation. |
---|
821 | |
---|
822 | ** Usage: |
---|
823 | check_invariant -A 2 : check_invariant where over |
---|
824 | approximation is used for reachability |
---|
825 | analysis. |
---|
826 | |
---|
827 | * Seeding Reachability Analysis via Simulation |
---|
828 | |
---|
829 | A new option rch_simulate can be used to use simulation to augment the |
---|
830 | set of initial states for reachability analysis. The value of the |
---|
831 | variable is the number of random input vectors that are simulated. The |
---|
832 | states reached in this way are considered as initial |
---|
833 | states. Augmenting the set of initial states may sometimes lead to |
---|
834 | faster reachability analysis, or may sometimes lead to better |
---|
835 | underapproximations, when reachability analysis is not carried out to |
---|
836 | completion. The commands affected by this option are compute_reach and |
---|
837 | check_invariant. |
---|
838 | |
---|
839 | ** Usage: |
---|
840 | set rch_simulate n : simulate n vectors prior to |
---|
841 | reachability analysis |
---|
842 | |
---|
843 | |
---|
844 | * Forward Model Checking |
---|
845 | |
---|
846 | VIS-1.3 includes the capability of forward model checking based on |
---|
847 | H. Iwashita, T. Nakata, F. Hirose, "CTL model checking based on |
---|
848 | forward state traversal", ICCAD'96. Standard "backward" CTL model |
---|
849 | checking uses only preimage computations. Forward model checking tries |
---|
850 | to use image computations in place of preimage computations as much as |
---|
851 | possible, because they are typically faster. |
---|
852 | According to our experiments, forward model checking gives drastic |
---|
853 | performance improvement in many designs, but we have also seen many |
---|
854 | cases in which forward model checking does much worse. Performance |
---|
855 | depends on the design. |
---|
856 | |
---|
857 | ** Usage: |
---|
858 | model_check -F : model checking based on forward traversal |
---|
859 | |
---|
860 | |
---|
861 | * Incremental CTL Verification |
---|
862 | |
---|
863 | The command "incremental_ctl_verification" (aliased to "icv") |
---|
864 | performs verification of CTL formulas following the incremental |
---|
865 | paradigm described in A. Pardo, G. Hachtel, "Incremental CTL model |
---|
866 | checking using BDD subsetting", DAC'98. The algorithm starts with an |
---|
867 | initial simple approximation of the verification and then proceeds at |
---|
868 | refining the different evaluations until the formula can be proved |
---|
869 | conclusively. The approximation technique currently adopted makes use |
---|
870 | of BDD approximation techniques. As implemented in release 1.3, |
---|
871 | incremental_ctl_verification supports fairness constraints, but tends |
---|
872 | to be less efficient than model_check when they are specified. |
---|
873 | |
---|
874 | Incremental verification works only with the CUDD package. |
---|
875 | |
---|
876 | ** Usage: |
---|
877 | incremental_ctl_verification [options] ctl_file |
---|
878 | |
---|
879 | |
---|
880 | * Synthesis |
---|
881 | |
---|
882 | VIS 1.3 includes a new command "synthesize_network" (aliased to |
---|
883 | "synth") to transform both combinational and sequential circuits into |
---|
884 | multi-level boolean networks using symbolic factorization based on |
---|
885 | Zero-suppressed BDDs (ZDDs). In the case of sequential circuits, only |
---|
886 | the combinational part of the circuit is synthesized: state encoding |
---|
887 | is not altered. The emphasis of this algorithm is on the reduction of |
---|
888 | the number of literals in the factored form of the network. The final |
---|
889 | multi-level circuit can be obtained in either the BLIF format or the |
---|
890 | equation format. Designs described in BLIF or BLIF-MV format can be |
---|
891 | used as an input to this command. However, multiple valued variables |
---|
892 | are not supported. Hence, signals in the designs described in BLIF-MV |
---|
893 | need to be restricted to binary values. |
---|
894 | |
---|
895 | Synthesis can be used only when VIS is linked with the CUDD package. |
---|
896 | |
---|
897 | ** Usage: |
---|
898 | synthesize_network [options] |
---|
899 | |
---|
900 | * STG Restructuring for Low Power |
---|
901 | |
---|
902 | VIS-1.3 includes a new command "restruct_fsm". This command |
---|
903 | implements a State Transition Graph (STG) restructuring algorithm |
---|
904 | that exploits the existence of equivalent states to decrease power |
---|
905 | dissipation, not necessarily by collapsing the equivalence states, but |
---|
906 | by redirecting transitions in the graph. This algorithm is based on |
---|
907 | the monolithic transition relation. The complexity of the algorithm |
---|
908 | in general increases with an increase in the size of the state |
---|
909 | transition graph, which depends on the number of state variables and |
---|
910 | primary inputs. The algorithm can handle circuits described in both |
---|
911 | BLIF and BLIF-MV formats. However, multi-valued variables are not |
---|
912 | supported. Also, the final synthesized circuit (network implementation |
---|
913 | of the restructured STG) is available only in BLIF format. The |
---|
914 | sequential circuit should have a single initial state. For more |
---|
915 | details see, B. Kumthekar, I.-H. Moon, F. Somenzi, "A Symbolic |
---|
916 | Algorithm for Low-Power Sequential Synthesis", ISLPED 97. |
---|
917 | |
---|
918 | STG restructuring works only with the CUDD package. |
---|
919 | |
---|
920 | ** Usage: |
---|
921 | restruct_fsm [options] |
---|
922 | |
---|
923 | * Miscellaneous |
---|
924 | |
---|
925 | ** New versions of CUDD and CAL packages. |
---|
926 | VIS-1.3 includes CUDD 2.3.0 and CAL 2.0.1. Compared to the versions |
---|
927 | that were included in VIS-1.2, the new packages have better |
---|
928 | performance and improved statistics reporting. |
---|
929 | |
---|
930 | ** Changes in configure |
---|
931 | Configure now defaults to using 32-bit pointers on DEC Alpha machines. |
---|
932 | To use 64-bit pointers, invoke "configure" with "--enable-64." |
---|
933 | |
---|
934 | ** gmake check |
---|
935 | "gmake check" now consistently runs the local executable using the |
---|
936 | examples in the master source directory. Previously, there were |
---|
937 | different versions for local-area and central-area checks. |
---|
938 | |
---|
939 | ** Native Compiler. |
---|
940 | The configuration scripts now try to use the native C compiler (cc) by |
---|
941 | default. The use of gcc can be forced by running configure with the |
---|
942 | option --enable-gcc. On AIX and SunOS, however, only gcc is |
---|
943 | supported. |
---|
944 | |
---|
945 | As a result, the following configuration options have been removed |
---|
946 | |
---|
947 | --with-comp-mode=solaris |
---|
948 | --with-comp-mode=mips |
---|
949 | --with-comp-mode=alpha32 |
---|
950 | --with-comp-mode=alpha64 |
---|
951 | |
---|
952 | Configure now defaults to using 32-bit pointers on DEC Alpha machines. |
---|
953 | To use 64-bit pointers, invoke "configure" with "--enable-64." |
---|
954 | |
---|
955 | ** Changes in supported platforms. |
---|
956 | VIS-1.3 has been tested under IRIX 5.3 with both cc and gcc. |
---|
957 | VIS-1.3 has been tested under HP-UX with cc. (Previously only gcc was |
---|
958 | supported.) |
---|
959 | VIS-1.3 linked with the CAL BDD package currently does not work under |
---|
960 | CYGWIN32. When the problems are fixed, we shall issue a patch. |
---|
961 | |
---|
962 | ** Uniformity across platforms. |
---|
963 | VIS-1.3 provides enhanced architecture independence. For the commands |
---|
964 | model_check, approximate_model_check, compute_reach, |
---|
965 | incremental_ctl_verification, check_invariant, and lang_empty, the runs |
---|
966 | will be exactly the same on every platform with the same memory limits. |
---|
967 | Previously, invocations of reordering, and hence BDD sizes could differ |
---|
968 | from platform to platform. |
---|
969 | |
---|
970 | ** Changes to static_order. |
---|
971 | The static_order command has changed substantially. For combinational |
---|
972 | circuits, VIS-1.2 and earlier releases effectively generated random |
---|
973 | orders regardless of the method specified by the user. (Sequential |
---|
974 | circuits did not have this problem.) The randomness of the orders was |
---|
975 | due to a bug that has been fixed in VIS-1.3. For all |
---|
976 | circuits---combinational and sequential---the default ordering method |
---|
977 | is a new algorithm called "interleave." The new default method is |
---|
978 | substantially more memory efficient than the previous default method |
---|
979 | (merge_left). The quality of the resulting orders is comparable. |
---|
980 | |
---|
981 | ** New -v option for dynamic_var_ordering. |
---|
982 | The option -v 1 can be specified to cause VIS to write a one-line |
---|
983 | message whenever dynamic reordering is executed. The message reports |
---|
984 | the reduction in BDD or ZDD size, and on the time taken by reordering. |
---|
985 | This option is only effective with CUDD. |
---|
986 | |
---|
987 | ** New -i option for comb_verify and seq_verify. |
---|
988 | It is now possible to print statistics on BDD usage and performance |
---|
989 | when running combinational or sequential verification. This is done |
---|
990 | by specifying the -i option for comb_verify and seq_verify. It is |
---|
991 | important to notice that these two commands use a local BDD manager, |
---|
992 | which is destroyed before control is returned to the user. It is not |
---|
993 | therefore possible to use print_bdd_stats to inspect the statistics of |
---|
994 | the BDD package when invoking either of the two commands. |
---|
995 | |
---|
996 | ** Default method for build_partition_mdds changed to inout. |
---|
997 | The default method has been changed to inout, because this has been |
---|
998 | found to produce better results than frontier in many cases. The |
---|
999 | frontier method can build the partition MDDs in more cases than the |
---|
1000 | inout method; the latter, however, tends to give better performance |
---|
1001 | during model checking. |
---|
1002 | |
---|
1003 | ** set ctl_change_bracket [yes/no] |
---|
1004 | VIS-1.3 includes this set command option for the CTL parser. VL2MV |
---|
1005 | automatically converts "[]" to "<>" in node names, therefore the CTL |
---|
1006 | parser does the same thing. However, in some cases a user does not |
---|
1007 | want to change bracket type in the CTL formulas. This can be |
---|
1008 | accomplished by setting this set command option to "no." The default |
---|
1009 | is "yes". The commands affected are check_invariant, model_check, |
---|
1010 | approximate_model_check, and incremental_ctl_verification. |
---|
1011 | |
---|
1012 | ** Printing time for model checking |
---|
1013 | VIS-1.3 includes printing time for model checking. If verbosity is set on, |
---|
1014 | then the model checking time for both each formula and total will be printed |
---|
1015 | out. |
---|
1016 | |
---|
1017 | ** Incremental reachability analysis and invariant checking. |
---|
1018 | In VIS-1.3 it is possible to perform reachability analysis |
---|
1019 | incrementally. The -d option of compute_reach specifies how many |
---|
1020 | steps (image computations) should be performed at most before |
---|
1021 | returning control to the user. If compute_reach is invoked more than |
---|
1022 | once with the -d option, each time reachability analysis starts from |
---|
1023 | the previous result. If check_invariant is invoked after |
---|
1024 | compute_reach has been invoked with the -d option, the partial |
---|
1025 | reachability results are used to speed up verification. |
---|
1026 | |
---|
1027 | ** Completeness and determinism check in flatten_hierarchy |
---|
1028 | The check for completeness and determinism performed by |
---|
1029 | flatten_hierarchy that was previously optional is now always |
---|
1030 | performed. The -b option to flatten_hierarchy and init_verify has no |
---|
1031 | effect in VIS-1.3 and is retained for compatibility with existing |
---|
1032 | scripts. It may disappear in future releases. Users of VIS-1.3 will |
---|
1033 | observe modest increases in the time taken to flatten the |
---|
1034 | hierarchy. |
---|
1035 | |
---|
1036 | |
---|
1037 | Version 1.2 |
---|
1038 | |
---|
1039 | * Introduction |
---|
1040 | |
---|
1041 | ** Improvements |
---|
1042 | |
---|
1043 | *** Over 10x performance improvement in model checking for many examples |
---|
1044 | *** extended CTL syntax |
---|
1045 | *** better access to the BDD parameters and statistics |
---|
1046 | *** enhanced user interface |
---|
1047 | *** improved portability and flexibility of configuration |
---|
1048 | |
---|
1049 | ** New verification algorithms |
---|
1050 | |
---|
1051 | *** approximate_model_check: model checking of ACTL formulae for systems |
---|
1052 | that are too large for model_check |
---|
1053 | *** res_verify: residue based verification of arithmetic circuits |
---|
1054 | |
---|
1055 | * Performance improvement in model checking |
---|
1056 | |
---|
1057 | ** We have changed image computation (the underlying operation of |
---|
1058 | model checking) to make the best use of don't care sets. The don't |
---|
1059 | cares arise from unreachable states, and using them appropriately |
---|
1060 | reduces the BDD sizes significantly, leading to improved |
---|
1061 | performance of model checking. In addition, we have fixed a |
---|
1062 | performance bug that caused repeated computation of simplified |
---|
1063 | transition relations. We performed a performance comparison with |
---|
1064 | VIS 1.1 on a set of examples, and on some cases we observed more |
---|
1065 | than 30x performance improvement. In fact, on some examples VIS 1.2 |
---|
1066 | could finish model checking in about 26 secs whereas VIS 1.1 took |
---|
1067 | about 2400 secs. |
---|
1068 | |
---|
1069 | ** The model checking runs that use don't cares (-D option different |
---|
1070 | from 0) are those that benefit the most from the changes in VIS |
---|
1071 | 1.2. In general it is not trivial to tell whether -D 1 or -D 0 will |
---|
1072 | produce the faster CPU time. An empirical approach consists of |
---|
1073 | running "compute_reach -t 300" (reachability for 5 |
---|
1074 | minutes). Depending upon the progress in reachable state |
---|
1075 | computation, one can then invoke model checking with -D 0 or -D 1. |
---|
1076 | |
---|
1077 | * Approximate Model Checking |
---|
1078 | |
---|
1079 | ** VIS 1.2 includes a new command approximate_model_check, a model |
---|
1080 | checker that performs ACTL model checking on an abstracted and |
---|
1081 | flattened network. The command is designed to tackle the state |
---|
1082 | explosion problem we encounter when dealing with large and complex |
---|
1083 | circuits. Based on the initial size of the group (of latches), the |
---|
1084 | command constructs an over- or under-approximation of the |
---|
1085 | transition relation of the system. These approximations may not |
---|
1086 | contain every detail of the exact system. However they may contain |
---|
1087 | enough information to determine whether the formula is positive or |
---|
1088 | negative. Starting from an initial coarse approximation, the |
---|
1089 | command makes its effort to prove whether the given ACTL formula is |
---|
1090 | true or false. When the procedure fails to prove correctness of the |
---|
1091 | formula with initial approximations, it automatically refines the |
---|
1092 | approximations. It repeats the process until the algorithm produces |
---|
1093 | a reliable result or the available resources are exhausted. For |
---|
1094 | detailed description, refer to the relevant manual page ("help |
---|
1095 | approximate_model_check from" the VIS shell). |
---|
1096 | |
---|
1097 | ** approximate_model_check is faster than model_check for some of the |
---|
1098 | VIS 1.2 distribution examples. However, significant improvements |
---|
1099 | over the exact computation can be seen for even larger examples |
---|
1100 | such as s15850. The current version of the code does not perform |
---|
1101 | any refinements. The refinement techniques similar to the "machine |
---|
1102 | by machine" and "frame by frame" may be implemented in future |
---|
1103 | version. Furthermore, more aggressive reduction of the initial |
---|
1104 | states can be performed while proving whether the ACTL formula is |
---|
1105 | positive. The reduction of the initial states are made for each |
---|
1106 | level of the lattice of approximations in this version. |
---|
1107 | |
---|
1108 | ** The current version includes two distinct "grouping method". More |
---|
1109 | experiments are required to determine better grouping method(s). |
---|
1110 | |
---|
1111 | ** The current version only supports ACTL formulae. |
---|
1112 | |
---|
1113 | * Residue Based Verification |
---|
1114 | |
---|
1115 | ** VIS 1.2 includes a new command "res_verify" for combinational |
---|
1116 | verification based on residue arithmetic. Residue-based |
---|
1117 | verification is especially suited to multipliers and other |
---|
1118 | arithmetic circuits. See below, however, for a discussion of the |
---|
1119 | application of "res_verify" to other circuits. This command is only |
---|
1120 | available if VIS has been linked with the cu library (default). |
---|
1121 | |
---|
1122 | ** The command res_verify takes two circuits (specification and |
---|
1123 | implementation) whose equivalence is to be established, and an |
---|
1124 | order for the outputs. The order for the outputs allows res_verify |
---|
1125 | to interpret the output vectors as integers. Based on this |
---|
1126 | interpretation, res_verify applies the Chinese remainder theorem to |
---|
1127 | the equivalence verification: the specification and the |
---|
1128 | implementation are equivalent if, for a suitable set of relatively |
---|
1129 | prime numbers, the residues of their outputs are equivalent. The |
---|
1130 | residues are computed by composing the two circuits into a function |
---|
1131 | representing the residue computation. |
---|
1132 | |
---|
1133 | ** res_verify allows the user to specify what pairs of outputs of the |
---|
1134 | circuits should be compared directly by building their BDDs, |
---|
1135 | instead of computing residues for them. The -d <n> option controls |
---|
1136 | this feature; n pairs of outputs, starting from the least |
---|
1137 | significant bits of the output vectors, are verified directly if -d |
---|
1138 | n is specified. |
---|
1139 | |
---|
1140 | ** As a special case, the user can specify -d all. This causes |
---|
1141 | res_verify to directly verify all the output pairs, effectively |
---|
1142 | foregoing residue verification. This can be useful for |
---|
1143 | non-arithmetic circuits that are not suited to residue |
---|
1144 | verification. In this case res_verify works similarly to |
---|
1145 | comb_verify, with a significant exception: res_verify verifies one |
---|
1146 | output at the time. This often translates into reduced memory |
---|
1147 | requirements and CPU times. |
---|
1148 | |
---|
1149 | ** res_verify can be applied to pairs of sequential circuits with the |
---|
1150 | same state encoding. Several options and VIS variables control the |
---|
1151 | detailed behavior of the command. Refer to the on-line |
---|
1152 | documentation for the details (help res_verify). |
---|
1153 | |
---|
1154 | |
---|
1155 | * Extended CTL Syntax |
---|
1156 | |
---|
1157 | ** Users can now write CTL fomulae using vector notation. Vector |
---|
1158 | variables have the form of var[i:j] and each bit can be written as |
---|
1159 | either var<i> or var[i]. For instance, the following formulae are |
---|
1160 | valid. |
---|
1161 | |
---|
1162 | counter[3:0] = 10 |
---|
1163 | counter[3:0] = b1010 |
---|
1164 | counter[3:0] = {1,2,10} |
---|
1165 | |
---|
1166 | The formula in the last line is true if counter has one of the listed |
---|
1167 | values. |
---|
1168 | |
---|
1169 | ** Macros can be defined and used in CTL formulae to stand for subformulae. |
---|
1170 | For instance: |
---|
1171 | |
---|
1172 | \define VALID_INPUT (a[3:0]=0 -> b=1) |
---|
1173 | |
---|
1174 | defines the macro VALID_INPUT, which can be later used in a formula |
---|
1175 | like this: |
---|
1176 | |
---|
1177 | AG(start=1 * \VALID_INPUT -> AF(res[7:0]=b10101010)); |
---|
1178 | |
---|
1179 | ** The CTL parser allows users to write the following formulae: |
---|
1180 | |
---|
1181 | var1 == var2 |
---|
1182 | var1[i:j] == var2[k:l] |
---|
1183 | |
---|
1184 | The first formula is equivalent to (var1=1) * (var2=1) + (var1=0) * |
---|
1185 | (var2=0) and currently is allowed only in the boolean domain. (It |
---|
1186 | cannot be used for variables of enumerated types.) The second formula |
---|
1187 | can be used if the lengths of two vectors match. |
---|
1188 | |
---|
1189 | ** AX:n(f) is allowed as a shorthand for AX(AX(...AX(f)...)), where n |
---|
1190 | is the number of invocations of AX. EX:n(f) is defined similarly. |
---|
1191 | |
---|
1192 | |
---|
1193 | * BDD manipulation |
---|
1194 | |
---|
1195 | ** VIS 1.2 incorporates Release 2.1.1 of CUDD and an improved version of |
---|
1196 | CAL. Improvements specific to CUDD and relevant to VIS are: |
---|
1197 | |
---|
1198 | ** All reordering methods preserve variable groups. Variable groups are |
---|
1199 | created by VIS to keep corresponding present and next state variables |
---|
1200 | adjacent. In VIS 1.1 only method "sift" retained the variable groups. |
---|
1201 | |
---|
1202 | ** CUDD determines the maximum size of the computed table based on the |
---|
1203 | amount of main memory available. On systems where getrlimit is |
---|
1204 | available, the datasize limit is used to determine how much memory |
---|
1205 | is available. CUDD allows the computed table to grow up to one |
---|
1206 | fourth of that amount. This feature allows VIS to self-calibrate |
---|
1207 | for optimum performance. The computed table will not necessarily |
---|
1208 | grow to its maximum value, and VIS is not guaranteed to stay within |
---|
1209 | the memory bound returned by getrlimit. If the datasize limit is |
---|
1210 | not set, if getrlimit is not available, or if it is available but |
---|
1211 | does not know about datasize, then a suitable default value is used |
---|
1212 | instead. The default value is normally 16MB. This value can be |
---|
1213 | changed at configuration time. Even a value as low as 16MB gives a |
---|
1214 | reasonably sized computed table for small-medium runs. However, for |
---|
1215 | large runs--hundreds of MB--the ability to set the memory limit may |
---|
1216 | produce much faster execution. The maximum computed table size can |
---|
1217 | be set also from within VIS with set_bdd_parameters. |
---|
1218 | |
---|
1219 | ** CUDD now provides access to the package parameters and statistics |
---|
1220 | via the commands bdd_print_stats and set_bdd_parameters. The |
---|
1221 | parameters that can be set control the sizing of CUDD's main data |
---|
1222 | structures (unique table and computed table) and many aspects of |
---|
1223 | the variable reordering algorithms. The parameters reported refer |
---|
1224 | to memory occupation, computed table (cache) performance, and |
---|
1225 | variable reordering. |
---|
1226 | |
---|
1227 | ** It is now possible to impose a limit on the number of variable |
---|
1228 | swaps performed during reordering. |
---|
1229 | |
---|
1230 | |
---|
1231 | * User Interface |
---|
1232 | |
---|
1233 | ** New VIS command "set_bdd_parameters". |
---|
1234 | |
---|
1235 | The command "print_bdd_stats" prints two sets of data from the |
---|
1236 | underlying BDD package, parameters and statistics. The parameters |
---|
1237 | can be modified as follows. By using the "set" command, set the |
---|
1238 | value of a variable whose prefix is "BDD." and whose suffix is |
---|
1239 | exactly the name seen in the output of the command |
---|
1240 | "print_bdd_stats", for example: |
---|
1241 | |
---|
1242 | vis> set "BDD.Garbage collection enabled" no |
---|
1243 | |
---|
1244 | Then, the command "set_bdd_parameters" reprograms the underlying BDD |
---|
1245 | core based on the values of the variables of this type. |
---|
1246 | |
---|
1247 | ** Readline Library. |
---|
1248 | |
---|
1249 | The Readline library is a GNU package that provides command line |
---|
1250 | editing, command history, and file name completion capabilities. If |
---|
1251 | the system where VIS is built has this library and it is installed |
---|
1252 | so that the linker can use it, the configure script will detect |
---|
1253 | this situation and the executable will be linked with |
---|
1254 | libreadline.a. |
---|
1255 | |
---|
1256 | ** Variable Interpolation. |
---|
1257 | |
---|
1258 | The VIS shell now allows variable interpolation. For instance, typing |
---|
1259 | |
---|
1260 | vis> echo $open_path |
---|
1261 | |
---|
1262 | causes vis to echo the current value of open_path. Typing |
---|
1263 | |
---|
1264 | vis> set open_path $open_path:/some/path |
---|
1265 | |
---|
1266 | will append /some/path to open_path. Variable interpolation can be |
---|
1267 | used also to exchange parameters with scripts. This allows reliable |
---|
1268 | parameter passing even when "source" is called with options. |
---|
1269 | |
---|
1270 | ** PAGER |
---|
1271 | |
---|
1272 | If the PAGER environment variable is set, VIS uses it to choose the |
---|
1273 | program used to display the help pages. If PAGER is not set, VIS |
---|
1274 | uses 'more.' |
---|
1275 | |
---|
1276 | ** File Buffering. |
---|
1277 | |
---|
1278 | The output of VIS when run in batch mode is now line buffered on |
---|
1279 | systems that provide setvbuf. This makes it more convenient to |
---|
1280 | observe the evolution of long-running jobs. |
---|
1281 | |
---|
1282 | * Portability and Configuration |
---|
1283 | |
---|
1284 | ** VIS 1.2 runs on two new platforms: IBM RS6000 running AIX and Intel |
---|
1285 | Pentium running Windows95 with Gnu-Win32. The Gnu-Win32 environment |
---|
1286 | (http://www.cygnus.com/misc/gnu-win32/) is a freely available GNU |
---|
1287 | environment for Windows 95 and Windows NT. |
---|
1288 | |
---|
1289 | ** This release of VIS has been tested with some native compilers |
---|
1290 | (Ultrix, Solaris, Digital Unix). In particular, when building with |
---|
1291 | the native compiler on a DEC Alpha running Digital Unix, the option |
---|
1292 | is provided to compile with 32 bit pointers. Please see the README |
---|
1293 | file for specific instructions on how to compile with the different |
---|
1294 | native compilers. |
---|
1295 | |
---|
1296 | ** The GLU library now provides portable functions for random number |
---|
1297 | generation and sorting that help make results reproducible across |
---|
1298 | different platforms. |
---|
1299 | |
---|
1300 | ** The GLU library now provides a function to read the available |
---|
1301 | memory (based on getrlimit). This function is currently used by the |
---|
1302 | CUDD package to choose the optimal size of data structures. For |
---|
1303 | systems without getrlimit a suitable default is provided and can be |
---|
1304 | changed at configuration time. |
---|
1305 | |
---|
1306 | |
---|
1307 | Version 1.1 |
---|
1308 | |
---|
1309 | * Introduction |
---|
1310 | |
---|
1311 | ** Improvements over 1.0 |
---|
1312 | |
---|
1313 | *** multiple BDD packages |
---|
1314 | *** more synthesis capability |
---|
1315 | *** hierarchy restructuring |
---|
1316 | *** new methods for partitioning |
---|
1317 | *** automatic reduction during model checking |
---|
1318 | *** support for multi-phase clocking and transparent latches |
---|
1319 | *** support for invoking standard scripts |
---|
1320 | *** support for graphically viewing simulation output |
---|
1321 | |
---|
1322 | These significantly improve VIS's performance in terms of computer |
---|
1323 | time, memory usage, and ability to complete on larger designs. |
---|
1324 | Further, additional capability for synthesis is provided. |
---|
1325 | |
---|
1326 | One particular example of the improved performance of VIS 1.1 is the |
---|
1327 | first (to our knowledge) reported exact state space traversal of |
---|
1328 | benchmark s5378. It was run with the cu BDD package on an Alpha |
---|
1329 | 300MHz (using 32 bit pointers). The datasize limit was set at |
---|
1330 | 1GB. The process grew to about 440MB. Dynamic reordering was enabled |
---|
1331 | all the time and occurred more than 50 times. The orginal ISCAS89 |
---|
1332 | circuit was used, which has 179 latches. |
---|
1333 | |
---|
1334 | *** Multiple BDD packages |
---|
1335 | |
---|
1336 | We have added the capability to run VIS with three different BDD |
---|
1337 | packages, cu - from University of Colorado, cal - from UC Berkeley |
---|
1338 | and cmu - from Carnegie Mellon University. Further details are in |
---|
1339 | the section "BDD Packages" below. |
---|
1340 | |
---|
1341 | *** Synthesis |
---|
1342 | |
---|
1343 | VIS synthesis is represented by a number of commands, write_blif, |
---|
1344 | read_blif, collapse_child, and decompose_child. These allow the |
---|
1345 | user to manipulate the hierarchy and to write blif files to SIS |
---|
1346 | and then later read in an optimized file. Each of these commands |
---|
1347 | can be executed on sub-nodes or sub-trees of the |
---|
1348 | hierarchy. Details about these commands are in the section |
---|
1349 | "Collapsing and decomposing a hierarchy" and "Reading and writing |
---|
1350 | blif files" below. |
---|
1351 | |
---|
1352 | *** Partitioning |
---|
1353 | |
---|
1354 | Partitioning in VIS is used in a number of places: simulation, |
---|
1355 | model checking, computing the set of reached states, etc. Recall |
---|
1356 | that the VIS data structure is simply a set of tables with outputs |
---|
1357 | (signals) which can be inputs to other tables. There are also |
---|
1358 | primary input signals and inputs from latches. Some signals are |
---|
1359 | primary outputs and/or inputs to latches. A partition is simply a |
---|
1360 | subset of nodes (signals) which are to be preserved, the remaining |
---|
1361 | are to be eliminated. Of course, primary outputs and inputs to |
---|
1362 | latches cannot be eliminated. We provide some new partitioning |
---|
1363 | methods as described below (in the section "Creating partitions of |
---|
1364 | the network"). |
---|
1365 | |
---|
1366 | In many cases, a formula to be model checked does not depend on |
---|
1367 | all of the signals in the design. In such cases, the design can be |
---|
1368 | reduced to include only signals in the transitive fan-in of the |
---|
1369 | latches mentioned in the CTL formula plus the fairness |
---|
1370 | constraints. This reduction can result in vastly more efficient |
---|
1371 | model checking. |
---|
1372 | |
---|
1373 | *** Multi-phase clocking |
---|
1374 | |
---|
1375 | One question that is asked frequently is how does VIS support |
---|
1376 | multi-phase clocking and transparent latches in Verilog. We |
---|
1377 | provide this capability in our Verilog compiler "vl2mv" and detail |
---|
1378 | this in a document that describes exactly the steps to be |
---|
1379 | taken. This document is in the vis-1.1/doc directory and is called |
---|
1380 | two_phase.ps. |
---|
1381 | |
---|
1382 | *** Standard scripts |
---|
1383 | |
---|
1384 | Standard scripts have been provided which should help the new user |
---|
1385 | select certain options that we have determined to be good choices |
---|
1386 | on a variety of examples. The scripts are divided into two |
---|
1387 | categories: simple - which are recommended for small/medium |
---|
1388 | examples, and robust - recommended for large examples where |
---|
1389 | completion rather than compute time is the most important |
---|
1390 | concern. The 10 scripts provided are summarized below in the |
---|
1391 | section "Standard scripts". |
---|
1392 | |
---|
1393 | *** xsimv |
---|
1394 | |
---|
1395 | Finally, we have included "xsimv", which provides a graphical |
---|
1396 | method for viewing simulation output. This is detailed in the |
---|
1397 | section "Using Xsimv". |
---|
1398 | |
---|
1399 | * Multiple BDD packages |
---|
1400 | |
---|
1401 | We have added the capability to run VIS with three different BDD |
---|
1402 | packages, cu - from University of Colorado, cal - from UC Berkeley |
---|
1403 | and cmu - from Carnegie Mellon University. The commands for these |
---|
1404 | respectively are vis-cu, vis-cal, and vis-cmu. The cmu package is |
---|
1405 | the same as in VIS 1.0. The cu package is very strong in having a |
---|
1406 | fast dynamic variable reordering capability. In addition, cu has |
---|
1407 | been upgraded for the DEC alpha machines so that it uses 32 bit |
---|
1408 | pointers, instead of 64 bit pointers; hence it realizes a factor of |
---|
1409 | 2 in memory savings on such machines. The other two packages remain |
---|
1410 | to be upgraded for 32 bit pointers on the DEC alphas. The cal |
---|
1411 | package uses the BFS BDD technique and is particularly good at |
---|
1412 | avoiding paging on large designs. For most problems, we recommend |
---|
1413 | the cu package. |
---|
1414 | |
---|
1415 | * Reading and writing BLIF files |
---|
1416 | |
---|
1417 | The "write_blif" command in vis-1.0 only wrote out the combinational |
---|
1418 | part of an hnode (a node of the hierarchy). Now this functionality |
---|
1419 | is performed by the "write_blif -c" command. Other options have been |
---|
1420 | added as well. The options are: |
---|
1421 | |
---|
1422 | (1) write_blif -l |
---|
1423 | |
---|
1424 | writes out the latches of the hnode as well. Additionally, all |
---|
1425 | latch IOs are made into POs in the blif file that is |
---|
1426 | created. This ensures that the these nodes do not get optimized |
---|
1427 | away by SIS, so that mv-latches can be re-inserted by the |
---|
1428 | read_blif command in VIS. |
---|
1429 | |
---|
1430 | (2) write_blif -c |
---|
1431 | |
---|
1432 | same as "write_blif" of vis-1.0 |
---|
1433 | |
---|
1434 | (3) write_blif |
---|
1435 | |
---|
1436 | writes out latches of the hnode, but does not make latch IOs |
---|
1437 | into POs in the blif file. The .blif and .enc files that are |
---|
1438 | generated by this command currently cannot be guaranteed to read |
---|
1439 | back into VIS correctly using the read_blif command. |
---|
1440 | |
---|
1441 | (4) write_blif -R |
---|
1442 | |
---|
1443 | recursively writes out the entire hnode hierarchy rooted at the |
---|
1444 | current hnode, to a blif file. This command opens up a direct |
---|
1445 | path from Verilog to pure blif files and hence to synthesis in |
---|
1446 | the SIS framework. For this command to work, 1) all variables |
---|
1447 | in the hnode hierarchy rooted at the current hnode must be |
---|
1448 | binary, 2) all tables should be deterministic, and 3) there must |
---|
1449 | be a unique initial state. |
---|
1450 | |
---|
1451 | * Collapsing and decomposing a hierarchy |
---|
1452 | |
---|
1453 | If the user travels (via "cd" commands) to a particular node in the |
---|
1454 | hierarchy and does a "write_blif", only the logic in the *current* |
---|
1455 | node gets written out. The user might want to collapse some of the |
---|
1456 | child nodes together and do synthesis in the "collapsed" node. The |
---|
1457 | "collapse_child" command does just that. The usage is: |
---|
1458 | |
---|
1459 | collapse_child <child_name> |
---|
1460 | |
---|
1461 | and the effect is that the child node is absorbed by the parent. By |
---|
1462 | successive invocations of this command, multiple nodes can be |
---|
1463 | collapsed into a single node. |
---|
1464 | |
---|
1465 | "decompose_child" is a command that effects the inverse operation of |
---|
1466 | collapse_child. The user can specify components of the current node |
---|
1467 | to be grouped as a separate newly created child node. The user must |
---|
1468 | also specify the name of the new child. Successive invocations of |
---|
1469 | "decompose_child" can be used to effect multiple |
---|
1470 | decompositions. "decompose_child" provides the infra-structure for |
---|
1471 | implementing and testing FSM decomposition algorithms (to appear |
---|
1472 | later). |
---|
1473 | |
---|
1474 | Together, collapse_child and decompose_child provide powerful |
---|
1475 | primitives that can be used to restructure the design hierarchy. |
---|
1476 | |
---|
1477 | * Creating a flattened network for verification |
---|
1478 | |
---|
1479 | The important change to note is the "-b" option in the |
---|
1480 | "flatten_hierarchy" command. By default this option is off, |
---|
1481 | implying that the system is not checked for complete and |
---|
1482 | deterministic specification. However, if the given design does not |
---|
1483 | meet this criteria, model checking may produce wrong results. (Note: |
---|
1484 | In VIS nondeterminism is handled by providing pseudo-inputs. |
---|
1485 | Internally all the tables are deterministic and completely |
---|
1486 | specified.) Invoking this "-b" option forces the necessary |
---|
1487 | checking. However this can be computationally expensive. The best |
---|
1488 | strategy is to invoke "flatten_hierarchy" with "-b" option the first |
---|
1489 | time and if the check passes, use it without "-b" option in |
---|
1490 | subsequent runs. |
---|
1491 | |
---|
1492 | * Creating partitions of the network |
---|
1493 | |
---|
1494 | Three new methods for creating partitions for the "build_partition_mdds" |
---|
1495 | command have been added. |
---|
1496 | |
---|
1497 | - partial |
---|
1498 | |
---|
1499 | This can be used to perform partitioning while forcing a |
---|
1500 | user-specified set of signals (nodes) in the partition. The |
---|
1501 | set of nodes to be included can either be supplied in a file, |
---|
1502 | or on the command line. |
---|
1503 | |
---|
1504 | - boundary |
---|
1505 | |
---|
1506 | In this method, all nodes that are sub-circuit IOs are |
---|
1507 | included in the partition. |
---|
1508 | |
---|
1509 | - frontier |
---|
1510 | |
---|
1511 | In this method (the default method), the user specifies a |
---|
1512 | parameter "partition_threshold" which is used to include an |
---|
1513 | intermediate variable whenever the BDD size for a node in the |
---|
1514 | network increases beyond the threshold value. This method is |
---|
1515 | very useful when it is not possible to create the next state |
---|
1516 | functions in terms of primary inputs because of large BDD |
---|
1517 | sizes. This method encompasses both "in_out" and "total" |
---|
1518 | partitioning methods (corresponds to very large and 0 value of |
---|
1519 | "partition_threshold", respectively). The parameter can be set |
---|
1520 | by invoking the following from the VIS commandline: "set |
---|
1521 | partition_threshold <integer>". |
---|
1522 | |
---|
1523 | * Reachability computation |
---|
1524 | |
---|
1525 | A few new options to reachability computation have been added |
---|
1526 | (command: compute_reach). |
---|
1527 | |
---|
1528 | |
---|
1529 | -d depthValue |
---|
1530 | |
---|
1531 | Used to perform reachability up to a certain number of |
---|
1532 | steps. |
---|
1533 | |
---|
1534 | -r threshold_value |
---|
1535 | |
---|
1536 | Invokes dynamic reordering of variables ONCE, after the |
---|
1537 | size of the reached state set crosses the threshold_value. |
---|
1538 | |
---|
1539 | * CTL Syntax |
---|
1540 | |
---|
1541 | For Verilog compatibility, && and || are supported in addition to * |
---|
1542 | (Boolean AND) and + (Boolean OR) respectively. |
---|
1543 | |
---|
1544 | * Model checking |
---|
1545 | |
---|
1546 | The mc command, by default, now reduces the model FSM with respect |
---|
1547 | to the union of all the formulas in the CTL file and uses the |
---|
1548 | reachability don't cares (thus reachablilty is done first before any |
---|
1549 | model checking). Also, -d 0 is the default now, i.e. no error trace |
---|
1550 | is computed. The -r option has been modified and a new capability |
---|
1551 | for sharing sub-formulas has been added. |
---|
1552 | |
---|
1553 | -r |
---|
1554 | |
---|
1555 | (This option has been modified). If this option is used, each |
---|
1556 | formula is model checked individually on an FSM reduced with |
---|
1557 | respect to the formula. |
---|
1558 | |
---|
1559 | -c |
---|
1560 | |
---|
1561 | This disables the default that sub-formulas of the formulas given |
---|
1562 | in the CTL file are shared. The sharing of sub-formulas makes sure |
---|
1563 | that a sub-formula in the set of all sub-formulas of the formulas |
---|
1564 | in the CTL file is evaluated only once. If both -r (formula |
---|
1565 | dependent FSM reduction) or "-D 1" (use reachability don't cares) |
---|
1566 | are enabled, this facility is automatically disabled. (Note that |
---|
1567 | currently if the same sub-formula occurs more than once within a |
---|
1568 | single formula, it may be checked twice.) |
---|
1569 | |
---|
1570 | * Standard scripts |
---|
1571 | |
---|
1572 | There are 10 standard scripts provided (in the "share" directory), |
---|
1573 | divided into two categories, simple and robust. The simple scripts |
---|
1574 | work best on small/medium size examples. The robust scripts are |
---|
1575 | recommended for large problems where the objective is to complete |
---|
1576 | the computation without too much concern for computation time. Below |
---|
1577 | are the scripts with their required arguments. All scripts assume |
---|
1578 | that a BLIV-MV file has already been read in. |
---|
1579 | |
---|
1580 | script_generic.simple |
---|
1581 | script_compute_reach.simple |
---|
1582 | script_model_check.simple foo.ctl |
---|
1583 | script_fair_model_check.simple foo.fair foo.ctl |
---|
1584 | script_lang_empty_check.simple foo.fair |
---|
1585 | |
---|
1586 | script_generic.robust |
---|
1587 | script_compute_reach.robust |
---|
1588 | script_model_check.robust foo.ctl |
---|
1589 | script_fair_model_check.robust foo.fair foo.ctl |
---|
1590 | script_lang_empty_check.robust foo.fair |
---|
1591 | |
---|
1592 | In all cases, "script_generic" is a preample to the other scripts. |
---|
1593 | Generally, we recommend trying a "simple" script first, since it |
---|
1594 | should be the fastest. |
---|
1595 | |
---|
1596 | * Using "xsimv" |
---|
1597 | |
---|
1598 | Before invoking xsimv, please modify the first line of the file |
---|
1599 | "xsimv" and put the complete path name for "expectk". |
---|
1600 | |
---|
1601 | xsimv is invoked by the command |
---|
1602 | |
---|
1603 | xsimv <sim-file> |
---|
1604 | |
---|
1605 | where <sim-file> is a file produced by the vis command |
---|
1606 | |
---|
1607 | simulate -n <num> -o <sim-file> |
---|
1608 | |
---|
1609 | When xsimv executes, it comes up with a window with 4 buttons in it, |
---|
1610 | GO, ReDraw, Save and Quit. At the same time it produces a file, |
---|
1611 | "strk.simv", with the signal names in it. For example |
---|
1612 | |
---|
1613 | sensor.rand_choice |
---|
1614 | timer.rand_choice |
---|
1615 | car_present |
---|
1616 | farm_light |
---|
1617 | hwy_light |
---|
1618 | timer.state |
---|
1619 | |
---|
1620 | If only a subset of these names are required the user can edit this |
---|
1621 | file and comment out a line using "#". For example, |
---|
1622 | |
---|
1623 | #sensor.rand_choice |
---|
1624 | #timer.rand_choice |
---|
1625 | car_present |
---|
1626 | farm_light |
---|
1627 | hwy_light |
---|
1628 | timer.state |
---|
1629 | |
---|
1630 | will cause the first two signals' simulation to be not displayed. |
---|
1631 | |
---|
1632 | Pushing GO or ReDraw then produces a new window with the simulation |
---|
1633 | results shown where time increases from left to right. The signal |
---|
1634 | value names not commented out are shown vertically, one for each |
---|
1635 | row. The "edit strk.simv" and REDRAW sequence can be iterated. |
---|
1636 | |
---|
1637 | Version 1.0 |
---|
1638 | |
---|
1639 | * Initial release |
---|