否定論理積(NAND)とは何か?ユニバーサルゲートの性質とデジタル回路設計の基礎
否定論理積(NAND)とは
否定論理積(NAND)は、「論理積(AND)の否定」を表す基本的な論理演算および論理ゲートです。2値論理(0/1)において、入力のすべてが1のときだけ出力が0になり、それ以外は出力が1になります。デジタル回路設計やブール代数で中心的な役割を果たし、「ユニバーサルゲート」として知られているため、NANDだけで任意の論理関数を構成できます。
基本定義と真理値表
2入力の否定論理積を A, B を入力、Y を出力とすると、論理式は次のように表されます:
- Y = ¬(A ∧ B)
- 記号的には Y = (A ∧ B)' または Y = !(A & B) などと表記されます。
真理値表:
| A | B | A ∧ B | NAND = ¬(A ∧ B) |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
記号と論理的性質
- 可換律:NAND は入力順序に依存しません(NAND(A,B) = NAND(B,A))。
- 結合律は通常の形では成り立たないため、複数入力のNANDを扱うときは括弧で評価順を明確にします。ただし、複数入力のNANDゲート自体(3入力、4入力など)は実装可能です。
- ド・モルガンの法則(De Morgan)により、NAND は OR と NOT の組合せと関係します:¬(A ∧ B) = ¬A ∨ ¬B。
ユニバーサル性(NANDのみで実装可能)
NANDゲートはユニバーサルであり、NANDゲートのみで任意のブール関数を構築できます。代表的な構成法:
- NOT A = NAND(A, A)
- A AND B = NOT(NAND(A, B)) = NAND(NAND(A,B), NAND(A,B))
- A OR B = NAND(NAND(A,A), NAND(B,B)) (ド・モルガンの応用)
これらの変換により、AND、OR、NOTを含む任意の論理回路をNANDだけで置き換えられます。実際の集積回路設計や理論的証明で重要な性質です。
ハードウェア実装(CMOSトランジスタレベル)
2入力CMOS NANDゲートの標準実装は次のようになります:
- pMOSトランジスタ2個を並列(プルアップ側)、nMOSトランジスタ2個を直列(プルダウン側)に配置。
- 入力が両方とも1のとき、直列のnMOSがONになり出力は0に引き下げられる。どちらか一方が0のときは、少なくとも一つのpMOSがONして出力は1にプルアップされる。
- 2入力のCMOS NANDは概ねトランジスタ4個(pMOS2、nMOS2)で実現されます(単純化した標準セルの場合)。
この配置はNORとは逆で、NORではpMOSが直列、nMOSが並列になります。トランジスタ数や配列はファンイン(入力数)によって増えます。
TTLや集積回路の例
歴史的には、TTL(トランジスタ・トランジスタ・ロジック)実装の2入力NANDは非常に一般的で、LSIパッケージとして「74xx00」シリーズ(例:7400 は4回路の2入力NAND)などが存在します。CMOSの時代でも NAND は標準セルライブラリに必ず含まれる基本ゲートです。
実用的応用例
- 基本的な論理回路の構築(加算器、マルチプレクサ、デコーダなど):NANDのみでこれらを合成可能。
- 順序回路:フリップフロップ(RS, D, JKなど)の素子やラッチはNANDゲートの組合わせで実装できる。
- 記憶素子:NANDゲートを使ったSRラッチは基本的な1ビットメモリを構成する。
- NANDフラッシュ:名前はNANDゲートそのものとは異なるが、フラッシュメモリのセル配列が直列接続を多用するため“NAND”と呼ばれる。構造や動作は論理ゲートとは異なるが、歴史的・構造的な関連性がある。
- 論理最適化・合成:EDAツールはブール式をNANDを基本に最適化する場合があり、特にセルベース設計ではコストや遅延を基準にNANDを多用する。
設計上の注意点
- 遅延(伝播遅延):NANDの伝播遅延はゲート数やトランジスタの負荷に依存します。ゲート深さを減らすことはタイミング改善につながる。
- ファンインとファンアウト:入力数(ファンイン)を増やすとトランジスタの寄生容量が増え、遅延や消費電力に影響する。複数入力のNANDは論理的には便利だが、性能トレードオフがある。
- スイッチングノイズとハザード:組合せ回路で異なる経路の遅延差により一時的に不正なパルス(静的ハザード)が出ることがある。適切な設計やデバウンス、同期設計が必要。
- 電源・電圧依存性:CMOSではしきい値電圧やプロセス変動で論理閾値が変わるため、ノイズマージンを考慮すること。
論理設計での利用(Verilogなど)
HDL(ハードウェア記述言語)では NAND を直接記述したり、AND と NOT の組合せで表現することができます。例(Verilog):
- 基本のassignを使う場合:
assign y = ~(a & b); - 組み込みゲートを使う場合:
nand(y, a, b);
論理合成ツールは高位の記述から最適なゲートネットリスト(時にはNANDベース)を自動生成します。
NANDを使った代表的な回路の例
- NOT(インバータ):A を2入力のNANDの両入力に入れるだけで得られます。
- SRラッチ:2つのクロス結合したNANDでセット・リセット動作を実現します(アクティブLOW の S̅/R̅ 入力を持つ構成が一般的)。
- XORの実装:NANDだけを用いても実装可能(回路はやや複雑)で、論理合成でよく用いられます。
まとめ
否定論理積(NAND)はデジタル論理の基礎で、ブール代数、回路設計、ICライブラリ、メモリ技術に至るまで広範に関わる重要な素子です。ユニバーサルゲートとしての性質、CMOSでの効率的な実装、そして歴史的にTTLやCMOSの標準セルとしての普及により、実務でも理論でもNANDの理解は不可欠です。論理合成や回路最適化では、NAND特有の変換(NOTやORへの変換)や遅延・ファンインの影響を踏まえて設計することが求められます。
参考文献
- Wikipedia: 否定論理積 (NAND)(日本語)
- Wikipedia: NAND logic(英語)
- Wikipedia: De Morgan's laws(英語)
- Wikipedia: CMOS(英語)
- Wikipedia: NAND flash(英語)
- Wikipedia: 7400シリーズ(英語) — TTL ロジックICの例
- M. Morris Mano, "Digital Design"(教科書、概説)


