考虑重叠度和线长的布局模块分布密度平滑方法 技术领域 本发明涉及超大规模集成电路物理设计技术领域, 尤其涉及一种考虑重叠度和线 长的布局模块分布密度平滑方法。
背景技术 布局过程一般开始于模块重叠度较高的初始布局, 在优化线长、 拥挤度等目标的 同时, 将模块均匀地分布到布局区。近年来, 力指向的解析式布局算法以其模型简单, 运行 速度快, 布局结果质量高等特点成为研究的热点。力指向布局算法一般先通过模块分布密 度平滑方法得到相对平坦的模块分布, 接着在此分布之上运行解析优化算法得到一个新的 布局, 以上过程迭代执行直到模块重叠度满足预定的目标。不同的密度平滑方法会造成不 同的模块分布, 从而导致不同的优化结果。因此密度平滑方法对布局优化质量有很大的影 响。
力指向布局算法典型的代表主要有 FastPlace、 mFAR 和 Kraftwerk 等, 按照使用的 密度平滑方法不同, 可以将它们划分为主动移动方法和力场推动方法两类。
主动移动密度平滑方法
在 FastPlace 和 mFAR 中采用, 它们根据当前 bin 结构的密度差异计算虚拟的 bin 结构, 用来映射模块的移动方向和位置, 使模块从高密度区向低密度区移动。这种主动移 动密度平滑方法的缺陷在于 : 当平滑分布密度时只考虑相邻的 bin, 未考虑局部分布与全 局分布的关系。在很多情况下, 模块的局部移动方向与全局的优化方向是不一致的。如图 1 所示, 按照扩散的方法如果只根据斜纹区域的密度分布计算, bin(4, 4) 和 bin(3, 4) 内的 模块应该向 bin(5, 3) 方向移动。但是, 从全局的密度分布考虑, 却应该朝着 bin(3, 3) 移 动。 假如 bin(4, 4) 和 bin(3, 4) 内的模块移到了 bin(5, 3), 从全局的密度分布观察, bin(5, 3) 已经是一个高密度区, 在接下来的布局迭代中会重新把 bin(5, 3) 内的模块向低密度区 bin(3, 3) 移动。因此, 这种移动方法不利于布局过程的收敛。
mFAR 中的密度平滑方法较之 FastPlace 做了改进, 通过计算某一 bin 边界两侧同 一行 ( 列 ) 的模块平均分布密度之差来确定跨边界的模块移动 “流量” , 然后进一步得到对 应于这个 bin 边界的虚拟边界的位置, 再通过与 FastPlace 类似的映射方法求得模块新的 位置。 这种方法更多的考虑了模块的全局分布, 但局部分布对模块移动的影响未加考虑。 由 于模块密度分布在布局初期非常不均匀, 这样会造成模块移动速度不平滑, 相邻 bin 的模 块移动速度容易发生较大的突变, 进而破坏模块的相对位置。
力场推动密度平滑方法
Eisenmann 等提出了经典地使用 “力” 推动布局模块从高密度区向低密度区移动, 力矢量是由模块的密度分布确定的。类似于电磁力场, 模块所受到的引力或斥力可以防止 模块重新退缩回前一迭代位置, 促使布局过程收敛。 在 H.Eisenmann, F.M.Johannes 于 1998 年发表的 Generic global placement and floorplanning[C] 的理论基础上, Kraftwerk 布 局算法在每次布局迭代中用泊松电势方程计算力矢量, 把力分成保持力和移动力, 完全用
解析的方法完成整体布局过程。
基于力场推动的方法是从模块的整体分布来确定力矢量, 从理论角度看比较合 理, 但是实际的应用中很难对力进行控制, 需要大量的参数进行校正, 较之前面的主动移动 方法需要更多的技巧。
此外, 上述密度平滑方法中标准模块一般被假定为具有面积属性的点来处理。由 于很多面积大的标准模块会跨越两个以上的 bin, 不论采用主动移动还是力场推动方法, 用 模块几何中心代表模块来计算移动距离显然存在较大的误差。 由于现代大规模集成电路布 局中通常会涉及很多可移动宏模块, 如何移动这些大的模块对布局结果有很大的影响。 发明内容
针对上述问题, 本发明提供一种由全局密度分布差异确定模块的移动方向, 由局 部密度分布梯度来确定模块移动距离的大小的考虑重叠度和线长的布局模块分布密度平 滑方法。
为达到上述目的, 本发明所述考虑重叠度和线长的布局模块分布密度平滑方法, 包括 :
步骤 (1)、 读取待布局区域信息, 将待布局区域划分为至少两个具有相同尺寸的 bin 结构, 若待布局区域内存在跨越至少两个 bin 的模块, 则将该模块进行离散处理离散为 多个子模块, 并分别计算出各 bin 内的模块密度 ;
步骤 (2)、 基于上述步骤 (1) 中得出的各 bin 内的模块密度, 分别计算出各 bin 左 右和上下两侧所有模块的密度, 并依据各侧的密度值确定出各 bin 内模块的移动方向 ;
步骤 (3)、 基于步骤 (2) 得出的移动方向, 计算各 bin 内模块面积溢出量, 依据面积 溢出量确定各 bin 内模块的总体平均移动距离 ;
步骤 (4)、 计算出各模块及其所属 bin 的连线网加权和, 依据连线网加权和及步骤 (3) 中得出的各 bin 内模块的总体平均移动距离确定各模块的实际移动距离 ;
步骤 (5)、 依据步骤 (2) 和 (4) 得出的各 bin 内模块的移动方向以及各模块的实际 移动距离, 移动各模块并输出移动后的新的模块位置文件。
进一步地, 步骤 (1) 具体实现如下 :
1.1、 读取待布局区域信息, 建立布局网链表 ;
1.2、 将待布局区域划分为 m×n 维相同尺寸的 bin 结构, 若待布局区域内存在跨越 至少两个 bin 的模块, 则将该模块以跨越的 bin 边界为分割线离散为多个子模块, 其中, m和 n 均为大于等于 1 的自然数 ;
1.3、 创建用于存储各 bin 内模块的密度的二维数组 grid[m][n] ;
1.4、 遍历布局网链表中所有模块节点, 依据各模块的位置和宽高信息查找出二维 数组 grid[m][n] 中该模块所属的 bin 数组元素并更新其内的模块信息, 若该模块被离散为 多个子模块则需依据各子模块的位置和宽高信息查找出二维数组 grid[m][n] 中各模块所 属的 bin 数组元素并更新其内的子模块信息 ;
1.5、 基于各 bin 数组元素中的模块信息或还包括子模块信息, 计算出各 bin 内的 模块密度。
其中, 各 bin 内的模块密度计算过程如下 :首先, 求解出 bini, 计算公式如下 : j 内的所有模块面积和,其中, i = 1、 2、 ...、 m, j = 1、 2、 ...、 n, Ai, Ak 表示模块 k 的 j 表示 bini, j 的面积, 面积或子模块的面积, Ψ 表示各 bin 内所有布局模块集合 ;
然后, 求解出 bini, 计算公式如下 : j 内的模块密度,
Di = Ui/Ai, j。
所述待布局区域信息包括 : 待布局区域内各模块的位置信息、 属性、 各模块的引线 端信息、 网表、 及布局区域信息。
进一步地, 所述步骤 (2) 具体实现如下 :
2.1、 遍历数组 grid[m][n] 中的每一 bin 数组元素, 分别计算各 bin 所在列两侧的 所有模块的平均分布密度, 以及各 bin 所在行两侧的所有模块的平均分布密度 ;
2.2、 分别将步骤 2.1 中得出的左右两侧和上下两侧的所有模块的平均分布密度 进行加权求和, 并将其存储到对应的 bin 数组元素中 ;
2.3、 依据 bin 左右两侧和上下两侧的密度信息及移动规则, 确定 bin 内模块的移 动方向。
其中, 所述的移动规则为 : bin 内模块向密度低的一侧移动。
进一步地, 所述步骤 (3) 具体实现如下 :
3.1、 判断在移动方向一侧的 bin 密度是否大于或等于欲移动 bin 的密度, 是, 则欲 移动 bin 内的模块不移动 ; 否则, 欲移动 bin 内的模块移动至移动方向一侧的 bin, 并继续 下一步骤 ;
3.2、 令移动方向一侧的 bin 和欲移动 bin 内的模块密度相等, 确定出欲移动 bin 内的模块面积溢出量, 再除以 bin 的宽度或高度即得出 bin 内模块的总体平均移动距离。
进一步地, 所述步骤 (4) 具体实现如下 :
4.1、 遍历所述布局网链表中的所有边, 依据边在 X 和 Y 轴的投影计算出模块节点 的连线网加权和 ;
4.2、 遍历布局网链表中的所有模块节点, 分别查找出二维数组 grid[m][n] 中该 模块所属的 bin 数组元素并更新其内模块的连线网加权和 ;
4.3、 依据模块的移动方向和其所属 bin 的连线网加权和计算出该模块的实际移 动距离, 若存在跨越至少两个 bin 的模块, 则根据面积的比率计算其实际移动距离。
较之已有的方法, 本发明具有以下几点有益地效果 :
(1) 本发明所述方法既克服了模块主动移动算法中局部与全局移动之间矛盾, 又 克服了力场推动算法中模块移动力难以控制的缺点, 降低了算法的难度, 提高了布局效率。
(2) 本发明提出了重叠度和线长同时考虑的模块移动方法, 使模块向着优化目标 方向移动。
(3) 本发明通过 bin 的边界对宏模块或大的标准模块进行离散处理, 然后由各离 散模块移动的矢量和求得实际的移动距离, 有效的解决了现有用模块几何中心来代表宏模 块或大的标准模块来计算移动距离存在的较大误差。
附图说明图 1 为布局模块局部和全局的移动方向比较示意图 ;
图 2 为本发明所述考虑重叠度和线长的布局模块分布密度平滑方法流程图 ;
图 3 是本发明跨越多个 bin 的模块的实施例示意图 ;
图 4 为本发明确定模块 x 轴方向的移动方向示意图 ;
图 5 为本发明确定模块 y 轴方向的移动方向示意图 ;
图 6a、 6b 和 6c 分别为 bin 内模块移动关系的三种示意图 ;
图 7 为采用本发明所述考虑重叠度和线长的布局模块分布密度平滑方法对待布 局区域内的模块进行布局的流程图。 具体实施方式
下面结合说明书附图对本发明所述方法做进一步的描述。
如图 2 所示, 本发明所述考虑重叠度和线长的布局模块分布密度平滑方法流程 图, 具体描述如下 :
步骤 (1)、 读取待布局区域信息, 将待布局区域划分为至少两个具有相同尺寸的 bin 结构, 若待布局区域内存在跨越至少两个 bin 的模块, 则将该模块进行离散处理离散为 多个子模块, 并分别计算出各 bin 内的模块密度 ; 具体实现如下 :
1.1、 读取待布局区域信息, 建立布局网链表 ;
1.2、 将待布局区域划分为 m×n 维相同尺寸的 bin 结构, 若待布局区域内存在跨越 至少两个 bin 的模块, 则将该模块以跨越的 bin 边界为分割线离散为多个子模块, 其中, m和 n 均为大于等于 1 的自然数 ;
1.3、 创建用于存储各 bin 内模块的密度的二维数组 grid[m][n] ;
1.4、 遍历布局网链表中所有模块节点, 依据各模块的位置和宽高信息查找出二维 数组 grid[m][n] 中该模块所属的 bin 数组元素并更新其内的模块信息, 若该模块被离散为 多个子模块则需依据各子模块的位置和宽高信息查找出二维数组 grid[m][n] 中各模块所 属的 bin 数组元素并更新其内的子模块信息 ;
1.5、 基于各 bin 数组元素中的模块信息或还包括子模块信息, 计算出各 bin 内的 模块密度。
其中, 本步骤 (1) 中所述待布局区域信息包括 : 待布局区域内各模块的位置信息、 属性、 各模块的引线端信息、 网表、 及布局区域信息。
于一具体实施例中, 如图 4 所示, 将布局区域划分为多个具有相同尺寸的 bin, 每 个 bin 能够容纳大约 3 ~ 4 个平均尺寸模块。对于宽 ( 或高 ) 小于平均宽 ( 或高 ) 的模块, 设其宽 ( 或高 ) 为平均值。
如图 3 所示布局过程中会有许多大的模块 ( 尤其是宏模块 ) 跨越多个 bin, 仅仅把 它们作为点来处理会造成分布模型过于粗糙, 本发明所述方法以大模块所跨越的 bin 边界 为分割线, 将其离散为多个模块。
设 m 和 n 分别表示行和列的 bin 的数量, Ai, Ak 表示模块 k 的 j 表示 bini, j 的面积,
面积, Ψ 表示 bin 内布局模块集合, 则 bini, j 内的模块面积和为 :7bini, j的密度为 : Di = Ui/Ai, 最后, 将得出的密度值分别存储到对应的 bini, j ; j 数组元素所在的存102323960 A CN 102323970说明书5/7 页储区域中。
步骤 (2)、 基于上述步骤 (1) 中得出的各 bin 内的模块密度, 分别计算出各 bin 左 右和上下两侧所有模块的密度, 并依据各侧的密度值确定出各 bin 内模块的移动方向。具 体实现如下 :
2.1、 遍历数组 grid[m][n] 中的每一 bin 数组元素, 分别计算各 bin 所在列两侧的 所有模块的平均分布密度, 以及各 bin 所在行两侧的所有模块的平均分布密度 ;
2.2、 分别将步骤 2.1 中得出的左右两侧和上下两侧的所有模块的平均分布密度 进行加权求和, 并将其存储到对应的 bin 数组元素中 ;
2.3、 依据 bin 左右两侧和上下两侧的密度信息及移动规则, 确定 bin 内模块的移 动方向。
步骤 2.3 中所述的移动规则为 : bin 内模块向密度低的一侧移动。
于一具体实施例中, 本发明所述方法不同于 mFAR, 首先计算出 bin 所在列两侧的 所有模块平均分布密度, 而不仅仅是按一行计算。 如图 4 所示, 设 Dli 和 Dri 分别表示 bin(i, j) 所在第 j 列的左右两侧 ( 如图 4 中斜纹部分所示 )。
首先, 分别计算出 Dli 和 Dri 两部分中 ( 不包括第 i 行 ) 所有模块平均分布密度, 即:
然后, 分别计算出 Dli 和 Dri 两部分中包括 i 行在内的所有模块分布的加权平均密度为 :
其中, 参数 γ 用来调节 bin 所在 i 行上下两侧模块分布在 Dli 和 Dri 中所占的比 率, 一般取值 0.4。这里假设 x 坐标轴正方向为模块移动的正方向, 如果 Dli < Dri 则 bin(i, j) 在 x 轴方向的移动方向为正, 否则为负。由于在布局中 x 和 y 方向是独立的, 因此如图 5 所示, bin(i, j) 所在第 i 行上下 两侧中所有模块分布的加权平均密度的求解同上述步骤。同理, y 坐标轴正方向为模块移 动的正方向, 如果 Duj < Ddj 则 bin(i, j) 在 y 轴方向的移动方向为正, 否则为负。
基于上述的计算, 有利于从全局密度分布着眼来减少重叠度, 也许从局部的密度 分布出发向相反的方向移动模块也会减少重叠度, 但从全局分析这样会增加重叠, 因为 |Dli-Dri| 的绝对值增加了。
步骤 (3)、 基于步骤 (2) 得出的移动方向, 计算各 bin 内模块面积溢出量, 依据面积 溢出量确定各 bin 内模块的总体平均移动距离。具体实现如下 :
3.1、 判断在移动方向一侧的 bin 密度是否大于或等于欲移动 bin 的密度, 是, 则欲
移动 bin 内的模块不移动 ; 否则, 欲移动 bin 内的模块移动至移动方向一侧的 bin, 并继续 下一步骤 ;
3.2、 令移动方向一侧的 bin 和欲移动 bin 内的模块密度相等, 确定出欲移动 bin 内的模块面积溢出量, 再除以 bin 的宽度或高度即得出 bin 内模块的总体平均移动距离。
于一具体实施例中, 图 6a、 6b 和 6c 所示, 显示了 bini 即斜纹部分与其右侧邻居密 度的三种关系。如图 6c 所示 Di > Di+1, 假定 bini+1 内的模块保持静止仅 bini 内的模块允许 移动, 那么 bini 的模块总体移动距离为 :
其中, 参数 w 表示 bin 的宽度, α 是一个移动速度控制参数。 当移动方向向右且 Di > Di-1, 则移动距离为 :其中, 上述计算公式中解得的 Fi 并非 bini 内的所有模块实际的移动距离, 它只是 一个粗略的平均值。
如图 6a 和图 6b 所示 Di ≤ Di+1, 此时 bini 内的模块被设为静止, 因为它们的移动只 能加剧局部的重叠。这种移动规则可以阻止相邻的 bin 之间的模块互相朝着对方移动。先 全局优化方向, 再局部地优化重叠度, 这样使得局部的密度平滑与全局的优化目标相一致。
为了尽量减少对线长的破坏, 模块的移动速度必须是相对平滑的, 尤其是在布局 的初期, bin 之间较大的密度差异会导致 |Fi| >> w, 某些模块大距离地移动会对线长产生 较大的破坏。因此除了用 α 来调节移动速度外, 还可以根据布局速度的需要限制模块的最 大移动距离。
步骤 (4)、 计算出各模块及其所属 bin 的连线网加权和, 依据连线网加权和及步骤 (3) 中得出的各 bin 内模块的总体平均移动距离确定各模块的实际移动距离。具体实现如 下:
4.1、 遍历所述布局网链表中的所有边, 依据边在 X 和 Y 轴的投影计算出模块节点 的连线网加权和 ;
4.2、 遍历布局网链表中的所有模块节点, 分别查找出二维数组 grid[m][n] 中该 模块所属的 bin 数组元素并更新其内模块的连线网加权和 ;
4.3、 依据模块的移动方向和其所属 bin 的连线网加权和计算出该模块的实际移 动距离, 若存在跨越至少两个 bin 的模块, 则根据面积的比率计算其实际移动距离。
于一具体实施例中, 确定了模块的移动方向和总体移动距离后, 接着需要确定每 个模块具体的移动量。
首先、 引入一个名为连接线网加权和 (CNW, Connecting Net Weight) 的参数。定 义: 设 Ω 表示与模块 ck 连接的 pin 集合, wp 表示 clique 线网模型下两端线网的权重 (wp = W/(d-1), W 表示 d 端线网的权重 ), ck 左右两侧的 CNW 分别由下式给出 :
然后, 确定 bin 内模块的连线网加权和 (CNW) ;如图 3 所示, ΔXpl 和 ΔXpr 分别是两端线网在 x 轴上向左和向右的投影。bini 左右两侧的 CNW 由下式给出 : 式中, 跨多 bin 模块的 CNW 已经根据模块的面积比率进行了分割。布局迭代过程 中, 每次模块的移动后一般都会增加总体线长, 对下一次优化结果产生影响。很显然 CNW 跟 线长有密切的关系。
最后, 依据模块的移动方向和其所属 bin 的连线网加权和计算出该模块的实际移 动距离。如果模块的移动方向为正方向, 那么用下式计算模块的移动矢量 :
Δfk = Fi·Ri/(Ri+lk-rk)。
如果移动方向为负方向, 则有 : Δfk = Fi·Li/(Li+rk-lk)。
另外, 需引入一个参数 ρ, 其目的是用来限制模块最大移动距离, 如果 Δfk > ρ 则令 Δfk = ρ, ρ 的值由布局的速度需求决定。
对于跨多 bin 的模块用下式求最终的移动距离 :
其中, 式中 B 表示 bin 集合。
步骤 (5)、 依据步骤 (2) 和 (4) 得出的各 bin 内模块的移动方向以及各模块的实际 移动距离, 移动各模块并输出移动后的新的模块位置文件。
如图 7 所示, 采用本发明所述考虑重叠度和线长的布局模块分布密度平滑方法对 待布局区域内的模块进行布局的流程图。具体描述如下 :
1、 读取初始布局或前一布局迭代过程的结果 ;
2、 离散跨越多个 bin 的大模块, 更新各 bin 的密度 ;
3、 计算 bin 两侧的加权平均密度 ;
4、 确定 bin 内模块的移动方向 ;
5、 计算 bin 内模块的总体移动距离 ;
6、 计算模块和 bin 连接线网加权和 ;
7、 根据连线网加权和计算模块的移动矢量, 若模块被离散, 则按面积比率求离散 模块的矢量和 ;
8、 移动各模块并输出移动后的新的模块位置文件, 然后在此分布之上运行解析优 化算法得到一个新的布局 ;
9、 判断模块重叠度是否满足预定的目标, 是, 结束迭代过程 ; 否, 返回 1。
本文各实施例中仅对模块的 X 轴方向的密度平滑方法作了详细的描述, Y 轴方向 因与 X 轴方向的密度平滑方法一致, 因此没在文中进行详细的描述。模块任何方向上的密 度平滑均可分解为 X 轴和 Y 轴方向, 因此各模块的移动均需要同时进行 X 和 Y 方向的密度 平滑。
以上, 仅为本发明的较佳实施例, 但本发明的保护范围并不局限于此, 任何熟悉本 技术领域的技术人员在本发明揭露的技术范围内, 可轻易想到的变化或替换, 都应涵盖在 本发明的保护范围之内。 因此, 本发明的保护范围应该以权利要求所界定的保护范围为准。