Standard CMOS logic
has sometimes the problem that it has an highly asymmetric
structure of the transistor
networks. Another problem is that for large logic functions
of the function when build in CMOS
gets too large.
A way to avoid this is using dynamic logic
. Contrary to the standard logic gates
, which are also referred to as static logic
, dymanic logic doesn't calculate the outcome of a changing input at once. It is clocked
and uses several clock ticks (in fact 2) to calculate the value of the function.
behind it is quite simple
: You put a capacity
or the gate
of a CMOS transistor) at the output of the function. In the first clock cycle
the capacity is carged with a VDD voltage
. At the second cycle
the capacity is decharged iff
the function evalutes to 0.
What's the benefit of this sheme ?
You can spare nearly an entire network of PMOS
transistors, thereby reducing fan-in and increase switching speed.
Lets have a look at a picture to make this clearer:
+-----------+ --- capacitor
| standard | ---
function | NMOS | |
inputs --| switching | ---
| network | VSS
| for the |
| function |
NPRECHARGE --| NMOS
The detailed working of the circuit
- NPRECHARGE is low (logical 0). The PMOS transistor turns on, the NMOS off.
The capacitor is charged by the current path to VDD. The output is at logical 1.
- NPRECHARGE is high (logical 1). The PMOS transistor turns off, the NMOS on.
The capacitor is decharged iff the NMOS switching network of the function opens a current path to VSS.
Therefore the capacitor (and the output) falls to VSS iff the function has the output 0.
So you trade the entire PMOS network of the function and with it half of the fan-in for the additional transitors and 2 clock cycles switching time. However, for large functions the fan-in and lots of transistors in series
of the function as a standard CMOS cell
would cause the same switching time as 2 clock cycles (or even longer).
The upper example is for deleting the PMOS network, but you can do this of course with the NMOS network, too. Just use NOT(PRECHARGE) for "charging" the transistor to 0.
Dynamic logic can cause some problems when used in a row, but you can get around these by using domino logic (just putting an inverter at the output) or different clocking schemes.