論理合成(ろんりごうせい、英: logic synthesis)は、抽象的な回路の動作に関する記述(レジスタ転送レベルなど)から論理回路の実装設計を行う工程である。一般にVHDLやVerilogなどのハードウェア記述言語が使われる。ツールによっては、PAL や FPGA といったプログラマブルロジックデバイス向けの bitstream を生成する。また、ASIC向けの生成を行うツールもある。論理合成はEDAの一部である。
論理合成の歴史を遡ると、ジョージ・ブール(1815年 - 1864年)にたどり着く。彼はブール代数などにその名を留めている。1938年、クロード・シャノンは、二値ブール代数でスイッチング回路の動作を記述できることを示した。1950年代にカルノー図が発明され、使われるようになった。カルノー図は、一種の真理値表で、図の中のエントリ群をまとめることで論理の最小化ができる。人間の設計者がカルノー図で設計できる論理回路は、せいぜい4から6変数までである。
論理最小化の自動化への第一段階は、コンピュータ上で実行できるクワイン・マクラスキー法の登場であった。これにより選言標準形や連言標準形で2段の論理ゲートを最小化する手法が確立した。その他の初期の論理最小化の研究として、有限オートマトンの符号化と状態最小化があった。論理合成の主な応用としてデジタルコンピュータ設計がある。初期の論理合成自動化については、IBM とベル研究所が重要な役目を果たした。その後、プログラマブルロジックデバイスの登場によって効率的な論理最小化の必要性が増した(論理最小化によって回路規模を低減させるため)。
しかし、VLSI設計においては、そのような論理最小化も手法の1つにすぎない。実際、レジスタ転送レベルでの回路表現は一般に2段以上の論理ゲートに対応する。初期の多段論理回路設計システムとして IBM の LSS がある。LSS は局所的変換を使って論理を単純化する。LSS と Yorktown Silicon Compiler により1980年代の論理合成の研究が進んだ。いくつかの大学が研究成果を公開した。カリフォルニア大学バークレー校の MIS、コロラド大学ボルダー校の BOLD などが有名である。その後、これらの技術が商用の論理合成ツールに導入され、市販されるようになった。
論理合成ツールはRTL記述から、ゲート回路(ネットリスト)を合成するツールである。動作合成は、その一階層上流の工程を自動化するツールである。すなわち、C言語等でかかれたアルゴリズム記述(動作記述)から、RTL記述を合成するツールである。動作記述とは、通常のソフトウェアのプログラムのように、処理順序どおりに動作を記述したものである。一方、(合成対象となる)RTL記述は、ハードウェアの並列動作を記述したものであり、すべての文が一クロック内に全部実行されると考えてよい。つまり、RTLはブロック図にほぼ一対一に対応可能であるため、構造を表現しており、「構造記述」とも呼ばれる。
動作合成は、C記述などの動作記述から、データフローグラフを作成し、演算子(+、*)や、配列アクセス、入出力等をスケジューリングする。合成結果は、FSM(有限状態機械)とデータパスの組み合わせとなるツールが多い。 近年(2007年)では市販ツールもあり(米国CadenceのCtoSilicon Compiler, NECのCyberWorkBench, 米国MentorのCatapultC、米国Forte社のCynthesizer等)、携帯電話やプリンタ等身の回りの製品にも、動作合成が利用されている。
設計者の生産性向上を目的として、ハードウェア記述言語(HDL)を使った動作レベル記述による回路合成の研究が数多く行われた。動作合成(Behavioral Synthesis)とは、動作に関するHDL記述をレジスタ転送レベル(RTL)の記述に変換することであり、RTL は論理ゲートレベルの論理合成の入力となる。動作最適化は、必要となるハードウェア部品数や状態数などに基づくコスト関数により行われる。コスト関数は、その設計の実装に必要な回路量の大まかな予測を提供する。動作レベルの記述や動作合成とレジスタ転送レベルの記述による論理合成は、最近では明確に区別される傾向がある。
タスクのスケジューリング、リソース割り当て、共有などにより、RTL記述のデータパスと有限オートマトン(FSM)が生成される。スケジューリングは時系列での操作割り当てであり、リソース割り当ては操作や変数へのハードウェアリソースの割り当てである。スケジュールが与えられると、リソース割り当てにより必要なハードウェアの量が最適化される。
論理関数の典型的な実用的実装では、論理要素の多段ネットワークが使われる。RTL記述を出発点として、論理合成ツールは設計に対応する多段ブーリアンネットワークを構築する。
そして、このネットワークをまず実装に依存しない技法で最適化する。実装に依存しない最適化での典型的なコスト関数は論理関数の総リテラル数である。
さらに、実装依存の最適化では、上記で得られた論理回路を指定された実装の論理ゲートのネットワークにしていく。コスト関数もより具体的なものとなっていく。例えば、利用可能な論理ゲート数の上限、各ゲートのサイズの下限、許容遅延範囲、消費電力などにより回路が最適化される。