C-element

The Muller C-element (C-gate, hysteresis flip-flop, or sometimes coincident flip-flop, two-hand safety circuit) is a small digital block widely used in design of asynchronous circuits and systems. It has been specified formally in 1955 by David E. Muller and first used in ILLIAC II computer. In terms of the theory of lattices, the C-element is a semimodular distributive circuit, whose operation in time is described by a Hasse diagram. The C-element is closely related to the "rendezvous" and "join" elements, where an input is not allowed to change twice in succession. In some cases, when relations between delays are known, the C-element can be realized as a sum-of-product (SOP) circuit. Earlier techniques for implementing the C-element include Schmidt trigger, Eccles-Jordan flip-flop and last moving point flip-flop.
Truth table and delay assumptions.
For two input signals the C-element is defined by the equation formula_1, which corresponds to the following truth table:
This table can be turned into a circuit using the Karnaugh map. However, the obtained implementation is naive, since nothing is said about delay assumptions. To understand under what conditions the obtained circuit is workable, it is necessary to do additional analysis, which reveals that
Thus, the naive implementation is correct "only" for slow environment.
The definition of C-element can be easily generalized for multiple-valued logic or even for continuous signals:
For example, the truth table for a balanced ternary C-element with two inputs is
Implementations of the C-element.
Depending on the requirements to the switching speed and power consumption, the C-element can be realized as a coarse- or fine-grain circuit. Also, one should distinguish between single-output and differential realizations of C-element. Differential realization is possible using only NANDs (only NORs). A single-output realization is workable if and only if:
Gate-level implementations.
There is a number of different single-output circuits of C-element built on logic gates. In particular, the so-called Maevsky's implementation is a non-distributive circuit loosely based on. Non-distributivity is introduced sometimes to increase concurrency. The 3NAND gate in this circuit can be replaced by two 2NAND gates. The C-element using only two-input gates has been proposed by Tsirlin and then synthesized by Starodoubtsev et al. using Taxogram language This circuit coincides with that attributed (without reference) to Bartky and can operate without the input latch. Yet another version of the C-element built on two RS latches has been synthesized by Murphy using Petrify tool. However, this circuit includes inverter connected to one of the inputs. This inverter should have small delay. However, there are realizations of RS latches that already have one inverted input, for example. Some speed-independent approaches assume that zero-delay input inverters are available on all gates, which is a violation of true speed-independence but is fairly safe in practice. Other examples of using this assumption also exist.
Static and semistatic implementations.
In his report Muller proposed to realize C-element as a majority gate with feedback. However, to avoid hazards linked with skews of internal delays, the majority gate must have as small number of transistors as possible. Generally, C-elements with different timing assumptions can be built on AND-OR-Invert (AOI) or its dual, OR-AND-Invert (OAI) gate and inverter. Yet another option patented by Varshavsky et al.
 is to shunt the input signals when they are not equal each other. Being very simple, these realizations dissipate more power due to the short-circuits. Connecting an additional majority gate to the inverted output of C-element, we obtain "inclusive" OR (EDLINCOR) function: formula_3. Some simple asynchronous circuits like pulse distributors can be built solely on majority gates.
Semistatic C-element stores its previous state using two cross-coupled inverters, similar to an SRAM cell. One of the inverters is weaker than the rest of the circuit, so it can be overpowered by the pull-up and pull-down networks. If both inputs are 0, then the pull-up network changes the latch's state, and the C-element outputs a 0. If both inputs are 1, then the pull-down network changes the latch's state, making the C-element output a 1. Otherwise, the input of the latch is not connected to either formula_4 or ground, and so the weak inverter dominates and the latch outputs its previous state. There are also versions of semistatic C-element built on devices with negative differential resistance (NDR). NDR is usually defined for small signal, so it is difficult to expect that such a C-element will operate in full range of voltages or currents.
Generalizations and non-transistor implementations.
Since the majority gate is a particular case of threshold gate, any of known realizations of threshold gate can in principle be used for building a C-element. In the multiple-valued case, however, connecting the output of majority gate to one or several inputs may have no desirable effect. For example, using the ternary majority function defined as
does not lead to the ternary C-element specified by the truth table, if the sum formula_6 is not split into pairs. However, even without such a splitting two ternary majority functions are suitable for building a ternary inclusive OR gate.
Both the Maevsky and Tsirlin circuits are based actually on so-called David cell. Its fast transistor-level implementation is used in the semistatic C-element proposed. Yet another semistatic circuit using pass transistors (actually MUX 2:1) has been proposed.
Other technologies suitable for realizing asynchronous primitives including C-element, are: carbon nanotubes, single-electron tunneling devices, quantum dots, and molecular nanotechnology.