Design of Reversible Computing Systems Logic , Languages , and Circuits

Reversible computing spans computational models that are both forward and backward deterministic. These models have applications in program inversion and bidirectional computing, and are also interesting as a study of theoretical properties. The motivation for reversible computing comes, however, often from the fact that these models are information preserving. Landauer’s principle links information theory and thermodynamics; all information has some physical representation, so a loss of information must cause a thermodynamical entropy decrease, which then leads to heat dissipation to obey the law thermodynamics. A reversible computation does, thus, not have to use energy, though this is impossible to avoid in practice, due to the way computers are build. It is, however, not always obvious how to implement reversible computing systems. The restriction to avoid information loss, imposes new design criteria that need to be incorporated into the design; criteria that do not follow directly from conventional models. The result is that, today, many implementations is simple reversible embeddings of conventional solutions. This is not a desirable approach, because these simple embeddings always generate garbage, which then leads to erasure of information. In this thesis I investigate garbage-free reversible computing systems from abstract design to physical gate-level implementation. Arithmetic operations are a basis for many computing systems, so a proposed the design of a ripple-block carry adder and work towards a reversible circuit for general multiplication are important new circuits. Such arithmetic circuits have then been used in the design of two larger reversible computing systems. The first is a small von Neumann architecture, called Bob, that can execute programs written in a simple reversible two-address instruction set. A central part of the architecture is a novel design of a reversible arithmetic logic unit. The second system is an implementation of the linear cosine transform used in the H.264/ACV encoding standard. Designing reversible logic circuits on paper can become very complex, so I have designed two reversible functional hardware description languages that can simplify the implementation process. One language is a linear-typed higher-level language, while the other is a gate-level point-free combinator language. These two languages can be used in a garbage-free design flow, where circuits are described in the higherlevel language and then translated to the combinator language. From the gate-level language, methods of place-and-route of CMOS gates can be applied. To facilitate this last step, I have also made standard cell layouts of the reversible gates in complementary pass-gate CMOS logic and, as a test, these cells have been used to fabricate the ALU design. In total, this thesis has shown that it is possible to design non-trivial reversible computing systems without garbage and that support from languages (computer aided design) can make this process easier. However, there is often still a need to rethink both the problem and the solution to accommodate the no-garbage approach.