Hardware Compilation Reference Material

The process of compiling a design into hardware is quite a bit different from that of compiling into software (assembly language). You're not going to have to build a hardware compiler in this course, but you are going to hear a bit about how they work....

C-to-Gates compiler (C source code)
This is a dumb little compiler transating a tiny C-like language into a gate-level circuit design.
Enhanced Version Of C-to-Gates compiler, CGI Interface
Here's a CGI interface allowing folks to play with the above tool.
An overview of Quine-McCluskey logic simplification
A nice little draft document I found on the WWW....
Bryant's Graph-Based Algorithms for Boolean Function Manipulation (PDF)
This is a (locally cached) updated copy of Bryant's 1986 paper on BDDs.
Karplus' Representing Boolean Functions with If-Then-Else DAGs (PDF)
This is a (locally cached) copy of Karplus' 1988 paper, which beside presenting a new BDD form, also suggests a better algorithm to normalize BDDs.
BitC Compiler, CGI Interface
Here's a CGI interface allowing folks to play with the the BitC Compiler, bitcc, which is used to compile code for execution on Kentucky-architecture nanocontrollers. The first step in this is constructing an optimized gate-level logic formulation using only 1-of-2 muliplexors... with is done (in part) using Karplus' algorithm to create normal form representations. The compiler output here normally goes through a serialization process, but is still essentially a parallel circuit design at the stage shown here.
BitC Compiler, Some Source Code
Here are a few key parts of the bitcc compiler source code: main.c, parser.c, ite.c, val.c
Quine-McClusky Algorithm, Interactive Demo
Well what do you know... I'm not the only person making WWW page demos for class material after all! This is an excellent little javascript implementation of Quine-McClusky simplification of a logic formula. This one was created by Prof. Dr. Thorsten Thormählen at Philipps-Universität Marburg.
PyEDA/Espresso
For minimizing two-level circuit designs that output multiple bits, Quine-MycClusky isn't sufficient. PyEDA does a pretty good job using the Espresso library.


EE480 Advanced Computer Architecture.