MOS-FET をスイッチとして使えるなら、MOS-FET を組み合わせれば論理回路を作れます。 これが CMOS (Complementary Metal-Oxide-Semiconductor) です。
現代のデジタル IC の大半は CMOS でできています。 マイコンも、メモリも、74HC シリーズのロジック IC も、だいたい CMOS です。 人類、N-MOS と P-MOS を大量に並べて文明を維持している。
この記事では、CMOS の最小単位であるインバータから、NAND / NOR、消費電力、電子工作での使いどころまで見ます。
N-MOS と P-MOS
N チャネル MOS-FET と P チャネル MOS-FET は、ON になる条件が逆です。
| 素子 | ON になる条件 | よく使う位置 |
|---|---|---|
| N-MOS | ゲートがソースより高い | GND 側 |
| P-MOS | ゲートがソースより低い | VDD 側 |
N-MOS は 0 に引き下げるのが得意です。 P-MOS は 1 に引き上げるのが得意です。
この得意分野を組み合わせると、「入力が 0 なら出力を 1 にする」「入力が 1 なら出力を 0 にする」という回路が作れます。
CMOS インバータ
CMOS の基本はインバータです。
VDD
|
P-MOS
|
+---- OUT
|
N-MOS
|
GND
IN は P-MOS と N-MOS のゲートへ入れる
入力が Low のとき、P-MOS は ON、N-MOS は OFF です。 出力は VDD に引き上げられます。
入力が High のとき、P-MOS は OFF、N-MOS は ON です。 出力は GND に引き下げられます。
| 入力 | P-MOS | N-MOS | 出力 |
|---|---|---|---|
| 0 | ON | OFF | 1 |
| 1 | OFF | ON | 0 |
とてもきれいです。 入力が 0 か 1 に決まっている限り、VDD から GND へ直流電流が流れ続ける経路がありません。 ここが CMOS の強さです。
なぜ消費電力が小さいのか
CMOS は静止状態ではほとんど電流を流しません。 Low 出力のときは N-MOS が出力を GND に接続しますが、P-MOS は OFF です。 High 出力のときは P-MOS が出力を VDD に接続しますが、N-MOS は OFF です。
したがって理想的には、状態が変わらない限り電力を消費しません。
実際の CMOS では、次の 3 つで電力を消費します。
| 種類 | 原因 |
|---|---|
| 動的消費電力 | 配線容量やゲート容量の充放電 |
| 短絡電流 | 遷移中に P-MOS と N-MOS が一瞬同時に ON する |
| リーク電流 | OFF の MOS-FET から少し漏れる |
動的消費電力はだいたい次の形になります。
は信号が反転する割合、 は容量、 は電源電圧、 は周波数です。
電圧の 2 乗で効くので、CPU の電圧を下げると消費電力が下がります。 その代わり速度が落ちます。 クロック、電圧、発熱、性能のいつもの地獄です。
NAND と NOR
CMOS では、P-MOS のネットワークで出力を VDD に引き上げ、N-MOS のネットワークで出力を GND に引き下げます。 この 2 つは相補的な形になります。
NAND
NAND は、入力が両方 1 のときだけ出力 0 です。
VDD
|---- P-MOS(A) ----|
| +---- OUT
|---- P-MOS(B) ----|
|
N-MOS(A)
|
N-MOS(B)
|
GND
N-MOS は直列です。 A と B が両方 High のときだけ、GND まで道がつながります。
P-MOS は並列です。 A か B のどちらかが Low なら、VDD まで道がつながります。
| A | B | OUT |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
NOR
NOR は、入力が両方 0 のときだけ出力 1 です。
VDD
|
P-MOS(A)
|
P-MOS(B)
|
+---- OUT
|
|---- N-MOS(A) ----|
| |
|---- N-MOS(B) ----|
|
GND
N-MOS は並列です。 A か B のどちらかが High なら、GND まで道がつながります。
P-MOS は直列です。 A と B が両方 Low のときだけ、VDD まで道がつながります。
| A | B | OUT |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
NAND がよく使われる理由
CMOS では、一般に N-MOS のほうが P-MOS より強いです。 同じサイズなら N-MOS のほうが ON 抵抗が低くなりやすいです。
NOR では P-MOS が直列になります。 出力を High にする経路が弱くなるので、遅くなりがちです。
NAND では N-MOS が直列、P-MOS が並列です。 こちらのほうが扱いやすいので、論理回路では NAND がよく使われます。
もちろん実際の標準セルではトランジスタサイズを調整します。 ただ、NAND は作りやすい、NOR はちょっと重い、という感覚は持っておくと読みやすいです。
入力を浮かせてはいけない
CMOS 入力は MOS-FET のゲートなので、入力インピーダンスが非常に高いです。 つまり、何もつながないと電圧が決まりません。
入力が中間電位になると、P-MOS と N-MOS が同時に少し ON します。 その結果、VDD から GND へ短絡電流が流れます。
74HC シリーズの入力を未接続にしてはいけない理由がこれです。 使わない入力は VDD または GND に固定します。
スイッチ入力では、プルアップ抵抗かプルダウン抵抗を入れます。
VDD
|
R
|
+---- CMOS input
|
SW
|
GND
この回路では、スイッチを押していないと入力は High、押すと Low になります。 マイコンの内部プルアップを使うのも同じ考え方です。
74HC と 74HCT
電子工作では 74HC シリーズと 74HCT シリーズをよく使います。
| 系列 | 入力しきい値の雰囲気 | 使いどころ |
|---|---|---|
| 74HC | CMOS レベル。だいたい電源電圧に比例する | CMOS 同士、マイコン同士 |
| 74HCT | TTL レベル入力 | 5 V TTL 出力を CMOS に入れたいとき |
5 V 電源の 74HC に 3.3 V マイコンの High を入れると、しきい値に余裕がない場合があります。 その場合は 74HCT を使う、電源を 3.3 V にする、レベル変換を入れる、などを考えます。
このへんは部品ごとのデータシートを見ます。 ロジック IC は型番の接尾辞で地味に性格が変わるので、油断するとやられます。
オープンドレイン
CMOS 出力は普通、High も Low も能動的に出します。 これをプッシュプル出力と呼びます。
一方、Low だけを出して High は抵抗で引き上げる出力があります。 これがオープンドレインです。
VDD
|
R pull-up
|
+---- OUT
|
N-MOS
|
GND
複数の出力を同じ線につないでも、誰かが Low を出せば線は Low になります。 I2C がこの方式です。
ただし、High への立ち上がりはプルアップ抵抗と配線容量で決まるので遅いです。 通信速度を上げるとプルアップ抵抗の値が効いてきます。
CMOS をディスクリートで作る意味
インバータや NAND を MOS-FET 単体で組むことはできます。 ただし、実用的なデジタル回路をディスクリート MOS-FET で大量に作るのはあまりおすすめしません。
理由は単純で、74HC シリーズを買ったほうが速い、安い、小さい、安定するからです。
それでも一度ディスクリートで組むと、IC の中で何が起きているかが見えるようになります。 入力を浮かせると電流が増える、立ち上がりが遅いと貫通電流が増える、負荷容量で波形が丸くなる、という話が急に実感を持ちます。
理解のための工作としてはかなり良いです。 ロマンと教育効果の両立。
まとめ
CMOS は N-MOS と P-MOS を相補的に組み合わせた論理回路です。
- N-MOS は Low に引き下げる
- P-MOS は High に引き上げる
- 静止状態ではほとんど電流を流さない
- 入力を浮かせてはいけない
- NAND / NOR は P-MOS と N-MOS の直列・並列の入れ替えで作れる
- 74HC / 74HCT の入力レベルはちゃんと見る
MOS-FET 単体のスイッチが分かると、CMOS の論理回路もかなり見通しがよくなります。 次は、状態を持つ回路であるフリップフロップを見ます。