Translating concurrent communicating programs into asynchronous circuits

As VLSI technology improves, the number of devices that can be built on a chip, and the speed of those devices continue to increase. These improvements allow much more complicated systems to be considered than were possible a short time ago. Along with these improvements, however, come many challenges directly associated with the speed and scale of the new circuits. This thesis presents a method for taming the complexity of large and fast VLSI systems. As chips get larger, and delays in signal propagation even inside a single chip become more significant, systems that are designed around a global synchronizing signal such as a clock become more difficult to design. One alternative is to design the system hierarchically as a set of subsystems each operating at its own rate and cooperating through communication. These subsystems can be built using asynchronous or self-timed circuit techniques which allow the circuits to run at their own speed without synchronizing to a global clock signal. The act of communicating synchronizes the processes involved in the communication and allows data to be shared between processes. Another problem of large systems is related to the very complexity of the system. One method for taming this complexity is to use automatic methods for generating circuits from behavioral descriptions. Such a system is usually called a silicon compiler. This allows the designer to abstract away details of the low-level circuits and think of system behavior in terms of high level programs. Because the generated circuits faithfully mimic the behavior of the program, the resulting circuits are correct by construction. In order to design efficient systems in this way there must be a way for the programmer to reason about the resulting circuit based on the program text. The translation process must be sufficiently transparent to give the programmer some idea of how different program alternatives will affect the compiled circuit. Combining these ideas, I present a method for designing a VLSI system as a concurrent program written in a subset of OCCAM and automatically translating that system description into an asynchronous circuit. The translation procedure is syntax-directed, and the resulting circuits are improved using correctness-preserving circuit-to-circuit transformations. A compiler has been constructed that automatically performs the translation and transformation.