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.