邏輯合成

在積體電路設計中，**邏輯合成**（英語：**logic synthesis**）是所設計數位電路的高抽象級描述，經過布林函數化簡、優化後，轉換到的邏輯閘級別的電路連線網表的過程。

## 概述

通常，邏輯綜合的信息來源是硬體描述語言 —— 主要是 VHDL 和 Verilog 等，設計人員通常使用硬體描述語言來進行電路的高級抽象（通常是數位電路暫存器傳輸級的數據、行為）描述數位電路的邏輯功能，這樣他們可以把更多精力投入功能方面的設計，而避免在一開始就研究可能極其複雜的電路連線。

然而，從電路的高級抽象描述到實際連線網表，並不是一項簡單的工作。在以前，這需要設計人員完成邏輯函數的建立、簡化、繪製邏輯閘網表等諸多步驟。隨著電路的集成規模越來越大，人工進行邏輯綜合變成了一項十分繁瑣的任務。

隨著電子設計自動化的發展，邏輯綜合這一步驟可以由計算機工具輔助完成。但是，由於自動化邏輯綜合工具並不總能夠產生最優化的邏輯閘網表，因此人工的介入仍然不可缺少。某些工具能夠在可程式化邏輯裝置，如可程式化陣列邏輯（Programmable Array Logic, PAL）和現場可程式化邏輯閘陣列（Field Programmable Gate Array, FPGA）上生成數據流過程，而另一些工具則可以生產特殊應用積體電路。邏輯綜合是電子設計自動化的一個重要方面。

## 歷史

邏輯綜合的發展可以追溯到喬治・布林（1815－1864）對邏輯代數的研究（邏輯代數現在也被稱為「布林代數」）。1938 年，克勞德・香農展示了如何使用邏輯代數來描述電路開關切換的過程。在早期，邏輯設計牽涉了對真值表的處理（如利用卡諾圖）。通過將一系列規則將卡諾圖上的某些項進行合併，可以得到最小化的邏輯，即邏輯式可以得到簡化。人工進行上述的操作可以處於四到六個變量的卡諾圖。但是以圖形表示的卡諾圖不適合算法的導出，因此人們需要研究代數形式的邏輯化簡算法。:189

對邏輯最小化進行自動化的第一步是引入奎因－麥克拉斯基算法，它可以在計算機上執行。進行邏輯簡化的目的是得到使用最少數量的邏輯裝置，並精確地對表達原始邏輯式的意義。人們可以使用卡諾圖來完成變量較少的邏輯函數的化簡。現在，Espresso 啟發式邏輯簡化器（Espresso heuristic logic minimizer）成為了完成這一過程更有效的工具。早期數位邏輯的另一個研究領域是對有限狀態機的簡化和編碼，這一工作對於當時的設計者來說並不是件容易的工作。邏輯綜合的應用大多於數位計算機設計相關。IBM 和貝爾實驗室在邏輯綜合自動化工具發展的早期扮演了關鍵的角色。從分立的邏輯閘到可程式化邏輯陣列（Programmable logic arrays, PLA）促進了高效率的兩級邏輯最小化的發展，這是由於兩級描述中的最小化過程可以減少可程式化邏輯陣列的面積。

然而，兩級的邏輯電路在超大型積體電路中的重要程度受到限制。大多數的設計者使用多級邏輯。實際情況是，幾乎所有電路的暫存器傳輸級（Register-transfer level, RTL）描述或其他行為級描述都是多級的。早期 IBM 的 LSS 曾被用來設計多級電路。它使用了局部的變形來簡化邏輯。LSS 以及 Yorktown Silicon 編譯系統在 1980 年代促進了邏輯綜合的研究進程。一些大學將這些研究領域公開，其中加州大學伯克利分校的 SIS、加州大學洛杉磯分校的 RASP 以及科羅拉多大學博爾德分校的 BOLD 最為知名。在十幾年的時間內，邏輯綜合技術迅速轉變成市場上銷售的電子設計自動化產品。

隨著積體電路的規模的不斷增大，邏輯綜合工具的重要性日益凸顯。首先，由於電路十分複雜，過去適合小規模、中規模積體電路的技術方法不再具有效率的優勢，此外，在深亞微米級的超大型積體電路中，元件的互連延遲變得十分複雜，但是這一情況對於電路的正常工作十分重要，現代的硬體描述語言和邏輯綜合、物理設計工具可以很好地處理這些問題。:211 將先進的硬體描述語言、邏輯仿真、邏輯綜合等工具配合使用，可以提高設計工作的效率和準確程度。

## 邏輯元件

在標準的設計流程中，邏輯設計是電子電路的功能設計（Functional design）轉換到以邏輯、算數以及控制流程的表示形式。這一步驟的成果通常是一個暫存器傳輸級描述。邏輯設計之後的下一步是電路設計。在現代的電子設計自動化中，邏輯設計可以通過使用基於行為級描述的高階合成工具自動完成。

邏輯功能元件通常由與、或、互斥或、與非等邏輯閘組成，它們在數位電路中是最基本的電路元件。使用這些邏輯元件可以實現運算等功能。諸如加法器、乘法器（Binary multiplier）都是由基本的邏輯元件構成的。

在邏輯綜合之前，設計人員通常使用高級抽象的硬體描述語言，這通常不涉及所使用的具體元件製程。邏輯綜合過程將高級抽象的描述與具體的元件製程結合起來。邏輯綜合公司和硬體廠商通常進行合作，後者把基礎元件（如各種邏輯閘）的硬體描述語言進行預定義，附加在邏輯綜合工具里，這些預定義包含了基礎元件的功能、時序等方面的信息。這些信息的集合叫做「製程庫」。有的時候，系統提供的製程庫並不是最優化的，設計人員需要自己完成某個特定製程庫的定義。

## 高級綜合或行為級的描述

為了提高設計人員的工作效率，人們致力於電路的行為級描述的研究，並在 2004 年推出了首款商用解決方案，這些工具可以用來設計複雜的特殊應用積體電路和現場可程式化邏輯閘陣列應用。這些工具可以在 C 層次到暫存器傳輸級之間自動工作，用來實現門級別的設計。如今，高級綜合，也被稱為行為級綜合，主要指從高級語言，例如 C 語言等，來實現邏輯電路的合成，而邏輯綜合則特指從電路的結構、邏輯功能向暫存器傳輸級的轉換。

儘管自動化邏輯綜合工具已經有一定的發展，但是該技術仍然有不完善之處。硬體描述語言只有一部分子集能夠被正確轉化，它們被稱為「可綜合的」。

## 多層次邏輯的優化

具有實用邏輯功能的電路通常使用了多層次的邏輯網絡。現代的電路綜合工具，可以讀取、識別暫存器傳輸級的硬體描述語言代碼，構建對應的多層次邏輯電路網絡。不過有的時候，兩個電路雖然能夠實現基本相同的邏輯功能，但是由於二者代碼不盡相同，其中一個綜合生成的門級網表可能遠比另一個複雜。例如，在 Verilog 里，設計人員如果不指名向量暫存器的位寬，那麼邏輯綜合產生的網表會比指明位寬的情況龐大得多；:204 另外，如果 if-else 語句結構沒有指明所有可能出現的情況，雖然在功能驗證時不會出現問題，但是邏輯綜合工具有可能認為設計人員在定義一個電平敏感的閂鎖。:219 這就需要設計人員掌握一定的硬體描述語言編程技巧，並使用良好的代碼風格。

接下來，綜合工具會使用對設計者來說不可見的技術方法，將這個邏輯電路網絡進行優化。優化的內容，是在此階段採取一些與具體半導體元件製程無關的計算機技術，來簡化邏輯函數，從而讓所用的邏輯閘數減少，並滿足一定的時序、面積、功耗要求。這一步所完成的任務和人工利用卡諾圖化簡邏輯函數的目的一致，不過自動化的邏輯綜合工具大大降低了人工操作的難度和錯誤率。

最後，優化過後的邏輯閘網表將進一步接受各種驗證，保證其功能符合設計人員的預期。然後，網表將被送往積體電路硬體廠商，在那裡技術人員將採用元件與具體元件製程相關的技術，根據邏輯閘網表製造真實的電路，如特殊應用積體電路。

## 參考文獻

## 延伸閱讀

* Jie-Hong (Roland) Jiang, Srinivas Devadas. Logic synthesis in a nutshell. Laung-Terng Wang, Yao-Wen Chang, Kwang-Ting Cheng (編). Electronic design automation: synthesis, verification, and test. Morgan Kaufmann. 2009. ISBN 978-0-12-374364-0. chapter 6.
* Gary D. Hachtel; Fabio Somenzi. Logic synthesis and verification algorithms. Springer. 1996. ISBN 0-7923-9746-0.  also as published as softcover ISBN 978-0-387-31004-6 in 2006
* Soha Hassoun, Tsutomu Sasao (編). Logic synthesis and verification. Kluwer. 2002. ISBN 978-0-7923-7606-4.

## 相關條目

* 電子設計自動化
* 暫存器傳輸級
* 功能驗證