Hello, and welcome to a series describing some of the more simple ideas of my PhD research, based on designing asynchronous circuits using concepts, an abstract language used to describe behaviours of specifications at signal, gate and protocol levels.

Simply put, concepts are a textual form of describing relationships between signal transitions in a system.  They are compositional and thus, several concepts can be composed to produce a new concept, which can then be composed with other concepts and so on.

Concepts can be used to describe smaller aspects of a system, such as causal relationships, initial states and quiescent transitions. However, due to their compositionality, they can be composed, and then used to describe logic gates or protocols and the transitions which occur within these. This removes the need to describe the signal interactions of gates and protocols, which can be lengthy, and a gate or protocol can simply be referred to by it’s name and the signals it uses.

This series will be used to discuss the design of logic gates using concepts.  Concepts are described using various operators which have been defined in a Haskell program, which serves as the backend for this method.  Any operators we meet in during this series will be described.

A tool to translate concepts to STGs is available from https://github.com/tuura/concepts. This uses an algorithm to translate concepts, which will be explained in this series of posts. Instruction on how to use the tool and examples of concept specifications can be found here. All concepts displayed in this series is can be used with the tool, and are directly translatable to an STG. Note that in this series, we use a+ and a- for better readability and closer correspondence with STGs. In Haskell we cannot have postfix operators a+ and a-, and therefore the rising and falling transitions are denoted by rise a and fall a instead.

A graphical front end, Workcraft, is used for viewing Signal Transition Graphs (STGs) translated from concepts using the concepts tool, which is integrated to Workcraft, along with many other tools which work with STG specifications in order to verify and synthesize, such as Petrify and Mpsat.

The following posts in this series will begin by describing some simple gates, explaining how concepts are used to describe them. Then, how these are translated to produce an STG will be explained. Some other basic ideas of concepts and the translation process will also be explained, for example, how initial states are applied.

Following the basics, some more complex gates will be described, as well as how to make the descriptions of these gates simpler. This will all start with the following post: Concepts I: A buffer.