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

積和形を超えて:効率的な論理のための和積形(POS)

和積形(POS)は SOP の双対であり、真理値表の 0 から構成します。最大項の導出、OR-AND 回路の構築、SOP との比較を解説します。

DennyDenny
読了まで約10分
Chalkboard feature illustration for “積和形を超えて:効率的な論理のための和積形(POS)”

要約: 正準的な和積形(Product of Sums、POS)は、出力が 0 となる各行につき一つの最大項を AND します。正準的な積和形(Sum of Products、SOP)は、出力が 1 となる各行につき一つの最小項を OR します。ゼロ行の数は正準 POS の項数を予測しますが、最小化後に最良の回路になるとは限りません。両方を対象技術へマッピングしてから比較してください。

積和形(SOP)は、多くの設計者にとって自然な出発点です。真理値表の 1 を見て最小項を書き、それらを OR します。しかし SOP は物語の半分にすぎません。その代数的双対である 和積形(POS) は、1 ではなく 0 に注目して同じ問題へ反対側から取り組みます。

真理値表の 0 が 1 より少なければ、その 正準 POS は正準 SOP の最小項より少ない節を持ちます。ただし最小化によって比較は変わりますし、書かれた項が少ないことが、合成後の面積、遅延、電力の小ささを自動的に意味するわけではありません。POS は OR-AND または NOR-NOR 構造に、SOP は AND-OR または NAND-NAND 構造に自然に対応します。

和積形を分解する

和積形(POS)は、その名のとおり、一つ以上の和(OR)項を論理積(AND)した式です。

一般形を考えてみます。

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

この式では、(A+B)(A + B) のような括弧内の各項が「和項」です。個々の和項を論理的に AND して、最終出力 YY を作ります。

OR ゲートコンポーネント

この構造は、二段の OR-AND 回路に自然に対応します。第一段の OR ゲートが和項を作り、その出力を一つの AND ゲートへ入力して最終積を得ます。

正準 POS 式の基本要素は 最大項(maxterm) です。最大項は、関数中のすべての変数を真または補数の形で含む和項です。最小項(SOP)が真理値表の一つの 1 を表すのに対し、最大項は一つの 0 を表します。

OR ゲートコンポーネントを試す

最大項の規約:重要な落とし穴

ここで多くの学習者がつまずきます。SOP から POS へ移ると、真理値表の各ビットの読み方は正反対になります。

SOP(最小項)の規約では、次のとおりです。

  • 1 は変数を真の形(AA)で使うことを意味します。
  • 0 は変数を補数の形(A‾\overline{A})で使うことを意味します。

POS(最大項)の規約 では、これが正反対になります。

  • 0 は変数を 真の形(AA)で使うことを意味します。
  • 1 は変数を 補数の形(A‾\overline{A})で使うことを意味します。

なぜ逆なのでしょうか。直感に反するかもしれませんが、目的を思い出せば理解できます。正準 POS は、関数出力が 0 となる行から作ります。各最大項の目的は、特定の入力組み合わせで、そしてその組み合わせでのみ 0 になることです。

3 変数の最大項 M5M_5 を例にします。これは二進入力 101101(A=1,B=0,C=1A=1, B=0, C=1)に対応します。この最大項を 0 と評価させるには、その入力組み合わせで全リテラルが 0 になる和を作ります。

  • A=1A=1 では、0 となる補数 A‾\overline{A} を使います。
  • B=0B=0 では、0 となる真の形 BB を使います。
  • C=1C=1 では、0 となる補数 C‾\overline{C} を使います。

よって最大項は M5=A‾+B+C‾M_5 = \overline{A} + B + \overline{C} です。入力が 101101 のとき、これは 0+0+0=00 + 0 + 0 = 0 になります。ほかの入力組み合わせでは少なくとも一つのリテラルが 1 になり、最大項全体は 1 です。ここが重要な理解点です。POS 回路の最後の AND ゲートは、OR ゲート入力の少なくとも一つが 0 へ落ちたときだけ 0 を出力します。

真理値表から POS 式へ

POS 式を導く手順は体系的です。次の真理値表で定義される論理関数 YY を見てみましょう。

ABCY最大項
0001-
0010M1=A+B+C‾M_1 = A + B + \overline{C}
0101-
0111-
1000M4=A‾+B+CM_4 = \overline{A} + B + C
1011-
1100M6=A‾+B‾+CM_6 = \overline{A} + \overline{B} + C
1111-

手順 1:ゼロを特定する

真理値表から、出力 YY が 0 になるすべての入力組み合わせを特定します。000 をインデックス 0 として番号付けすると、入力インデックスおよび最大項番号は 1、4、6 です。表示上は 2、5、7 行目に当たります。

手順 2:各ゼロに対する最大項を書く

最大項の規約(0 = 真、1 = 補数)を適用します。

  • インデックス 1(001): A=0,B=0,C=1→(A+B+C‾)A=0, B=0, C=1 \rightarrow (A + B + \overline{C})
  • インデックス 4(100): A=1,B=0,C=0→(A‾+B+C)A=1, B=0, C=0 \rightarrow (\overline{A} + B + C)
  • インデックス 6(110): A=1,B=1,C=0→(A‾+B‾+C)A=1, B=1, C=0 \rightarrow (\overline{A} + \overline{B} + C)

手順 3:最大項を AND する

最終 POS 式は論理積です。

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

これは簡潔な Pi(Π\Pi)表記で、次のようにも書けます。

Y=∏M(1,4,6)Y = \prod M(1, 4, 6)

正準形で比較すると、最大項は三つ、最小項は五つです。しかしこれはまだ最良の実装ではありません。行 4(100)と行 6(110)は B だけが異なるため、ゼロセルをグループ化できます。

Y=(A+B+C‾)(A‾+C)Y=(A+B+\overline C)(\overline A+C)

この最小化 POS は二つの節だけです。同じ関数の最小化 SOP には別の被覆が必要です。最小化形を比較してから、実際のセルまたは LUT へマッピングして、面積、遅延、電力の有利さを論じてください。

digisim.io で POS を実装する

POS の OR-AND 構造は、digisim.io のキャンバスで簡単に組み立てられます。正準形の考え方は、積和形ガイド と カルノー図による最小化 にも登場します。

AND ゲートコンポーネント

構築ガイド

  1. 入力: AA、BB、CC 用に三つの INPUT_SWITCH コンポーネントを置きます。
  2. 反転: NOT ゲートを使って補数 A‾\overline{A}、B‾\overline{B}、C‾\overline{C} を作ります。
  3. OR 段: Y=∏M(1,4,6)Y = \prod M(1, 4, 6) の式に対して、キャンバスへ三つの OR ゲートを置きます。
    • 最初の OR を AA、BB、C‾\overline{C} に接続します。
    • 二つ目の OR を A‾\overline{A}、BB、CC に接続します。
    • 三つ目の OR を A‾\overline{A}、B‾\overline{B}、CC に接続します。
  4. AND 段: 3 入力 AND ゲートを一つ置きます。
  5. 最終接続: 三つの OR ゲートの出力を AND ゲートの入力へ接続し、最終 AND 出力へ OUTPUT_LIGHT を付けます。
  6. 最小化: 正準回路の横に (A+B+C‾)(A‾+C)(A+B+\overline C)(\overline A+C) を作り、八つの行がすべて一致することを確認します。

万能論理テンプレートを開く

オシロスコープで検証する

POS 回路のタイミングを調べるには OSCILLOSCOPE_8CH を使います。最初の三チャンネルを入力(A,B,CA, B, C)へ、四つ目を最終出力 YY へ接続します。

スイッチを切り替えたとき、Y は 001、100、110 でローになります。POS が「禁止状態をフィルタする」という見た目の印象に頼らず、八つの入力/出力の組をすべて記録してください。これらは指定された関数のゼロ行にすぎません。

よくある落とし穴:浮いた入力と伝搬遅延

POS 回路を作るとき、AND ゲートのフローティング入力が予測不能に振る舞うことを初心者は忘れがちです。digisim.io では、すべての入力を CONSTANT または INPUT_SWITCH へ接続してください。

概念上の二段 POS 回路では、データ経路は OR 段と AND 段に加え、必要な入力反転を通ります。物理的なタイミングには、セル遅延、ファンイン、配線、負荷、入力スルー、出力要件も含まれます。ターゲットによっては、マッピング済みの SOP、POS、因数分解形、LUT 実装のいずれが優れることもあります。一般的な OR と AND の遅延を足すのではなく、タイミング解析を使ってください。

実世界の用途:POS が役立つ場面

SOP の方が「分かりやすい」のに、なぜ POS を使うのでしょうか。現実には、失敗条件や例外によってシステムを定義することが多いからです。

1. アドレスと適格性の論理

アドレス選択関数は、適合する領域または除外する領域から表現できます。少数のゼロ条件をきれいに組み合わせられる場合に POS は便利です。範囲については、プレフィックス比較や因数分解されたデコーダーの方が明確なこともあります。最良の実装は、Intel 8086 時代の規則ではなく、マップとターゲットで決まります。

2. 権限論理

論理的な許可には、たとえば次のように複数の節が必要になることがあります。

RUN=(pressure_ok)(temperature_ok)(guard_closed)RUN=(pressure\_ok)(temperature\_ok)(guard\_closed)

これは単一リテラル条件の積です。同じことを shutdown = high_pressure OR high_temperature OR e_stop、RUN = NOT shutdown とも表せます。これらのブール式は仕様に役立ちますが、安全等級のインターロックにはさらに、故障検出、定義済みの無励磁動作、診断、検証済みハードウェア、適用される安全規格への適合が必要です。POS 表記だけで、それらが保証されることはありません。

POS から NOR-NOR への対応

SOP が NAND-NAND 論理へ自然に対応するのと同じように、POS は NOR-NOR 論理へ自然に対応します。変換にはド・モルガンの法則を使い、同じパターンに従います。

例の式から始めます。

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

二重否定を適用します。

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

外側のバーにド・モルガンの法則を適用します。積は和へ変わり、各因子は否定されます。

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

各 (A+B+C‾)‾\overline{(A + B + \overline{C})} は(補数入力を考慮した)NOR 演算であり、外側の式も NOR です。結果は二段の NOR-NOR 回路になります。

構造上の対応が重要な洞察です。ド・モルガンの法則により、SOP は NAND-NAND へ、POS は NOR-NOR へマッピングできます。ただし実装を強制するものではありません。ライブラリが特定のセルを有利に扱うこともあり、合成が式を因数分解または再マッピングすることもあります。

SOP と POS:どちらを使うか

基準SOP(積和形)POS(和積形)
導出元出力 = 1 の行出力 = 0 の行
構成要素最小項(AND 項)最大項(OR 項)
回路構造AND-OR(または NAND-NAND)OR-AND(または NOR-NOR)
項が少なくなる条件真理値表の 1 が少ない真理値表の 0 が少ない
設計上の見方「いつ出力を ON にするか?」「いつ出力を OFF にするか?」

この例では、正準 POS は最大項三つ、正準 SOP は最小項五つです。最小化後の POS は二つの節になります。ターゲットへのマッピングとタイミングを条件として、この関数では POS が魅力的になります。

結論

和積形は、問題のゼロ、すなわち例外、エラー、禁止状態に目を向けることを教えてくれます。POS と SOP の両方を身に付ければ、ゲート数の少なさ、伝搬遅延の小ささ、対象技術への適合といった目的に応じて、任意の関数に最も効率的な実装を選ぶ柔軟性が得られます。

このシリーズの次の記事では、カルノー図 で任意の関数を視覚的に簡略化します。または OR ゲートコンポーネントのリファレンス を開き、この記事の OR-AND 回路を配線してみてください。

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