論理ゲート・エクスプローラー

入力をクリックして信号がゲートを流れる様子を見る

インタラクティブシミュレーションを読み込んでいます...

NANDだけであらゆる回路を構築できる 🖖

NANDは機能的に完全です。NAND組み合わせだけでNOT・AND・ORを構築できます。これが多くの実際のチップが小さな基本ゲートセットを好む理由です。

ゲートは小さなイエス/ノーの判断 🖖

論理ゲートは入力を HIGH (1) か LOW (0) として読み取り、決まった規則に従って 1 か 0 を一つだけ出力します。AND は両方が高いことを、OR は少なくとも一方が高いことを、XOR は両者が異なることを求めます。下の真理値表はゲートの完全な定義であり、すべての入力の組み合わせとその出力を並べれば、それ以上知るべきことはありません。この小さな判断を十分に積み重ねると、加算器やメモリ、そして最終的には一つのプロセッサ全体ができあがります。

正しい回路でも一瞬ちらつくことがある 🖖

信号は瞬時には届きません。各ゲートはわずかな伝播遅延を加え、同じ出力へ至る二つの経路の長さが異なることもあります。入力が変わると、真理値表は完全に正しいにもかかわらず、出力が落ち着く前に一瞬だけ誤った値を示すことがあり、これをグリッチ(ハザード)と呼びます。タイミング図の帯を見てください。出力の立ち上がりは入力の立ち上がりからちょうどこのゲート遅延だけ遅れ、多段回路ではこれらの遅延が積み重なって目に見える競合になります。

ディジタル論理 — どの部品が仕事をするか

あなたはどの論理のケースにいますか?

どんなディジタル回路も、回路図の姿をした真理値表です。問われているのは論理素子が何をするかではなく、どの表が必要かです。2 ビットから下す 1 つの判定、たった一種類の部品から組み上げる論理体系、桁上げを伴う算術、複数の信号から 1 つを選ぶ切り替え。この四つで入門課程の問いはほぼ尽くせます。

2 ビットから 1 つの判定 — 出力の列で素子を選ぶ Y = A ⊕ B
手元に一種類の素子しかない — NAND だけで足りる NOT A = NAND(A, A)
判定ではなく算術 — 和は XOR、桁上げは AND S = A ⊕ B, C = A ∧ B
組み合わせではなく選択 — 多重化器を使う Y = A·¬S + B·S

01

2 ビットから 1 つの判定 — 出力の列で素子を選ぶ

わかっていること: 入力 2 本、出力 1 本、そして 4 行で書き切れる規則。ほしい規則と出力の列が一致する素子を選びます。

論理: Y = A ⊕ B

計算例: A = 1、B = 0 の XOR は 1 を返し、同じ素子は 2 つの入力が一致すると必ず 0 を返します

このケースを開く: XOR差異
2 ビットから 1 つの判定 — 出力の列で素子を選ぶ. 4 行で素子は完全に決まります。強調された行があなたの設定した入力です。 入力 2 本、出力 1 本、そして 4 行で書き切れる規則。ほしい規則と出力の列が一致する素子を選びます。
4 行で素子は完全に決まります。強調された行があなたの設定した入力です。

02

手元に一種類の素子しかない — NAND だけで足りる

わかっていること: NAND は機能的に完全です。ほかのどの素子もその複製だけで配線でき、したがって真理値表で書ける回路はすべて作れます。

論理: NOT A = NAND(A, A)

計算例: NAND(1, 1) = 0。入力どうしを結べば NAND(A, A) = NOT A となり、それを戻せば NAND 2 個で AND になります

このケースを開く: NAND汎用
手元に一種類の素子しかない — NAND だけで足りる. 入力を結んだ NAND は反転器であり、残りはすべてこの手品の上に建っています。 NAND は機能的に完全です。ほかのどの素子もその複製だけで配線でき、したがって真理値表で書ける回路はすべて作れます。
入力を結んだ NAND は反転器であり、残りはすべてこの手品の上に建っています。

03

判定ではなく算術 — 和は XOR、桁上げは AND

わかっていること: 2 ビットの足し算は 2 ビットの答えを生みます。下位は A XOR B、上位すなわち桁上げは A AND B です。

論理: S = A ⊕ B, C = A ∧ B

計算例: 1 + 1 は和 = 0、桁上げ = 1、つまり 2 進法の 10。4 行のうち桁上げが立つ唯一の行です

このケースを開く: 半加算器 1+1
判定ではなく算術 — 和は XOR、桁上げは AND. 同じ 2 本の入力が両方の素子に入り、XOR が和のビットを、AND が桁上げを出します。 2 ビットの足し算は 2 ビットの答えを生みます。下位は A XOR B、上位すなわち桁上げは A AND B です。
同じ 2 本の入力が両方の素子に入り、XOR が和のビットを、AND が桁上げを出します。

04

組み合わせではなく選択 — 多重化器を使う

わかっていること: データ入力 2 本と選択線 1 本。出力は選択が指す側の入力をそのまま写し、もう一方は完全に無視します。

論理: Y = A·¬S + B·S

計算例: A = 0、B = 1、S = 1 → 出力 = 1。出力 = A·(NOT S) + B·S だからです

このケースを開く: MUX選択
組み合わせではなく選択 — 多重化器を使う. 選択線が一方の入力を出力へ通し、もう一方をせき止めます。 データ入力 2 本と選択線 1 本。出力は選択が指す側の入力をそのまま写し、もう一方は完全に無視します。
選択線が一方の入力を出力へ通し、もう一方をせき止めます。
参考文献 (1)

全プロセスの詳細解説

  1. NANDゲートのみで構築した半加算器と、なぜ5個が最小個数なのか 8 ステップ

    半導体工場(ファブ)が販売している部品が「2入力NANDゲート」ただ1種類のみであるとします。ツールが半加算器の項目で描く半加算器(1つの和ビットと1つの桁上がりビット)を、これ以外の部品を使わずに構築してください。NANDゲートは何個必要でしょうか?また、それが最もコストの低い(最小の)構成だとどうすれば確認できるでしょうか?

    A B & G1 & G2 & G3 & G4 S & G5 C
    1. まずNOTから始めましょう。これはNANDで作れる最も安価な論理機能です。両方の入力を同じ配線に接続します。ゲートは「両方ともHighか?」と問いかけますが、どちらの入力もAであるため、AがHighでないときに常にTrue(High)を出力します。

    2. ANDを作るにはもう1個必要です。NANDはすでにANDの出力を反転させたものなので、元に戻せばよいのです。出力をNOT(ステップ1で見たように入力を短絡させた2つ目のNAND)に入力します。ORを作るには3個必要で、NANDに入る前の各入力を反転させます。これはド・モルガンの法則を逆読みしたものです。

    3. 一筋縄ではいかないのがXORです。コツは、中間項を1回計算し、それを各入力に対して順番に組み合わせることです。その中間項をCと呼び、Aとの組み合わせ、およびBとの組み合わせをそれぞれNANDに入力します。

    4. Dを展開します。これは「A かつ (not A または not B) の全体否定」を意味します。このうち「A かつ not A」の部分は決して起こり得ないため消滅し、残る式は簡潔な形になります。Eは文字を入れ替えた同じ式になります。

    5. 最後のNANDでこれらを結合します。ド・モルガンの法則により、2つの否定のNANDは通常のORとなり、「AであってBでない」と「BであってAでない」のORこそがXORの定義です。和のビットには4個のゲートが必要です。

    6. 次に桁上がりです。これは「A AND B」であり、ステップ2の計算ではゲート2個分でした。しかし、その2個のうち1個目はCそのものであり、Cは直前に構築したXORの中央の配線上にすでに存在しています。これを3回目に読み出し、それ自体に接続します。

    7. 必要なのは六つではなく、五つです。ここまでで示したのは、その主張の半分です。手順2から、桁上がりだけなら2ゲート。手順5から、和には4ゲートが必要です。そして手順6で、両者がちょうど一つのゲートを共有すると分かるので、2 + 4 − 1 = 5 となります。五つ未満では実現できないという下限は、これとは別の主張です。このページの議論だけでは証明されていません。二つの入力に対する六ゲート以下のNAND回路をすべて網羅的に探索した計算結果に基づくもので、数学的な論証ではありません。

    8. ゲート数は処理時間については何も語りません。桁上がりを追いかけると、G1を出て直接G5に入るため、ゲートの深さは2段です。和はG2またはG3を通り、さらにG4を通過する必要があるため、3段の深さになります。Aから和への経路を数えてみると、それら自体の長ささえ等しくありません。

    解答

    5個のNANDゲート、そして5個が下限です。ツールをA = 1、B = 1の半加算器に設定すると、和のビットが 0 に折り返され、桁上がりは 1 になると表示されます。スケッチに従ってその行を追うと、C = 0、続いてD = E = 1、そしてS = 0となり、C自身を読み込む桁上がりゲートは1を出力します。Cは1回計算されて3回読み出され、節約のすべてはここにあります。

    ステップ8における深さは、真理値表では示せない結果をもたらします。AがすでにHighでBが立ち上がる途中の状態から、上の行を経て 1 + 1 に達する場合を考えます。桁上がりは2ゲート遅延の後に高レベルになりますが、和は3番目の遅延まで低レベルに下がりません。1ゲート遅延の完全な間、2つの出力ピンは1と1を示します。これは桁上がりと和として2進数の11であり、加算器は一瞬 1 + 1 = 3 であると主張していることになります。クロック動作するチップでこれが観測されることはありません。なぜなら、クロック周期は論理回路の最も遅い経路よりも長く選ばれるからです。周期を短く設定しすぎることが、タイミング違反の意味するところです。

例題

  • XOR差異 - XOR A=1 B=0 -> 1: 入力が異なるとき真になる
  • NAND汎用 - NAND(1,1) = 0 — NANDはANDを反転したもので、これだけで他のすべてのゲートを作れる
  • 半加算器 1+1 - 半加算器 1+1: Sum=0、Carry=1 — このキャリーはあらゆるCPUの内部を伝搬していく
  • MUX選択 - マルチプレクサ: S=1のときAの値にかかわらず入力Bが出力に送られる