論理最適化とは、指定された論理回路を、一つまたは複数の制約条件の下で等価な表現で表すプロセスです。このプロセスは、デジタルエレクトロニクスや集積回路設計において用いられる論理合成の一部です。
一般的に、回路は、所定の応答遅延を満たす最小チップ面積に制限されます。特定の回路の論理最適化の目標は、元の回路と同じ値に評価される最小の論理回路を取得することです。 [ 1 ]通常、同じ機能を持つより小さな回路は安価であり、[ 2 ]占有スペースが少なく、消費電力が少なく、レイテンシが短く、集積回路上の金属構造のナノスケールレベルで発生する予期しないクロストーク、遅延信号処理の危険性、その他の問題のリスクを最小限に抑えます。
ブール代数の観点から言えば、複雑なブール式の最適化とは、より単純な式を見つけるプロセスであり、その単純な式は評価の結果、最終的に元の式と同じ結果を生み出す。
複雑な回路(論理ゲートなど、多くの要素を持つ回路)の問題点は、各要素が物理的なスペースを占有し、製造に時間とコストがかかることです。回路の最小化は、集積回路における複雑な論理回路の面積を削減するために用いられる論理最適化の一形態と言えるでしょう。
論理合成の登場により、電子設計自動化(EDA) 業界が直面した最大の課題の 1 つは、与えられた設計記述の最も単純な回路表現を見つけることでした。[ nb 1 ] 2 レベルの論理最適化 は、 Quine–McCluskey アルゴリズムの形で長い間存在し、後にEspresso ヒューリスティック論理最小化器が続きましたが、チップ密度の急速な向上と回路記述のためのハードウェア記述言語の広範な採用により、 Logic Friday (グラフィカル インターフェース)、Minilog、および ESPRESSO-IISOJS (多値論理)を含む、今日の論理最適化領域が形式化されました。 [ 3 ]
論理回路の簡略化手法は、ブール式の最小化にも同様に適用できる。
今日、ロジック最適化は様々なカテゴリに分類されます。
グラフィカルな手法では、論理変数と関数の値を表す図を用いて、必要な論理関数を表現します。図を操作したり検査したりすることで、多くの面倒な計算を省略できます。2レベル論理のグラフィカルな最小化手法には、以下のようなものがあります。
以下に挙げるブール式の最小化(簡略化)の手法は、回路の最適化にも適用できます。
ブール関数が回路によって指定される場合(つまり、可能な限り最小サイズの等価回路を見つけたい場合)、無制限回路最小化問題は長らく次のように予想されていました。-時間計算量で完全であり、その結果は2008年に最終的に証明されました[ 4 ]が、カルノー図やクワイン-マクラスキーアルゴリズムなどの効果的なヒューリスティックがあり、プロセスを容易にします。
ブール関数の最小化手法には以下が含まれます。
ブール関数の最適な回路表現を見つける方法は、文献ではしばしば厳密合成と呼ばれます。計算の複雑さのため、厳密合成は小さなブール関数に対してのみ実行可能です。最近のアプローチでは、最適化問題をブール充足可能性問題にマッピングします。[ 5 ] [ 6 ]これにより、 SATソルバーを使用して最適な回路表現を見つけることができます。
ヒューリスティック法は、膨大な問題群の中から、実用的で有用な部分集合を解決するために確立されたルールを用いる手法です。ヒューリスティック法は理論的に最適な解を導き出さない場合もありますが、有用であれば、最小限の労力で望ましい最適化の大部分を実現できます。論理最適化にヒューリスティック法を用いるコンピュータシステムの例としては、Espressoヒューリスティック論理最小化器が挙げられます。
回路の 2 レベル回路表現は、厳密には SOP (積和)の観点からの回路の平坦なビューを指し、これは設計のPLA実装により適していますが、マルチレベル表現は、任意に接続された SOP、POS (積和)、因数分解形式などの観点からの回路のより一般的なビューです。論理最適化アルゴリズムは、一般的に、回路の構造的表現 (SOP、因数分解形式) または機能的表現 (二分決定図、代数決定図) のいずれかで動作します。積和 (SOP) 形式では、AND ゲートが最小単位を形成し、OR を使用して結合されますが、積和 (POS) 形式ではその逆です。POS 形式では、OR は AND よりも優先順位が低いため、OR 項を AND ゲートの下にまとめるために括弧が必要です。SOP 形式と POS 形式の両方が回路論理にうまく変換されます。
2つの関数F1とF2がある場合:
上記の 2 レベル表現では、6 つの積項と CMOS 表現では 24 個のトランジスタが必要です。
多階層における機能的に同等の表現は次のようになる。
ここではレベルの数は3ですが、項B + Cを共有しているため、積項とリテラルの総数は減少します。
同様に、組み合わせ回路と順序回路を区別します。組み合わせ回路は、現在の入力のみに基づいて出力を生成します。これらはブール関係で表現できます。例としては、優先度エンコーダ、バイナリデコーダ、マルチプレクサ、デマルチプレクサなどがあります。
順序回路は、クロック信号によって過去の入力と過去の入力を区別し、現在の入力と現在の入力の両方に基づいて出力を生成します。これらは有限状態機械で表現できます。例としては、フリップフロップやカウンタなどがあります。

回路を最小化する方法は数多くありますが、これはブール関数を最小化(または簡略化)する例です。回路によって実行されるブール関数は、その関数が実装される代数式と直接関係しています。[ 7 ] 表現に使用される回路を考えてみましょう。この記述では、2つの否定、2つの論理積、および1つの論理和が使用されていることは明らかです。つまり、この回路を構築するには、2つのインバータ、2つのANDゲート、および1つのORゲートが必要になります。
回路は、ブール代数の法則を適用するか、直感を用いることで簡略化(最小化)できます。例では、の場合に真となるこれは偽であり、その逆もまた、これは単に論理ゲートの観点から言えば、不等号は単にXOR ゲート(排他的論理和) を意味します。したがって、すると、真理値表を用いて確認できるように、以下の2つの回路は等価である。