科学・計算関連

カルノー図の囲み方は?隣接セルのルールとループの考え方を解説!

カルノー図の囲み方の基本
当サイトでは記事内に広告を含みます
技術ブログ特化メルマガはこちら

カルノー図は、論理式をできるだけ簡単な形へ整理するための図です。

真理値表から直接式を作るよりも、セルを適切に囲むことで不要な変数を消去しやすくなります。

ただし、隣接の考え方や端同士のつながり、囲む個数を誤ると、正しい簡略化にはつながりません。

この記事ではカルノー図の囲み方を中心に、隣接セルのルール、ループの作り方、よくある間違いまで順を追って紹介します。

カルノー図の囲み方の基本

カルノー図の囲み方の基本

それではまずカルノー図の囲み方の基本について解説していきます。

囲むセル数の原則

カルノー図では、値が1になっているセルを四角形で囲みます。

囲めるセル数は、1個、2個、4個、8個、16個のように2の累乗でなければなりません。

3個や6個などのセルをまとめて囲む方法は、カルノー図の規則には適合しません。

これは、隣接するセルをまとめるたびに異なる変数が1つずつ消え、論理式が単純になる仕組みに基づいています。

たとえば4変数カルノー図で4セルを囲めば、4つの変数のうち2つを消せる可能性があります。

大きなグループほど残る変数が少なくなるため、可能な範囲で大きく囲むことが重要です。

セル数と消去できる変数の関係を覚えておくと便利です。

1セルでは変数を消去できません。

2セルでは1変数、4セルでは2変数、8セルでは3変数を消去できます。

長方形として扱うルール

グループは、縦または横に並んだ長方形として作成します。

斜めに並んだセルを囲んだり、L字型に曲げたりすることはできません。

一見すると近くにあるセルでも、辺を共有していなければ隣接とは見なされない点が大切です。

たとえば左上と右下のような対角線上のセルは、角で触れているだけなので同一グループにはできません。

また、途中に0のセルがある場合、その0をまたいで1同士をつなげることも不可です。

グループ内には基本的に1だけを含め、必要に応じてドントケア条件を加えます。

大きなグループを優先する考え方

カルノー図を読むときは、小さな囲みを先に確定させないことがコツになります。

まず8セルや4セルのグループが作れないかを探し、その後に残った1を補うように2セルや1セルを考えます。

最大のグループを優先するほど、最終的な論理式は短くなります。

ただし、すべての1を一度ずつだけ囲む必要はありません。

より大きなグループを作るためなら、同じセルを複数のグループに重複させても問題ありません。

カルノー図では、すべての1を少なくとも1回は含めます。

そのうえで、可能な限り大きな2の累乗の長方形を選ぶことが、簡略化への近道です。

隣接セルの判定ルール

続いては隣接セルの判定ルールを確認していきます。

1ビットだけ異なる配置

隣接セルとは、対応する入力変数の値が1ビットだけ異なるセルを指します。

カルノー図の行と列は、通常の二進数順ではなくグレイコード順に並べられます。

グレイコードでは隣同士の値が必ず1ビットだけ変化するため、隣接セルをまとめることで変数を消去できます。

並び順 通常の二進数 カルノー図のグレイコード
1番目 00 00
2番目 01 01
3番目 10 11
4番目 11 10

この順番により、00と01、01と11、11と10、10と00がそれぞれ隣接します。

特に最後の10と最初の00も隣接する点は、初心者が見落としやすい部分でしょう。

上下左右のつながり

カルノー図では、上下または左右に接するセルを隣接セルとして扱います。

横方向に接していれば列側の変数が1つだけ変わり、縦方向なら行側の変数が1つだけ変わります。

そのため、隣接した2セルを囲むと、変化した変数を式から取り除けます。

一方で、対角線方向にあるセルは通常2ビット以上が変化するため、直接まとめることはできません。

隣接の判断はセルの距離ではなく、変数の変化数で判断することがポイントです。

端と端の接続

カルノー図の最も重要な特徴の一つが、外側の端同士がつながっていることです。

左端の列と右端の列、上端の行と下端の行は、図の見た目では離れていても隣接しています。

これはカルノー図を平面ではなく、端がつながった構造として考えるためです。

四変数カルノー図では、四隅のセルも条件が合えば1つの4セルグループとして囲めます。

左右端をまたぐグループは、紙の外側を回り込む長方形として考えます。

上下端についても同様です。

四隅をまとめる場合は、上下と左右の両方をまたぐループになります。

ループの作り方と重複の考え方

続いてはループの作り方と重複の考え方を確認していきます。

必須ループの見つけ方

まず、ほかのグループではカバーできない1を探します。

そのセルを含むグループは必須になるため、優先してループを作る必要があります。

特定の1を含む大きなグループが一つしかない場合、そのグループは選択候補ではなく必須ループです。

必須ループを先に確定させると、残りのセルを整理しやすくなります。

ただし、小さな囲みを急いで決めると、後から大きなグループを作れなくなる場合があります。

重複を許す理由

同じ1のセルを複数回囲むことは、カルノー図では正しい操作です。

重複によって大きなグループが作れるなら、そのほうが変数を多く消去できます。

たとえば一つのセルを4セルグループと2セルグループの両方に含めれば、周囲の1を無理なくカバーできます。

セルを一度しか使えないという思い込みは、カルノー図で起こりやすい誤解です。

重複は式を複雑にするための操作ではなく、むしろ全体を短くするための選択になります。

カルノー図の目的は、囲みの数を最小にすることだけではありません。

変数の少ない積項を選び、全体として最も簡潔な論理式を得ることが目的です。

不要なループの見分け方

すべての1がすでにほかの大きなグループでカバーされている場合、新たな小さなループは不要なことがあります。

不要なグループを追加すると、式に冗長な項が増えてしまいます。

ただし、複数の最小表現が存在するケースもあり、異なる囲み方でも同じ機能を表せる場合があります。

そのときは、項数が少ないもの、各項の変数数が少ないもの、回路実装しやすいものを比較するとよいでしょう。

論理ゲートの数や入力数を抑えたい場面では、単に式の文字数だけでなく実装条件も考慮します。

論理式への変換手順

続いてはカルノー図から論理式へ変換する手順を確認していきます。

変化しない変数の抽出

グループを一つ選んだら、その中で変化しない変数だけを確認します。

常に1である変数はそのまま記述し、常に0である変数は否定を付けて記述します。

グループ内で0と1の両方に変化する変数は、論理式から消去します。

これは、Aと否定Aを含む組み合わせが簡略化によって消えるためです。

たとえばABとA否定Bをまとめると、Bが変化してAだけが共通します。

この場合、ABとA否定BはAへ簡略化できます。

カルノー図では、この計算をセル配置で視覚的に処理しています。

積項と和項の組み立て

1を囲む通常のカルノー図では、各グループから積項を作り、それらを論理和で結びます。

積項とは、複数の変数をAND条件として組み合わせた項です。

複数のグループが得られた場合は、それぞれの積項をORで接続して最終式を作ります。

グループAから得た項とグループBから得た項は、どちらか一方が成立すれば出力が1になる関係です。

各ループごとに共通する変数だけを書くと覚えると、変換の途中で迷いにくくなります。

四変数カルノー図の例

変数をA、B、C、Dとし、ある4セルグループでAだけが常に1、Cだけが常に0だったとします。

BとDがグループ内で変化しているなら、BとDは消去対象です。

このグループから得られる積項は、Aと否定Cの組み合わせになります。

別のグループから否定AとDが得られた場合、最終式はそれら二つの積項の論理和です。

実際にはセルの行列見出しを確認しながら、各変数が固定か変化かを丁寧に追うことが欠かせません。

ドントケア条件の活用方法

続いてはドントケア条件の活用方法を確認していきます。

ドントケア条件の意味

ドントケア条件とは、入力の組み合わせとして起こらない、または出力が0でも1でも問題にならない条件です。

カルノー図では一般にXやdで表記されます。

ドントケア条件は1として利用してもよく、使わずに無視しても構いません。

その柔軟性を利用すると、通常なら作れない4セルや8セルの大きなグループを作れる場合があります。

グループへの含め方

ドントケアセルは、論理式をより簡単にできる場合だけグループへ加えます。

必ず囲む必要はなく、むしろ追加しても式が短くならないなら利用しないほうが分かりやすいでしょう。

ドントケア条件は出力を必ず1にするセルではない点に注意が必要です。

1のセルをカバーするための補助として使い、より大きなループを形成できるか検討します。

ドントケア条件は、簡略化に役立つときだけ1として扱います。

不要なループまで増やすために使うのではなく、変数を減らせるかどうかで判断します。

実務での注意点

実際の回路設計では、ドントケアとして扱った入力が将来も本当に発生しないかを確認する必要があります。

仕様変更によって未使用コードが使われるようになると、以前の簡略化式では意図しない出力が生じる可能性があります。

そのため、設計書にはドントケア条件の根拠を残しておくことが重要です。

学習問題では機械的に利用できますが、製品設計では入力範囲や異常系も含めて判断します。

カルノー図の囲み方のまとめ

カルノー図では、1のセルを2の累乗個で長方形に囲みます。

隣接セルは上下左右だけでなく、左右端や上下端もつながっている点が重要です。

対角線上のセルは隣接ではなく、L字型や3セルの囲みも作れません。

大きなグループを優先し、必要に応じてセルの重複を許すことで、論理式をより短くできます。

各ループからは、グループ内で変化しない変数だけを取り出します。

変化する変数は消えるため、8セル、4セル、2セルの順で大きなループを探すと整理しやすいでしょう。

ドントケア条件も活用すれば、さらに簡潔な式を導ける可能性があります。

セルを囲む前にグレイコードの順序と端の接続を確認し、全体を見渡してからループを決めることが、正確なカルノー図作成につながります。