bitGateLab Digital · 学ぶ
日本語
シミュレータを開く

学ぶ › トピック 5

クワイン・マクラスキー法を手順どおりに解説

読了時間:約 7 分 · bitGateLab チーム

カルノー図は 4 変数までなら手早く使えますが、目に頼る方法であり、5 変数以上になると実用的ではなくなります。クワイン・マクラスキー法は、同じ仕事を表と機械的な規則で行います。ひらめきは必要なく、必ずすべての主項が見つかり、論理関数を簡単化するプログラムの基礎にもなっています。この記事では、この方法の二つの段階を理解し、必須主項の見つけ方を学び、4 変数の例題を最初から最後まで解きます。

用語:内包項と主項

この方法は二段階からなります。まず項を組み合わせてすべての主項を見つけ、次に、すべての最小項を覆う最小の主項の組を選びます。

第 1 段階:項を組み合わせる

各項を 2 進数で書き、消去された変数の位置はハイフンで示します。たとえば変数が A、B、C、D のとき、項 0-11 は ACD を意味します(B が消去されています)。

  1. 最小項を、2 進コードに含まれる 1 の個数でグループに分けます。
  2. あるグループの各項を、次のグループの各項と比べます。1 ビットだけ異なる場合は、その位置にハイフンを置いて組み合わせ、元の二つの項に使用済みの印を付けます。
  3. 新しくできたリストで同じことを繰り返します。組み合わせられるのは、ハイフンが同じ位置にある項どうしだけです。
  4. これ以上何も組み合わせられなくなったとき、一度も印の付かなかった項が主項です。
1 の個数で並べておくと手間が省けます。1 ビットだけ異なる二つの項は必ず隣り合うグループにあるので、グループ 1 とグループ 3 を比べる必要はありません。

第 2 段階:主項表

主項ごとに一行、関数の最小項ごとに一列の表を作ります(ドントケア条件には列を設けません)。各主項がどの最小項を覆うかに印を付けます。そのあと、次のようにします。

  1. 印が一つしかない列を探します。その行の主項は必須です。それを選び、その主項が覆うすべての列を消します。
  2. 残った列について、それらを覆う最小数の主項を選びます。二つの主項が同じものを覆うなら、どちらでもかまいません。リテラルの少ないほうを優先します。

例題(全手順)。 F(A, B, C, D) = Σm(0, 2, 3, 5, 7, 8, 10, 11, 13, 15) を簡単化します。

手順 1:1 の個数でグループに分ける。

1 の個数最小項
00 (0000)
12 (0010), 8 (1000)
23 (0011), 5 (0101), 10 (1010)
37 (0111), 11 (1011), 13 (1101)
415 (1111)

手順 2:最初の組み合わせ(ペア)。 隣り合うグループどうしを比べます。8 は 3 とも 5 とも組み合わせられません。異なるビットが一つだけではないからです。

グループできたペア
0 と 1(0,2) 00-0; (0,8) -000
1 と 2(2,3) 001-; (2,10) -010; (8,10) 10-0
2 と 3(3,7) 0-11; (3,11) -011; (5,7) 01-1; (5,13) -101; (10,11) 101-
3 と 4(7,15) -111; (11,15) 1-11; (13,15) 11-1

十個の最小項すべてに使用済みの印が付きました。ペアは 13 組です。

手順 3:二度目の組み合わせ(四つ組)。 ハイフンが同じ位置にあり、1 ビットだけ異なるペアどうしを組み合わせます。

  • (0,2) と (8,10)、または (0,8) と (2,10):-0-0、0、2、8、10 を覆います。
  • (2,3) と (10,11)、または (2,10) と (3,11):-01-、2、3、10、11 を覆います。
  • (3,7) と (11,15)、または (3,11) と (7,15):--11、3、7、11、15 を覆います。
  • (5,7) と (13,15)、または (5,13) と (7,15):-1-1、5、7、13、15 を覆います。

13 組のペアはすべて、いずれかの四つ組に使われました。四つの四つ組は、もう互いに組み合わせられません(ハイフンの位置が同じで、しかも 1 ビットだけ異なる相手がないからです)。したがって、主項は次のとおりです。

  • P1 = -0-0 = BD
  • P2 = -01- = BC
  • P3 = --11 = CD
  • P4 = -1-1 = BD

手順 4:被覆表。

主項02357810111315
P1 BD✔✔✔✔
P2 BC✔✔✔✔
P3 CD✔✔✔✔
P4 BD✔✔✔✔

手順 5:必須主項。 列 0 と列 8 には P1 の印しかないので、P1 は必須です。列 5 と列 13 には P4 の印しかないので、P4 も必須です。この二つを合わせると 0、2、5、7、8、10、13、15 を覆います。

手順 6:残りを覆う。 最小項 3 と 11 が残っています。P2 は両方を覆い、P3 も両方を覆います。どちらを選んでも、同じリテラル数で解が完成します。

結果:F = BD + BD + BC、または F = BD + BD + CD。どちらも三つの項、六つのリテラルからなります。

この関数をカルノー図に描くと、P1 は四隅、P4 は中央のブロック、P2 は行 00 と行 10 の列 11 と列 10(端をまたいでつながる)、P3 は列 11 全体になります。表を使うこの方法は、カルノー図を見なくても同じ結果にたどり着きます。

ドントケア条件と巡回表

ドントケア条件(X)は、第 1 段階では 1 と同じように扱って含めます。より大きな内包項を作る助けになるからです。第 2 段階では除外します。覆う義務がないので、列を設けません。X だけでできた主項は、決して必要になりません。

必須主項を選んだあとで、あるいは最初から、どの列にも印が二つ以上あって、明らかな決め手がないことがあります。このような状況を巡回表と呼びます。これは試しながら解きます。主項を一つ選び、それが覆うものを取り除いて同じことを繰り返し、得られた解どうしを比べます。大きな表には、ありうる被覆をすべて列挙する代数的な手順(ペトリック法)があります。

よくある間違い

シミュレータで試してみよう

シミュレータはこの種の手順で関数を簡単化するので、手で行った作業の各段階の確認に使えます。

  1. 4 変数の真理値表を作り、例題の最小項を 1 にします。
  2. 第 1 段階と第 2 段階を紙の上で行い、結果を書いておきます。
  3. ツールが示す最小の式とそのカルノー図を見て、どのグループがどの主項に対応するかを確認します。
  4. 二通りの解をどちらも同じキャンバス上で回路に変換し、入力を切り替えて、常に同じ出力になることを確かめます。

練習問題

  1. F(A, B, C, D) = Σm(0, 1, 3, 7, 8, 9, 11, 15) の主項と最小の式を求めてください。
    解答

    主項:-00-(BC)、-0-1(BD)、--11(CD)。列 0 を覆うのは BC だけ、列 7 を覆うのは CD だけです。どちらも必須で、この二つですべてを覆います。F = BC + CD。主項 BD は不要です。

  2. F(A, B, C) = Σm(0, 1, 2, 5, 6, 7) を解いてください。必須主項はありますか。
    解答

    ペアは 00-、0-0、-01、-10、1-1、11- で、どれも四つ組にはなりません。つまり主項は六つです。どの最小項もちょうど二つの主項に覆われるので、必須主項はありません(巡回表)。最小解は二つあります。AB + BC + AC、または AC + BC + AB です。

  3. F(A, B, C, D) = Σm(2, 3, 7, 9, 11, 13) + d(1, 10, 15) を簡単化してください。
    解答

    第 1 段階に X を含めると、主項が四つ得られます。-0-1(BD)、-01-(BC)、--11(CD)、1--1(AD)です。表では 1、10、15 の列を作りません。2 を覆うのは BC だけ、7 を覆うのは CD だけ、13 を覆うのは AD だけです。三つとも必須で、3、9、11 も覆います。F = BC + CD + AD。

  4. 第 1 段階で、1 が一つのグループと 1 が三つのグループを比べないのはなぜですか。
    解答

    1 が一つのコードと 1 が三つのコードは、少なくとも二つのビットが異なるからです。組み合わせるには、ちょうど一つのビットだけが異なっていなければなりません。