# C-element

Delays in the naïve (Earle latch based) implementation and environment
Timing diagram of a C-element and inclusive OR gate
Majority gate realization of C-element and inclusive OR gate (a); Realizations proposed by Maevsky (b), Starodoubtsev (c) and Murphy (d)
Static implementations of two- and three input C-element [1][2][3]
Semi-static implementations of two- and multiple input C-element [3] based on the ideas from.[4][5][6] For a faster version see.[7]
David cell (a) and its fast implementations: gate-level (b) and transistor-level (c) [8]

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 [9] and first used in ILLIAC II computer.[10] 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.[11][12][13] The C-element is closely related to the Rendezvous [14] and Join [15] elements, where an input is not allowed to change twice in succession. For asynchronous circuits, where relations between some delays are known in advance, the requirements for C-element can be less stiff.[16] Earlier techniques for implementing the C-element [17][18] include Schmidt trigger,[19] 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 ${\displaystyle y_{n}=x_{1}x_{2}+(x_{1}+x_{2})y_{n-1}}$, which corresponds to the following truth table:

${\displaystyle x_{1}}$ ${\displaystyle x_{2}}$ ${\displaystyle y_{n}}$
0 0 0
0 1 ${\displaystyle y_{n-1}}$
1 0 ${\displaystyle y_{n-1}}$
1 1 1

This table can be turned into a circuit using the Karnaugh map. However, the obtained implementation is naïve, 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

• delay1 is a propagation delay from node 1 via environment to node 3
• delay2 is a propagation delay from node 1 via internal feedback to node 3
• delay1 must be greater than delay2

Thus, the naïve implementation is correct only for slow environment.[20]

Note that the definition of C-element can be easily generalized for multiple-valued logic or even for continuous signals ${\displaystyle {\text{ if }}x_{1}=x_{2}=...=x_{m}{\text{ then }}y_{n}=any(x_{1},x_{2},...,x_{m}){\text{ else }}y_{n}=y_{n-1}}$. For example, the truth table for a balanced ternary C-element with two inputs is

${\displaystyle x_{1}}$ ${\displaystyle x_{2}}$ ${\displaystyle y_{n}}$
-1 -1 -1
-1 0 ${\displaystyle y_{n-1}}$
-1 1 ${\displaystyle y_{n-1}}$
0 -1 ${\displaystyle y_{n-1}}$
0 0 0
0 1 ${\displaystyle y_{n-1}}$
1 -1 ${\displaystyle y_{n-1}}$
1 0 ${\displaystyle y_{n-1}}$
1 1 1

## 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.

### Gate-level implementations

A C-element can be built using only NAND, NOR and inverter gates. Many different implementations have been proposed.[21][22][23][24][25] The so-called Maevsky's implementation [26][27][28] is a speed-independent (internally non-distributive) circuit loosely based on Varshavsky et al.,[29] which in turn, is an improved version of.[30] The 3NAND gate in this circuit can be safely replaced by two 2NAND gates. Note that sometimes it is advisable to introduce non-distributivity to increase concurrency. The C-element synthesized by Starodoubtsev et al. using Taxogram language is presented in.[31] This circuit coincides with that attributed (without reference) to Bartky in [26] and can operate without the input latch. The approach proposed in [31] is valuable by that the synthesis is done using 2NAND and 2NOR gates only. Yet another version of the C-element built on two RS latches has been synthesized by Murphy [32] using Petrify tool.

### Static and semi-static implementations

In his report [9] Muller proposed to realize C-element as a majority gate with feedback. However, to alleviate hazards, which are linked with skews of internal delays, the majority gate must have as small number of transistors as possible.[33][34] Generally, C-elements with different timing assumptions [35] can be built on AND-OR-Invert (AOI) [36][37] or its dual, OR-AND-Invert (OAI) gate [38][39] and inverter.

Note that connecting an additional majority gate to the inverted output of C-element, we obtain inclusive OR (EDLINCOR) function:[40][41] ${\displaystyle z_{n}=x_{1}x_{2}+(x_{1}+x_{2}){\overline {y_{n}}}}$. Note also that some simple asynchronous circuits like pulse distributors [42] can be built solely on majority gates.

Since the majority gate is a particular case of threshold gate, any of known realizations of threshold gate [43] 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:[44]

${\displaystyle y=\left\{{\begin{matrix}+1{\text{ if }}x_{1}+x_{2}+x_{3}\geqslant +1;\\0{\text{ if }}x_{1}+x_{2}+x_{3}=0;\\-1{\text{ if }}x_{1}+x_{2}+x_{3}\leqslant -1;\end{matrix}}\right.}$

does not lead to the ternary C-element specified by the truth table, if the sum ${\displaystyle x_{1}+x_{2}+x_{3}}$ is not split into pairs. However, even without such a splitting two ternary majority functions are suitable for building a ternary inclusive OR gate.

Semi-static 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 ${\displaystyle V_{dd}}$ or ground, and so the weak inverter dominates and the latch outputs its previous state.

Note that both the Maevsky and Starodoubtsev circuits are based actually on so-called David cell.[45] Its fast transistor-level implementation is used in the semi-static C-element proposed in.[46] Yet another semi-static circuit using pass transistors has been proposed in.[47]

There are also versions of semi-static C-element built on devices with negative differential resistance (NDR).[48][49] It should be noted however, that 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.

Other modern technologies suitable for realizing asynchronous primitives including C-element, are carbon nanotubes,[50] single electron tunneling devices,[51] quantum dots [52] and molecular nanotechnology.[53]