I have written for you a program that computes the set of reachable states of a sequential circuit, but it is not very good. The program will take the name of an input file containing the circuit and will print the total number of reachable states in that circuit, assuming the circuit starts with all registers zeroed. For this project, your task is to modify the program to use a better reachability iteration (as discussed in class) and (more importantly) to use a more efficient means to compute images.
To give you interesting data to work with, I'm providing a copy of the ISCAS 89 benchmarks. This is an industry-standard set of sequential benchmarks. The benchmarks have names like "s444.bench". You should run my program and your improved version on these benchmarks in order to (1) make sure your program doesn't have bugs (or that mine does!) and (2) see if your program is more efficient than my simple version.
As with the last assignment, you are unlikely to get your program to work on all of the benchmarks. Do what you can, and you should see your modified program run better than the one I'm giving you. As with the last assignment, please be considerate of other users on the machine, as BDDs can get VERY big, VERY quickly.
You will need to use the BDD and memory management packages from Project 1. In addition, you will need the program I wrote, which I'm giving to you as a tar file. (To unpack a tar file, mv the tar file into a new directory and type "tar -xvf project2.tar".) Feel free to use or modify as much of this code as you wish.