否定論理積(NAND)とは何か?ユニバーサルゲートの性質とデジタル回路設計の基礎

否定論理積(NAND)とは

否定論理積(NAND)は、「論理積(AND)の否定」を表す基本的な論理演算および論理ゲートです。2値論理(0/1)において、入力のすべてが1のときだけ出力が0になり、それ以外は出力が1になります。デジタル回路設計やブール代数で中心的な役割を果たし、「ユニバーサルゲート」として知られているため、NANDだけで任意の論理関数を構成できます。

基本定義と真理値表

2入力の否定論理積を A, B を入力、Y を出力とすると、論理式は次のように表されます:

  • Y = ¬(A ∧ B)
  • 記号的には Y = (A ∧ B)' または Y = !(A & B) などと表記されます。

真理値表:

ABA ∧ BNAND = ¬(A ∧ B)
0001
0101
1001
1110

記号と論理的性質

  • 可換律: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への変換)や遅延・ファンインの影響を踏まえて設計することが求められます。

参考文献