逻辑综合

在集成电路设计中，逻辑合成（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最为知名。在十几年的时间内，逻辑综合技术迅速转变成市场上销售的电子设计自动化产品。

随着集成电路的规模的不断增大，逻辑综合工具的重要性日益凸显。首先，由于电路十分复杂，过去适合小规模、中规模集成电路的技术方法不再具有效率的优势，此外，在深亚微米级的超大规模集成电路中，元件的互连延迟变得十分复杂，但是这一情况对于电路的正常工作十分重要，现代的硬件描述语言和逻辑综合、物理设计工具可以很好地处理这些问题。将先进的硬件描述语言、逻辑仿真、逻辑综合等工具配合使用，可以提高设计工作的效率和准确程度。

## 逻辑元件

<image>

在标准的设计流程中，逻辑设计是电子电路的功能设计（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