01
2 ビットから 1 つの判定 — 出力の列で素子を選ぶ
わかっていること: 入力 2 本、出力 1 本、そして 4 行で書き切れる規則。ほしい規則と出力の列が一致する素子を選びます。
論理: Y = A ⊕ B
計算例: A = 1、B = 0 の XOR は 1 を返し、同じ素子は 2 つの入力が一致すると必ず 0 を返します
このケースを開く: XOR差異インタラクティブな数学・理科レッスン (ノ◕ヮ◕)ノ*:・゚✧
ディジタル論理 — どの部品が仕事をするか
どんなディジタル回路も、回路図の姿をした真理値表です。問われているのは論理素子が何をするかではなく、どの表が必要かです。2 ビットから下す 1 つの判定、たった一種類の部品から組み上げる論理体系、桁上げを伴う算術、複数の信号から 1 つを選ぶ切り替え。この四つで入門課程の問いはほぼ尽くせます。
01
わかっていること: 入力 2 本、出力 1 本、そして 4 行で書き切れる規則。ほしい規則と出力の列が一致する素子を選びます。
論理: Y = A ⊕ B
計算例: A = 1、B = 0 の XOR は 1 を返し、同じ素子は 2 つの入力が一致すると必ず 0 を返します
このケースを開く: XOR差異02
わかっていること: NAND は機能的に完全です。ほかのどの素子もその複製だけで配線でき、したがって真理値表で書ける回路はすべて作れます。
論理: NOT A = NAND(A, A)
計算例: NAND(1, 1) = 0。入力どうしを結べば NAND(A, A) = NOT A となり、それを戻せば NAND 2 個で AND になります
このケースを開く: NAND汎用03
わかっていること: 2 ビットの足し算は 2 ビットの答えを生みます。下位は A XOR B、上位すなわち桁上げは A AND B です。
論理: S = A ⊕ B, C = A ∧ B
計算例: 1 + 1 は和 = 0、桁上げ = 1、つまり 2 進法の 10。4 行のうち桁上げが立つ唯一の行です
このケースを開く: 半加算器 1+104
わかっていること: データ入力 2 本と選択線 1 本。出力は選択が指す側の入力をそのまま写し、もう一方は完全に無視します。
論理: Y = A·¬S + B·S
計算例: A = 0、B = 1、S = 1 → 出力 = 1。出力 = A·(NOT S) + B·S だからです
このケースを開く: MUX選択半導体工場(ファブ)が販売している部品が「2入力NANDゲート」ただ1種類のみであるとします。ツールが半加算器の項目で描く半加算器(1つの和ビットと1つの桁上がりビット)を、これ以外の部品を使わずに構築してください。NANDゲートは何個必要でしょうか?また、それが最もコストの低い(最小の)構成だとどうすれば確認できるでしょうか?
まずNOTから始めましょう。これはNANDで作れる最も安価な論理機能です。両方の入力を同じ配線に接続します。ゲートは「両方ともHighか?」と問いかけますが、どちらの入力もAであるため、AがHighでないときに常にTrue(High)を出力します。
ANDを作るにはもう1個必要です。NANDはすでにANDの出力を反転させたものなので、元に戻せばよいのです。出力をNOT(ステップ1で見たように入力を短絡させた2つ目のNAND)に入力します。ORを作るには3個必要で、NANDに入る前の各入力を反転させます。これはド・モルガンの法則を逆読みしたものです。
一筋縄ではいかないのがXORです。コツは、中間項を1回計算し、それを各入力に対して順番に組み合わせることです。その中間項をCと呼び、Aとの組み合わせ、およびBとの組み合わせをそれぞれNANDに入力します。
Dを展開します。これは「A かつ (not A または not B) の全体否定」を意味します。このうち「A かつ not A」の部分は決して起こり得ないため消滅し、残る式は簡潔な形になります。Eは文字を入れ替えた同じ式になります。
最後のNANDでこれらを結合します。ド・モルガンの法則により、2つの否定のNANDは通常のORとなり、「AであってBでない」と「BであってAでない」のORこそがXORの定義です。和のビットには4個のゲートが必要です。
次に桁上がりです。これは「A AND B」であり、ステップ2の計算ではゲート2個分でした。しかし、その2個のうち1個目はCそのものであり、Cは直前に構築したXORの中央の配線上にすでに存在しています。これを3回目に読み出し、それ自体に接続します。
必要なのは六つではなく、五つです。ここまでで示したのは、その主張の半分です。手順2から、桁上がりだけなら2ゲート。手順5から、和には4ゲートが必要です。そして手順6で、両者がちょうど一つのゲートを共有すると分かるので、2 + 4 − 1 = 5 となります。五つ未満では実現できないという下限は、これとは別の主張です。このページの議論だけでは証明されていません。二つの入力に対する六ゲート以下のNAND回路をすべて網羅的に探索した計算結果に基づくもので、数学的な論証ではありません。
ゲート数は処理時間については何も語りません。桁上がりを追いかけると、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 であると主張していることになります。クロック動作するチップでこれが観測されることはありません。なぜなら、クロック周期は論理回路の最も遅い経路よりも長く選ばれるからです。周期を短く設定しすぎることが、タイミング違反の意味するところです。