本文主要是介绍GlobalRouting - FastRoute布线算法运行流程(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1. 运行步骤
- FT::run
1. 运行步骤
首先生成2D的布线,然后进行层分配以及生成3D的布线,最后计算结果并返回。具体流程如下:
- 读取查找表flut, POST9.dat, POWV9.dat
- 使用查找表生成RSMT,将多pin线网拆分为2pin线网
- 进行第一遍2D布线
- 优化RSMT,建立各节点之间的MST,并进行第二遍2D布线,最后进行螺旋布线
- 将2D布线结果转化为maze格式
- 进行层分配
- 进行第一次3D布线,不包含via fill
- 如果还有资源,进行多次LV,直到达到资源上限
- 进行第二次3D布线,不包含via fill
- 如有必要,再进行第三次3D布线,不包含via fill
- 进行via fill,并获取总长度和总via数
- 返回结果并释放空间
- gen_brk_RSMT
gen_brk_RSMT(Bool congestionDriven, Bool reRoute, Bool genTree, Bool newType, Bool noADJ)
“gen_brk_RSMT”的函数,其参数是congestionDriven,reRoute,genTree,newType和noADJ。
~~~ 此函数的目的是使用FLUTE算法或带有拥塞驱动的FLUTE算法计算用于生成RSMT的系数;生成RSMT,并将其存储在seglist中。如果reRoute参数已启用,则会尝试重新路由非降级网络,并将seglist传递给用于路由的新routeL函数。最后函数会打印出RSMT的数量、总线长以及其他一些信息。
该函数具体实现是:
-
遍历每个网络,计算用于FLUTE算法或具有拥塞驱动的FLUTE算法的系数(coeffV)。如果启用congestionDriven,则coeffV需要根据网络的拥塞情况进行调整。
-
如果reRoute被激活,则尝试路由非降级的网络。
-
使用FLUTE或具有拥塞驱动的FLUTE算法生成RSMT。如果启用congestionDriven,则需要针对网络的拥塞情况选择FLUTE算法。
-
将RSMT存储在seglist中。如果发现两个分支之间的距离小于等于1,请将其视为树的路线段。
-
将seglist的内容传递给用于路由的新routeL。如果reRoute被激活,则会对已知路由的网络进行更新。
代码中还包含一些变量,例如wl,记录所有网络的总线长。最后,函数将打印出一些数据,例如生成RSMT的数量,总线长以及其他一些信息。
用于在电路布线中生成较小重量生成树(RSMT)的函数。 函数的前五个参数都是类型为 Bool
的布尔值,它们控制不同的选项,如是否启用拥塞驱动、是否需要重新路由等。下面是这些参数的意义:
congestionDriven
:如果为真,则启用拥塞驱动模式以生成 RSMT。reRoute
:如果为真,则尝试重新路由 RSMT,以减少目标函数(如全局路径长度)。genTree
:如果为真,则为每个网络生成完整的 SP-tree,并将其保存在sttrees
数组中。newType
:如果为真,则使用新的 RTP(rectangle-based triangulated path)算法来重新路由 RSMT。noADJ
:如果为真,则使用更低的权重因子来生成 RSMT,这有助于避免屏蔽效应(shielding effect)。
接下来是该函数的主体部分:
它使用 FLUTE
算法生成较小重量生成树(RSMT),该算法首先将网络中的每个 PIN 抽象成一个点,然后根据这些点之间的联系生成一种最小的树形链接方式,使得网络中各个节点之间的链路之和最小。
在函数的主体中,首先遍历每个网络,并为其找到 RSMT。如果指定了拥塞驱动选项,则将网络的拥塞率与由“coeffADJ”计算的加权系数一起传递给“FLUTE”算法。如果不启用拥塞驱动模式,则仅传递给该算法一个默认值系数。
在生成 RSMT 过程中,如果指定了拥塞驱动选项,则使用 fluteCongest()
函数,该函数使用调整的权重因子来考虑当前网络的拥塞情况,以生成一个更好的 RSMT。
如果指定了重新路由选项,则会执行重新路由,以尝试进一步减少布线长度。
代码中还定义了一些辅助函数来更新网络中的 RSMT、SegL 等数据结构,以及计算某些参数(如数据库链接、伸缩偏移量等)。
总体而言,该函数的目标是优化电路布线,它使用了多个算法和数据结构来完成这个目标。代码中的每个部分都被设计为模块化的,这使得用户可以很容易地调整相关参数或替换算法以获得更好的性能。
这篇关于GlobalRouting - FastRoute布线算法运行流程(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!