放置 (集成电路)

放置（）是電子設計自動化中的一个重要步骤，属于物理设计流程的一部分，在這過程中會把電路元件安置在指定面積的晶片上。如果电路的布局沒有設計好，那么集成电路芯片的性能将会受到影響甚至部份失靈或出現嚴重的故障，而且会因为納米級別的微電路連線設計得不到優化（对连线的配置称为布线），導致晶片的制造效率降低甚至增加了不良品的比率。因此，电路的布局人员必须考虑到对多个参数的优化，以使电路成品能够符合预定的性能要求。IC设计中的放置与布线步骤通常合称为“放置与布线”。

放置器（placer）以给定的已综合电路网表和工艺库为输入，生成一个合法的放置布局。该布局会根据上述目标进行优化，并为单元尺寸调整与加缓冲做好准备——这是满足静态时序分析和信号完整性所必需的步骤。随后进行时钟树综合和布线，完成物理设计过程。在许多情况下，物理设计流程的部分或全部会迭代若干次，直到实现设计收敛。

 应用细节 
在特定應用積體電路（ASIC）的情况下，芯片核心布局区域由若干固定高度的行组成，行与行之间可能有间隔也可能相邻。每一行由多个可被电路组件占据的站位（sites）构成。未被任何组件占据的站位称为空闲站位。电路组件通常为标准单元、宏块或 I/O 焊盘。A. Kahng, J. Lienig, I. Markov, J. Hu: "VLSI Physical Design: From Graph Partitioning to Timing Closure", Springer (2022), , , pp. 10-13.标准单元的高度固定，等于行的高度，但宽度可变，且其宽度为站位数的整数倍。

相比之下，宏块通常比标准单元大，且高度可变，可跨越多行。有些宏块可能已有预先分配的位置（例如来自之前的布图规划），此时放置器只需为标准单元分配位置，这类宏块通常称为固定宏块（fixed blocks）。另外，也存在部分或全部宏块未预先定位的情形，此时需要与标准单元一起进行放置，这通常称为混合模式放置（mixed-mode placement）。

除了ASIC外，放置在门阵列结构（如现场可编程逻辑门阵列FPGA）中也非常重要。在FPGA中，预制的逻辑单元通常按行（或“阵列”）排列，行间以布线通道隔开。A. Kahng, J. Lienig, I. Markov, J. Hu: "VLSI Physical Design: From Graph Partitioning to Timing Closure", Springer (2022), , , pp. 14-15.放置的任务是将电路的子电路映射到可编程的FPGA逻辑单元中，保证后续布线阶段能够完成。

 目标与约束 
放置问题被表述为有约束的优化问题。芯片的时钟周期由其最长路径的延迟决定，该最长路径通常称为关键路径。在给定性能规范下，放置器必须确保不存在延迟超过最大允许值的路径。

其他主要约束包括：

 避免电路组件之间的重叠（即网表中的实例互不重叠）。
 将电路组件放置到预定的站位上。

通常存在多个优化目标，包括：

 总线长度（Total wire length）：设计中所有互连线长度的总和。
 布线拥塞（Routing congestion）：局部拥塞定义为某一区域所需布线长度与该区域可用布线轨道长度之间的差值；局部拥塞值可用若干方式聚合，例如加总前10%最大的值。
 功耗（Power）：动态开关功耗依赖于布  线长度，而布线长度又受组件位置影响。

此外，放置过程能快速完成也是一个重要的期望。

在大多数现有放置器中，总线长度通常是首要目标，并作为其它优化的先导——例如功耗与延迟往往随总线长度增大而增大。总线长度决定了布线需求以及该需求能否被可用的布线轨道（布线供给）满足。然而，将线尽可能缩短有时会导致局部布线需求超过该处的布线供给。这类情况常需布线绕行，从而增加线长和信号延迟。因此，在对总线长度做初步优化之后，处理布线拥塞也非常重要。

在功耗最小化方面，通常会识别出切换活动因子较高的信号并优先缩短这些信号的布线。当大量“热”（活动量大的）组件被放置在相近位置时，可能形成热点并导致有害的温度梯度。在这种情况下，可通过将组件适当分散来缓解。

 基本技术 
放置分为“全局放置”和“详细放置”。全局放置通过在全局尺度上将所有实例分配到合适的位置来引入显著变化，允许存在少量重叠；详细放置则把每个实例移动到附近的合法位置，布局变化很小。放置结果与整体设计质量最密切相关，尤其取决于全局放置的表现。

早期的集成电路放置技术可归类为组合优化。对于含数千或数万个组件的IC设计，基于模拟退火的方法（如TimberWolf）通常能给出最佳结果。随着IC设计扩展到数百万组件，放置开始利用超图划分，采用诸如Capo的嵌套划分框架。组合方法能直接避免组件重叠，但在大规模互连优化上存在困难；它们通常具有随机性，多次运行同一输入可能产生截然不同的结果。

用于全局放置的解析方法将互连长度用连续函数建模，并在组件密度约束下直接最小化该函数。与组合方法相比，这类方法运行更快、扩展性更好，但不能防止组件重叠，因此需要用组合方法进行后处理以完成详细放置。二次放置（Quadratic placement）是早期的一种解析方法：它用二次函数来建模互连长度，并采用高性能的二次优化技术。该方法在提出时既展示了有竞争力的结果质量，也表现出比组合方法更稳定的特性。GORDIAN将线长代价表述为二次函数，同时通过递归划分实现单元的分散。另有算法将放置密度作为一个线性项加入二次代价函数中，并通过纯二次规划来求解放置问题。常见的改进如按上一迭代中每条网线长度的倒数对该网线加权；在该过程收敛时，这会最小化关于线长的线性目标。大多数现代二次放置器（如KraftWerk、FastPlace、SimPL）遵循这一框架，但在确定线性密度力的启发式方法上各有差异。

非线性放置则用指数（非线性）函数建模线长，并用局部分段二次函数建模密度，以期获得更高的建模精度和更好的结果质量。后续的学术工作包括APlace和NTUplace等算法。

ePlace是一种先进的全局放置算法。它通过模拟静电场使实例相互远离，从而将质量开销降到最低并取得良好的性能。

在 2021 年，谷歌大脑报道了将人工智能技术（特别是强化学习）应用于放置问题并获得良好结果的研究。然而，该结果颇具争议：论文中未与现有放置器做直接的一对一对比，且由于包含专有

内容而难以复现。至少有一篇一开始持肯定态度的评论在进一步审查后已被撤回。

 相关 
 電子設計自動化
 设计流程
 布图规划
 物理设计
 集成电路设计
 放置与布线

 延伸阅读 
下列学术期刊提供了有关电子设计自动化的更多信息：
 IEEE Transactions On Computer-Aided Design Of Integrated Circuits And Systems
 ACM Transactions On Design Automation

下列学术文献解释了用于元件布局多对象（功率、延迟、面积和连线长度）优化的元启发式算法：
  Fast Fuzzy Force-Directed/Simulated Evolution Metaheuristic  for Multiobjectice VLSI Cell Placement
 Electronic Design Automation For Integrated Circuits Handbook, by Lavagno, Martin, and Scheffer, ISBN 0-8493-3096-3 A survey of the field of Electronic Design Automation.  The above summary was derived, with permission, from Volume II, Chapter 5, Digital Layout -- Placement by Andrew Kahng and Sherief Reda.

 参考 

P
P