In recent years, research in the domain of reversible circuit design has attracted
significant attention leading to many different approaches e.g. for
synthesis, optimization, simulation, verification, and test.
However, most of the resulting tools are not publicly available.
This often makes the development of new methods harder since e.g. previous approaches are not available for comparison.
Furthermore, approaches have to be re-implemented from scratch in order to modify or improve them and
the lack of tools for reversible hardware design makes it hard for beginners to get involved in the topic.
RevKit tries to address this issue. RevKit is an open source toolkit for reversible circuit designs,
which aims to make recent developments in the domain of reversible circuit design
accessible to other researchers and interested people.
RevKit is a modular and extendable framework which
already provides a significant number of approaches and algorithms, but also
easily enables the addition of new methods and tools. In this sense,
RevKit addresses users who simply want to apply the framework and its tools
as well as developers who actively want to develop further methods on top of the framework.
Besides basic functionality (like data-structures, parsers, export functions, etc.), so far RevKit include the following approaches:
- A transformation-based method inspired by the concepts of [MMD:2003]
- The BDD-based synthesis method as introduced in [WD:2009]
- The KFDD-based synthesis method as introduced in [SWD:2010]
- The heuristic synthesis with output permutation method as introduced in [WGDD:2009]
- The ESOP-based synthesis method inspired by the concepts of [FTR:2007]
- The exact synthesis method as introduced in [GWDD:2009]
- A RM Spectra-based synthesis algorithm inspired by the concepts of [MDM:2007]
- A transposition-based synthesis algorithm
- The window optimization method as introduced in [SWDD:2010]
- The circuit line reduction method as introduced in [WSD:2010]
- The adding lines optimization method as introduced in [MWD:2010]
- The SAT-based equivalence checker as introduced in [WGMD:2009]
- A naive method to embed irreversible functions into reversible ones (needed e.g. to synthesize irreversible functions using the transformation-based method)
- A simple simulation engine (for reversible circuits working on Boolean values)
- A simple decomposition method that maps a given reversible circuit (composed of Toffoli, Fredkin, and Peres gates) to its equivalent quantum circuit (composed of NOT, CNOT, V, and V+ gates) inspired by the concepts of [BBC+:95] and [MD:2003].
- Support of hierarchical circuitry (i.e. modules, flattening of circuits, etc.), sequential circuits, annotations, and more.
- Visualization of circuits.
All these tools and algorithms are written in C++ and directly accessible by an API.
That is, they can be used in other C++ programs.
Furthermore, to enable command line usage, all functions are also exposed as a Python library. As a result, RevKit can be applied either from a users' perspective as well as from a developers' perspective.