NAND演算の基礎から実務応用まで:定義・真理値表・機能的完全性・CMOS/TTL実装とNANDフラッシュの関係

はじめに

「NAND(ナンド)演算子」はデジタル論理の基本中の基本であり、論理回路・集積回路・プログラミングなど幅広い分野で重要な役割を持ちます。本コラムでは、NANDの定義と真理値表、論理的性質(機能的完全性)、NANDだけで他の演算を構成する方法、トランジスタレベルでの実装(CMOS・TTL)、実務上の利点・欠点、応用例(特にNANDフラッシュとの関係)までを詳しく解説します。

NANDとは何か ― 定義と真理値表

NAND演算は論理積(AND)の否定を表す演算子で、記号としては「NAND」「⊼(Unicode)」や「↑(up-arrow)」「Sheffer stroke(|)」などが使われます。2入力NANDの真理値表は次の通りです。

  • A=0, B=0 → A NAND B = 1
  • A=0, B=1 → A NAND B = 1
  • A=1, B=0 → A NAND B = 1
  • A=1, B=1 → A NAND B = 0

論理式で表すと、A NAND B = ¬(A ∧ B) です。

重要な性質:機能的完全性(全域性)

NANDは「機能的に完全(functionally complete)」です。つまり、NANDだけを組み合わせて任意のブール関数を構成できます。理由は簡単です。まずNOTがNANDで作れること、さらにANDもNANDだけで作れることから、ANDとNOTの組み合わせで任意の論理回路を表現できるためです。

基本的な構成例:

  • NOT A = A NAND A = ¬A
  • A AND B = (A NAND B) NAND (A NAND B) = ¬(¬(A∧B)) = A∧B
  • A OR B = (A NAND A) NAND (B NAND B) = ¬(¬A ∧ ¬B) = A ∨ B(ド・モルガンの定理を利用)

さらにXORやその他の複雑な論理もNANDのみで構成可能です。例:A XOR B = (A NAND B) NAND ((A NAND A) NAND (B NAND B))。

トランジスタレベルでの実装(CMOSとTTL)

実際のICではNANDは重要な基本ゲートとして実装されます。代表的な実装例は以下の通りです。

  • CMOS(静的CMOS)の2入力NAND:プルアップに2つのPMOSを並列に配置、プルダウンに2つのNMOSを直列に配置します。入力が両方1のときのみNMOSが両方オンになり出力が0になります。PMOSは1つでもオンなら出力をプルアップします。
  • TTL(古典的ファミリ)では、NANDはトランジスタの組合せで実現され、汎用ロジックICとして「7400族」のうち「7400」が4回路入りの2入力NANDゲートとして有名です(SN7400)。

CMOSでの利点は静的消費電力が小さいこと、TTLは駆動力が大きいが消費電力や発熱が相対的に大きい点などが挙げられます。

NANDを基底に設計する利点・欠点

利点:

  • 機能的完全性により、論理設計を1種類の素子(NAND)に統一できる。ICプロセスや配線を統一しやすい。
  • シリコン量産では決まったゲートを大量に用意することでコスト低下が図れる。
  • CMOSではNANDは比較的高速かつ低消費電力で実現できる構成が多い。

欠点:

  • 単純な設計ではゲート数が増え、遅延や配線が増えることがある。最適化によってはNANDのみでの実装が必ずしも最小とは限らない。
  • 多数入力のNANDはファンインにより伝搬遅延や駆動能力に影響を与える。

実践的な使用例と注意点

ハードウェア記述言語(HDL)やソフトウェアでNANDを扱う場合の留意点:

  • 多くのプログラミング言語には直接の「NAND」演算子は無いが、ビット演算子で ~(a & b) のように書けばNANDと同等。
  • Verilogではゲートレベルで「nand」プリミティブが使えますし、ベクタに対する縮約演算子「~&」はベクタの全ビットに対するNAND(縮約)を表します。
  • 非同期回路設計では、NANDを多用する場合に遷移の一時的なグリッチ(hazard)が起きやすいので、タイミングやバッファリング、エッジ検出などに注意が必要です。

NANDとNANDフラッシュの関係

「NANDフラッシュメモリ」は名前に「NAND」を含みますが、これは論理ゲートのNANDそのものを指すわけではありません。NANDフラッシュはフラッシュメモリのアーキテクチャの一種で、セルを直列に結んだ構造(NAND型アレイ)を採用することで高い記憶密度を実現します。名前はセル配列の接続が論理ゲートのNANDの接続様式に似ていることに由来します。

NANDフラッシュの特徴:

  • 高密度・低コスト(同容量に対してNOR型より安価)
  • ページ単位の読み書き、ブロック単位の消去
  • 書き換え回数の制限(耐久性)、ECCやウェアレベリングなどの補償技術が必要

応用例:CPU・メモリ・ASIC設計での位置づけ

論理合成の世界では、NANDまたはNORのみを基本ライブラリとして与えて合成を行うことがよくあります。ASICやFPGAのゲート実装ベースをNANDに統一すると、セルライブラリ設計が単純化されるため量産・最適化で有利になる場合があります。

また、古典的なTTLロジックや学習現場では「7400(NAND)」ICは教育用・初期回路実験用に頻繁に用いられます。

まとめ

NANDは「NOT(AND)」を意味する単純な演算子ですが、その「単純さ」と「機能的完全性」によりデジタル回路の基礎を支える存在です。トランジスタレベルの実装(CMOS/TTL)、HDLでの利用法、さらには名前を共有するNANDフラッシュのような記憶デバイスまで、NANDに関する知識はハードウェア設計・組み込み・システム設計において不可欠です。実務ではNANDだけで設計する場合の利点と、ゲート数・遅延・消費電力などのトレードオフを理解しておくことが重要です。

参考文献