99 lines
3.3 KiB
Text
99 lines
3.3 KiB
Text
A PRIMITIVE BDD CALCULATOR
|
|
--------------------------
|
|
|
|
This is a small program that parses commands for a BDD calculator. The
|
|
input file contains the definition of the basic BDD variables (inputs)
|
|
and a sequence of actions - typically assignments. The calculator can
|
|
be used for verification of combinatorial circuits (tautology check),
|
|
such as some of the ISCAS85 circuits in the "examples" directory. These
|
|
ISCAS85 have been modified by another program before they where added to
|
|
the BuDDy examples, so please do not compare the runtime results to other
|
|
test runs.
|
|
|
|
|
|
A BDD calculator file could be something like this ("example.cal"):
|
|
|
|
initial 100 100;
|
|
|
|
inputs
|
|
a b c;
|
|
|
|
actions
|
|
t1 = (a | b) & c;
|
|
t2 = (a & c) | (b & c);
|
|
t3 = t1 <> t2;
|
|
tautology t3; /* Verify that (a | b) & c == (a & c) | (b & c) */
|
|
|
|
|
|
Where the blocks are like this:
|
|
|
|
initial n c
|
|
-----------
|
|
Initialize the BDD package using 'n' bddnodes and 'c' elements in
|
|
the caches. This part is mandatory.
|
|
|
|
|
|
inputs id-seq
|
|
-------------
|
|
Define all identifiers in the sequence 'id-seq' to be primary
|
|
inputs. This also corresponds to the initial BDD variable ordering,
|
|
starting with the first identifier in the top.
|
|
|
|
|
|
outputs id-seq
|
|
--------------
|
|
Define all identifiers in the sequence 'id-seq' to be primary
|
|
outputs. The sequence is space separated.
|
|
|
|
|
|
actions act-seq
|
|
---------------
|
|
A list of all the calculations and more. This list is traversed and
|
|
interpreted in the same order as written in the file. An action can
|
|
be one of the following:
|
|
|
|
Assignments: "id = expression"
|
|
Calculate the right-hand side and assign the value to the
|
|
left-hand identifier. The expression may contain:
|
|
|
|
+ identifiers : A previously defined identifier
|
|
+ true : The constant true BDD
|
|
+ false : The constant false BDD
|
|
+ ( ... ) : Parenteses
|
|
+ E1 & E2 : Conjunction of two sub-expressions
|
|
+ E1 | E2 : Disjunction of two sub-expressions
|
|
+ E1 ^ E2 : Xor
|
|
+ E1 => E2 : Implication
|
|
+ E1 <> E2 : Biimplication
|
|
+ ~E : Negation
|
|
+ exist V.E :
|
|
+ forall V. E : Existential/Universal quantification of the
|
|
variables V in the expression E. V is a space
|
|
separated list of input names.
|
|
|
|
|
|
Tautology check: "tautology id"
|
|
Check the variable 'id' for tautology (being equal to the constant
|
|
true BDD).
|
|
|
|
Size information: "size id"
|
|
Print the number of distinct BDD nodes used to represent 'id'.
|
|
|
|
Dump as a dot file: "dot "filename" id"
|
|
Dump the BDD representing 'id' as commands to the graph drawing
|
|
program Dot. The commands are written to the file 'filename'.
|
|
|
|
Reordering: "reorder mtd"
|
|
Do a dynamic variable reordering now using the method 'mtd'. The
|
|
argument 'mtd' may be either: win2, win2ite or sift.
|
|
|
|
Automatic reordering: "autoreorder times mtd"
|
|
Enable automatic dynamic variable reordering using the method
|
|
'mtd'. The argument 'mtd' may be either: win2, win2ite, sift or
|
|
none. Use none to disable automatic reordering. The 'times'
|
|
argument supplies the number of times that reordering may be
|
|
done. Use for example 1 if you only want a "one-shot" reordering.
|
|
|
|
Cache statistics: "cache"
|
|
Print various cache statistics for the BDD kernel.
|
|
|