Withnails
writeup is correct, but one very important problem of CMOS is not mentioned:
PMOS transistors turn on if there is a
positive voltage difference between
source and
gate at a certain level and
NMOS turn on if the difference is
negative. This implies that
PMOS transitors are only good swichtes when using
VDD as
source and
NMOS are only good switches for
VSS - if e.g.
PMOS is used with
VSS it uses the other
pin as reference. However, this
voltage on this pin is pulled down and when it has reached a certain level > 0, the transistor turns off. So the output is not pulled down at
VSS but a slightly higher level. If you put several such transistors in a row (connecting the output to the gate of the next transistor) you would get totally screwed up voltage levels.
Therefore PMOS are usually used as switches to VDD and NMOS to VSS.
This gives most basic gates an "inverting" character: You can only get a logical 1 output with logical 0s at the gates of the PMOS transistors and a logical 0 is produced by logical 1s at NMOS transistors. It is not possible to build an AND or an OR by just on stage of transistors, you must always put some in a row or use inverters.
Another effect is that some standard logic gates become very asymmetric. Let's take an NOR as an example:
___ VDD
|
+------------| PMOS transistor
| |
| +----| PMOS transistor
in B -+ | |
| | +------------------- out
| in A -+ |
| | +--+---+
| | | |
| +-| +-| 2 NMOS transistors
| | | |
| --- | ---
| VSS | VSS
+--------------+
This would be a standard
implementation of a NOR2, it computes out = not(A or B).
The path from VDD to out has 2 transistors in
series, the path from VSS to out 2 transistors in
parallel. As you might expect, switching out from logic 1 to 0 would be faster than switching from 0 to 1. (same speed PMOS and NMOS transistors assumed). For a NOR2 this would be not problematic, but imagine larger gates like a NOR100 !. The are several tricks to get around this, e.g.
dynamic logic.
Electrical engineers would point out that the upper explanation is not 100 percent correct, but I find this one easiest to understand. The effect of bad switch against VDD/VSS can also be explained by lots of calculation with equations describing the behavoir of a transistor.