目录
10.2.1 Simulated annealing basics
10.2.2 Normalized Polish expression——切片平面图
10.2.2.2 Neighborhood structure
10.2.3 B*-tree for compacted floorplans
10.2.3.1 From a floorplan to its B*-tree
10.2.3.2 From a B*-tree to its floorplan
10.2.3.4 Neighborhood structure
10.2.4 Sequence pair for general floorplans
10.2.4.1 From a floorplan to its sequence pair
10.2.4.2 从序列对到平面图 给定序列对(Gþ, G-)、
10.3 分析法analytical formulations
12 Global and detailed routing
10 Floorplanning
10.1前言
10.1.1 基础介绍
楼层规划有两种常用的方法,即模拟退火和分析法。基本上,基于模拟退火的平面规划依赖于模块间几何关系的表示。而分析方法通常直接捕捉绝对关系。
拓扑表示法对模块操作和基于模拟退火的平面规划的复杂性有深刻影响。
本章将介绍三种常用的平面图表示法,即归一化波兰表达式 [Wong1986]、B*树[Chang 2000]和序列对[Murata 1995]。
总的来说,这些表示法高效、灵活,并能有效模拟 几何关系(如左、右、上、下关系) 的几何关系(如左、右、上、下关系)。
基于模拟退火的平面规划最后比较了近期文献中流行的平面图表示法。
除了芯片面积最小化之外,现代VLSI布局设计还需要处理一些重要问题,如软模块和固定轮廓约束。与具有固定尺寸(宽度和高度)的硬模块不同,软模块的形状在布局设计过程中需要确定,尽管其面积是固定的。
因此,平面布局师需要为每个软模块找到一个理想的纵横比,以优化平面布局成本。正如[Kahng 2000]所指出的,现代VLSI设计是基于固定芯片尺寸(固定轮廓)的平面布局,而不是可变芯片尺寸的。一个没有考虑固定轮廓约束的面积优化平面布局可能是无用的,因为它可能无法适应给定的轮廓。因此,现代平面布局应该考虑固定轮廓的因素。
随着晶体管特征尺寸的缩小,设计复杂性急剧增加。为了应对不断增加的设计复杂性,知识产权(IP)模块被广泛地用于大规模设计的重复利用。因此,现代VLSI设计通常由大规模功能模块组成,已经有数十亿晶体管的设计已经投入生产。
因此,对于现代芯片设计来说,能够放置和优化大规模模块的高效设计方法和工具至关重要。除了改进平面布局工具外,平面布局框架也在不断发展,以解决设计复杂性带来的挑战。本章还讨论了针对大规模建筑模块设计的多层次框架。
10.1.2 问题表述
楼层规划问题可以表述如下:设B = {b1, b2, ... , bm} 是一个包含m个矩形模块的集合,它们分别的宽度、高度和面积分别用wi、hi和ai表示,其中1 ≦ i ≤ m。每个模块都可以自由旋转。让(xi, yi)表示芯片上模块bi的左下角坐标,其中1 ≤ i ≤ m。一个布局F是对每个bi,其中1 ≤ i ≤ m,分配(xi, yi)的方式,使得没有两个模块重叠。布局规划的目标是优化预定义的成本度量,比如区域(即F的最小边界矩形)和线长(即由布局引起的所有互连长度的总和)的组合。
对于现代平面设计,可能还需要考虑其他成本,如路由性、功耗和散热。
10.1.3 平面规划模型
我们可以将平面图分为两类进行讨论:(1)切分平面图和(2)非切分平面图。
切分平面图可以通过对平面图进行水平或垂直的重复切割获得切分平面
而非切分平面图则不能。
每个硬模块的给定尺寸必须保持不变。所有模块均可自由旋转;如果模块旋转,其宽度和高度将互换
图 10.1 显示了两个平面图示例。首先考虑图 10.1a 所示的非切分平面图,其中有五个模块。
这五个模块可以重新排列,形成图 10.1b 所示的切分平面图。
图 10.1b 所示的切分平面图。
在该平面图中,每个模块都可以通过水平或垂直重复切割来提取。
10.1.3.1 切分平面图
根据切分平面图的切分特性,我们可以使用二叉树来表示切分平面图 [Otten 1982]。
切分树是一棵二叉树树叶为模块,内部节点为切分类型。切分类型有两种切分类型有两种:H 切分和 V 切分。
H切分水平分割平面图,左(右)子节点代表底部(顶部)子楼层平面图。同样,V 切分垂直分割平面图,左(右)子平面图代表左(右)子楼层平面图
请注意,一个切分平面图可能对应不止一个切分树, 因为切割线的选择顺序可能不同。这种表示法的重复可能会导致更大的求解空间,并使优化过程复杂化。因此,最好能修剪这种冗余,以方便平面图设计。因此,如果一棵切片树不包含与其右侧子节点具有相同切割类型的节点,我们就称它为倾斜切片树.
图 10.2 显示了图 10.1b 中的切分平面图及其相应的切分树。
树根 V 代表将平面图分为左侧子平面图(模块 1 和 2)和右侧子平面图(模块 3、4、5)的垂直切割线。
根节点的根的左侧子节点是节点 H,它将左侧子楼层平面图横向划分为底部子平面图(模块 1)和顶层子平面图(模块 2)。
类似地根的右子节点将子楼层平面图水平切分为底部子楼层平面图(模块 3)和顶部子楼层平面图(模块 4 和 5)子楼层平面图,而顶部子楼层平面图又被进一步划分为底部(模块 4)和顶部(模块 5)子楼层平面图。
与图 10.2a 中的平面图相对应,有两个切分树。图 10.3a
和图 10.3b 显示了这两个切片树。图 10.3a 中的切分树是一棵非倾斜切分树,因为有一个节点 H 是另一个节点 H 的右子节点(见图 10.3a 中的虚线框)。
虚线框)。图 10.3b 中的切分树是一棵倾斜的切分树。
10.1.3.2 非切片平面图
非切分平面图比切分平面图更通用。但是由于其非切分结构,我们不能使用切分树来建模。
但是,我们可以使用水平约束图 (HCG) 和垂直约束图 (VCG)来模拟非切分平面图。水平
约束图定义模块的水平关系,垂直约束图定义模块的垂直关系。
在约束图中,一个节点代表一个模块。如果在 HCG(VCG)中有一条从节点 A 到节点 B 的边、
则模块 A 位于模块 B 的左侧(底部)
非切分平面图示例。(b) 水平约束图。(c) 垂直限制图。
请看图 10.4a 所示的非切分平面示例。图 10.4b 和图 10.4c 分别显示了该平面图相应的水平和垂直约束图。
由于模块 1 位于模块 4 的左侧,我们在图 10.4a 中添加了一条从节点 1 到节点 4 的有向边。同样,模块 2 位于模块在模块 4 的下方,因此我们在垂直约束图中添加一条从节点 2 到节点 4 的有向边。
根据左右关系和上下关系,我们可以构建一个与平面图相对应的水平和垂直约束图。
10.1.3.3 Floorplanning cost
平面规划的目标是优化一个预定义的成本函数,例如最小边界矩形得出的平面图面积
平面图面积与芯片硅成本直接相关。
面积越大,硅成本越高。平面图边界矩形中未被任何模块覆盖的空间称为空白空间或死角。
还将考虑其他平面规划成本,如导线长度。
较短的导线长度不仅能减少信号延迟,还能在路由阶段促进导线互联。
平面规划目标也可以是一个综合成本,如面积加线长。
图 10.5 给出了同样七个模块的两种不同平面图。
左图(见图 10.5a)是面积最优的平面图,因为模块之间没有浪费面积。
右图(见图 10.5b)是一个非最佳平面图。
很明显,右侧平面图的面积大于左侧平面图, 因为图 10.5b 中的平面图中存在空白区域。
10.2 模拟退火法simulated annealing
模拟退火(SA)可能是最常用的平面图优化方法。[]Kirpatrick 1983]。它的显著优点是可以轻松地将优化目标纳入目标函数。
要在平面图设计中应用模拟退火, 首先需要将平面图编码为解决方案, 这被称为平面图表示,它模拟了平面图中各模块的几何关系。
平面图表示法不仅能诱导出一个解空间,其中包含由表示法定义的所有可行解,还引导模拟退火搜索,在解空间中找到所需的平面图。
在本节中,我们将详细介绍
三种流行的平面图表示法,即归一化波兰表达式[Wong 1986]、B*树[Chang 2000]和序列对[Murata 1995],并总结了最近一些流行的平面图表示法的特性。
10.2.1 Simulated annealing basics
图 10.6 展示了模拟退火过程。图 10.6 中
在图 10.6 中,平面图的成本(纵轴表示)与平面图配置的状态(横轴表示)的函数关系如图所示。
给定初始解决方案 S,它会尝试搜索成本最低的全局最优平面图解决方案。
对于一种贪婪的方法,它可能会反复搜索一个成本更低的相邻解决方案,直到找不到这样的相邻解决方案为止。
对于这种贪婪机制很有可能会陷入局部最优解,如图 10.6 中的 L。
一旦卡在 L 处,就不可能摆脱这个局部最优解,因为所有相邻解的成本都比 L 高。
与贪婪法不同,模拟退火法采用爬山技术来摆脱局部最优解 L。
提供了一种非零概率,即使成本较高,也能从当前解移动到邻近解。有了这种上坡移动能力,就有可能无论初始解从哪里开始,都能达到全局最优解 G。
接受邻近解的概率取决于两个因素: (1)上坡移动的幅度和 (2) 搜索时间。
为了实现这一想法接受新解 S’ 的概率定义如下
其中,△C = cost(S’) - cost(S),T 是当前温度。
每次下坡移动都会被接受(概率为1),而接受上坡移动的概率取决于移动的大小(成本差异)和搜索时间(退火温度)。
一开始,我们会被分配一个较高的温度。随着退火过程的进行,温度通常会以固定比例(如 0.9)降低。例如T = T0、T1、T2、... , Ti = riTi-1,r < 1。
在每个温度下,我们都会扰动当前的解决方案,以搜索若干个k 次(k 为用户定义值),并保留迄今为止找到的最佳解决方案。这个过程一直持续到温度降低到冻结 "状态或达到预定的终止条件。然后,报告找到的最佳解决方案。
很明显,如果成本增加较少和/或当前温度 T 较高,则接受 "劣质 "解决方案的概率较高。
在实际应用中,模拟退火通常能有效地搜索出理想的解决方案。
整个模拟退火过程就好比退火熨斗来制作工艺品,这也是模拟退火这一名称的由来。
在高温下,铁原子会获得更多能量,从而有更大的
自由移动。随着温度的逐渐降低,原子会逐步达到平衡状态。
因此,铁就形成了理想的形状。
算法10.1 总结了模拟退火的一般算法。
除了模拟退火法,我们还可以采用迭代法(或贪婪搜索法)进行平面设计。对于这种方法,所有上坡移动都会被拒绝。这种方法更容易实现,而且通常能更快地找到解决方案。但是,这种方法很可能会在某个局部最优点卡住(见图 10.6)。
因此,它的求解质量在很大程度上取决于所选的初始解,这种方法在平面设计中不如模拟退火法受欢迎。
模拟退火有四个基本要素:
(1) 解空间
(2) 邻域结构
(3) 成本函数(目标函数)、
(4) 退火时间表
平面图表示法定义了解空间 和 邻域结构
成本函数由优化目标定义
退火计划捕捉退火过程中的温度变化
10.2.2 Normalized Polish expression——切片平面图
在第 10.1.3 节中,我们使用二叉树来模拟切分平面图。
我们可以 使用波兰表达式
记录二叉树,其中
。这里,每个数字表示一个模块,H (V ) 表示切分平面图中的水平(垂直)切口。波兰表达式是 二叉树的后缀排序,可通过算法 10.2 中给出的二叉树后序遍历获得。E 的长度为 2n -1,其中 n 是模块数。
由于波兰表达式是切分树的后序,因此它具有
投票属性:对于每个子表达式
, 操作数的数量总是大于运算符的数量。
如第 10.1.3 节所示,一个切分平面图可能会产生多个切分树,导致大量冗余。这种冗余会扩大解解空间,并使搜索所需解的过程复杂化。因此,我们希望剪除这些冗余解。
基于以上,定义与倾斜切分树 T 相对应的规范化波兰表达式 E;倾斜切分树不包含与其右子节点相同切分类型的任何节点,规范化波兰表达式也是如此,它不包含 E 中相同类型(即 "HH "或 "VV")的连续运算符。
这样,一组有 n 个模块的倾斜切分树与相应的长度为 2n - 1 的规范化波兰表达式集之间就形成了 1-1 的对应关系。
二叉树的后序遍历
要将规范化波兰语表达式 E 转换为相应的平面图 F、
我们可以使用一种自下而上的方法,在 E 的基础上递归组合切分子平面图。
有两个二元运算符,即 H 和 V。
如果 a 和 b 是两个模块或子平面图、
表达式 abH 意味着把 a 放在 b 的下面、
而 abV 则表示将 a 放在 b 的左边、
如图 10.7 所示。
打包是通过后序程序进行的。
每次,我们都会根据运算符类型将两个分层子平面图组合起来。
例如 E= 12H 表示模块 1 放置在模块 2 下方、
而 E= 34V 则意味着模块 3 位于模块 4 的左侧。
对于 E = 123H ... ,因为 E 是后置表达式、
运算符 H 取 操作数 2 和 3、
模块 2 位于模块 3 的左边。
由于 E 是后缀形式, 我们可以使用堆栈来简化打包过程(见算法 10.3)。
每次,我们都要检查 E 中的一个操作数或一个运算符。
如果是操作数,我们将其推入堆栈;
如果是操作符, 则从栈中取出两个操作数,并根据两个操作数和操作数推导出新的子平面图。
然后,生成的子平面图被视为操作数并推入栈中。
这个过程一直持续到 E中的所有操作数/运算符处理完毕,并从堆栈中弹出最终平面图。
Example 10.5
给定一棵二叉树,如图 10.8 所示、
我们可以根据后序遍历构建波兰表达式 E=12H34H5HV。
图 10.8 给出了根据 E 构建相应平面图的步骤。
在步骤 (a) 中,我们将模块 1 置于模块 2 下方,从而得到切分平面图 12H。
在步骤(b)中,我们将模块 3 置于模块 4 下方,得到切分平面图 34H。
在步骤(c)中,我们将切分平面图 34H 置于模块 5 下方,得到切分平面图 34H5H。
最后一步 ,将子平面图 12H 置于子平面图 34H5H 的左侧,得到图 10.9d 中的最终平面图 12H34H5HV。
下表验证了投票属性。
累计5个操作数、4个操作符
对于每一列,操作数的数量总是大于运算符的数量。
此外,E = 12H34H5HV 是一个规范化的波兰表达式,因为 没有相同类型的连续运算符。
从给定的切分树中得到归一化波兰表达式 E = 12H34H5HV
10.2.2.1 Solution space
所有规范化波兰语表达式的集合构成了求解空间。
给定一个有 n 个操作数(模块)和 n-1 个运算符的规范化波兰语表达式,
组合的总数可以通过具有 2n-1 个节点的无标签二叉树的数量和 n 个标签的排列来计算。
n 个标签的排列组合为 n!
一棵有 n 个节点的无标记 p 叉树的计数公式为
应用斯特林近似法
并将 p 设为 2,我们可以得到以下渐近形式
内部节点的 H/V 标签
和外部节点的排列(n!),
n 个模块的倾斜切分平面图(规范化波兰语表达式)的总数为
请注意,这个上限并不严格。
关于倾斜切分平面图的总数
的更紧约束的推导,读者可以参阅 [Shen 2003]。
10.2.2.2 Neighborhood structure
邻域结构
给定一个解决方案后,我们可以对其进行扰动,从而得到一个 "邻近 "解决方案。
扰动在寻找理想解法的过程中起着重要作用。
对于一个规范化的波兰表达式,
如果两个操作数之间没有操作数,那么这两个操作数就是相邻的。
如果两个操作符之间没有操作数或运算符,则称这两个操作符相邻。
如果一个操作数和一个运算符在 E 中相邻,则这两个相邻。
运算符链是相邻运算符的序列。
对于规范化的波兰表达式,不允许连续出现相同类型的运算符,因此只有两种类型的链、
HVHVH... 或 VHVHV... 。换句话说,任何链都不能是 HH... 或 VV... 。
规范化波兰语表达式中的链条示例
在图 10.10 中,操作数 1 和 2 相邻,操作数 3 和 4 也相邻;
操作数 3 和运算符 H 也相邻。
图 10.10 中有三条链 H、H 和 HV
我们定义了三种将一个规范化波兰表达式扰动为另一个规范化波兰表达式的操作。
Op1:交换两个相邻的操作数。
Op2: 将 V 改为 H,将 H 改为 V,从而反转一个链。
Op3:交换两个相邻的操作数和运算符。
在规范化波兰语表达式上执行 Op1 和 Op2,总是产生一个合法的规范化波兰语表达式。
然而,Op3 可能会使操作数不大于运算符数、 这违反了投票属性,或产生两个相同的连续运算符,这就违反了规范化波兰语表达式的属性。
因此,我们只接受那些能产生合法的规范化波兰表达式的 Op3 操作。
事实证明,检查 Op3 的合法性并不困难。
假设 Op3 将操作数
与运算符互换。
那么,只有当且仅当
时,交换才不违反投票属性,
其中,
是表达式
中运算符的个数。
两个规范化波兰表达式相邻的条件是: 如果其中一个表达式可以通过三种运算之一扰动到另一个表达式,则这两个规范化波兰语表达式被称为相邻表达式。
此外,这三种操作足以通过前面的操作序列从给定的规范化波兰语表达式生成任何规范化波兰语表达式。
例 10.7
例 10.7 中的扰动图解, 如图 10.11c 所示。我们进一步应用运算符 Op3 交换相邻操作数,再应用运算符 H4,得到
= 12H34H5HV。最终得到如图 10.11d 所示的平面图,死区为零。
图 10.11 举例说明了如何对规范化波兰表达式 E 进行这三种操作,以获得相应的切分平面图。
给定 E =12H4H35VH 和模块尺寸, 初始平面图如图 10.11a 所示。
应用 Op1 将相邻的两个操作数 4 和 3 互换,得到
=12H3H45VH,平面图如图 10.11b 所示。 然后应用操作数 2 反转最后一个操作数链 VH,得到
= 12H3H45HV,并得到如图 10.11c 所示的平面图。
我们进一步应用操作 3 交换相邻操作数和操作数 H4,得到
= 12H34H5HV。
因此 ,最终得到如图 10.11d 所示的平面图,该平面图的死区为零。
10.2.2.3 Cost function
面积和线长可能是平面图设计中最常用的两种成本。
我们可以采用以下成本函数进行模拟退火:
其中,A 是平面面积,Anorm 是平均面积、 W 是总线长、Wnorm 是平均导线长度、 a 控制着面积和线长之间的权重。
为了计算 Anorm 和 Wnorm,我们可以对初始规范化的波兰表达式进行扰动,通过三次运算得到 m 个平面图, 并 计算这些平面图的平均面积 Anorm 和平均线长 Wnorm。
m 的值与问题的大小成正比。
基于切片树的尺寸计算
为了说明规范化波兰语表达式的面积评估、 我们首先构建相应的倾斜切分树。
所有面积最小的可行平面图都记录在相应的节点中。
由于允许模块旋转,对于尺寸为(w, h)的模块,我们可能有两种可行的平面布局方案,即(w, h)和(h, w)。
当然,对于正方形模块,我们只有一种可能的实现方式。
平面图的尺寸可以通过自下而上的方式获得。
考虑一个非叶节点,其左子节点的维数为 (w1, h1) 的非叶节点,其左子节点的尺寸为 (w1, h1),其右子节点的尺寸为 (w2, h2)。
如果剪切类型为 H,则结果执行为(max(w1, w2), h1 + h2);
如果剪切类型为 V,则执行结果为(w1 + w2, max(h1,h2))。
一个节点的左子节点和右子节点各有两个可能的实现、
可能产生四个实现。
对于任意两个实现 mi= (wi,hi) 和 mj= (wj, hj)、
如果 wi≦wj 和 hi≦ hj,则 mi 主导 mj。
换句话说,执行 mj 是多余的、
是多余的,因为 mi 实现给出的平面图解的面积更小。
通过这种方法,我们可以剪除多余的实现。
斯托克迈尔证明,在合并两个节点后,所产生的非冗余切分平面图实现的数量仅呈线性增长 [Stockmeyer 1983]。(见练习 10.5)。
因此,可以在多项式时间内高效计算规范化波兰表达式的面积成本。
要计算线长
我们只能求近似值、
因为在平面图阶段还没有进行实际布线。
常用的线长近似法是测量网的半周长(HPWL)。
HPWL 是包围所有引脚的最小边界框的半周长。
如果没有给出引脚位置,我们可以利用模块中心来计算 HPWL。
Example 10.8
根据规范化波兰表达式 E = 12H34H5HV,找出面积最小的平面图。
表 10.1 列出了模块尺寸。
首先,我们构建相应的倾斜切分树,并用相应的叶节点记录每个模块的候选尺寸。
由于模块 2 和 4 是正方形,因此它们只有一个候选维度。
候选维度
(非冗余实现)以后序遍历顺序更新。
参见表 10.2 和图 10.12 中的步骤。
由此产生的被其他实现所支配的实现将被划掉。
根节点唯一的非冗余实现是 (8, 10)、Example 10.9
这意味着,该平面图的宽度 = 8,高度 = 10,面积 = 8 * 10 = 80。
该平面图的波兰语表达式 E = 12H34H5HV 的最小面积。
如果我们有多个根的非冗余实现,我们将选择面积最小的方案。
Example 10.9
给定图 10.13 中的平面图,计算连接模块 2、 4 和 5 的网的 HPWL。模块 2、4 和 5 的中心坐标分别为 (2,8)、(6,5) 和 (6,8.5)、
分别为(2,8)、(6,5)和(6,8.5)。最小边界框的高度为 3.5,宽度为 4。
该网的 HPWL 为 3.5 + 4 = 7.5。
10.2.2.3 Cost function
我们可以采用算法 10.4 中描述的经典模拟退火算法进行平面规划。
退火时间表为
初始温度设置为较高值,这样接受所有扰动的概率接近 1.0。初始温度的计算方法如下。
在模拟退火过程开始之前,我们扰动初始归一化波兰表达式一段时间,计算出
所有正(上坡)代价变化
的平均值。
然后,将 T0 初始化为
其中 P 是接受上坡方案的初始概率。
我们可以将 P 设得非常接近 1.0(但肯定不是 1.0)。
每次退火迭代时,温度都会按固定比率 r 降低。
大多数前人的研究都推荐使用 0.85。r 越大,退火时间就越长;
然而,r 越大,通常能得到更好的平面图解决方案。
然而,过长的运行时间是经典 SA 算法的一个显著缺点。
为了提高 SA 算法搜索理想解的效率,文献中提出了几种控制退火过程中温度变化的退火方案。
TimberWolf[Sechen,1986,1988]中使用的退火计划是最流行的方案之一。
它将 r 从最低值(0.8)逐渐增加到最高值(约 0.95),然后逐渐将 r 降回最低值.
最近,[Chen 2005b] 提出了一种快速模拟退火(Fast-SA)方案。
其动机是减少开始阶段的上坡移动次数,因为在这一阶段,大多数上坡移动都会导致劣解。
因为一开始就接受过多的上坡移动既无效率也无效果。
因此,可以采用贪婪搜索来更快地找到局部最优解。
从局部最优开始,我们再切换到正常的 SA。这样做可以节省搜索所需解的时间。
为了实现上述方案,Fast-SA 包括三个阶段:
(1) 高温随机搜索阶段、
(2) 伪贪婪局部搜索阶段、
(3) 爬山搜索阶段。
在第一阶段,温度被设置为一个非常大的值,因此接受劣解的概率接近 1。这样可以避免一开始就陷入局部最优。
在第二阶段 ,温度设为接近零,只接受少量劣解。
在第三阶段 ,温度升高,以便于爬坡寻找更好的解决方案。温度逐渐降低,并很有可能最终收敛到理想的解决方案。
图 10.14a 和图 10.14b 分别显示了经典 SA 和快速 SA 在搜索时间内的温度变化。
经典 SA 和快速 SA
由于快速 SA 方案节省了大量用于探索解空间的迭代次数,因此它可以在爬坡阶段将更多时间用于寻找更好的解。这使得退火更加高效和有效。
为了实现这种退火方案,我们通过快速退火法的温度更新函数 T,函数 T:
这里,r 是迭代次数,
是平均上坡成本,P 是接受上坡方案的初始概率,
是当前温度下的平均成本变化(新成本 — 旧成本),c 和 k 是用户指定的参数。
第一次迭代时,根据给定的初始概率 P 和平均上坡成本
设置温度。
因为 P 通常设置为接近 1, 它执行随机搜索以找到一个好的解决方案。
然后进入伪贪婪局部搜索阶段,直到第 k 次迭代。
这里,c 是用户自定义的参数,用于控制第二阶段的温度有多低。
我们通常选择较大的 c,使 T →0,使其只接受好的解来执行伪贪婪搜索。
迭代 k 次后,温度会跃升以进一步提高解的质量。
的值会影响温度的降低率。
如果相邻解的成本变化很大,
就会变大,从而导致温度降低速度减慢。
相反,如果
较小,则意味着邻近解决方案的成本变化很小;
在这种情况下,我们会更多地降低温度,以减少迭代次数。
由于成本函数归一化为 1,这意味着
小于 1,并确保温度降低。
第二阶段的迭代次数可由问题规模决定。
问题规模越小,k 值就越小。
对于典型的楼层规划问题,我们可以设置 c = 100,k = 7。
注意 快速 SA 的初始温度与经典 SA 相同(即
T1 = Davg/ln P)。
初始温度 T1 需要保持较高,以避免一开始就陷入局部最优状态。
10.2.2.4 Annealing schedule
这里,r是迭代次数,
是平均上坡成本,P是接受上坡解的初始概率,
是当前温度的平均成本变化(新成本旧成本),c和k是用户指定的参数。在第一次迭代中,根据给定的初始概率P和平均上坡代价
来设置温度。因为P通常被设置为接近于1,所以它执行一个随机搜索来寻找一个好的解决方案。然后,它进入伪贪婪的局部搜索阶段,直到第k次迭代。这里,c是一个用户定义的参数,用来控制第二阶段的温度温度。我们通常会选择一个较大的c来做T→0,这样它就只接受好的解决方案来执行伪贪婪搜索。
经过k次迭代后,温度不断上升,进一步提高了解的质量。
的值会影响温度的降低速率。如果相邻解的成本发生显著变化,
更大,因此温度降低较慢。相反,如果
较小,则意味着相邻解的代价变化很小;在这种情况下,我们更多地降低温度以减少迭代次数。由于代价函数被归一化为1,这意味着
小于1,从而保证了温度的降低。第二阶段的迭代次数可以由问题的大小来决定。问题的规模越小,k值就越小。我们可以为典型的平面规划问题设置c=100和k=7。请注意,Fast-SA的初始温度与经典SA的初始温度相同(即T1=
/lnP)。初始温度t1需要保持较高,以避免在一开始就陷入局部最优状态.
10.2.3 B*-tree for compacted floorplans
(用于压缩平面图的 B* 树)
B* 树以有序二叉树为基础,用于为紧凑平面图建模。
在紧凑的平面图中,任何模块都不能向左或向下移动。Chang 2000]。
因此,区域最优平面图总是与某个 B* 树相对应。
B* 树继承了有序二叉树的优良特性,B* 树非常容易实现,可以分别在恒定时间、恒定时间和线性时间内完成搜索、插入和删除三种原始树操作。
与切分平面图及其相应的切分树不同, 压缩平面图与其诱导的 B* 树之间存在唯一的对应关系。
换句话说,给定一个紧凑的平面图 F,我们可以构建与 F 相对应的唯一 B* 树,而 B* 树对应的包装与 F 相同。
紧凑平面图和其诱导的 B* 树之间的唯一对应关系是一个很好的特性,防止了搜索空间因冗余解而扩大 。并保证通过在 B* 树上搜索,可以找到区域最优布局。
下面,我们将介绍平面图和 B* 树之间的转换过程。
10.2.3.1 From a floorplan to its B*-tree
首先,我们将所有模块向左和向下压缩,以得到一个压缩后的平面图。
因为 B* 树只能为紧凑的平面图建模。
B* 树是一棵有序的二叉树,其树根与左下角的模块相对应。
与深度优先搜索(DFS)过程类似, 我们以递归方式为紧凑平面图构建 B* 树 T:从根开始,
首先递归构建左侧子树,然后构建右侧子树。
假设 Ri 是位于右侧并与模块 i 相邻的模块集合。
节点 ni 的左子节点对应 Ri 中最低的、未访问过的模块。
ni 的右子节点代表位于 与模块 i 的 x 坐标相同。
example 10.10
图 10.15 是根据图 10.15a 中给出的平面图构建 B* 树的示例。
图 10.15a 中的平面图构建 B* 树的示例。
首先,我们压缩左侧和底部的所有模块,得到如图 10.15b 所示的压缩平面图。
如图 10.15b 所示。模块 1 是 B* 树的根,因为它位于左下角。
模块 2 是模块 1 右侧最低的未访问相邻模块。
因此我们将节点 n2 设为节点 n1 的左子节点。模块 3 的 x 坐标与模块 1 的 x 坐标相同,并且是模块 1 上方最低的未访问模块,因此我们将节点 n3 设为节点 n1 的右子节点。
同样,节点 n4 是节点 n3 的左子节点,节点n6 是节点 n3 的右子节点,节点 n5 是节点 n4 的左子节点。
10.2.3.2 From a B*-tree to its floorplan
给定一棵 B* 树 T,其根代表左下角的模块,因此模块的坐标为 (xroot, yroot) = (0, 0)。
如果节点 nj 是节点 ni 的左侧子节点,则模块 j 位于右侧并与模块 i 相邻,即 xj = xi + wi。否则,如果节点 nj 是节点 ni 的右侧子节点,则模块 j 被置于模块 i 的上方,其 x 坐标与模块 j 的 x 坐标相同,即xj = xi。
因此,给定一棵 B* 树,只需在线性时间内遍历一次,就能确定所有模块的 x 坐标。
为了从 B* 树中高效计算 y 坐标,我们使用了等高线数据结构 [Guo 2001],以方便对模块进行操作。
等高线结构是一个双链列表,存储当前压实方向上的等高线坐标。
水平等高线可以减少计算新插入模块 y 坐标的运行时间。
如果没有等高线,计算新插入模块 y 坐标的运行时间将与模块数量成线性关系。
然而,通过保持等高线结构,计算一个模块的 y 坐标只需 O(1) 的摊销时间。
Example 10.11
找出与图 10.15c 中给出的 B* 树相对应的平面图。
模块尺寸见表 10.3。
起初没有模块, 因此,我们初始化轮廓数据结构 C = <(0,0) (∞,0)>。
根据深度优先的顺序,我们分六个步骤逐个打包模块。
具体处理过程说明如下,汇总于表 10.4,示意图见图 10.16。
步骤 (a): 因为 n1 是根节点,所以模块 1 的坐标是(0,0)。
插入模块 1 后又引入了三个轮廓点 Cnew = <(0, 6), (9, 6), (9, 0)>。
为了生成新的等高线列表,我们需要找到模块 1 x-跨度 [0, 9] 前后的两个子轮廓列表:Cbefore = <(0, 0)> 和 Cafter= <(∞, 0)>。
由此得到的轮廓 C = <Cbefore, Cnew, Cafter> = <(0, 0), (0,6), (9, 6), (9, 0), (∞, 0)>。
步骤(b):n2 是 n1 的左子节点。
因此,模块 2 的 x 坐标为 x2= x1 + w1 = 9。
为了确定模块 2 的 y 坐标,需要搜索轮廓 C在x跨度[x2, x2 + w2] = [9, 15] 之间的最大 y 坐标。最大 y 坐标为 0,因此 y2 = 0。
插入模块 2 又引入了三个轮廓点 Cnew = <(9, 8), (15, 8), (15, 0)>。
同样,我们需要找到模块 1 x跨度 [9, 15] 前后的两个子轮廓列表,以生成新的轮廓列表: Cbefore = <(0, 0), (0, 6), (9, 6)> 和 Cafter = <(∞,0)>。
得出的
C = <Cbefore, Cnew, Cafter> = <(0, 0), (0, 6), (9, 6), (9, 8), (15, 8)、 (15, 0), (∞, 0)>.
步骤(c):n3 是 n1 的右子模块。
因此,模块 3 的 x 坐标与模块 1 相同。
要确定模块 3 的 y 坐标,我们需要搜索等高线C,找出 x 跨度 [x3, x3 + w3] = [0, 3] 中的最大 y 坐标。因为最大 y 坐标是 6、
因此 y3 = 6。
插入模块 3 又引入了三个轮廓点 Cnew = <(0, 12), (3, 12), (3, 6)>。
我们得到了模块 3 x 跨度 [0, 3] 前后的两个子轮廓列表: Cbefore =<(0, 0)> 和 Cafter = <(9, 6), (9, 8), (15, 8), (15, 0), (∞, 0)>。
因此得到的轮廓 C = <Cbefore, Cnew, Cafter> = <(0, 0), (0, 12), (3, 12), (3, 6), (9, 6), (9, 8), (15, 8), (15, 0), (∞, 0)>。
步骤 (d):n4 是 n3 的左子格。因此,x4 = x3 + w3 = 3。
为了确定模块 4 的 y 坐标,我们搜索等高线,找到 x 跨度 [x4, x4 + w4] = [3, 6] 之间的最大 y 坐标。
因为最大 y 坐标是 6,所以 y4 = 6、
插入模块 4 后,又引入了三个等高线点 Cnew = <(3, 13), (6, 13), (6, 6)> 和两个子等高线列表,分别位于模块 4 的 x 跨度 [3, 6] 之前和之后: Cbefore = <(0, 0), (0, 12),(3, 12)> 和 Cafter = <(9, 6), (9, 8), (15, 8), (15, 0), (1∞, 0)> 。
因此,得到的轮廓 C = <Cbefore, Cnew, Cafter> = <(0, 0), (0, 12), (3, 12), (3, 13),(6, 13), (6, 6), (9, 6), (9, 8), (15, 8), (15, 0), (∞, 0)>。
步骤(e):n5 是 n4 的左子格。因此,x5 = x4 + w4 = 6。
x 跨度 [x5, x5 + w5] = [6, 12] 中的最大 y 坐标为 8、
因此 y5 = 8。
插入模块 5 即可得到三个轮廓点 Cnew = <(6, 13), (12、
13), (12, 8)> 以及模块 5 xspan 前后的两个子轮廓列表 [6, 12]: Cbefore = <(0, 0), (0, 12), (3, 12), (3, 13)> 和 Cafter= <(15, 8), (15, 0), (∞, 0)>.
由此得到的轮廓 C = <Cbefore, Cnew, Cafter>= <(0, 0), (0, 12), (3, 12), (3, 13), (6, 13), (12, 13), (12, 8), (15, 8), (15, 0), (∞, 0)>。
步骤 (f):n6 是 n3 的右子节点。
因此,x6 = x3 = 0。在 x 跨度 [x6, x6 + w6] = [0, 12] 中的最大 y 坐标为 13,所以 y6 = 13。
插入模块 6 引入了三个轮廓点 Cnew = <(0, 15), (12, 15), (12, 13)> 以及模块 6 x 跨度 [0, 12] 前后的两个子轮廓列表: Cbefore = <(0, 0)> 和 Cafter = <(12, 8), (15, 8), (15, 0), (∞, 0)>.
由此得到的等高线 C = <Cbefore, Cnew, Cafter> = <(0, 0), (0, 15), (12, 15), (12, 13), (12, 8), (15, 8), (15, 0), (∞, 0)>。
10.2.3.3 Solution space
B*-树的总数可以通过未标记的二叉树的数量和n个标签的排列来计算。
和10.2.2.1计算公式一致
10.2.3.4 Neighborhood structure
每棵B*-树对应一个平面图。因此,解决方案空间由所有具有给定节点(模块)的 B*-树组成。为了找到一个相邻的解,我们可以通过以下操作来扰动一个B*-树来得 到另一个B*-树:
Op1:旋转模块。
Op2:将一个节点移动到另一个位置。
Op3:交换两个节点。
对于Op1,我们为一个B*-树节点旋转一个模块,它不影响B*-树的结构。
对于Op2,我们将一个节点移动到B*-树中的另一个位置。Op2包括两个步骤,删除和插入,这将在后面解释。
对于Op3,我们交换了B*-树中的两个节点。
在打包B*树后, 我们得到一个平面图。
对于删除操作,有三种情况。请注意,在案例2和案例3中,模块的相对位置可能会在操作后发生变化,因此我们可能需要重建相应的平面图,以便进一步处理。
Case1: 一个叶节点。我们可以简单地删除目标叶节点。
Case2: 一个仅带有一个子节点的节点。我们删除目标节点,然后放置它唯一的子节点在被删除节点的位置,树的更新可以在
个时间内执行。
Case3:一个有两个子节点的节点。我们替换了目标节点
由任何一个它右边的孩子或它左边的孩子
. 然后我们移动一个
的子代,如果有的话,到
的原始位置.此过程继续进行,直到处理相应的叶节点为止。很明显,这种删除操作需要
时间,其中b是B*-树的高度。
我们可以如下所示将新节点插入内部或外部位置。
内部位置:B*-树中两个节点之间的一个位置。
外部位置:由空指针指向的位置。每个节点都有两个指针,左边的孩子和右边的孩子。当节点没有左子节点或右子节点时,它指向NULL。
Example 10.12
图10.17给出了在B*-树及其对应的平面图上的三种操作类型的一个例子。
- 旋转模块3(Op1),它不影响B*-树的结构。
- 将n4移到n6的左子节点(Op2)。首先,我们删除n4。因为n4有唯一剩下的子节点n5,我们把n5放在n3的左子节点上。然后,我们将n4插入到n6的左子节点上。
(c)交换n1和n2(Op3)。最后,我们得到了(d).中的B*-树和相应的平面图
10.2.3.5 Cost function
与标准的的波兰表达式类似,我们可以使用平面图面积和总线长作为模拟退火的成本函数:
其中A是平面图面积,Anorm 是平均面积, W 是总线长、Wnorm 是平均导线长度、
控制着面积和线长之间的权重。(Anorm、Wnorm的计算方法见第10.2.2节)
B*-树的面积 可以通过其得到的平面图的宽度/高度来计算,HPWL可以用来计算线长。
10.2.3.6 Annealing schedule
我们可以将经典的SA或Fast-SA应用于B*-树,以找到所需的平面图。有关经典SA和Fast-SA的更多信息,请参见第10.2.2节。
10.2.4 Sequence pair for general floorplans
序列对(SP)是模拟一般平面图的一种灵活表示法[Murata 1995]。
序列对由一对有序的模块名称序列组成。
例如,(124536, 326145) 可以表示 1、2、......、6 这六个模块的平面图。
下面我们将介绍平面图和序列对之间的转换过程。
10.2.4.1 From a floorplan to its sequence pair
给定图 10.18a, 我们首先逐个拉伸模块,得到房间,每个房间只包含一个模块。
图 10.18b 是由图 10.18a 导出的带有房间的平面图 F。
下面的程序用一对模块名序列对 F 进行编码。我们为每个模块 i 画两条直线,即右上角位置线和左下角位置线。
模块 i 的右上位置最初位于模块 i 的中心,然后开始向右移动。
右上角位置线开始向右移动。它的方向向上和向右
当它碰到 (1) 房间两侧、(2) 之前画好的线或 (3) 模块 i 的边界时,会交替转向右上和右下、或 (3) 芯片边界。位置一直移动到右上角。
左下角位置线类似
模块 i 的两个位置的联合构成模块 i 的正位置。
图 10.19a 显示了一个正位置的例子。根据正位置的构造
正位置的构造,没有两个正位置相互交叉。因此,这些正位置
以及相应的模块都可以线性排序。这里我们将从左到右排序。让 G+ 成为按此顺序排列的模块名称序列。在图 10.19a 中,得到第一个序列 G+ = 124536。
负位置获得方法与正位置类似。
不同的是,负位置是左上位置和右下位置的结合。
设 G- 为模块名称序列,从左到右依次为负定位点。
负位置的例子如图 10.19b 所示。
因此,从左到右依次为负位置,得到 G- = 326145。最后得到序列对 (G+, G-) = (124536, 326145)。
10.2.4.2 From a sequence pair to its floorplan
10.2.4.2 从序列对到平面图 给定序列对(Gþ, G-)、
模块的几何关系可由序列对推导如下:
规则 1(水平约束): 如果 i 在 Gþ 和 G- 中均出现在 j 之前(...i...j ... , ...i... j ... ),则模块 i 被置于模块 j 的左侧。
规则 2(垂直约束): 如果 i 在 Gþ 中出现在 j 之后,而 i 在 G- 中出现在 j 之前(...i... j ... , ... i... j ... ),则模块 i 位于模块 j 的下方。
以下步骤描述了将序列对转换为其平面图。考虑一个 n X n 网格,其中 n 是模块数。
在横向网格线和纵向网格线上沿下列方向标注模块名称,Gþ 和 G-,分别从上到下和从左到右标注模块名称。
标签 i 的水平网格线和标签 j 的垂直网格线的交叉点称为 (i,j)。
然后逆时针旋转 45 度,得到斜网格。(见图 10.20)。
将每个模块 i 置于中心点(i,i)上。,示例见图 10.20。
根据上述约束条件,我们可以创建一个横向约束图、
我们可以创建一个具有source和sink的水平约束图,以及一个节点加权的有向无环图 GH (V, E)。其中,V 是节点集,E 是边集,如下所示:
- V:source s、sink t 和 n 个标有模块名称的节点。
- E:每个模块 i 的(s,i)和(i,t), 以及(i,j),当且仅当模块 i 位于模块 j 的左边(水平约束)。
- 节点权重: s 和 t 为零,对于节点 i 为模块 i 的宽度。
同样,可以根据垂直约束和每个模块的高度构建垂直约束图 GV(V,E)。
注意 水平约束图和垂直约束图都是非周期性的。
如果两个模块 i 和 j 是水平关系,则 GH 中的节点 i 和 j 之间有一条边、
因此在生成的平面图中,这两个模块不会在水平方向上重叠。
同样,如果模块 i 和 j 是垂直关系,它们也不会在垂直方向上重叠。
因为任何一对模块要么是水平关系,要么是垂直关系,所以在生成的平面图中没有模块相互重叠。
模块位置可从约束图中获得。
模块 i 的 x 坐标由 GH 中从源点 s 到节点 i 的最长路径长度给出。
同样,模块 i 的 y 坐标也可以在 GV 上计算出来。
因此,生成的整个平面图的宽度和高度可分别由 GH 和 GV 中源点和汇点之间的最长路径长度计算得出。
应用著名的最长路径算法[Lawler 1976](其中 n 是模块数),可以在 O(n2) 时间内计算每个节点加权有向无环图 GH 或 GV 的最长路径长度。
换句话说,给定一个序列对(G+, G-)、
可以在二次方时间内得到区域最优打包。
对于示例序列对 (G+, G-)= (124536, 326145)、
我们可以构建相应的 GH 和 GV,如图 10.21 所示。表 10.5 列出了
模块尺寸。
由序列对 (124536,326145) 引发的源 s 和汇 t 的约束图:
(a) 水平约束图 GH。
(b) 垂直约束图 GV。
(注意边 (a, b) 和 (b, c) 的存在意味着传递边 (a, c) 也在约束图中,为简单起见,两个图中都不显示传递边)。
表 10.5 列出了模块的尺寸。在 GH (GV) 的每个节点中都有标注。如前所述,x 坐标
可以通过GH中来自源的最长路径长度来计算,我们有:
y坐标可以从GV类似地计算如下:
得到的平面图如图10.22所示,各模块坐标及生成的平面图尺寸如下:
10.2.4.3 解空间
G+ 、 G- 的每种排列都给出一个平面图解。对于n个模块,Gþ和G-的长度都为n,因此 Gþ 和 G- 均有 n!
因此,具有 n 个模块的序列对总共有
种排列方式。
10.2.4.4 邻域结构
为了搜索所需的平面图解,我们可以使用以下三种操作操作,将一个序列对扰动到另一个序列对:
操作 1:旋转一个模块。
操作 2: 只交换一个序列中的两个模块名称。
操作 3:交换两个序列中的两个模块名称。
这三个操作中的每一个都会产生一个合法的序列对和平面图解决方案。此外,这三个操作足以从给定的序列对中生成任何序列对。
图 10.23 举例说明了对序列对及其产生的平面图的操作示例。
10.2.4.5 成本函数
同样,我们可以使用平面面积和总线长作为模拟退火的代价函数:
其中,A 是平面面积,Anorm 是平均面积,W 是总线长,Wnorm 是平均线长,a 控制着面积和线长之间的权重。
面积和线长之间的权重。(有关 Anorm 和 Wnorm 的计算,请参见第 10.2.2 节)。
序列对的面积可以通过相应平面图的宽度/高度(以 GH/GV 为单位的最长路径长度)计算,HPWL 可用来评估线长。
10.2.4.6 退火计划
同样,我们可以根据序列对应用经典退火或快速退火来找到所需的平面图解决方案。
所需的平面图解决方案。有关经典 SA 或快速 SA,请参见第 10.2.2 节。
10.2.5 平面图表示比较
除了规范化波兰表达式、B*树和序列对之外,还有许多流行的平面图表示法,
例如 BSG [Nakata 1996]、O 树 [Guo 1999]、角块列表(CBL)[Hong 2000]、传递闭合图(TCG)[Lin 2001]、TCG-S [Lin 2002]、角序列(CS)[Lin 2003]、双二元序列(TBS)[Young 2003]、相邻约束图(ACG)[Zhou 2004]等。
有些表示法密切相关,例如,B*-树等同于 O-树,但运行速度更快
数据结构更简单,在处理各种位置限制时灵活性更高。
TCG 和序列对也是等价的,但它们的诱导操作有很大不同。
表 10.6 总结了常用平面图表示法的解空间大小、打包时间和灵活性。
在这些表示法中 序列对、TCG、TCG-S 和 ACG 可以表示一般平面图;
O树、B*树和角序列只能表示紧凑的平面图;
CBL 和 TBS 模拟每个房间都包含一个模块的平面图,称为镶嵌平面图;
而规范化波兰语仅限于切分平面图。
一般平面图的灵活性最高、
其次是压缩平面图、
然后是镶嵌平面图,
而切分平面图的灵活性最小。
(有关切分平面图、镶嵌平面图和一般平面图的更严格界限,请参阅 [Shen 2003])。
在打包时间方面,序列对、TCG 和 ACG 生成平面图需要 O(n2) 时间,其中 n 是模块数。
需要注意的是,基于最长公共子序列技术,sequence pair 可以将打包时间减少到 O(n lg lg n) [Tang 2001]。
TCG-S 的打包时间为 O(n lg lg n)。
对于 O 树、B* 树、角序列和归一化波兰表达式,打包时间仅为线性时间、
打包时间仅为线性时间,这主要是因为它们的数据结构中保留了相对简单的
信息。
作为对平面图表述的备注,对平面图表述的评估至少应基于以下三个标准:
(1) 表示的定义/属性、
(2) 其诱导解结构(而不仅仅是其解空间的大小)、
(3) 其诱导操作。
我们应避免仅以上述三个标准之一来判断平面图表示法的误区;
例如 仅仅因为 A 的解空间更小、打包时间更快,就声称平面图表示法 A 优于另一个平面图表示法 B。
打个比方:表示法本身就像汽车的车身、
诱导 操作就像汽车的车轮、
而解法结构就像高速公路网。
汽车仅靠车身是无法行驶的。
同样,为了对平面图表示法进行全面研究, 我们至少应从上述三个标准对其进行评估。
10.3 分析法analytical formulations
除了模拟退火,我们还可以采用分析方法Sutanthavibul 1991]。分析法是一种数学程序设计方法,对于平面规划问题,我们需要考虑两组基本约束条件
(1) 模块不重叠约束和 (2) 尺寸约束。
如果满足以下至少一种情况(线性约束),则称 i 和 j 两个模块不重叠:
其中引入了两个二进制变量 pij 和 qij,表示上述不等式中的一个被执行。
例如,当 pij = 0 和 qij = 1 时,不等式 yi + hi yj 被执行。
设 W 和 H 分别为平面图宽度和高度的上限。
我们有以下关于模块不重叠的线性约束:
对于尺寸限制,每个模块必须被包围在一个矩形内,矩形的宽度为 W,高度为 H。
具体来说,我们有
我们的目标是最小化平面图面积 xy,其中 x 和 y 分别是宽度和高度。
请注意,面积 xy 是非线性的,而求解非线性系统要比求解线性系统难得多。
为了将原来的非线性目标转化为线性目标,我们可以通过固定平面图的宽度 W 和最小化高度 y 来近似解决问题。
因此,我们需要将维度约束条件修改为
和
,其中
和 y 是当前平面图的高度。
总之,我们有以下四种约束:
- 任何两个模块之间没有重叠
- 每个模块都被围在一个宽 W 高 H 的矩形内。
。这里 wi 和 hi 是已知的。
在上述讨论的基础上
我们可以将平面图设计表述为以下混合整数线性程序 (MILP)。
请注意,目标函数和所有约束条件都是线性的。
我们的平面图设计问题是,在平面图宽度 W 的给定约束下,最大限度地降低高度 y,并遵守以下不等式约束系统:
对于 n 个模块的混合 ILP 的大小、
连续变量的数量为 O(n)、
整数变量的数量为 O(n2)
线性约束的数量为 O(n2)。
目前有一些流行的混合 ILP 求解器,如 GLPK [GLPK 2008]、CPLEX [ILOG 2008]、LINDO [LINDO 2008]、lp_solve [lp_solve2008] 等。
在最坏的情况下,ILP 的时间复杂度是指数级的、
因此,对于大型问题来说,它非常耗时。
为了应对大型问题,可以采用分而治之等方法、
通常采用分而治之法和渐进法等方法。
我们将在后面详细阐述这个问题。
前面的公式没有考虑模块的旋转。
我们可以通过引入一个新的二元变量
我们可以扩展上述 MILP 公式,引入一个新的二进制变量 ri 来考虑模块 i 的旋转。
当 ri = 0 时,模块 i 不旋转(即旋转 0 度);
当 ri = 1 时,模块 i 旋转 90 度。
不等式约束系统现在变为
其中 M = max{W, H}。下面举例说明 MILP平面图设计的 MILP 公式示例。
(前面的公式只考虑了面积优化。如果还需要考虑线长,我们需要修改目标函数,使总线长最小化)。
例 10.13
给出表 10.7 所列模块的尺寸。模块总面积为 8 * 6 +8 * 5 + 11 * 2 = 110。
由于通常需要正方形平面图,110 的平方根约为 10。
因此,我们设定 W = 10,M = max{8, 6} + max{8, 5} +max{11, 2} = 27,以找到宽度小于 10 的平面图。
我们可以使用公开的 lp_solve 程序来解决这个问题。
图 10.24 显示了 lp 格式的输入文件。目标是最小化平面高度 ( y)。
约束条件 c1 至 c6 定义了平面图的边界框,c7 至 c10、c11 至 c14 和 c15 至 c18 约束条件分别定义了模块 1 和 2、模块 1 和 3 以及模块 2 和 3 之间的非重叠关系。
其余约束条件定义了 0-1 整数变量。
应用 lp_solve 求解前面的 MILP 程序,我们可以得到如图 10.25 所示的输出结果。
如图 10.25 所示,图中给出了模块的坐标: 模块 1 (x1, y1) = (0, 5);模块 2 (x2, y2) = (0, 0);模块 3 (x3, y3) = (8, 0)。只有模块 3 被旋转(r3 = 1)。
结果平面图高度为 11 (y = 11),最终平面图如图 10.26 所示。
如前所述,MILP 的时间复杂度是指数级的,
因此,对于规模较大的问题来说,它的时间复杂度高得令人望而却步。
为了解决大型问题,通常采用渐进法和分而治之法等方法来缩小问题规模。
我们将研究一种渐进式扩增方法,该方法每一步都会解决部分问题,以降低平面规划的复杂性。
每次,我们都会选择一组模块,并将其将它们放入当前的局部平面图中,
如图 10.27 所示。
为了缩小问题的规模,我们限制了每一步需要放置的模块数量,同时也使当前局部平面图的问题规模最小化。
我们可以用一组覆盖矩形来替换已放置的模块。
图 10.28 展示了获取这些矩形的过程。
通过一组覆盖矩形缩小问题规模: (a) 原始部分平面图。
(b) 部分平面图的轮廓。(c) 覆盖部分平面图的一组矩形。
首先,我们找到 六个已放置模块的轮廓,如图 10.28b 所示。
已放置模块之间的死角也被括入轮廓中、
因为新加入的模块不可能使用这些空间。
然后,我们将轮廓横向分割成 R1、R2、R3 和 R4 四个矩形。
这样,矩形的数量通常比放置模块的数量少得多,MILP 公式中的变量和约束条件的数量也就少得多。
除了前面提到的基于 MILP 的平面规划外,还有人提出了一种复杂的分析性
Zhan 2006]。
该方法首先通过均匀分布模块来大致确定模块位置。然后,在第二阶段逐步去除重叠部分,得到最终平面图。
这种方法在处理大规模设计时具有更好的可扩展性。
但是,这种方法无法保证获得无重叠的平面图解决方案。
10.4 现代平面规划考虑因素
设计复杂性的增加以及新的电路特性和要求重新塑造了现代平面规划问题。
新的考虑因素和挑战大大增加了问题的难度。
在本节中,我们将讨论这些关键因素。具体来说,我们将重点讨论
(1) 软模块、
(2) 固定外线约束,
以及 (3) 大规模平面规划,
然后重点讨论现代平面规划的其他重要问题。
10.4.1 软模块
与高度和宽度固定的硬模块不同,
软模块可以在保持模块面积不变的情况下改变高度和宽度。
每个模块的输入均为长宽比界限。
调整软模块尺寸的技术有很多。
下面,我们将介绍一种有效的启发式方法,通过调整软模块尺寸来优化芯片面积。
这种尺寸调整方法的基本概念是将模块宽度/高度与相邻模块对齐,以减少死角 [Chang 2000; Chi 2003; Chen 2005a, 2006]。
给定一组模块 B,我们假设模块 i 的左下坐标为 (xi, yi),右上坐标为 (xi + wi, yi + hi)。
每个软模块有四个候选维度(即形状)。
候选维度的定义如下:
模块的长宽比定义为模块的高度与宽度之比。
在确定候选模块形状后,我们可以在模拟退火过程中通过以下五种选择来改变软模块 i 的形状.
在模拟退火过程中,我们可以从以下五个选项中选择一个来改变软模块 i 的形状:
1. 将模块 i 的宽度改为 Ri。
2. 将模块 i 的宽度改为 Li。
3. 将模块 i 的高度更改为 Ti。
4. 将模块 i 的高度改为 Bi。
5. 将模块 i 的长宽比改为给定软长宽比约束范围内的随机值。
在模拟退火过程中,我们可以将模块大小调整作为一个平面图扰动操作来进行
模拟退火
这样就可以改变模块形状,从而获得更理想的平面图。
Example 10.14
请看图 10.29 中的软模块大小调整示例。模块 4 有四个候选形状:R4、L4、T4 和 B4,四条候选线如图 10.29a 所示。如果我们将模块 4 的右边界拉伸到 R4(高度也相应改变以保持固定的面积),就可以生成一个更紧凑的 平面图,如图 10.29b 所示。
一个软模块调整示例: (a)原始平面图与四个形状候选调整模块4。通过将模块4的右边界拉伸到R4,(b)是一个压实的平面图
前述软模块大小确定技术可应用于任何基于模拟退火或迭代改进的平面图表示方法。
对于规范化波兰表达式(切片树),我们可以使用一种更复杂的方法--形状曲线来处理软模块。
因为软模块的面积是固定的, 所以模块的形状函数是双曲线:wh = A、或 h = A/w,其中 w 是宽度,h 是高度,A 是模块面积。
形状曲线示例见图 10.30a。
由于模块宽度和高度通常会受到限制,以避免出现非常薄的模块,因此 h≦ hmin 和 w ≦wmin;形状曲线见图 10.30b。在实际应用中、
我们可以使用分段线性函数来记录形状曲线,这样更容易实现。
我们只需记录形状曲线的角点, 如图 10.30c 所示。
形状曲线不仅可以记录基本软模块的形状,还可以记录由多个软模块组成的复合模块的形状。
还可以记录由一组基本模块组成的复合模块(即子楼层平面图)的形状。在切分树中,我们首先为每个模块生成一条形状曲线,并将该形状曲线记录在相应的叶节点中。
如图 10.31 所示。
然后,可以从复合模块的子节点推导出该模块的形状曲线,并记录在相应的内部节点中。
通过使用自下而上的程序,我们可以找到根节点的形状曲线,从而得到所有可能的平面图形状。
例 10.15
给定模块 1 和 2 的两条片断线性形状曲线, 求复合模块 12H 和 12V 的形状曲线。
图 10.32a 展示了复合模块 12H 的形状曲线的推导过程。
对于 H 算子,两个模块垂直合并;
因此,h3(w) = h1(w) + h2(w),而所得平面图的最小宽度不能小于 max(min w1,min w2)。
12H 的形状曲线见图 10.32a 中的粗线。
同样,对于 V 算子,我们有 w3(h) =w1(h) + w2(h),且所得平面图的高度不能小于 max(minh1,min h2)。
图 10.32b 中的粗线表示 12V 的形状曲线。
10.4.2 固定外延约束
现代超大规模集成电路设计通常基于固定芯片(固定外延)平面图 [Kahng 2000],而不是可变芯片平面图。
没有任何固定外延约束的纯面积最小化平面图可能毫无用处,因为它无法适应给定的轮廓。与通常只处理模块封装以最小化硅面积的经典平面规划不同,现代平面规划应表述为固定外延平面规划。
固定外轮廓约束条件如下。
我们首先构建一个长宽比为R*(即高/宽)的固定轮廓。
对于具有给定总面积 A 和最大死角百分比
的模块集合,我们可以得出芯片面积 = H*W* = (1 +
)A , 而芯片长宽比 = H*/W* = R*。因此,轮廓的新高度 H* 和宽度 W* 由以下公式定义 [Adya 2001]:
例 10.16
图 10.33 给出了三个具有不同 R* 和 's 的平面图示例。这三个平面图包含相同的模块。
图 10.33a 和图 10.33b 的最大死角百分比相同,均为 15%、
但它们的轮廓比不同,分别为 2.0 和 1.0。图 10.33b 和图 10.33c 的轮廓比相同,均为 1.0,但死角的最大百分比不同,分别为 15%和 50%。
三个具有不同轮廓比(R*)的平面图和基于相同模块的最大死空间百分比(
)。
为了处理固定出线约束,我们将修改模拟退火的代价函数。
除了线长/面积目标外,我们还可以在代价函数中加入纵横比惩罚[Chen 2005a, 2006]。
其原理是,如果平面图的长宽比与轮廓图的长宽比相似,且平面图的死区小于死区的最大百分比 G,那么平面图就能适合轮廓图, 那么该平面图就能与轮廓相匹配。假设当前平面图的长宽比为 R。
我们通过下式定义一个 的成本函数 F:
其中,A 是平面图面积,W 是导线长度,R 是平面图长宽比,R* 是所需的平面图长宽比,α 和 β是用户自定义的。
例如: (a)一个与轮廓比相同的平面图。(b)具有与轮廓的长宽比不同的最佳平面图。
如图 10.34 所示,固定轮廓中平面图的最佳长宽比可能与轮廓的长宽比不同。
在这种情况下,我们将降低纵横比惩罚的权重,将更多精力放在线长/面积优化上。
我们可以使用自适应方法,根据 [Chen 2005a]中发现的最新平面图来控制代价函数中的权重。
如果在模拟退火过程中发现的最新平面图中有更多可行的平面图, 这意味着该实例更容易被纳入平面图大纲.
因此,我们将降低纵横比惩罚的权重,更加关注线长/面积优化。
MCNC电路ami49的平面图,固定轮廓比分别为1、2、3和4。
图 10.35 显示了不同纵横比的 MCNC 电路 ami49 的平面图。
该电路共有 49 个模块[Chen 2005a]。
除了目标函数调整外,还可以根据序列对或归一化波兰表达式,应用新的扰动来更好地指导固定出线平面规划的局部搜索[Adya 2003;Lin 2004a]。
然而,与可应用于所有平面图表示的目标函数调整不同,新的扰动是针对目标平面图表示的。
在广义切分树的基础上,DeFer 被提出来用于高效处理固定出线平面规划[Yan 2008]。
DeFer 生成一系列可能的平面图解决方案,并在最后阶段选择能以最小线长适应固定轮廓的最佳方案。
10.4.3 大规模电路的平面规划
随着技术的发展,芯片中的模块数量越来越多。
仅靠模拟退火无法有效和高效地处理大规模平面规划实例。
为解决可扩展性问题,提出了分层 平面规划。
分层方法递归地将一个平面图区域划分为一组子区域,并独立解决这些子问题。
Patoma 是一种基于递归二分法的快速分层平面规划系统[Cong 2005]。
它对平面图进行分区,并使用面向行的块 (ROB) 包装和零死角 (ZDS) 平面规划来找到合法的子平面图。
这种自上而下的分层技术在处理大规模问题时非常有效。然而,分层方法的一个显著缺点是,它可能缺乏不同子区域之间楼面规划互动的全局信息,因为每个子区域都是独立处理的。
因此,分层方法可能找不到理想的解决方案。
为了弥补这一不足,我们提出了多层次平面规划,以便在可扩展性和解决方案质量之间找到更好的平衡点。
多层次框架采用两阶段技术,即自下而上的粗化和自上而下的非粗化。我们以 MB* 树[Lee 2003]为例解释多层次平面规划的概念。
使用递归集群和分解聚类的多层楼层规划。
图 10.36 显示了基于自下而上的聚类(粗化)和自上而下的非粗化两阶段技术的 MB* 树多层次框架。
聚类(粗粒化),然后是自上而下的解聚(非粗粒化)。
需要注意的是,虽然我们以 MB* 树为例解释了多层次平面规划框架,但该框架本身也适用于所有平面图的表示。
聚类阶段根据由面积利用率、线长和模块间连通性定义的成本指标,对一组(原始或复合)模块(如两个模块)进行迭代分组,同时通过构建相应的 B* 子树,在新聚类的模块间建立几何关系。
聚类过程不断重复,直到形成一个包含所有模块的单一聚类(或模块数量小于预定义的阈值,可由经典平面规划器处理),该聚类由一节点 B* 树表示,记录了整个聚类方案。
在聚类过程中,我们将记录两个模块 i 和 j 如何聚类为一个新的复合模块 k。
在聚类过程中,聚类中每一对模块的关系都会建立并记录在相应的 B* 子树中。
在解簇过程中,它将用于确定如何将节点扩展到相应的 B* 子树中。
去簇阶段会迭代地将一组先前聚类的模块解簇(即根据聚类阶段构建的 B* 树拓扑将节点扩展到子树中),然后在模拟退火方案的基础上完善平面图解决方案。
细化后的 B* 树结构会更加 "完美",从而为下一级的去簇提供指导。
值得注意的是,每次迭代时,我们始终只保留一棵 B* 树进行处理。
基于 B* 树的多级平面规划器在去簇过程中保留了模块间的几何关系。在解聚过程中(即树扩展过程中),模块之间的几何关系会被保留下来,这就使 B* 树成为一种理想的解聚方法。这使得 B* 树成为多层次平面规划框架的理想数据结构。
MB*-tree 算法概述见算法 10.5。
我们首先进行 聚类,逐级缩小问题规模,然后进入解聚阶段。
在解聚阶段,我们采用模拟退火法对各层次的模块进行平面规划。
聚类和解聚:
(a) 给定 7 个模块为 1≦ i ≦7。
(b) 将模块 5、6 和 7 聚类为 8。
(c) 将模块 1、2 和 4 聚类为 9。
(d) 将模块 3、8 和 9 聚类为 10。
(e) 将模块 10 分解为模块 3、8 和 9。
(f) 对模块 8 执行操作 2。
(g) 将模块 9 解簇为模块 1、2 和 4。
(h) 分别对模块 2 和模块 3 执行操作 1 和操作 2。
(i) 将模块 8 解簇为模块 5、6 和 7。
( j) 对模块 4 执行操作 2,得到最终平面图。
图 10.37 展示了 MB* 树算法。
为便于解释,我们在图 10.37 中每次分组三个模块。
图 10.37a 列出了七个需要打包的模块,i 为 1≦ i ≦7。
图 10.37b 至图 10.37d 展示了聚类过程。
图 10.37b 显示将模块 5、6 和 7 聚类为新的聚类模块 8 后的配置结果(即 8 的聚类方案为 {{5, 6}, 7});
注意,模块 5、6 和 7 的打包 B* 树记录在模块 8 中。
同样,我们将模块 1、2 和 4 聚类为模块 9,聚类方案为{{2, 4}, 1},并将模块 9 记录为打包模块 1、2 和 4 的 B* 树。
最后,我们使用聚类方案 {{3, 8}, 9} 将模块 3、8 和 9 聚类为模块 10,并为模块 10 记录一节点 B* 树。
至此,聚类阶段结束,解聚阶段开始,在此阶段,模拟退火将应用于平面规划。
在图 10.37e 中,我们首先将模块 10 分解为模块 3、8 和 9(即,将节点 n10 扩展为图 10.37e 中所示的 B* 子树)。
然后在模拟退火过程中,将模块 8 移到模块 9 的顶端(对 n8 执行 Op2),从而完善解决方案(见图 10.37f)。
如图 10.37g 所示,我们进一步将模块 9 分解为模块 1、2 和 4,然后旋转模块 2 并将模块 3 移到模块 2 的顶部(在 n2 上执行 Op1,在 n3 上执行 Op2),得到图 10.37h 所示的配置。
最后,我们将图 10.37i 中的模块 8 分解为模块 5、6 和 7,并将模块 4 移到模块 3 的右侧(对 n4 执行操作 2),得到图 10.37j 中的区域最优平面图。
电路ami49_200有9800个模块和81600个网;由此产生的死空间(黑暗区域)只有3.44%。
图 10.38 是用 MB* 树计算出的电路 ami49_200 的布局图,该电路有 9800 个模块和 81600 个节点(布局图中未显示)[Lee 2003]。
其死角仅为 3.44%。如果不使用多层次方法,平面布局规划方法就无法有效处理如此大规模的电路。
MB* 树方法被称为"∧"形多层次框架,因为它从自下而上的粗化(聚类)开始,然后是自上而下的解粗化(解聚类)。
相比之下,V 型多层次框架则是从自上而下的解粗化(分割)开始,然后是自下而上的粗化(合并)[Chen 2005b]。
在优化全局电路效应(如互连优化)时,V 型多层次框架通常优于∧型框架,因为 V 型框架首先考虑全局配置,然后逐级处理局部配置,因此可以在较早阶段处理全局效应。
10.4.4 其他考虑因素和主题
除了上述现代楼面规划的考虑因素外,可能还需要考虑许多其他问题。下面我们将简要介绍这些问题。
现代电路设计通常需要在单个芯片上集成模拟和数字电路,因此可能会受到基底噪声耦合的影响。
Cho 2006]在这一方向上进行了开创性的工作。
随着系统频率和设计复杂度的不断提高,现有的降低基底噪声技术可能需要大幅改进。
目前,在早期底层规划中考虑基底噪声是可取的。
对于纳米超大规模集成电路设计而言,互连在整体电路性能中占主导地位。然而,传统的设计流程通常在布线或布线后阶段进行互连优化。当互连复杂性急剧增加时,在布线期间或之后再进行积极的互连优化往往为时已晚,因为大部分硅片和布线资源已被占用。
因此,最好尽早优化互连。
针对互连优化提出了许多技术。
例如,布线拓扑结构构建、缓冲器/中继器插入和大小、导线大小和间距[Cong 1997]。
在这些互连优化技术中,缓冲器插入通常被认为是减少互连延迟最有效、最流行的技术,特别是对全局信号而言[Alpert 1997]。
由于要添加如此多的缓冲器,缓冲器的位置应尽早规划,以确保时序闭合和设计收敛;特别是,目前的 VLSI 设计通常不允许在电路模块内部插入缓冲器,因为缓冲器会消耗硅资源,并需要与电源/接地网络连接。因此,缓冲器被放置在当前平面图的通道和死角中,并经常被集中在平面图现有电路模块之间形成缓冲区块,这不可避免地增加了芯片面积[Cong 1999]。
因此,最好在平面规划期间/之后仔细规划缓冲区,以最大限度地减少面积开销并方便路由,这被称为缓冲区块规划。
此外,长互连对微体系结构设计的影响也非常大,因为需要多个周期才能在芯片间通信全局信号。
因此,最好在考虑互连流水线的情况下进行微体系结构感知平面规划,以提高微体系结构设计的性能[Jagannathan,2005 年;Ma,2007 年]。
随着技术的进步,芯片上的互连变得越来越拥挤,因此总线路由成为一项具有挑战性的任务。由于总线具有不同的宽度并穿过多个模块,模块的位置对总线路由有很大影响。位置对总线布线有很大影响。
为了简化总线布线,应在平面规划阶段就考虑总线规划,这就是总线驱动平面规划。
研究了序列对 [Xiang 2003] 和 B* 树 [Chen 2005a] 的总线驱动平面规划的可行性条件,以缩小它们的解空间并有效地找到所需的平面规划。
当总线经过的模块数量较多时,可采用多弯曲总线结构来找到更好的解决方案 [Law 2005]。
随着技术的进步,金属宽度减小,而全线长度增加。
这一趋势使得电源线的电阻大幅增加。
因此,考虑到电源/接地(P/G)网络中的电压(IR)降的平面规划变得非常重要。由于 IR 下降,逻辑中的电源电压可能不是一个理想的参考值。
P/G 网络综合的一个重要问题是在电源完整性约束条件(如 IR 降和电迁移)下,使用最小的 P/G 网络布线面积。
随着设计复杂度的急剧增加,有必要在设计周期的早期处理红外压降问题,以获得更好的设计收敛性。
现有的大多数商业工具都是在布局后阶段处理 IR 下降问题的,此时整个芯片设计已经完成,详细的布局和电流信息也已知晓。
然而,在布局后阶段解决 P/G 网络综合问题通常非常困难,计算成本也很高。
因此,研究人员开始考虑在较早的设计阶段进行 P/G 网络分析 [Yim 1999; Wu 2004; Lin 2007]。
最近,人们开发了三维平面规划来处理动态可重新配置的现场可编程门阵列(FPGA),通过分时来提高逻辑容量。
我们可以使用三维空间(x, y, t)来模拟动态可重构系统。
x 和 y 坐标代表 FPGA 资源的二维平面(空间维度),而 t 坐标代表时间轴(时间维度)。
每个 "任务"(可重构功能单元操作(RFUOP),可重构 FPGA 中的执行单元)由一个矩形框(模块)建模。
我们可以将每个模块表示为一个空间维度为 x 和 y、时间维度为 t 的三维方框。
(a)是一个正在运行的程序。(b)一个正在运行的程序的3-D平面图。
图 10.39a 显示了一个程序,其中有四部分代码需要映射到 RFUOP 中。由于容量限制,我们可能无法同时将所有模块加载到设备中。
因此,最好考虑将这些模块放入可重构功能单元(RFU)的三维平面规划问题(见图 10.39b)。
其目标是分配模块,优化面积和执行时间,并满足指定的约束条件。
为了解决三维平面规划问题,人们提出了一些扩展二维平面规划的三维平面规划表示法。
例如,序列三重[Yamazaki 2003] 和序列五重[Yamazaki 2003] 是序列对的扩展,用于二维包装。
K-tree [Kawai 2005]、T-tree [Yuh 2004a] 和 3D-subTCG [Yuh 2004b] 分别是 O-tree [Guo 1999]、B*-tree [Chang 2000] 和 Transitive Closure Graph(TCG)[Lin 2001]在二维包装方面的扩展。
此外,散热是系统级封装设计(有时称为 2.5-D 集成电路)面临的最严峻挑战(在传统的 x 和 y 空间维度上增加了离散层)。
2.5-D 集成电路设计通常采用层划分和二维平面规划来处理热约束[Cong 2004]。
除了超大规模集成电路模块的平面规划外,平面规划技术还可应用于其他问题,如片上系统测试调度 [Wu 2005] 和数字微流控生物芯片布局 [Yuh 2006]。
10.5 结束语
平面规划是分层建筑模块设计方法的重要设计步骤。
它为硬件决策和各种成本估算提供了有价值的见解。
最常用的平面规划方法是建立平面结构模型,然后用模拟退火法优化平面规划方案。
文献中有许多平面图表示法。
然而,归一化波兰表达式、B*树和序列对因其优越的简洁性、有效性、高效性和灵活性而被认为是最有价值的表示方法。
除了模拟退火外,分析平面规划方法在有效优化线长方面也显示出其优势 [Zhan 2006];然而,这种方法较难处理模块重叠和固定外线约束。
同时考虑硬模块和软模块的平面规划对于分析方法来说也更具挑战性。
平面规划后,所有硬模块都是固定的。对于每个软模块,我们可能需要在模块内部进一步放置标准单元。安置问题将在第 11 章中介绍。所有硬模块和标准单元的位置确定后,我们需要对所有信号网和电源/接地网进行布线,这将分别在第 12 章和第 13 章中介绍。
10.6 练习
10.1. (波兰表达式和 B* 树)给出下面的波兰表达式 E = 12V34HVH5、
(a) 上述表达式是否具有投票性质?请说明理由。
(b) E 是规范化波兰表达式吗?如果不是,请交换一个运算符和一个操作数,将 E 转换为规范化波兰表达式 E0
11
11 Placement
关于本章
布局是确定电路器件在芯片表面位置的过程。
它是 VLSI 设计流程中的一个重要阶段,因为它会影响设计的可布线性、性能、热分布,在一定程度上还会影响功耗。
传统上,它在逻辑综合阶段之后、布线阶段之前进行。
自 20 世纪 90 年代中期深亚微米工艺技术问世以来,主要由布局决定的互连延迟已成为电路延迟的主要组成部分。
因此,为了获得更好的电路性能,即使在早期设计阶段,布局信息也是必不可少的。
近年来,贴片技术已被集成到逻辑综合阶段以执行物理综合,并被集成到架构设计阶段以执行物理感知架构设计。
本章首先介绍布局阶段。接着,讨论了各种布局问题的公式。然后,介绍了基于分区的方法、模拟退火方法和全局置位的分析方法。之后,介绍了合法化和细节放置算法。本章最后讨论了其他放置方法和对放置研究有用的资源。
11.1 引言
传统上,布局是 VLSI 设计流程中逻辑综合之后、布线之前的设计阶段。
在逻辑综合过程中,会生成一个网表。
然后在贴片时,确定电路模块在网表中的位置。
布局之后,进行布线,在网表中铺设网络。
布局是 VLSI 设计流程中的关键步骤,主要有以下四个原因。
首先,布局是决定电路性能的关键因素。
布局在很大程度上决定了互连线的长度和延迟。随着先进 VLSI 技术特征尺寸的不断缩小,互连延迟已成为电路性能的决定性因素。
在先进的设计中,互连延迟可能会消耗多达 75% 的时钟周期。
因此,一个好的布局解决方案可以大大提高电路的性能。其次,布局决定了设计的可布线性。
结构良好的布局方案会减少布线需求(即缩短总线长),并能更均匀地分配布线需求,避免出现布线热点。
第三,布局决定了芯片表面的热量分布。不均匀的温度分布会导致可靠性和时序问题。第四,功耗也受布局影响。
一个好的布线方案可以减少电线造成的电容负载(通过缩短电线长度和加大相邻电线之间的间距)。
因此,开关功耗可以降低。
近年来,逻辑合成阶段必须结合布局技术来执行物理设计感知逻辑合成(即物理合成)。
原因在于,如果没有一定的布局信息,就无法估计互连线的延迟。
因此,考虑到互连线延迟的重要性,逻辑综合将没有任何有意义的时序信息来指导综合过程。
因此,合成的网表在放置后性能会很差。出于同样的原因,在架构设计过程中考虑布局信息也越来越普遍。
布局是一个计算困难的问题。即使是将一个只有单位大小模块和 2 引脚网的电路沿直线放置以最小化总线长的简单情况,也是 NP-完全的 [Garey 1974]。VLSI 布局问题要复杂得多。电路可能包含不同尺寸的模块,也可能有多引脚网。布局区域是二维的。
可能会使用其他成本函数,而不是总线长。
不同的设计风格也可能有不同的约束条件。(有关问题表述的详细信息,请参见第 11.2 节)。
由于数百万个模块的设计现在很常见,因此设计高效的布局算法来生成高质量的布局解决方案是一项重大挑战。
克服复杂性问题的一种方法是分几个易于管理的步骤进行布局。常见的流程如下。
1. 全局放置。全局布局的目的是生成一个粗略的布局解决方案,该方案可能会违反某些布局约束(例如模块之间可能存在重叠),同时保持整个网表的全局视图。
2. 合法化。合法化是通过局部移动模块,使全局布局的粗略解决方案合法化(即不违反布局约束)。
3. 详细布局。通过在局部区域重新排列一小组模块,同时保持所有其他模块固定不变,详细布局以迭代方式进一步改进合法化布局解决方案。
全局布局步骤是三个步骤中最重要的一个。
它对放置解决方案的质量和运行时间影响最大,也是之前大多数研究工作的重点。
全局放置后,放置解决方案几乎完全确定。
在合法化和详细布局中,只会对模块位置进行局部更改。
因此,本章的重点是全局布局步骤。
最常用的全局放置方法有基于分区的方法、模拟退火方法和分析方法。
本章将最详细地介绍分析方法,因为它是目前质量和运行时间最好的方法。
11.2 问题公式
放置问题的输入是一个放置区域、一组模块和一组网络。放置区域和所有模块的宽度和高度均已给出。放置区域和所有模块上 I/O 引脚的位置是固定的。有时,一些输入模块(如缓冲区、I/O 模块、IP 模块)是由设计人员预先放置的,因此它们的位置在放置前也是固定的。每个网指定放置区域和/或连接的某些模块中的引脚集合。从根本上说,布局就是在布局区域内为每个模块找到一个位置,使模块之间没有重叠,并优化某些目标。由于不同的设计可能需要不同的目标,不同的设计风格可能会引入不同的约束条件,因此摆放问题的表述存在许多变化。下面介绍常见设计风格和目标的布局问题。
11.2.1 不同设计风格的布局问题
11.2.1.1 标准单元布局
在标准单元设计中,所有模块高度相同。标准单元的放置必须与放置区域中某些预先指定的标准单元行对齐。由于标准单元设计的普及,大多数贴片算法都假定采用标准单元设计风格。
11.2.1.2 门阵列/FPGA 布局
在门阵列或 FPGA 设计中,模块只能放置在以规则阵列排列的预定义位置上。
11.2.1.3 宏块布局
在宏块放置中,每个模块都是一个固定形状和方向的宏块。宏块必须放置在放置区域内,相互之间不能重叠。宏块放置问题类似于固定轮廓平面规划问题。不过,在平面规划中,宏块的形状和方向通常被假定为可变的。宏块布局可视为固定外线平面规划的一种特殊情况。如果模块数量较少,可以通过平面规划技术来解决(请参阅第 10 章)。
11.2.1.4 混合尺寸布局
混合尺寸布局在电路中同时放置宏块和标准单元。
现代设计通常包含大量宏块和大量标准单元。因此,混合尺寸放置是近年来常见的一种设计方式。由于宏块通常比标准单元大几个数量级,如何处理模块间的非重叠约束成为一项独特的挑战。
11.2.2 布局目标
11.2.2.1 总线长
总线长是布线方案中最常用的目标。总线长最小化可间接优化其他几个目标。
首先,减少布线需求可提高可布线性。
其次,由于较短的导线具有较少的延迟,因此可以改善时序。
第三,可以降低功耗,因为较短的导线也会带来较少的电容负载。
请注意,总线长最小化只是优化这些其他目标的启发式方法。
即使缩短了总线长,位于最拥挤区域、沿时序关键路径或开关活动最多的网络也可能无法缩短。为了明确不同网络在优化其他目标时的重要性,可以为每个网络分配一个权重。
这样,总加权线长与其他目标的相关性就会大大提高。
在布线过程中,很难预测路由后网络的线长、
因为这取决于路由器。
有几种方法可以估算出给定布局的路由线长。
使用最广泛的方法是半周线长 (HPWL)。
网络的 HPWL 等于包围网络所有引脚的最小边界矩形周长的一半。
例如,对于图 11.1a 中的 5 针网络,HPWL 为 W + H,如图 11.1b 所示。
HPWL 很受欢迎,因为它可以在线性时间内计算,并且可以写成引脚坐标的简单闭式函数(参见第 11.5.1 节)。它还能为具有两个和三个引脚的优化布线网络提供精确的线长。然而,HPWL 可能会大大低估具有四个或更多引脚的网络的线长。
另一种线长估算方法是基于直线最小生成树(RMST)。
RMST 是以曼哈顿距离为单位,连接一组给定节点的总线长最小的树。例如,图 11.1a 中网络的 RMST 如图 11.1c 所示。构建 RMST 的最佳时间复杂度为 O(n log n) [Guibas 1983]。对于有两个引脚的网络,RMST 的线长是精确的,但对于有三个或更多引脚的优化布线网络,它可能会高估高达 50% 的线长 [Hwang 1976]。在实践中,RMST 比 HPWL 能更准确地估计线长(尤其是对于引脚数较多的网络),但运行时间是 HPWL 的数倍。
一种高度精确的方法是基于直线斯泰纳最小树(RSMT)。RSMT 是指在曼哈顿距离内连接给定节点集的总边长最小的树,可能通过一些额外的(即 Steiner)节点。例如,图 11.1a 中网络的 RSMT 如图 11.1d 所示。如果没有路由拥塞,RSMT 是路由网络的首选方式,因为它给出了最小的线长。因此,RSMT 线长与路由线长的相关性非常高,除非设计严重拥塞,路由时需要大量迂回。
RSMT 的构造是 NPcomplete [Garey 1979]。过去,所有精确和启发式 RSMT 算法都非常耗时。因此,传统上 RSMT 很少用于布线过程中的线长估计。最近,一种名为 FLUTE 的基于查找表的 RSMT 启发式算法问世 [Chu 2008]。
它比以前所有的 RSMT 启发式算法都更精确,但速度却不亚于 RMST 算法。
有了 FLUTE,放置器就可以使用高精度的 RSMT 线长来指导放置过程。
11.2.2.2 可路由性
可路由性是安置解决方案的最基本要求。
如果路由无法完成,任何布局方案都是无用的。
然而,路由选择解决方案的路由选择性很难评估。路由性取决于路由器。
路由性没有客观的衡量标准。
即使是特定的路由器,由于路由器的复杂行为,路由选择性也很难估算。路由性估算的一种方法是调用路由器执行粗略路由(如全局路由),但这种方法的计算成本非常高。一种更常用的方法是假设每个网的路由遵循某种概率分布,然后通过交叉网的预期数量来估计路由网格中每条边的路由拥塞情况。然而,这种方法并不准确,而且计算成本仍然相当高。
由于计算成本较高,在实际应用中,很少将路由选择性估计纳入路由选择目标函数,以指导路由选择过程。取而代之的是,在布局过程中,通常采用白区分配法间接优化路由性。预测会出现拥塞的区域会留出更多的空白空间(即以较低的模块密度放置),以提供更多的路由轨迹。
11.2.2.3 性能
布局会对互连延迟产生重大影响,进而影响电路性能。由于随着特征尺寸的不断减小,互连延迟在电路延迟中所占的比重越来越大,因此性能驱动的布局变得越来越重要。然而,网络延迟在很大程度上取决于其他因素,如路由、缓冲、驱动器尺寸、导线宽度和导线间距。
在贴片过程中执行这些任务的计算成本太高。
换句话说,在贴片过程中基本上不可能获得准确的时序信息。实际上,在贴片过程中,可以通过控制线的长度来启发式地控制线的延迟。可以通过分配较大的网络权重来减少网络延迟,也可以通过限制网络长度来约束网络延迟。
11.2.2.4 电源
对于大多数电路而言,功耗的主要部分是开关功耗,即栅极开关时的功耗(即栅极驱动的电容负载充放电)。网的电容与线长成正比。因此,功率最小化问题可以表述为线长最小化问题。由于功耗也与开关量成正比,因此应根据开关活动因子对网络进行加权。需要注意的是,时钟分配网络是一个驱动巨大负载的全局网络,每个时钟周期都有开关。它消耗了很大一部分开关功耗。因此,应特别注意时钟元件(包括锁存器、触发器、存储器和动态门)的放置,以便在不增加时钟偏移或降低时序的情况下,尽量减少时钟线的电容。
11.2.2.5 热量分布
芯片上不均匀的温度分布会对温度敏感电路的特性产生不利影响。它还可能导致可靠性问题。
因此,最好适当分配电路中的发热元件,以实现均匀的温度分布。
热驱动贴装很困难,原因有以下几点。
首先,每个元件的发热量都会随时间发生变化,因为它取决于电路执行的操作。其次,晶体管和导线都会产生热量,而导线产生的热量在贴装过程中很难预测。第三,温度曲线由热量的产生和传递共同决定,如果不使用定时器,就很难对温度曲线进行近似分析。
如果不进行耗时的模拟,就很难对温度曲线进行近似计算。
热驱动布局问题的实际解决方案是在布局区域内均匀分布模块的平均发热量(假设发热量的动态性质、导线发热量和热传递是次要影响)。这种模块热量分布问题与贴装过程中的模块面积分布问题类似,可以通过类似的技术解决。
11.2.3 一种通用的布局方案
尽管针对不同设计风格和不同目标的布局问题公式有许多变化,但各种公式的基本问题是相同的。对于不同设计风格的布局和热驱动布局,模块必须适当分布。
为了优化不同的目标,必须减少导线的长度。
本章的重点是标准单元设计中非常流行的最小线长放置问题。特别是,总 HPWL 被视为目标函数,因为 RSMT 线长传统上计算昂贵,难以优化。这种算法通常可以扩展到其他设计方式和目标。
对于其他设计风格(即使使用预置模块),只要在全局布局过程中能适当控制模块密度,在合法化过程中就能轻松解决轻微的布局约束违规问题。在全局布局过程中,除了控制面积密度外,还可以分别控制热密度和空白密度,从而解决热驱动和路由驱动的布局问题。性能和功耗优化问题可表述为加权线长最小化问题。
11.3 全局定位: 基于分割的方法
粗略地说,分割问题就是将一个电路划分为多个大小相似的子电路,从而使子电路之间的连接数最小。电路布局可以通过递归应用分割程序来生成。这种方法称为基于分区的布局或最小切割布局。下文将首先介绍分区的基础知识。然后将介绍分区在布局中的应用。
11.3.1 分区的基本原理
大多数分区算法解决的是双分区(或双向分区)问题,即把一个电路分成两个子电路。下面将讨论双路分割问题。
11.3.1.1 问题表述
通过将电路建模为超图,可以将电路二分问题表述为超图二分问题。电路模块用顶点表示,模块面积用顶点大小建模。网络用超边表示,网络的临界度用超边权重建模。例如,图 11.2a 中的电路可以用图 11.2b 中的超图建模,其中顶点集为 {A、B、C、D、E},超边集为 {{A, B}、{A, C}、{A, D}、{B, D}、{D, E}、{B, C, E}}。
给定一个超图 G(V, E ),其中每个顶点 v
V 的大小为 s(v),每个超边 e
E 的权重为 w(e),超图双分割问题就是将集合 V 分成两个子集 V1 和 V2,使得被切割(即跨越两个子集)的超边的总权重最小,并且 V1 和 V2 中顶点的总大小接近用户定义的某个值。形式上,成本函数可以写成
V1上的尺寸约束可通过使用比率参数γ和公差参数ε来指定,如下:
V2上的大小约束被间接指定为
超图双分区是NP-complete [Garey 1979]。
12 Global and detailed routing
关于本章
布局完成后,布线流程将确定芯片布局上网络的精确路径,以便在芯片边界上将电路块或焊盘上的引脚互连起来。 这些精确的网路径必须符合芯片代工厂提供的设计规则,以确保设计可以正确制造。
布线最重要的目标是完成所有必要的连接(即,实现100%的路由性)
否则,芯片将无法正常运行,甚至可能失效。其他目标,如 减少布线长度和 (2) 确保每个网满足其所需的时序预算,已成为现代芯片设计的基本要求。
在现代大规模电路设计中,芯片可能包含数十亿个晶体管和数百万个网。为了处理高复杂性,路由算法通常采用先全局路由后详细路由的两阶段方法。
全局布线首先将布线区域划分为瓦片,并决定所有节点的瓦片到瓦片路径,而详细布线则决定节点的确切轨道和通孔。
本章首先讨论路由问题。在介绍了问题定义后,介绍了通用路由技术。随后介绍了流行的全局路由算法,包括顺序和并发方法。本章后半部分讨论了详细路由,其中讨论了通道和全芯片路由技术,然后是考虑到信号完整性和芯片制造及产量的现代路由技术。本章最后介绍了布线趋势和未来的布线方向。通读本章后,读者应该对流行的全局和详细路由算法有一个清晰的认识。这些背景知识对于实施/开发满足设计需求的路由算法非常有价值。
12.1 引言
布线是集成电路(IC)设计中的一个重要步骤。
它在遵守制造设计规则的前提下,为同一信号的引脚互连布线。随着集成电路工艺发展到纳米技术,代工厂可以在单个芯片中制造数十亿个晶体管,而且在不久的将来,每个芯片的晶体管数量还会急剧增加。
这种日益增长的复杂性给物理设计,尤其是路由设计带来了巨大的挑战。
VLSI 路由研究在文献中受到广泛关注。路由通常是一个非常复杂的组合问题。为了便于管理,路由问题通常采用两阶段的方法来解决,即先进行全局路由,然后再进行详细路由。全局路由首先将路由区域划分为瓦片,并为所有网决定瓦片到瓦片的路径,同时尝试优化给定的目标函数(如总线长和电路时序)。然后,在全局布线获得的路径指导下,详细布线为节点分配实际的轨道和通孔。
图 12.1 展示了全局布线和详细布线的过程。贴装完成后,我们将得到如图 12.1a 所示的贴装布局,其中包含块、块引脚和芯片边界 I/O 焊盘的准确位置信息。此外,我们还获得了一份网表,该网表通过指明哪些引脚或焊盘应电气连接以形成一组网来描述连接列表。图 12.1b 展示了一些全局布线路径。它首先将布线区域划分为瓦片,然后通过查找连接引脚和/或焊盘的瓦片到瓦片路径,为每个连接生成 "松散 "路径。
图 12.1c 显示的是详细路由的结果,它通过在瓦片到瓦片路径内搜索,为每个网络确定精确路由。这里的精确路径指的是由实际几何布局(如金属线和通孔)指定的路径。
下面我们将正式给出布线问题的定义,并描述布线模型和约束条件。
路由问题: (a)一个给定的放置结果与固定位置的块和销。(b)全局路由。(c)详细的路由。
12.2 问题定义
一般路由问题的问题定义如下:
输入
1. 芯片块、引脚和焊盘位置固定的布局
2. 网表
3. 每个关键网络的时序预算
4. 一套制造工艺设计规则,如电阻、电容以及每层的导线/通孔宽度和间距
输出:
每个网络的导线连接,由符合设计规则并优化给定目标(如果指定)的实际几何布局对象呈现。
12.2.1 路由模型
现代芯片中的布线通常是一个非常复杂的过程,因此通常很难直接获得解决方案。
大多数路由算法都是基于图搜索技术,以与路由区域和拓扑相关的拥塞和时间信息为指导[Saxena 2007]。
路由器为通过拥堵区域的路由网分配更高的成本,以平衡路由区域间的网分布。
将图搜索技术应用于路由时,需要将路由资源建模为图,其中图拓扑可代表芯片结构。
全局路由图: (a)芯片(路由区域)被划分成一个矩形瓷砖阵列。(b)路由图中的一个节点表示芯片中的一个平铺,而一条边表示两个相邻平铺之间的边界。(c)最终的全局路由图。
图 12.2 展示了图建模。如图 12.2a 所示,在建模时,首先将芯片(路由区域)划分为矩形瓦片阵列(或称为全局路由瓦片),每个瓦片在每个维度上可容纳数十条路由轨迹。路由图中的节点代表芯片中的一个瓦片,而边表示两个相邻瓦片之间的边界(见图 12.2b-c)。每条边都根据物理路由区域或磁砖中的轨道数分配了一个容量。该图称为全局路由图。
全局路由器为全局路由图上的所有网络寻找瓦片到瓦片的路径,以指导详细路由器。
指导详细路由器。
全局路由的目标是在满足每条边的容量限制和其他限制(如果指定)的前提下,为尽可能多的网路由。例如,对于时序驱动路由,可以在关键路径延迟较长的路由拓扑中增加额外成本。对于详细路由,路由器通过在每个金属层上分配导线和用于金属层之间切换的通孔来决定网的实际物理互连。
一般来说,有两种不同的层模型,即预留层模型和非预留层模型。在保留层模型中,每层只允许一个特定的布线方向(即首选方向)。例如,技术文件可规定第一金属层的导线只允许沿水平方向走线,第二金属层只包含垂直导线等。如果一个层模型允许放置任何方向的导线(即非首选方向),那么它就是无保留的。现有的路由器和设计方法大多采用预留层模型,因为它比非预留层模型的复杂度低,更容易实现。
详细路由模型有两种:基于网格的模型和无网格模型。对于基于网格的路由,路由网格被叠加在路由区域上,然后详细路由器在网格中寻找路由路径,如图 12.3a 所示。相邻网格线之间的空间称为导线间距,它在技术文件中定义,大于或等于导线最小宽度和间距之和。需要注意的是,路由器必须控制搜索空间,对于预留层模型,水平/垂直层的路径只能在水平/垂直方向上运行,并且只允许在垂直和水平网格线的交汇处从一层切换到另一层。这样,按照网格路径走的最小宽度导线将自动满足设计规则。因此,基于网格的详细布线更为高效,也更易于实施。
两种详细路由模型:基于(a)网格的详细路由。(b)无网格的详细路由
无网格详细布线模型(也称为基于形状的模型)是指不遵循基于网格模型的任何模型。无网格详细路由器不遵循路由网格,因此可以使用不同的线宽和间距,如图 12.3b 中的示例所示。目前已提出了多种无网格模型,如连接图 [Zheng 1996]、隐式连接图 [Cong 1999]、隐式三线图 [Chen 2007a],以及角缝合 [Qusterhout 1984]。无网格布线的主要优势在于其更大的灵活性;它可以处理不同宽度和间距的导线,因此更适合互连调整优化,如导线尺寸和扰动。不过,由于复杂度较高,无网格详细布线通常比基于网格的布线慢得多。
详细路由: (a) 连接金属 1 上两个引脚的瓦对瓦全局路由路径。(b)详细路由图是在全局路由路径的瓦片内构建的。(c)详细路由图上的详细路由解决方案。
图 12.4 展示了一个双针网的基于网格的详细路由示例。如图 12.4a 所示,在全局路由之后,我们得到了一条从瓦到瓦的全局路由路径,而详细路由图仅在全局路由路径的瓦内构建,如图 12.4b 所示。然后在图中找到最终的详细路由解决方案,如图 12.4c 所示。
详细路由器在全局路由路径瓦片范围内构建和搜索详细路由图,可以大幅缩减搜索空间,从而缩短路由时间。
12.2.2 路由约束
路由约束可分为两大类:(1) 设计规则约束和 (2) 性能约束。
设计规则约束通常与制造过程中的制造细节有关。为了提高制造良率,网络的连接必须遵循代工厂提供的规则。
例如,在 65 纳米技术中,光学光刻系统的物理限制会对导线施加约束,使其宽度不能小于 65 纳米。
设计规则示例 典型的规则规定了每层的导线宽度、导线之间空白宽度、导线间距、通孔宽度和通孔间距。
图 12.5 展示了一组典型的设计规则。它定义了导线和通孔的最小宽度、导线到导线的最小间距以及层间通孔到通孔的最小间距。基于网格模型的两条导线或布线轨道之间的距离通常称为导线间距(wire pitch)。还包括制造过程中的其他设计规则,如每层的电阻和电容。
性能约束的目的是使连接符合芯片设计人员提供的性能规格。例如,时序约束通常是高速设计中最重要的性能约束。芯片的速度受其关键节点的限制,这些节点的时序预算(或时序松弛)比其他节点小。为了满足性能约束,最好通过适当的路由拓扑结构对这些关键网络进行仔细路由。
12.3 通用路由
在第 12.2.1 节中,我们通过全局路由图和详细路由图建立了路由资源模型。对于全局路由和详细路由,我们可以在这些路由模型上执行图搜索技术。下面,我们将介绍三种常用的图搜索技术,即迷宫、线搜索和 A* 搜索路由算法。需要注意的是,这些算法都是通用路由算法,因为它们既可以应用于一般路由结构上的全局路由问题,也可以应用于详细路由问题。
12.3.1 迷宫路由
迷宫路由算法(也称Lee’s algorithm)[Lee 1961]可能是应用最广泛的两点间路径查找算法,它基于广度优先搜索(BFS)技术。
迷宫路由采用先填充后回溯的两阶段方法。
填充阶段采用 "波传播 "方式。从源节点 S 开始,根据 "波阵面 "距离 S 的远近,逐个标记相邻的网格单元,直到到达目标节点 T。
填充过程示例: (a) 当 "波阵面 "标签达到 2 时的填充(波的传播)。
"(b) 当 "波阵面 "标签达到 3 时,(a)的下一步填充。
图 12.6a 和 b 展示了 "波阵面 "标签分别达到 2 和 3 时的 "波传播 "情况。到达目标节点 T 后,从 T 到 S 的最短路径会在回溯阶段随着标签的递减而回溯。请注意,任何一条标签递减的路径都是最短路径。不过,出于其他实际考虑(如弯曲(通孔)数量),我们通常更倾向于选择绕路最少的路径。
李氏迷宫路由算法: (a) 波的传播阶段。(b) 回溯阶段。
图 12.7 展示了李算法的两个阶段。
李算法有一个很好的特性,那就是如果两点之间确实存在路径,它就能保证找到这样一条路径,而且这条路径是最短的,即使有障碍物也是如此。然而,在实际应用中,李算法的速度很慢,而且很耗费内存。
它的时间和空间复杂度为 O(mn),其中 m 和 n 分别为水平和垂直网格单元的数量。因此,很难直接应用于大规模密集设计。
由于李氏迷宫布线算法的广泛应用及其较高的时间和空间复杂度,人们提出了许多方法来减少其运行时间和内存需求。这些流行的优化方法可分为三大类:
- 编码方案;
- 搜索算法;
- 搜索空间。
12.3.1.1 编码方案
Akers 发现,k 的相邻标签要么是 k 1,要么是 k + 1 [Akers 1967]。
要回溯路径,只需有一个标签方案,使每个标签的前一个标签与后一个标签不同即可。根据观察结果,Akers 开发了一种 2 位编码方案,以减少内存需求。该编码方案使用 1 位来填充网格单元,标记序列为 0、0、1、1、0、0、1、1、...。这样,每个标签的前一个标签和后一个标签都是不同的,因此可以正确地进行回溯。这种编码方案需要另一个比特来表示节点是否阻塞。因此,这种编码方案只需要每个网格单元的两个比特来执行迷宫路由。另一种经济的编码方案来自 [Hadlock 1977];它使用迂回编号进行标注,以减少搜索空间和运行时间。
12.3.1.2 搜索算法
Soukup 结合了 BFS 和深度优先搜索 (DFS) 方法来传播波面[Soukup 1978]。深度优先(线性)搜索首先从源 S 向目标 T 方向搜索,直到到达障碍物或目标 T。如果遇到障碍物,则使用 BFS(如 Lee 算法)绕过障碍物 "冒泡"。这种算法的时间和空间复杂度与李算法相同,但通常比李算法快 10 到 50 倍。
如果 S 和 T 之间确实存在路径,它仍能找到这样一条路径,但由于 DFS 处理,它不能保证找到一条最短路径。纯 DFS(线性搜索)算法可以进一步加快路由速度,但会牺牲解的质量。
有关两种线路搜索算法,请参见第 12.3.2 节。
12.3.1.3 搜索空间
为了缩短迷宫路由的运行时间,起点选择、双扇出和框架等技术被广泛使用 [Sait 1999]。这三种技术都能大大减少需要标记的单元格数量。起点选择是指选择最接近芯片边界的点作为填充的起点。这样,我们就可以舍弃更多的边界外单元格进行标注。双重扇出可同时传播源单元和目标单元的波,以减少标记所需的面积。
定格只在一个矩形区域内搜索,例如比源单元和目标单元形成的边界框大 10%。如果搜索失败,则需要扩大矩形区域并重新进行迷宫路由。很明显,李算法无法再保证用取景启发式找到最短路径。
12.3.2 行搜索路由
如第 12.3.1 节所述,迷宫路由算法的主要缺点是内存占用大、运行时间长。线搜索算法通过使用线段来表示路由空间和路径,以牺牲解的质量为代价,从而缓解了这些缺点。
Mikami 和 Tabuchi 提出了第一个线段搜索算法(也称为线段探测路由)[Mikami 1968]。与主要以广度优先方式进行的迷宫路由算法不同,线搜索算法执行的是深度优先搜索。
线搜索算法最初将源点 S 和目标点 T 设为基点,然后生成四条(两条水平线和两条垂直线)通过这些基点的 0 级线段。
这些线段不断延伸,直到碰到设计边界或障碍物。
然后,这些线段在第 i 层的每个网格点都被迭代设置为新的基点,并生成与每个新基点垂直的第 i + 1 层线段。
这个过程不断重复,直到从 S 生成的线段与从 T 生成的线段相交,然后从这个交点追踪到 S 和 T,即可找到连接点。
图 12.8 展示了 Mikami-Tabuchi 的线段搜索算法。
交叉点表示基点,数字表示搜索过程的顺序。
与李的迷宫路径算法一样,Mikami-Tabuchi 的直线搜索算法也能保证找到一条存在的路径,但这条路径不一定是最短的。线搜索技术大大减少了内存需求和执行时间。
[Hightower 1969]提出了另一种线搜索算法,与 Mikami-Tabuchi 算法相似。
不同之处在于,海托尔的算法 只考虑那些可以延伸到障碍物之外的线段、 而且每条线段最多有两个基点。
图 12.9 展示了 海托尔的线段搜索算法。
由于考虑的线段较少 Hightower 算法比 MikamiTabuchi 算法节省大量内存。
不过,即使存在路径,Hightower 算法也可能找不到。
为了弥补这一缺陷,它需要回溯程序来选择正确的基点,因此,在实际应用中,运行时间可能不会比 Lee 的迷宫路由算法有很大改进。
12.3.3 A* 搜索路由
如第 12.3.1 节所述,采用 BFS 搜索的迷宫路由虽然能保证找到最短路径,但速度一般较慢。
在搜索领域,迷宫搜索也被称为盲搜索,因为它是在没有任何优先级选择的情况下盲目搜索路由区域。
直观地说,如果路由器不需要考虑路由路径上不可能出现的点,运行时间就会得到改善。
Hart 1968]提出了一种名为 A*-search 的通用图搜索算法,它使用函数 f(x) = g(x) + h(x) 来评估路径 x 的成本,其中 g(x) 是源节点到 x 当前节点的成本,h(x) 是 x 当前节点到目标节点的估计(或预测)成本。
每次算法都会选择路径成本最低的节点进行传播(即 f(x) 越低),传播的优先级就越高。
因此,A*-搜索也被称为最佳优先搜索,因为在每次决策时,它都会首先搜索最有可能通向目标的路径。
请注意,一般来说,BFS 是 A* 搜索算法的一种特例,其中 h(x) = 0 适用于所有 x。
A*-search 算法有一个很好的特性,即如果 h(x) 是可接受的,也就是说它永远不会高估从当前节点到目标节点的实际最小成本,那么 A*-search 算法就是最优的。
因此,对于曼哈顿路由(即只允许横向和纵向连接),h(x) 可以设定为当前节点到目标节点的曼哈顿距离,因为它是曼哈顿空间中任意两点之间可能的最小距离。
A* 搜索算法有很多应用,例如在人工智能(AI)领域。由 [Clow 1984] 引入的用于 VLSI 路由的 A* 搜索路由和 [McMurchie 1995] 引入的用于 FPGA 路由的 A* 搜索路由在现代路由器中非常普遍 [Chao 2007; Pan 2007; Roy 2007; Chang 2008; Hsu 2008]。
12.4 全局路由
传统路由算法采用平面框架,直接为整个路由区域内的网络寻找路径。
这些算法可分为顺序法和并发法,顺序法基于第 12.3 节中提到的两针网络的通用路由算法,并发法基于第 12.4.3 节中介绍的多针网络的斯坦纳树算法。
12.4.1 顺序全局路由
最直接的路由策略可能是选择特定的网络顺序,然后按照该顺序依次路由网络。
然而,这种顺序方法往往会导致路由效果不佳,因为前面路由的网络可能会阻碍后面网络的路由。
因此,路由解决方案的质量在很大程度上取决于网的排序。
图 12.10a 展示了一个简单的单层路由实例,其中有两个双针网络 A 和 B。
基于不同网络排序的路由选择: (a) 一个单层路由选择实例,包含两个双针网络 A 和 B。
(b) 先 A 后 B 的网络排序所得到的较差解决方案。(c) 按照先 B 后 A 的网络排序得到的较好解决方案。
如果我们任意选择先路由 A 后路由 B 的网络顺序,网络 B 可能会被网络 A 阻塞,因此需要更长的线长才能完成路由(见图 12.10b)。
相反,如果我们先路由 B,再路由 A,就能以更短的总线长获得更好的路由结果(见图 12.10c)。
因此,我们希望为一般路由实例找到一种良好的网络排序方案。
遗憾的是,这种普遍适用的好方案很难找到。在早先的一项研究中,阿贝尔得出结论:在所有路由问题中,没有一种网排序方案能比其他任何排序方案表现得更好[阿贝尔 1972],而且寻找最优网排序被证明是 NP 难的,这意味着很可能不存在一种多项式时间算法来解决这个问题。
为了弥补这些不足,当今的顺序路由通常会采用启发式网状排序,并进行撕裂和重路由过程,以进一步完善解决方案。
下面我们介绍几种常用的网络排序方案:
(1) 按照网络边界框内引脚数量的升序排列网络。
如果一个网络的边界框内有更多的插针,那么这个网络就会倾向于阻塞这个边界框内的网络。
(2) 如果可路由性(时间)是最关键的指标,则按网络长度的升序(降序)排列网络。研究表明,首先路由较短的网络通常会带来更好的路由性,因为它们的路由灵活性通常低于较长的网络。
这样,较短的直线网络在路由时就不会走过多的弯路,路由资源也会得到更有效的利用。
相反,对于高性能设计,较长的网络应尽早布线,因为它们通常决定了整体时序。
(3) 根据时序关键性对网络进行排序。
除了网络排序方案外,我们还可以首先分析路由区域内的网络分布,找出拥堵区域,然后优先对最拥堵区域内的网络进行路由。
翻录和重新路由过程包括两个步骤:
(1) 确定瓶颈区域,撕裂一些已经路由的网络;(2) 路由受阻的连接,重新路由撕裂的连接。
一般来说,这样可以得到更理想的路由解决方案。
以图 12.10b 为例,如果路由器观察到网络 B 被阻塞或其长度因网络 A 而大幅增加,它就可以撕毁网络 A,然后重新路由 B,再路由 A,以改进解决方案。McMurchie 和 Ebeling 为现场可编程门阵列(FPGA)开发了一种基于协商的撕裂和重路由算法,称为 PathFinder [McMurchie,1995 年],该算法在近期领先的学术性全局路由器中显示出其优越性,如 BoxRouter [Cho,2007 年]、FastRoute [Pan,2007 年]、FGR [Roy,2007 年]、NTHU-Route [Chang,2008 年]和 NTUgr [Hsu,2008 年]。
Chen 等人和 Kastner 等人开发了模式路由方案[Ho 1990;Chen 1999;Kastner 2002],使用 L 形(1 弯)或 Z 形(2 弯)路由等模式建立连接(见图 12.11)。
模式路由给出了两点之间的最短路径长度,并且速度极快,内存占用较少,因为模式路由所遵循的搜索空间比迷宫路由算法小得多。
因此,模式路由被广泛用于全局路由应用中。
12.4.2 并发全局路由选择
顺序方法的主要缺点是存在网络排序问题。在任何网络排序情况下,后面考虑的网络都更难路由,因为它们会受到更多阻塞。此外,如果顺序布线法找不到可行的解决方案,就不清楚是因为没有现成的可行解决方案,还是因为网络顺序选择不当。此外,当顺序路由确实找到一个可行的解决方案时,我们也不知道这个解决方案是否是最优的,或者离最优解决方案有多远。
离最优解有多远。如果我们采用并发方法来解决路由问题,这些问题都可以得到解答。
一种流行的并行方法是将全局路由设计表述为 0-1 整数线性规划(0-1 ILP)问题。
首先将布局建模为一个路由图 G(V,E),其中每个节点代表一个磁盘阵列,每条边代表两个相邻磁盘阵列之间的边界。
每条边
都有一个容量,用
表示,代表穿过该边界的轨道数。
给定一个网,就可以枚举出所有可能的路由模式。
变量
表示路由模式
是否选自网络
的路由模式集合
。
因此,对于网表为 N 的路由图 G(V,E),拥塞驱动的全局路由可以表述为如下的 0-1 ILP 问题:
第一个和第二个约束条件要求每个网络只能选择一种路由模式,第三个约束条件和目标共同确保最大拥塞最小化。
如果存在
的解,就能得到最大拥塞最小的全局路由解。
由于 0-1 ILP 是 NP-完备的,高时间复杂度极大地限制了可行问题的规模。
解决这个问题的另一种方法是首先求解连续线性规划(LP)松弛,将第二个约束条件替换为实变
,因为 LP 问题可以在多项式时间内求解。
然后,可以通过随机舍入等舍入方法(Raghavan,1987 年)将得到的小数解转化为整数解。
然而,这种近似方法不可避免地会失去最优性。
在实践中,0-1 ILP 并发路由技术通常被嵌入到一个更大的全局路由框架中,采用分层、分而治之的方式,如求解一个子问题,其中计算最优解的复杂度是可控的。
另一种将路由区域划分为子区域的方法是 BoxRouter [Cho 2006],这种方法可以逐个子区域处理路由问题,从而缩小问题规模。
12.4.3 斯坦纳树 Steiner trees
前面介绍的算法主要是针对双针网络的。
如果所有网络都是双针网络,我们可以使用通用路由算法来处理问题,例如第 12.3 节中介绍的迷宫、直线搜索和 A* 搜索路由。
对于三个或更多的多针网络,一种简单的方法是将每个网络分解为一组双针连接,然后逐个路由这些连接。
一种常用的分解方法是为每个网络的引脚找到最小生成树 (MST),即连接所有引脚的边长最小的树。
通过 Kruskal [Kruskal 1956] 或 Prim-Dijkstra [Prim 1957] 算法,可以在多项式时间内高效计算出 MST。
不过,这种方法的路由结果取决于分解,通常只能得到次优解。
图 12.12 描述了一个由直线 MST 分解的 4 针网络实例,其中每个线段都水平或垂直运行。
用最小直线生成树分解的 4 针网络: (a) 由四个针脚 p1、p2、p3 和 p4 组成的网络。 (b) (a) 的 MST,它将网络分解为三个双针脚连接。
一种更好、更自然的多针网络路由方法是采用基于斯坦纳树的方法。具体来说,最小直线斯坦纳树(MRST)用于以最小线长对多针网络进行路由。
给定平面上的 m 个点,MRST 通过直角线连接所有点,并可能通过一些额外的点(称为 Steiner 点),从而获得一棵最小线长的直角边树。
让 P 和 S 分别表示原始点集合和斯坦纳点集合。
那么,MRST 和 MST 之间的关系如下。
图 12.13b 显示了 MRST 的一个示例,图 12.13a 中的四个引脚 p1、p2、p3 和 p4 有两个斯坦纳点 s1 和 s2。
最小直线斯坦纳树(MRST)及其哈南网格: (a) 由四个针脚 P 组成的网络:p1、p2、p3 和 p4。(b) (a) 的 MRST 及其两个斯坦纳点 s1 和 s2。(请注意,(b)中 MRST 的所有斯坦纳点 s1 和 s2 都是从哈南网格上的网格点中选取的。)
在构建 MRST 时需要考虑的斯坦纳点可能无穷多。
幸运的是,哈南证明了对于一个针脚集 P,存在一个 P 的 MRST,其所有斯坦纳点均选自哈南网格的网格点,通过构建穿过 P 中每个针脚的垂直线和水平线即可得到。
图 12.13c 显示了图 12.13a 中四个引脚的哈南网格。
图 12.13b 中 MRST 的斯坦纳点 s1 和 s2 都位于哈南网格的网格点上。
哈南定理大大缩小了 MRST 构造的搜索空间,从无穷多的选择减少到只有
个斯坦纳点候选,其中 m=|P| 。然而,MRST 构造仍然是一个 NP 难问题 [Garey 1977]。因此,人们开发了许多启发式方法。
MST 和 MRST 之间的关系可以用 Hwang 定理[Hwang 1976]表述如下:
等式 (12.3) 为通过基于 MST 的近似算法构建 MRST 提供了强大的动力。
Ho 等人通过动态编程最大化单调(非迂回)边缘(如 L 形、Z 形)重叠,从 MST 中构建了 MRST [Ho 1990]。
Kahng 和 Robins 开发了迭代 1-Steiner 启发式 [Kahng 1990](见算法 12.1)。
他们从一个 MST 开始,迭代选择一个能最大程度减少线长的 Steiner 点,然后将该 Steiner 点添加到树中。
迭代一直持续到线长无法进一步改善为止。
针对 4 针网的迭代 1-斯坦纳启发式的逐步示例: (a) 初始 MST。(b) 通过插入斯坦纳点 s1 进行第一次迭代后的 MRST。(c) 通过插入斯坦纳点 s2 进行第二次迭代后的 MRST。
(d) 插入 Steiner 点 s3 进行第三次迭代后的 MRST。 (e) 移除退化 Steiner 点 s1 后的最终 MRST。
图 12.14b-d 展示了在图 12.14a 中的初始 MST 中插入 Steiner 点 s1、s2 和 s3 后的第一、第二和第三次迭代。
请注意,迭代 1-斯坦纳启发式可能会生成一个分支数(度数)≦ 2 的 "退化 "斯坦纳点,如图 12.14d 中的 s1。
因此,我们必须在生成退化斯坦纳点时将其删除(见图 12.14e)。
图 12.14e 显示了图 12.14a 的最终 MRST。
Zhou 2004]在稀疏图中包含 MRST 的生成图的基础上,开发了一种高效的 MRST 算法,其最坏情况下的时间复杂度仅为 O(m lg m),求解质量接近迭代 1-Steiner 启发式。
[Chu 2004]利用预计算查找表开发了 FLUTE 软件包,可高效、准确地估计多针网络的线长。Lin 等人
构建了单层和多层避障 MRST,以考虑电源网络、预路由网络、IP 块和/或特征模式带来的路由障碍,从而提高可制造性/可靠性[Lin 2007, 2008]。
Shi 等人基于电流驱动电路模型构建了避障 MRST [Shi 2006]。
12.5 详细布线
给定全局布线路径后,详细布线将确定网络的精确轨迹和通孔。
在此,我们将讨论两种最常用的详细布线方式:通道布线和全芯片布线。
在早期的工艺技术中,可用金属层的最大数量只有两到三层,因此普遍采用通道布线,因为大多数导线都是在一对逻辑块(单元行)之间的自由空间(即布线通道)中布线的;见图 12.15。
集成电路块之间的通道路由
在现代技术中,芯片通常包含六到十层金属层,预计在不久的将来,可用金属层的数量还会稳步增加。
随着金属层的增加,在逻辑块(单元行)上布线(即在单元上布线)也很常见。因此,布线区域变得更像无沟道区域。
这一趋势推动了对全芯片布线方法的需求。
12.5.1 通道布线
通道路由是路由问题的一种特例,其中导线在路由通道内连接。
要应用通道路由,通常要将路由区域分解为路由通道。
需要注意的是,分解路由区域通常有多种方法。
例如,图 12.16 显示了 T 型路由区域的两种分解方式。
路由区域分解的两种方式: (a) 路由区域分解为两个通道。(b) 路由区域分解为三个通道。
图 12.16a 中的路由区域被分解为一个水平通道(通道 1)和一个垂直通道(通道 2),而图 12.16b 中的路由区域被分解为两个水平通道(通道 1 和 2)和一个垂直通道(通道 3)。
路由区域的顺序对信道路由过程有很大影响。在图 12.16a 中,按照先通道 2 后通道 1 的顺序布线不会发生冲突。
相反,如果先路由通道 1,并将所有相关线路固定在通道中,那么如果通道 2 无法容纳所有网络,就无法扩展通道 2。
相反,如果先路由通道 2,我们仍可根据需要扩展通道 1 进行路由。
需要注意的是,并非总能找到可行的通道排序来避免冲突,这时我们可以采用 L 型通道路由来解决冲突。
对于现代芯片路由,每个路由层通常都有一个首选路由方向,即水平或垂直路由层(又称保留路由模型)。
例如,三层 HVH 路由模型意味着第一层、第二层和第三层的首选方向分别是水平、垂直和水平。
对于本节讨论的信道路由问题,除非另有说明,否则我们假设采用两层 HVH 路由模型。
我们定义了一些通道路由的术语(见图 12.17 的说明)。
通道路由说明: (a) 带有两条路由轨道的通道路由配置。(b) (a) 的简化说明。
通道路由问题的输入是两个通道边界(上边界和下边界),通道边界的列上有引脚(终端)编号。
引脚编号代表其唯一的网络 ID;相同编号的引脚属于同一网络,因此必须相互连接。轨道上的水平线段是主干,连接主干和引脚的垂直线段是分支。
如果网络的路由路径包含一个以上的主干,则该路由路径称为dog-leg。
路由通道的面积用通道内路由轨道的数量表示,称为通道高度。路由通道的每一列都与本地密度相关联,以表示穿过该列的网络总数。
通道密度,即路由通道的密度,定义为通道内的最大局部密度。显然,通道密度是完成路由所需的轨道数的下限。
通道布线的主要目标是最小化通道高度,而通道高度与芯片尺寸直接相关,因此也与制造成本直接相关。
一般的双层通道布线问题是 NP-完全的 [Szymanski 1985],而该问题的某些特殊情况可以在多项式时间内优化求解 [Hashimoto 1971]。
图 12.17a 展示了一个两层通道路由的例子,它连接了三个引脚编号分别为 1、2 和 3 的网络。通道高度为 2,网络 1 的连接为dogleg。
为简洁起见,我们将在本章中使用图 12.17b 的简化插图。
如图 12.17b 所示,路由通道包含八列,这些列的局部密度分别为 1、2、2、2、2、2、2、1(从左到右),通道密度为 2。
为尽量降低通道高度,通常使用dogleg是连接线段。对于相同的布线实例,图 12.18b 所示的有狗腿的通道布线只需要两条轨道的高度,而图 12.18a 所示的无狗腿的通道布线则需要四条轨道才能完成布线。
dogleg通道路由的影响: (a) 无dogleg的通道路由解决方案需要四条轨道来完成路由。
(b) 有dogleg的通道路由解决方案只需要两条轨道。
下面我们介绍狗腿通道路由算法[Deutsch 1976],它是受限左边缘通道路由算法[Hashimoto 1971]的扩展。狗腿通道路由算法首先将多针网络分解成双针连接,然后将每个连接的主干分配到可行的轨道中。
狗腿通道路由算法包含三个步骤: (1) 将每个多针网络分解为双针连接;(2) 根据这些连接的位置,构建两个约束图来模拟路由约束,即水平约束图(HCG)和垂直约束图(VCG);(3) 在不违反 HCG 和 VCG 中的任何约束的情况下,对每个网络进行路由。
狗腿通道路由的约束图构建: (a) 通道路由实例。(b) 多针网分解。(c) 无向水平约束图 (HCG)。(d) 有向垂直约束图 (VCG)。
以网络分解为例,如图 12.19b 所示,3 引脚网络 1(用区间 [2, 7] 表示,因为它从第 2 列跨越到第 7 列)被分解为两个 2 引脚连接,即 1a(区间 [2, 5])和 1b(区间 [5, 7])。
第二步是为给定路由实例构建 HCG 和 VCG。
HCG (V, E ) 是一个无向图,其中每个节点
代表一个连接 ni,当且仅当连接 ni 和 nj 之间存在水平约束时(即,ni和nj的跨度是重叠的),才存在边
,因此 ni 和 nj 不能共享同一轨道,否则会发生线路短路。
在图 12.19b 的示例中,连接 2 和连接 4 的跨度(分别为 [1, 4] 和 [2, 4])在区间 [2, 4] 中重叠,因此节点 2 和节点 4 之间存在 HCG 水平约束。
图 12.19c 描述了图 12.19b 中信道路由实例的 HCG。
请注意,1a 和 1b 之间没有水平约束,因为它们属于同一个网络(网络 1)。
VCG (V, E ) 是一个有向图,其中每个节点
代表一个连接 ni,如果 ni 和 nj 之间存在垂直约束(即 ni 的truck必须高于 nj 的truck),则存在一条有向边
。
根据上边界和下边界中的针脚位置,可以直接构建 VCG。
以图 12.19b 为例,上边界和下边界第 4 列的引脚分别为 4 和 2,因此 VCG 中存在一条有向边 (4, 2)。
图 12.19d 给出了图 12.19b 实例的 VCG。
第三步是根据 HCG 和 VCG 中指定的约束条件对每个网络进行路由。假设从上到下将网络路由到路由轨道。在这一步中,将应用约束左边缘算法 [Hashimoto 1971]。
首先,该算法将每个连接视为一个区间,并根据其左端 x 坐标对区间进行排序。然后,对没有任何垂直约束的连接(例如,在 VCG 中内度数为零的节点)按照顺序逐一路由。对于一个连接,从上到下扫描通道中的轨道,并将第一个能容纳该连接的轨道分配给该连接。将所有中继线(水平连接)分配到轨道后,通过分支将中继线的左端和右端连接到通道边界上的相应引脚,完成通道路由。需要注意的是,对于没有垂直限制的通道(见图 12.17 所示实例),可以通过左边缘算法 [Hashimoto 1971] 在多项式时间内优化路由。
图12.19a实例的狗腿通道路由(VCG中的无约束连接被圈了起来):(a)连接按左端坐标排序。(b)连接1a和3被逐个分配给第一个轨道。(c)连接4和5被逐个分配到第二条轨道。(d)连接2和1b被逐个分配到第三条轨道上。(e)有三条轨道的最终路由解决方案
图 12.20 展示了图 12.19a 实例的狗腿通道路由,该实例的通道密度为 3。
首先根据左端坐标将连接排序为 <2、1a、4、1b、3、5>(见图 12.20a)。
如图 12.20b 所示,VCG 中有两个无约束连接 1a 和 3,根据顺序,1a 和 3 被逐一路由。
1a 和 3 都被分配到第一条轨道。
然后删除节点 1a 和 3 及相关边,更新 VCG(见图 12.20c)。
由此,VCG 中的无约束连接为 4 和 5。同样,4 和 5 被逐一路由,4 和 5 的两条主干都在第二条轨道上路由。
然后删除节点 4 和 5 及相关边,更新 VCG(见图 12.20d)。这样,VCG 中的无约束连接为 1b 和 2。
最后,2 和 1b 被逐一路由,2 和 1b 的中继线都被分配到第三轨道。
然后,通过分支将每个主干的左端和右端连接到相应通道边界上的引脚,就得到了最终的路由解决方案(见图 12.20e)。
还需注意的是,[Deutsch 1976]引入的狗腿通道路由算法使用了两个参数来控制路由:
- 范围: 决定同一网络中可放置在同一轨道上的连续 2 引脚连接的数量。该参数会影响狗腿的数量,从而影响通孔的数量。
- 路由顺序: 指定通道的起始位置和路由方向。狗腿通道路由器将连接从上到下、从下到上或两个方向交替分配到路由轨道。不同的路由顺序可能会产生不同的路由解决方案。
请注意,如果路由顺序是从下至上,则没有任何垂直限制的连接对应于 VCG 中度为的0的节点。
12.5.2 全芯片布线
全芯片路由通常是一个非常复杂的组合问题。
为了使问题易于处理,许多路由算法都采用了两阶段技术,即先进行全局路由,然后再进行细节路由。
然而,不断增加的设计复杂度给现代路由器带来了严峻的挑战。
随着设计规模的增大,传统的平面框架无法很好地扩展。
现代芯片可能包含数十亿个晶体管和数百万个网络。
为了解决可扩展性问题,路由框架不断发展,分层和多层次框架在大规模设计中越来越受欢迎。
分层路由框架采用分而治之的方法,将复杂的大型路由问题转化为一系列更小更简单的子问题,然后以自上而下、自下而上或混合的方式进行处理,既可用于全局路由,也可用于详细路由。
Burstein 1983]提出了一种自上而下的分层全局路由框架。
该算法递归地将路由区域划分为一个个更小的子区域,并命名为超级单元,每个层次上的网络按顺序或同时路由,并在随后的层次中细化。
一种针对三针网络的逐层自上而下的分层路由方法。
图 12.21 展示了一个采用自上而下分层方法对 3 引脚网络进行全局路由的示例,其中路由区域被递归分割成更小的超级单元,在每个层级,网络都根据该层级的超级单元进行路由。这一过程以自上而下的方式进行,直到超级单元的大小缩小到全局路由瓦片的大小为止。
Marek-Sadowska 1984)中提出了一种自下而上的分层路由方法。最初,路由区域被划分为一个超级单元阵列。在每个层次上,每个超级单元内的路由都受到单独限制。当当前层次的路由选择完成后,每四个超级单元合并,在下一个更高层次形成一个新的更大的超级单元。这个过程一直持续到包含整个芯片的最高层。
一种针对7针网络的逐层自下而上的分层路由方法。
图 12.22 显示了一个 7 引脚网络自下而上的分层布线过程,其中每个实心矩形代表一个超级单元,上一级的 2*2 虚线子区域合并在一起。自上而下和自下而上分层方法的一个主要局限是,在一个分层层次上做出的路由决策对于后续层次可能是次优的。
为了缓解这一问题,Lin、Hsu 和 Tsai 提出了一种混合分层方法,将有界迷宫路由算法与自上而下和自下而上的分层方法结合起来,形成一个统一的路由框架[Lin 1990]。
他们的算法包括三个阶段:(1) 邻接传播,(2) 偏好划分,(3) 有界路由。
第 1 阶段执行有界迷宫路由,从每个引脚向外传播 W 圈波,其中 W 是用户定义的参数。
如果未找到连接,第 2 阶段会递归地将针脚和阻塞映射到相邻的上层(见图 12.23a),并调用有界迷宫路由算法,直到找到路径为止。
使用混合分层方法进行全局路由选择的示例: (a) 将插针和堵塞物映射到上一层,然后在上一层找到路由路径。(b) 将上层的连接映射到下层,形成首选区域。(c) 在首选区域找到路由路径。
然后,将连接的路径映射回下层的首选区域(见图 12.23b)。第 3 阶段在首选区域内找到路由路径(见图 12.23c)。
与纯粹的自上而下或自下而上的分层路由相比,混合分层方法拥有更多的全局信息,可以生成更好的路由解决方案。
虽然分层路由方法可以扩展到更大的设计,但它也有明显的缺点,那就是缺乏不同路由子区域之间的交互,而且某一层的路由决策是不可逆的(即无法在后期进行改进),从而限制了解决方案的质量。
为了弥补这些不足,研究人员提出了多级框架来处理大规模路由问题。
多层次框架最早出现在 [Cong 2001, 2002] 针对全局路由的研究中,以及 [Lin 2002] 和 [Chang 2004] 针对全局路由和详细路由的研究中。
下面,我们将介绍可路由性驱动的
型多级路由框架 [Chang 2004]。
多级路由框架将路由资源建模为多级路由图。
一开始,路由区域被划分为一个矩形子区域阵列,每个子区域在每个维度上可容纳数十条路由轨迹(见图 12.24)。这些子区域称为全局单元(GC)。
路由图中的节点代表芯片中的一个 GC,而边则表示两个相邻 GC 之间的边界。
根据 GC 的物理区域或大小,为每条边分配一个容量。
这种路由图称为 0 级多级路由图,用 G0 表示,其中下标代表级别。
型多级路由框架由自下而上的粗化和自上而下的解粗化组成。
粗化阶段采用自下而上的方法,对多级路由图中的一组 GC 进行迭代分组。
这一过程从最细级(0 级)开始到最粗级;在每一级 k,
的四个相邻
合并为
的一个更大的
,同时执行资源估算,以便在 k + 1 级使用。
粗化过程一直持续到某一级的 GC 数量低于阈值为止。
与此相反,解粗化阶段以自上而下的方式迭代解组一组先前聚类的 GC。
它从最粗的层级到最细的层级;在每个层级 k,一个
被分解成四个较小的
。
解压缩一直持续到最细级。图 12.25 展示了
型多级框架。
给定网表后,多级路由首先应用最小生成树(MST)算法将每个网分解为 2 引脚连接。
在粗化阶段的每一级 k 上,首先对局部 2 引脚连接(完全位于 GCk 内的连接)执行全局路由,然后使用详细的路由器来确定精确布线。
假设第 0 层的多级路由图为
局部连接的全局路由结果为 Re = {
|e 是路由选择的边}。
对于拥塞控制,成本函数
用于指导路由:
其中
是边e的拥塞,定义为
其中,pe 和 de 分别是与 e 相关的容量和密度。
需要注意的是,在粗化阶段,我们总是搜索两个引脚之间最短的全局路由路径(即单调路由或无迂回);因此,线长是最小的,因此线长不包含在全局路由阶段的成本函数中。这个成本函数可以引导全局路由器选择拥塞较小的路径。
全局布线完成后,详细布线采用同步路径长度和通孔最小化(SPVM)算法,执行同时考虑路径长度和通孔最小化的修正迷宫布线。
为了获得更好的电路性能,最好尽量减少布线路径中使用的通孔数量,因为通孔的 RC 延迟通常比金属线大得多。SPVM 算法可以找到弯曲/通孔数量最少的最短路径,如果存在这样的路径的话。
它将每个基本详细路由区域 u(在基于网格的路由中可以是网格单元,在无网格路由中可以是由导线间距定义的基本路由区域)与两个标签 d(u) 和 b(u) 相关联,其中 d(u) 是源 s 到 u 的最短路径的距离,b(u) 是从 s 到 u 的最短路径上的最小弯曲/通孔数量。
初始情况下,d(s)、b(s) = 0,
在迷宫路由的填充阶段,标签 d 的计算与原始迷宫路由算法相同。
假设 u 是波传播波阵面上的一个基本路由区域,v 是 u 的邻近基本路由区域。
u 的前置路由区域是波阵面传播以获得最小 b(u) 的区域。
b(v) 的计算过程如算法 12.2 所示。
基本原理是先比较距离标签 d,然后比较弯曲/通径数标签 b。
d(v) < d(u) 的相邻路由区域 v 的 b(v) 值保持不变,因为从 s 经过 u 到 v 的路径不是 s 和 v 之间的最短路径。
回溯阶段与原始迷宫路由算法相同。
需要注意的是,可能存在几条弯曲/岔道数量不同的最短路径。
波浪推进阶段始终跟踪弯曲/通路数量最少的最短路径,以便让回溯阶段找到这样的路径。
在第 k 层执行全局路由和详细路由时,四个相邻的
会合并为一个更大的
,同时进行资源估算,以供下一级 k + 1 使用。
由于全局路由、详细路由和资源估算在每一级都是整合在一起的,因此路由资源估算更加准确,从而有利于在解粗化阶段对解决方案进行细化(如撕裂和重路由过程)。
算法 12.3 给出了
型多级路由框架的算法[Chang 2004]。
12.6 现代布线考虑因素
随着工艺几何尺寸缩小到纳米级,集成电路行业在信号完整性、可制造性和可靠性方面面临着严峻的挑战。
在本节中,我们将考虑这些问题来解决布线问题。
具体而言,我们将讨论信号完整性感知布线中的串扰、制造性感知布线中的光学接近校正 (OPC) 和化学机械抛光 (CMP),以及可靠性感知布线中的避免天线效应和双孔插入。
12.6.1 保证信号完整性的布线
随着制造技术的发展,片上最小特征尺寸不断减小,时钟频率不断提高,器件和互连线的位置越来越近,以减少互连延迟和布线面积。因此,导线纵横比的增加和互连间距的减小使得耦合电容大于自电容。事实上,即使在 0.25 毫米技术中,耦合电容的比例据说甚至高达总布线电容的 70% 至 80%。
因此,串扰成为信号完整性的一个关键问题。
12.6.1.1 串扰建模
噪声是一种不必要的变化,它使制造电路的行为偏离预期响应。噪声的有害影响可分为两类。一类是误操作,它使门的逻辑值与我们期望的不同;另一类是时序变化,它是由开关行为引起的。主要的噪声来自串扰效应,这主要是由互连线之间的耦合电容引起的。如图 12.26 所示,由于导线 1 和导线 2 之间存在耦合电容 Cc,当导线 1 被正信号激活时,导线 2 将产生一个意外脉冲。如果意外脉冲大于阈值,电路的功能可能会失效。
串扰效应
更确切地说,两根导线在不同方向切换时产生的串扰会增加信号延迟,降低信号完整性;相反,如果两根导线在同一方向切换,串扰会减少信号延迟,增加信号完整性。
一般来说,两根导线之间的串扰与它们的耦合电容成正比,而耦合电容则由这些导线的相对位置决定。
与当前技术中相邻平行导线之间的耦合电容相比,正交导线之间的耦合电容可以忽略不计。因此,只需考虑相邻平行导线之间的耦合电容,就可以近似地计算串扰。
两根导线i和j之间的电容性串扰计算
图 12.27 展示了两根导线 i 和 j 分属不同网络的实例。 i 和 j 之间的耦合电容 cij 可近似计算如下 [Sakurai 1983]:
其中,a 是与技术有关的常数,k 是介于 1 和 2(接近 2)之间的常数,lij 是导线 i 和 j 的重叠长度,dij 是导线 i 和 j 之间的距离。
根据公式 (12.6),我们可以看出两根平行导线之间的耦合电容与它们的耦合长度成正比,与它们之间的距离成反比。更精确的串扰建模可参阅 [Vittal 1999;Jiang 2000;Cong 2001]。
12.6.1.2 串扰感知路由
文献[Gao,1996 年;Zhou,1998 年;Ho,2005 年,2007 年]对最小串扰路由进行了广泛研究。
Gao 和 Liu 采用混合 ILP(整数线性规划)公式对给定信道路由方案中的路由轨迹进行排列,以最小化串扰[Gao 1996]。Zhou 和 Wong 在 Steiner 树公式和拉格朗日松弛的基础上最小化了全局路由过程中的串扰[Zhou 1998]。
Chaudhary、Onozawa 和 Kuh 在详细布线后提出了一种线间距调整算法,以减少串扰 [Chaudhary 1993]。
然而,在全局路由或详细路由过程中处理串扰可能并不容易。
在全局路由过程中处理串扰可能为时过早,因为在这一阶段还没有确定网络的相对位置和排序;因此,最好的办法是使用粗略的统计估算器,阻止网络进入不需要的邻近区域。
相反,详细路由处理串扰问题可能为时已晚,因为当详细路由器试图将晚期路由网络嵌入有冲突的攻击者或受害者网络的密集区域时,可能会遇到无法解决的撕裂/重新路由问题。
为了解决这些问题,Ho 等人 为了解决这些问题,Ho 等人在
形多层路由框架的中间阶段加入了层/轨分配启发式,以优化串扰[Ho 2005],如图 12.28 所示。
一个
形的多级路由框架与一个中间阶段的串扰最小化。
对长网段执行串扰驱动的层/轨分配,短网段由点到路径迷宫路由器路由。
为本地连接执行拥塞驱动的全局模式路由,然后为下一级估计路由拥塞情况。
使用点到路径详细迷宫路由,逐级重新路由出现故障的网络。
层/轨分配器一次处理全局单元阵列的整行或整列,其中一行(列)称为一个面板。
在层/轨分配过程中,会对一行或一列中跨越一个以上完整全局单元的线段进行处理,并在详细路由过程中对短线段进行路由。
短路段则在详细路由过程中进行路由。
首先,为面板中的所有线段建立水平约束图 HCG(V,E)。每个顶点
对应面板中的一个线段。两个顶点 vi 和 vj 由一条边
连接,当且仅当这两个线段属于两个不同的网,且它们的跨度重叠。e = (vi, vj)
E 的边成本表示 vi 和 vj 被分配到相邻轨道时的耦合长度。串扰驱动的层分配可表述为最大切割、k 着色 (MC) 问题。然而,一般的 MC 问题是 NP-完全的 [Garey 1979]。因此,我们采用了一种简单而有效的启发式方法,即先构建 HCG 的最大生成树,然后采用 k 着色法将所有网段分散到 k 层。经过 k 着色后,节点将按其成本(耦合长度)的递减顺序逐一分配到各层。
在串扰驱动的层分配之后,串扰驱动的轨迹分配被应用。假设 T 是面板内的轨道集。
每条轨道
可以由其组成的连续区间集合表示。用 xi 表示这些区间。如果 xi 是一个空闲的区间,或者是被同一网段占据的区间,则称一个网段
(网段集)可分配给
层分配后,HCG 中大部分成本较大的边将被消除,HCG 将被分解为 k 个子图 subHCG1、subHCG2、... , subHCGk(如果有 k 层)。
针对轨道分配的约束图建模:针对给定实例的(a) SubHCG。(b)对应的二部图赋值图。(c)组合图。
图 12.29 显示了一个子 HCG 的轨道分配问题示例,其中 S = {a, b, c, d, e, f },T = {1, 2, 3, 4},轨道上的障碍物用灰色阴影表示(例如,轨道 3 和 4 上的两个障碍物)。双方位分配图用于表示线段与轨道的可分配性。例如,如图 12.29b 所示,在节点 a 和节点 1、2、3 之间引入了边,因为线段 a 可以分配到轨道 1、2 或 3,但不能分配到轨道 4。为便于执行,将子HCG 和双方位分配图合并为组合图,如图 12.29c 所示。
由于每个顶点 v
V 对应一个线段,每条边 e
E 对应 HCG(V, E) 中的耦合成本,因此串扰驱动的轨道分配可以表述为哈密顿路径问题,该问题具有 NP-完备性 [Garey 1979]。下面是该问题的启发式方法。启发式首先要找到冲突路段的最大集合。 这相当于在子图 subHCGi 中找到最大的小群 Vc。算法首先从最大的小集团开始,每次分配一个冲突线段的最大子集。然后选择小群中最长的线段作为源 s,并将其分配给最上方的可用轨道。最上层的可用轨道。然后,选择成本最低的边 (s,i)(因此耦合度最小),并将与 i 相关的线段分配到第一个可用轨道上。如果所有轨道都被占用,与 i 相关的网络将被标记为失败网络,在解压缩阶段将重新考虑该网络.
重复该过程,找到成本最低的边 (i, j) 进行进一步处理,其中 j 为未访问的节点。图 12.30 展示了图 12.29 实例的轨迹分配过程。子HCG 中的最大簇是 {b, d, e, f },簇中最长的线段是 b。因此,航段 b 被分配到最上层的可用轨道,即轨道 1。将 b 分配到轨道 1 后的更新组合图见图 12.30b。然后,启发式将 b 作为构建小群哈密尔顿路径的源。选择 b 上的最小成本边 e = (b, f ),并将 f 分配给第一个可用轨道。将 f 分配到轨道 2 后的更新组合图见图 12.30c。该过程重复进行,直到访问了小集团中的所有节点。最终的轨道分配方案如图 12.30a 所示。
轨道分配过程: (a) 图 12.29 实例的最终轨道分配。 (b) 将 b 分配到轨道 1 后的组合图。 (c) 将 f 分配到轨道 2 后的组合图。
12.6.2 工艺性布线
就可制造性而言,OPC 和 CMP 是现代芯片设计最关注的两个问题。
前者在掩膜上增加或减少特征图案,以提高布局分辨率,从而提高掩膜图案在晶圆上的可印刷性,而后者则改善布局均匀性和芯片平面化,以实现更高的制造良率。
12.6.2.1 OPC 感知路由
我们首先介绍制造工艺。
该流程使用光学光刻系统,经过多次循环处理,每次处理包括两个主要步骤:曝光和蚀刻。
一种典型的光学光刻系统
图 12.31 展示了一个基本的光学光刻系统。
在曝光步骤中,光刻机将掩膜上的图案转移到涂在晶片顶部的光敏正极或负极光刻胶上,这是由光源通过掩膜孔发射的强紫外线完成的。
在光的照射下,正极光刻胶会溶于光刻胶显影剂,而负极光刻胶则不溶于显影剂。
这种化学变化使得一些光刻胶可以被一种特殊的溶液去除。
在蚀刻步骤中,化学药剂会去除晶片上未受光刻胶保护区域的最上层,从而在晶片上形成设计图案。
随着最小特征尺寸的不断缩小,集成电路代工厂不得不使用波长更大的光刻系统,在晶圆上打印尺寸更小的特征图案,这就是亚波长光刻间隙(见图 12.32)。
亚波长光刻间隙:印刷特征尺寸小于透过掩膜的光波长。
以现代工艺技术为例,我们可能需要使用波长为 193 纳米的光来打印 45 纳米的特征图案。
亚波长光刻间隙可能会导致晶圆上打印图案出现不必要的较大形状变形。
从物理学角度讲,当波长为 l 的光穿过大小为 d 的孔径时,光的波面会根据 l 和 d 之间的关系产生不同的表现。
当波长为 l 的光穿过大小为 d 的孔径时,光的波面会根据 l 和 d 之间的关系而有不同的表现: (a) 当 l 远小于 d 时,波面保持平直。(b) 当 l 远大于 d 时,可能会出现衍射波面。
如图 12.33a 所示,当 l 远小于掩膜上的孔径 d 时,光的波面保持平直。
然而,当 l 接近或大于 d 时,光的行为就像波(而不是粒子),会发生衍射(见图 12.33b),使晶片上的图案与掩膜上的图案不完全相同。
因此,必须大量使用昂贵的分辨率增强技术(RET)来提高版图精度。
许多 RET 在布局后阶段采用,以提高可印刷性,从而提高产量。
然而,设计复杂度的不断提高使得布局后优化的空间非常有限。
因此,在设计流程的早期考虑可制造性是可取的,例如 RET 感知布线。
在 RET 中,光学接近校正(OPC)在工业中最为流行。OPC 是修改掩模上的布局图案(由设计人员绘制)的过程,以补偿光刻工艺的非理想特性,从而提高布局的可印刷性。
图 12.34 展示了 OPC 增强的一个例子。
OPC 的效果:(a) 在没有 OPC 的情况下,晶片上的印刷图案与掩膜上的图案会产生较大的变形。(b) 增强 OPC 后,印刷图案与原始图案完全吻合。
如果没有 OPC,由于亚波长光刻,晶圆上的印刷图案与掩膜上的设计图案会发生扭曲。相反,如果用 OPC 增强掩膜上的图案,晶片上的印刷图案就能很好地与原始设计图案相匹配。但是,OPC 可能会产生大量额外的图案特征,这意味着需要更大的内存来记录这些特征,从而增加了光罩制作成本,如光罩合成、写入和检查验证。如果路由器能考虑光学效应,就能大大减少最终光罩上的图案特征数量。Chen 和 Chang 提出了一种基于规则的 OPC 感知多级路由器,以降低对 OPC 图案特征的要求[Chen 2007a]。他们将图案失真分为三大类型:圆角、线端缩短和线宽缩小,如图 12.35a-c 所示。
图案变形的三种主要类型(虚线代表理想图案形状): (a) 圆角。(b) 线端缩短。(c) 线宽缩小。
对于每种类型的变形,都会根据一些几何规则确定补偿所需的图案特征,例如,在角上添加锯齿使角度更锐利,在线端添加锤头以补偿线端缩短,沿线边添加线偏置以补偿线宽缩小(见图 12.36)。然后将 OPC 所需的图案特征数量建模为路由连接的成本。 例如,如图 12.36a 所示,为了提高线条图像的保真度,需要在四个角上添加四个衬线。此外,如图 12.36b 所示,当线条长度增加时,线条两端会变短;因此,对于长线条,需要在线条两端设置两个锤头。此外,较宽的直线比较窄的直线更容易受到相邻直线的影响,从而使直线两侧的收缩更为严重。因此,如图 12.36c 所示,对于较宽的线路,需要在线路两侧设置一些线路偏置。因此,可以将直线的附加特征总数建模为直线长度和宽度的函数。有了这个函数,我们就可以将 OPC 成本纳入路由器的原始可路由性和线长成本,从而获得基于规则的 OPC 感知路由方法。Chen、Liao 和 Chang 考虑了路由过程中的 OPC 影响,以减轻布局后 OPC 操作的成本[Chen 2008b]。他们从基于模型的 OPC(涉及各种工艺效应的复杂模拟)和基于逆光刻技术的布局后 OPC 建模中开发出了强度计算的分析公式,然后将 OPC 成本纳入 OPC 友好路由器中。Huang 等人和 Wu 等人也研究了 OPC 友好型迷宫路由[Huang 2004b; Wu 2005b]。
12.6.2.2 CMP 感知布线
在现代金属化工艺中,铜 (Cu) 因其更高的载流能力、更低的电阻和更低的成本等特性,已取代了传统的铝 (Al)。然而,铜的工艺与传统铝的工艺有很大不同。现代铜金属化工艺采用双达玛西工艺 [Luo 2005],包括电镀 (ECP) 和化学机械抛光 (CMP)。
大马士革工艺:(a)开放式沟槽。(b) 电镀 (ECP) 在沟槽上沉积铜。
(c) 化学机械抛光 (CMP) 去除填满沟槽的铜。
如图 12.37a-c 所示,ECP 将铜沉积在沟槽上,而 CMP 则去除溢出沟槽的铜。
CMP抛光器的原理图
图 12.38 是 CMP 工艺示意图。可溶解晶片层的研磨剂和腐蚀性化学浆液沉积在抛光垫表面。 然后,抛光垫和晶片被一个旋转的动态抛光头压在一起。结合化学反应和机械力,CMP 工艺可以去除晶片表面的材料,并使晶片趋于平面化。但是,由于铜和介电材料的硬度不同,CMP 平面化工艺可能会产生形貌不规则的现象,这可能会导致铜互连器件的产量大幅下降。对 CMP 工艺的研究表明,CMP 后的电介质厚度与布局图案密度高度相关,因为在抛光步骤中,电介质去除率随图案密度而变化。
与布局相关的厚度变化: (a)预CMP布局。(b)CMP后的厚度变化
如图 12.39 所示,各层上不均匀的特征密度分布可能导致 CMP 过度抛光或抛光不足。
这些 CMP 后的厚度变化需要小心控制,因为在制造过程中,一个金属层上的变化可能会逐渐转移到后续层上,最后累积到上层金属层上的变化可能会很大,这就是通常所说的多层累积效应 [Tian 2000]。
为了提高 CMP 质量,现代晶圆代工厂通常会对每层施加推荐的布局密度规则(甚至密度梯度规则),并在布局中填充虚特征,以减少每层的变化。然而,在 65 纳米及以后的技术节点上,这些填充的虚特征可能会产生不必要的影响 [White 2005]。 例如,它们可能会引起与附近互连器件的高耦合电容,从而产生串扰问题。此外,虚填充还会大大增加掩膜的数据量,延长掩膜制作过程的时间,从而增加掩膜成本。特别是在接下来耗时的 RET(如 OPC 工艺)中,这些填充特征会大大增加输入数据。
导线密度对虚特征填充有很大影响。布局图案(由导线和虚特征组成)的密度很大程度上取决于导线密度分布,这一点在 [Cho 2006] 中已有报道。因此,在布线阶段控制导线密度可减轻因过度填充虚特征而引起的问题。
此外,良好的导线分布可以减少随机微粒短缺陷,也有利于布线后的冗余通孔插入(见第 12.6.3.2 节),这可以转化为良品率增益。
文献[Cho 2006;Chen 2007b;Li 2007]讨论了不同布线阶段的密度均匀性,以实现 CMP 变化控制。Cho 等人考虑了全局路由过程中的 CMP 变化[Cho 2006]。他们通过经验表明,插入的虚特征数量可以通过导线密度预测,并观察到引脚密度较高的电路可能不会从导线密度优化中获得太多好处,因为改进的空间很小(从一开始就注定了要有较高的导线密度)。因此,他们提出了一种最小引脚密度全局路由算法,以降低最大线密度。
最小引脚密度全局路由[Cho 2006]: (a) 从源点 S 到目标点 T 有两条可能的单弯曲路径 a 和 b。 (b) 引脚密度较小的路径 a 优于路径 b。
图 12.40 展示了最小引脚密度全局布线算法。
图 12.40a 显示了一个从源 S 到目标 T 的网络的引脚分布。
如果只允许 L 形(1-弯曲)路由路径,则有两条可能的路径 a 和 b,它们的线长相同,但引脚密度不同。
由于引脚的存在意味着至少有一个引脚与其他引脚相连,因此如图 12.40b 所示,引脚密度较高的路径(如 b)最终会有较高的导线密度,从而导致较高的最终导线密度。
因此,引脚密度最小的路径(如路径 a)会带来更好的线密度分布。
双通道,自上而下的平面化驱动的路由框架。
图 12.41 显示了[Chen 2007b]中提出的自上而下平面化驱动的两步布线框架,它包括四个主要阶段:
(1) 预布线:根据引脚分布和导线连接确定潜在的密度热点,为接下来的全局布线提供指导;
(2) 全局路由:对网应用预路由引导的平面化感知全局模式路由,并迭代完善解决方案;
(3) 层/轨分配:逐个面板对长网段进行密度驱动的层/轨分配;
(4) 详细路由:使用分段到分段的详细迷宫路由来路由短网段,并逐层重新路由失败的网段。通过先处理较长的网络,可以更好地优化 CMP 的路由密度,因为较长的网络比较短的网络对密度的影响更大。
在预布线阶段,执行密度临界区分析算法(基于 Voronoi 图 [Preparata 1985])来识别潜在的密度热点。识别出的引脚和导线连接密度信息将用于指导后续布线。
在第一个自上而下(全局路由)阶段,使用平面化感知全局路由器来考虑密度下限和上限,同时最小化全局瓦片之间的密度梯度。每个全局瓦片 t 的平面化感知成本
定义如下:
其中,dt 是 t 的导线密度,
是在预路由阶段计算的预测热点成本,
是与 t 相邻瓦片的平均导线密度,
和
分别是代工厂密度规则中规定的密度下限和上限,
是用户定义的参数。
是常数,其中 kp 是正向惩罚,不鼓励通过密集的全局瓦片布线,kn 是负向奖励,鼓励通过稀疏的瓦片布线。
第二个等式同时考虑了局部地砖密度,并使相邻区域间的密度梯度最小化。中间阶段试图为导线密度安排保留更多的灵活性。
它包括两个阶段
(1) 密度驱动的层分配器将面板(全局瓦片行)中的线段均匀地分配到各层、
(2) 密度驱动轨迹分配器根据增量德劳内三角测量法(DT)[Preparata 1985]平衡每个轨迹的线段密度。
首先,线段
的灵活性定义如下:
其中,
是
的可分配轨道数,
是
的长度。
如果
的灵活性较小,则
的长度可能较长或插入空间较小,因此应首先分配。
因此,线段按其灵活性的递减顺序插入轨道。
然后,每个线段或障碍物由三个点表示:左端点、中心点和右端点,然后对得到的 DT 进行分析。
段落会被分配到一条轨道上,从而使所有三角形的面积差最小。
密度驱动的轨迹分配示例: (a) 初始 Delaunay 三角测量。(b) 线段 s3 的轨迹分配。(c) 线段 s2 的轨迹分配。(d) 线段 s1 的轨迹分配。
图 12.42 显示了一个密度驱动的轨迹分配示例,将三个线段 s1、s2 和 s3 插入有障碍物 O1 的轨迹中(见图 12.42)。
需要注意的是,边界上的人工线段是用来模拟邻域中线段和障碍物的分布情况的。
在轨迹分配后,就知道了线段的实际轨迹位置。
因此,在第二个自顶向下(详细路由)阶段,将执行经典的段到段迷宫详细路由,以连接较短的网,完成整个路由过程。
12.6.3 可靠性路由
随着特征尺寸缩小到纳米级,超大规模集成电路设计的制造可靠性和良品率正成为一项重要挑战。等离子工艺中产生的天线效应和开孔缺陷都是实现更高可靠性和成品率的重要问题。
12.6.3.1 天线避让路由
天线效应是由仅与栅极氧化物相连的浮动互连上收集的电荷引起的。
在金属化过程中,较长的浮动互联电路充当临时电容器,存储从等离子刻蚀和 CMP 等制造步骤所提供的能量中获得的电荷。如果收集的电荷超过阈值,Fowler-Nordheim(F-N)隧穿电流就会通过薄氧化物放电,造成栅极损坏。另一方面,如果收集到的电荷能在超过阈值之前通过扩散等低阻抗路径释放,则可避免栅极损坏。