← ブログに戻るブール代数の基礎 · 2/4

積和形(SOP)を極める:ブール関数のためのガイド

積和形(SOP)は、最小項を OR で結ぶことで真理値表をブール式へ変換します。得られた式は AND-OR または NAND-NAND のハードウェアへ直接対応します。

DennyDenny
読了まで約9分
Chalkboard feature illustration for “積和形(SOP)を極める:ブール関数のためのガイド”

**要約:**積和形(SOP)は、任意の真理値表をブール式へ変換する体系的な方法です。出力が 1 となる各行に一つの最小項を書き、それらを OR で結びます。標準形は正しいものの、最小形であることはめったにありません。カルノー図またはブール代数を使って簡略化しましょう。

デジタル設計における根本的な課題は、望む動作、つまり真理値表として表現された規則の集合を、論理ゲートの物理的な配置へ翻訳することです。推測に頼らず、どのようにしてこの隔たりを体系的に埋めればよいのでしょうか。

答えは 積和形(SOP) です。SOP は、任意の真理値表を動作するゲートレベル回路へ変換する、機械的で繰り返し可能な方法を提供します。抽象的な要件から具体的なハードウェアへ移る最初の大きな一歩です。

積和形とは?

積和形は、本質的には一つ以上の AND 項を OR で結んでブール式を書く方法です。ブール代数では、OR 演算を「和」、AND 演算を「積」と呼ぶことがよくあります。

次の式を考えてみましょう。

Y=(A⋅B‾)+(A‾⋅B)Y = (A \cdot \overline{B}) + (\overline{A} \cdot B)

ここで、(A⋅B‾)(A \cdot \overline{B}) は一つの積項、(A‾⋅B)(\overline{A} \cdot B) はもう一つの積項です。+ 記号は OR 演算、すなわちこれらの積の「和」を表します。この構造は、AND ゲートの第一層が一つの OR ゲートから成る第二層へ入力する二段回路に直接変換できます。この予測可能性こそが、その力の源です。

原子単位:最小項

真理値表から任意の SOP 式を構築するには、まず基本の構成要素である 最小項 を理解する必要があります。最小項は、関数中のすべての変数を、真の形または補数形のいずれかで含む特殊な積項です。

三変数(A、B、C)の関数には、23=82^3 = 8 個の最小項があります。各最小項は真理値表のちょうど一行に対応します。

最小項を作る規則は単純です。

  • その行で変数の値が 1 なら、変数をそのまま使います(例:A)。
  • その行で変数の値が 0 なら、変数の補数を使います(例:A‾\overline{A})。

三変数システムの最小項を列挙してみましょう。

最小項二進数(ABC)式
m0m_0000A‾⋅B‾⋅C‾\overline{A} \cdot \overline{B} \cdot \overline{C}
m1m_1001A‾⋅B‾⋅C\overline{A} \cdot \overline{B} \cdot C
m2m_2010A‾⋅B⋅C‾\overline{A} \cdot B \cdot \overline{C}
m3m_3011A‾⋅B⋅C\overline{A} \cdot B \cdot C
m4m_4100A⋅B‾⋅C‾A \cdot \overline{B} \cdot \overline{C}
m5m_5101A⋅B‾⋅CA \cdot \overline{B} \cdot C
m6m_6110A⋅B⋅C‾A \cdot B \cdot \overline{C}
m7m_7111A⋅B⋅CA \cdot B \cdot C

各最小項が 1 と評価されるのは、その特定の入力組み合わせだけであることに注意してください。例えば m5m_5(A⋅B‾⋅CA \cdot \overline{B} \cdot C)が真になるのは、A=1、B=0、C=1 のときだけです。ほかの七つの入力組み合わせでは偽になります。最小項は、真理値表の個々の行を狙い定める精密な道具です。

真理値表から SOP へ:3 ステップの方法

最小項を理解すれば、任意の真理値表を SOP 式へ変換するのは、まっすぐな機械的手順です。

例として「3 入力中 2 入力以上が 1」の多数決関数を使います。出力 Y は、二つ以上の入力が 1 のときだけ 1 になります。

ABCY最小項
0000
0010
0100
0111A‾⋅B⋅C\overline{A} \cdot B \cdot C
1000
1011A⋅B‾⋅CA \cdot \overline{B} \cdot C
1101A⋅B⋅C‾A \cdot B \cdot \overline{C}
1111A⋅B⋅CA \cdot B \cdot C

ステップ 1:出力が 1 となるすべての行を特定する。 この例では、入力組み合わせ 011、101、110、111 で出力 Y が 1 になります。

ステップ 2:各行の最小項を書く。 上の表を使うと、対応する最小項は m3,m5,m6,m_3, m_5, m_6, と m7m_7 です。

ステップ 3:すべての最小項を OR で結ぶ。 これにより、関数の最終 SOP 式が得られます。

Y=(A‾⋅B⋅C)+(A⋅B‾⋅C)+(A⋅B⋅C‾)+(A⋅B⋅C)Y = (\overline{A} \cdot B \cdot C) + (A \cdot \overline{B} \cdot C) + (A \cdot B \cdot \overline{C}) + (A \cdot B \cdot C)

これは、関連するすべての最小項を直接かつ未簡略化で足し合わせたものなので、標準 SOP 形と呼ばれます。関数を完全に記述しており、すぐに回路を作れます。

よくある落とし穴:標準形と最小形

学習者がよく混乱するのは、標準 SOP が最終回答だと考えてしまうことです。機能的には正しいものの、ほとんどの場合、最も効率的な実装ではありません。必要以上に多くのゲートと入力を使うことがよくあります。

もう一度、多数決関数の式を見てみましょう。ブール代数を使って簡略化できます。

Y=(A‾⋅B⋅C)+(A⋅B‾⋅C)+(A⋅B⋅C‾)+(A⋅B⋅C)Y = (\overline{A} \cdot B \cdot C) + (A \cdot \overline{B} \cdot C) + (A \cdot B \cdot \overline{C}) + (A \cdot B \cdot C) Y=B⋅C⋅(A‾+A)+A⋅C⋅(B‾+B)+A⋅B⋅(C‾+C)Y = B \cdot C \cdot (\overline{A} + A) + A \cdot C \cdot (\overline{B} + B) + A \cdot B \cdot (\overline{C} + C)

この代数的な方法は使えますが、より大きな式では間違いを起こしやすくなります。カルノー図は、SOP を簡略化する視覚的な方法を提供します。K マップで真理値表の 1 をグループ化すると、はるかに単純な式をすぐに見つけられます。

Y=(A⋅B)+(A⋅C)+(B⋅C)Y = (A \cdot B) + (A \cdot C) + (B \cdot C)

この 最小 SOP 形 は、まったく同じ論理を実装しますが、必要なのは三つの二入力 AND ゲートと一つの三入力 OR ゲートだけです。標準形の四つの三入力 AND ゲートと一つの四入力 OR ゲートに比べ、大幅な改善です。教訓は明確です。最初に導いた SOP は最適化の出発点であり、到達点ではありません。

digisim.io でシミュレーションする

概念を確かめるために、多数決回路の未簡略化な標準版を作ってみましょう。式とハードウェアのつながりを体得するには、これが最適な方法です。

  1. **入力をセットアップする:**ツールバーから三つの Input コンポーネントをキャンバスへドラッグします。A、B、C とラベルを付けます。
  2. 最小項(積項)を作る:
  • 一つ目の最小項 A‾⋅B⋅C\overline{A} \cdot B \cdot C には、入力 A 用の NOT ゲート が一つ必要です。この NOT ゲートの出力と、入力 B、C を 三入力 AND ゲート へ配線します。
  • 残りの三つの最小項、(A⋅B‾⋅C)(A \cdot \overline{B} \cdot C)、(A⋅B⋅C‾)(A \cdot B \cdot \overline{C})、(A⋅B⋅C)(A \cdot B \cdot C) についても、この手順を繰り返します。三入力 AND ゲートが合計四つになります。
  1. **和を作る:**四つの AND ゲートの出力すべてを、一つの 四入力 OR ゲート へ配線します。
  2. **出力を追加する:**最後の OR ゲートの出力を、Output コンポーネント(または視覚的フィードバック用の LED)へ接続します。

これで回路をテストできます。A、B、C の入力を切り替えてみてください。少なくとも二つの入力が High のときだけ出力がアクティブになることが分かり、元の真理値表と正確に一致します。仕様を動作するデジタル論理回路へうまく翻訳できました。

SOP から NAND-NAND への対応

SOP の最も重要な性質の一つは、NAND-NAND 論理へ直接対応することです。CMOS 技術では、NAND ゲートは AND ゲートや OR ゲートより物理的に小さく高速です。幸い、任意の SOP 式は、ド・モルガンの法則を使って二段の NAND-NAND 回路へ変換できます。

変換は機械的です。最小の多数決関数から始めます。

Y=AB+AC+BCY = AB + AC + BC

二重否定を適用します。これは値を変えません。

Y=AB+AC+BC‾‾Y = \overline{\overline{AB + AC + BC}}

外側のバーにド・モルガンの法則を適用します。

Y=AB‾⋅AC‾⋅BC‾‾Y = \overline{\overline{AB} \cdot \overline{AC} \cdot \overline{BC}}

各 AB‾\overline{AB} は NAND 演算であり、その積にかかる外側のバーも NAND です。結果は、三つの二入力 NAND ゲートが一つの三入力 NAND ゲートへ入力する二段 NAND-NAND 回路になります。これは AND-OR 実装と論理的に同一ですが、ゲートの種類が一つだけなので、製造やセルライブラリが単純になります。

実世界での利用

積和形は、現代のコンピューティングのアーキテクチャに組み込まれています。

  1. **プログラマブル論理アレイ(PLA):**複雑な組合せ論理を実装するための集積回路です。PLA の内部構造は、SOP 概念を直接物理化したものです。積項を作るプログラマブルな「AND 面」と、それらの積を和にするプログラマブルな「OR 面」で構成されます。技術者はこれらの面でどの接続を作るかを指定して関数を定義し、ハードウェア内にカスタム SOP 回路を実効的に構築します。
  2. **メモリアドレスデコード:**CPU がメモリ中の特定の場所を読み書きする必要があるとき、アドレスバスにアドレスを置きます。メモリコントローラ内のデコーダ回路は、どのメモリチップのどの行/列を有効にするかを特定しなければなりません。この論理はしばしば SOP を使って実装されます。例えば、RAM の特定ブロックを有効にする信号は Enable_Block_3 = A_{15} \cdot A_{14} \cdot \overline{A_{13}} となり得ます。この積項により、上位アドレスビットがその特定パターンに一致したときだけ、そのブロックが選択されます。メモリマップ全体の論理は、このような積項の和です。

積和形は、アイデアから回路へ至る信頼できる体系的な道筋を提供します。どれほど複雑なブール関数でも、標準的な二段 AND-OR(または NAND-NAND)ゲート構造を使って表現・構築できることを保証します。

このシリーズの次の記事、積和形の双対である和積形(POS)へ進みましょう。これは真理値表の 1 ではなく 0 から導かれます。あるいは、視覚的に SOP を最小化するためにカルノー図へ進んでください。

アイデアを実際に動く回路にしましょう。