PREVIEW
デジタル論理ゲート(AND、OR、NOT)が真理値表と信号フローと共に示され、ブール代数の原理を説明している。

AND、OR、NOT の基本論理ゲートはあらゆるデジタル回路の構成要素であり、ブール代数の原理に基づいて動作します。

ブール代数:デジタル回路設計の基礎

ブール代数は回路が TRUE と FALSE をどう操作するかを定義します。AND/OR/NOT の基本演算と恒等律・吸収律・ド・モルガンの定理を扱います。

TL;DR: ブール代数は AND、OR、NOT を使って TRUE/FALSE 値を操作する形式的な体系です。その諸法則 ── 恒等律、吸収律、分配律、補元律、そしてド・モルガンの定理 ── はブール式を等価でより単純な形式に変換することを可能にし、これがそのままシリコン上のゲート数削減と伝搬遅延の短縮へとマッピングされます。

ジョージ・ブールが 19 世紀半ばに体系化した「思考の代数」は、いまやあらゆるデジタル・チップを動かす数学です。すべてのマイクロプロセッサ、メモリセル、グラフィックスパイプラインは、最終的に彼が定義した AND、OR、NOT の演算へと還元されます。

エンジニアやコンピュータ・サイエンティストにとって、ブール法則を習得することは机上の話ではありません。ブール式を簡略化することは、ゲートを削除し、配線を取り除き、伝搬遅延からピコ秒を削ぎ落とすことを意味します。数式を簡略化できれば、シリコンも簡略化できるのです。

三大基本演算:AND、OR、NOT

どれほど複雑なデジタル論理も、たった 3 つの基本演算から構築されます。これらを理解することは、デジタル設計のアルファベットを理解することです。digisim.io ではこれらは個別のコンポーネントとして表現されており、それらを配線して任意に複雑な論理を構成できます。

AND ゲート コンポーネント図

1. AND 演算

出力は すべての 入力が TRUE のときにのみ TRUE (1) です。これを厳密な要件として考えてみましょう:重機の安全システムでは、「スタートボタン」が押されており かつ「安全ガード」が閉じているときにのみモーターを動かしたい場合があります。回路上では AND ゲートは直列接続のように振る舞います ── 電流が流れるためには全スイッチが閉じている必要があります。

  • ブール式: Y=ABY = A \cdot B
  • コンポーネント名: AND

2. OR 演算

出力は 少なくとも 1 つ の入力が TRUE であれば TRUE (1) です。家庭のセキュリティシステムでは、「玄関ドアが開く」 または「裏窓が割れる」のいずれかでアラームが鳴るべきです。回路上では OR ゲートは並列接続のように振る舞います ── どれか 1 つのスイッチが閉じれば電流が流れます。

  • ブール式: Y=A+BY = A + B
  • コンポーネント名: OR

3. NOT 演算(インバータ)

出力は単一入力の論理的逆です。入力が HIGH なら出力は LOW、その逆も同様です。回路上では NOT ゲート(またはインバータ)は信号レベルを反転し、アクティブ HIGH 信号をアクティブ LOW に、あるいはその逆に変換します。

  • ブール式: Y=AY = \overline{A} (または AA')
  • コンポーネント名: NOT

AND ゲートの動作を試す

これらのゲートを最初に学ぶときには、入力を切り替えながら真理値表が動き出すのを観察できる、清潔で隔離された環境はかけがえのない価値を持ちます。

技術仕様:真理値表

真理値表はデジタル論理の根本的な「採点表」です。可能なすべての入力の組み合わせとそれに対応する出力をマッピングします。

AND ゲートの真理値表

入力 A入力 B出力 Y
000
010
100
111

OR ゲートの真理値表

入力 A入力 B出力 Y
000
011
101
111

NOT ゲートの真理値表

入力 A出力 Y
01
10

ブール代数の諸法則とは

基本演算が定義できたところで、論理式を操作・簡略化できる諸法則を見ていきましょう。これらは抽象的な規則ではありません ── 回路変換そのものです。各法則は具体的なハードウェア最適化に対応します:ゲートを取り除く、配線を消す、伝搬遅延を減らす、というように。

OR ゲート コンポーネント図

恒等律と零元律

これらの法則は変数が定数 0 や 1 とどう作用するかを定義します。digisim.io 上では CONSTANT および CONSTANT_ZERO コンポーネントを使って検証できます。

  • 恒等律(Identity Law):変数を演算の単位元と組み合わせると変化しません。
  • 0 との OR:A+0=AA + 0 = A ── OR の入力の 1 つをグランドに繋いでも出力には影響しません。
  • 1 との AND:A1=AA \cdot 1 = A ── AND の入力の 1 つを VCC に繋いでも出力には影響しません。
  • 零元律(Null / Annihilation Law):変数を支配元と組み合わせるとその支配元になります。
  • 1 との OR:A+1=1A + 1 = 1 ── OR の入力の 1 つが恒久的に HIGH なら、A に関係なく出力は常に HIGH です。
  • 0 との AND:A0=0A \cdot 0 = 0 ── AND の入力の 1 つが恒久的に LOW なら、A に関係なく出力は常に LOW です。

補元律と冪等律

これらの法則は変数が自分自身またはその逆とどう作用するかを支配します。

  • 冪等律(Idempotent Law):変数を自分自身と組み合わせても変化しません。
  • A+A=AA + A = A ── 同じ信号を OR ゲートの両方の入力に接続するのは、直接配線するのと等価です。
  • AA=AA \cdot A = A ── 同じ信号を AND ゲートの両方の入力に接続するのは、直接配線するのと等価です。
  • 補元律(Complement Law):変数を自分の逆と組み合わせると定数を生みます。
  • A+A=1A + \overline{A} = 1 ── 信号は常に HIGH か LOW のいずれかなので、OR の 2 つの入力のどちらかは常に 1 です。
  • AA=0A \cdot \overline{A} = 0 ── 信号は HIGH と LOW を同時に持てないので、AND は常に 0 を出力します。

交換律、結合律、分配律

通常の代数を学んだ人にとって、これらの法則のほとんどは見覚えがあるはずです。

  • 交換律(Commutative):A+B=B+AA + B = B + A および AB=BAA \cdot B = B \cdot A ── AND や OR ゲートの入力の順序は問題になりません。
  • 結合律(Associative):(A+B)+C=A+(B+C)(A + B) + C = A + (B + C) および (AB)C=A(BC)(A \cdot B) \cdot C = A \cdot (B \cdot C) ── ゲートを任意のグループ化で連結しても結果は同じです。
  • 分配律(標準形):A(B+C)=AB+ACA \cdot (B + C) = A \cdot B + A \cdot C ── 通常の代数とまったく同じように動作し、自由に式を因数分解または展開できます。

しかしブール代数には実数代数には対応物のない第 2 の分配律があります。

A+(BC)=(A+B)(A+C)A + (B \cdot C) = (A + B) \cdot (A + C)

これは最初は直感に反します。通常の数学では 5+(3×4)=175 + (3 \times 4) = 17 ですが、(5+3)×(5+4)=72(5+3) \times (5+4) = 72 で、これらは等しくありません。しかしブール論理の二進世界では、この恒等式は成立します。

直感への鍵は次のとおりです:A=1A = 1 なら両辺はただちに 1 と評価されます。A=0A = 0 なら両辺は BCB \cdot C に簡約されます。二次式のように右辺を「FOIL 法」で展開しようとしてはいけません ── ブール代数には AA=AA \cdot A = A なので「2 乗項」という概念がありません。この第 2 の分配律は、任意のブール関数の 2 つの正準表現である「積和形(SOP)」と「和積形(POS)」の間を変換する礎石です。

パワーツール:吸収律とド・モルガンの法則

以下の法則は項全体を消去し、式を抜本的に再構成します。これらは現実の回路簡略化における主役の道具です。

吸収律:冗長性の消去

吸収律は設計から動作を変えずにゲート全体を削除することを可能にします。

  • A+AB=AA + A \cdot B = A
  • A(A+B)=AA \cdot (A + B) = A

第 1 の形式の直感:A+ABA + A \cdot BAA が真なら真、または AABB が両方とも真なら真です。しかし AA がすでに真なら、BB に関係なく式全体は真です。ABA \cdot B の項は完全に冗長です。ハードウェア上では、これは AND ゲートと OR ゲートを取り除き、直接配線に置き換えます。

コンセンサス定理」と呼ばれる、あまり知られていない変種もあります:

  • AB+AC+BC=AB+ACA \cdot B + \overline{A} \cdot C + B \cdot C = A \cdot B + \overline{A} \cdot C

第 3 の項 (BCB \cdot C) はあらゆる場合に他の 2 つの項によって既にカバーされているため冗長です。これは目視で見つけるのは難しいですが、カルノー図を使えば視覚的に明らかになります。

ド・モルガンの法則:否定の分配

オーガスタス・ド・モルガンの定理は、NOT 演算を AND と OR にわたって分配する方法を示し、反転式を再構成することを可能にします。

  • 第 1 法則:AB=A+B\overline{A \cdot B} = \overline{A} + \overline{B} ── NAND ゲートは入力反転 OR ゲートと等価です。
  • 第 2 法則:A+B=AB\overline{A + B} = \overline{A} \cdot \overline{B} ── NOR ゲートは入力反転 AND ゲートと等価です。

回路の言葉で言えば、この双対性は現代のチップ設計の根幹です。CMOS 技術では NAND と NOR ゲートは標準的な AND と OR ゲートよりも物理的に小さく高速なので、設計者は日常的にド・モルガンの法則を使って論理を NAND のみまたは NOR のみの実装に変換します。より深い扱いについては、実践におけるド・モルガンの法則の応用 に関する専門記事を参照してください。

NAND ゲート コンポーネント図

万能 NAND 論理を試す

digisim.io でのシミュレーション:理論から具体的な証拠へ

これらの法則を読むのと、それが動くのを見るのは別物です。吸収律 A+AB=AA + A \cdot B = A を digisim.io キャンバス上で証明してみましょう。

ステップバイステップでの検証

  1. シミュレータを開く:digisim.io/circuits/new で新しいプロジェクトを開始します。
  2. 入力を配置する:2 つの INPUT_SWITCH コンポーネントをキャンバスにドラッグします。TEXT ツールで「A」と「B」とラベル付けします。
  3. 複雑な側を組む:
  • AND ゲートを配置します。「A」と「B」を入力に接続します。
  • OR ゲートを配置します。AND ゲートの出力を一方の入力に、「A」を直接もう一方の入力に接続します。
  • OR ゲートの出力を OUTPUT_LIGHT に接続します。
  1. 簡略化された側を組む:
  • 単純に「A」を 2 番目の OUTPUT_LIGHT に直接接続します。
  1. SimCast の瞬間:SimCast 機能を使って操作を録画します。「A」と「B」を 4 つの組み合わせすべてで切り替えてみましょう。2 つのライトが常に一致することに気づくはずです。「B」が何をしようと、最初のライトは「A」だけを気にしています。

オシロスコープによる検証:伝搬を見る

簡略化されていない回路の「コスト」を真に理解するには、OSCILLOSCOPE_8CH をキャンバスに配置します。チャンネル 1 を入力「A」に、チャンネル 2 をあなたの複雑な OR ゲートの出力に接続します。

「A」を切り替えると、オシロスコープの波形に小さな遅延が見えるはずです。これが 伝搬遅延 (tpdt_{pd}) です。すべてのゲートは信号が伝搬する時間をわずかに加えます。A+ABA + A \cdot B を単に AA にまで簡略化することで、2 つのゲート(AND と OR)の遅延を取り除き、合計 tpdt_{pd}tpd(AND)+tpd(OR)t_{pd(AND)} + t_{pd(OR)} からゼロに削減します。高速設計では、これらの節約は直接、達成可能なクロック周波数の上昇へと直結します。

セキュリティシステムテンプレート図

セキュリティアラーム回路を開く

セキュリティアラーム・テンプレートは、複数のゲート(AND、OR、NOT)が現実世界の文脈でどう連携するかを示しており、簡略化の法則を適用する実用的な遊び場として有用です。

実世界の応用:簡略化が日々を救う場面

これは教室の演習で数ゲート節約することにとどまりません。実世界のシステムでは、簡略化はそのまま「より安く、より速く、より省電力なハードウェア」へと結びつきます。

例 1:高速メモリ・アドレス・デコーディング

古典的な Intel 8086 アーキテクチャでは、CPU はアドレスラインを使ってどのメモリチップと通信するかを選択します。特定のチップを有効にする論理は「アドレスデコーダ」と呼ばれます。デコーダ論理が最適化されていないと、「Enable」信号が RAM チップに到達するまで時間がかかります。これは CPU に「ウェイトステート」を挿入させ ── 論理が遅すぎるため事実上待機させることになります。デコーダ回路にブール法則を適用することで、エンジニアはシステム全体をより高いクロック速度で動かすのに十分な遅延を削れます。

例 2:ALU ステータスフラグ

算術論理装置 (ALU) は CPU の計算心臓部です。演算後、FLAGS_REGISTER 内のステータスフラグ(ゼロ、負数、オーバーフローなど)を設定します。オーバーフローフラグの論理は最上位ビットの桁上げ入力と桁上げ出力を含み、悪名高いほど複雑です。

これを生のロジックで簡略化なしに構築すると、巨大なゲートの網ができあがります。ド・モルガンの法則と分配性を使うことで、設計者はこの論理を少数の高速 NAND ゲートに圧縮し、計算が終わった瞬間にフラグが準備できることを保証できます。

カリキュラム関連トピック

digisim.io でデジタル論理を探求するなかで、これらの関連トピックがあなたの理解を深めます:

クイックリファレンス:全法則一覧

法則OR 形式AND 形式
恒等律A+0=AA + 0 = AA1=AA \cdot 1 = A
零元律A+1=1A + 1 = 1A0=0A \cdot 0 = 0
冪等律A+A=AA + A = AAA=AA \cdot A = A
補元律A+A=1A + \overline{A} = 1AA=0A \cdot \overline{A} = 0
交換律A+B=B+AA + B = B + AAB=BAA \cdot B = B \cdot A
結合律(A+B)+C=A+(B+C)(A+B)+C = A+(B+C)(AB)C=A(BC)(AB)C = A(BC)
分配律A+BC=(A+B)(A+C)A + BC = (A+B)(A+C)A(B+C)=AB+ACA(B+C) = AB + AC
吸収律A+AB=AA + AB = AA(A+B)=AA(A+B) = A
ド・モルガンA+B=AB\overline{A+B} = \overline{A}\cdot\overline{B}AB=A+B\overline{AB} = \overline{A}+\overline{B}
二重否定A=A\overline{\overline{A}} = A

あなたの番:知識を実践へ

ブール代数は抽象的なアイデアと機能するシリコン片の間のギャップを埋める言語です。これらの法則は、論理を彫刻し、無駄を排し、効率的かつ正確な設計を作り出すために使う数学的な道具です。

ここに 1 つチャレンジがあります:式 Y=ABC+ABC+ABCY = A \cdot B \cdot C + A \cdot B \cdot \overline{C} + A \cdot \overline{B} \cdot C を取り上げてください。

  1. 分配律を使って共通項をくくり出します:Y=AB(C+C)+ABCY = A \cdot B \cdot (C + \overline{C}) + A \cdot \overline{B} \cdot C
  2. 補元律 (C+C=1C + \overline{C} = 1) と恒等律 (AB1=ABA \cdot B \cdot 1 = A \cdot B) を適用すると Y=AB+ABCY = A \cdot B + A \cdot \overline{B} \cdot C が得られます。
  3. もう一度因数分解:Y=A(B+BC)=A(B+C)Y = A \cdot (B + \overline{B} \cdot C) = A \cdot (B + C)。(最後のステップは吸収律の変種 B+BC=B+CB + \overline{B}C = B + C を使っています。)
  4. digisim.io を開き、元の 3 ミンタームの回路と簡略化された 2 ゲートのバージョンの両方を構築します。
  5. OSCILLOSCOPE で伝搬遅延を比較しましょう。

このシリーズの次の記事 積和形 (SOP) に進むか、AND ゲート コンポーネントリファレンス を開いて自分でこれらの法則を配線してみてください。