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 ISCAS circuits in the "examples" directory.


A BDD calculator file could be something like this ("test.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.    

