邏輯綜合

在集成電路設計中，邏輯合成（logic synthesis）是所設計數字電路的高抽象級描述，經過布爾函數化簡、優化後，轉換到的邏輯門級別的電路連線網表的過程。

## 概述

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

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

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

## 歷史

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

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

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

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

## 邏輯元件

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

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

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

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

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

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

## 多層次邏輯的優化

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

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

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

## 參考文獻

- Electronic Design Automation For Integrated Circuits Handbook, by Lavagno, Martin, and Scheffer, ISBN 978-0-8493-3096-4 A survey of the field of Electronic design automation. The above summary was derived, with permission, from Volume 2, Chapter 2, Logic Synthesis by Sunil Khatri and Narendra Shenoy.
- A Consistent Approach in Logic Synthesis for FPGA Architectures, by Burgun Luc, Greiner Alain, and Prado Lopes Eudes, Proceedings of the international Conference on Asic (ASICON), Pekin, October 1994, pp. 104–107.

## 延伸閱讀

- also as published as softcover ISBN 978-0-387-31004-6 in 2006