GlobalRouting - FastRoute布线算法运行流程(二)

2024-04-21 11:20

本文主要是介绍GlobalRouting - FastRoute布线算法运行流程(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1. 运行步骤

  • FT::run

1. 运行步骤

首先生成2D的布线,然后进行层分配以及生成3D的布线,最后计算结果并返回。具体流程如下:

  1. 读取查找表flut, POST9.dat, POWV9.dat
  2. 使用查找表生成RSMT,将多pin线网拆分为2pin线网
  3. 进行第一遍2D布线
  4. 优化RSMT,建立各节点之间的MST,并进行第二遍2D布线,最后进行螺旋布线
  5. 将2D布线结果转化为maze格式
  6. 进行层分配
  7. 进行第一次3D布线,不包含via fill
  8. 如果还有资源,进行多次LV,直到达到资源上限
  9. 进行第二次3D布线,不包含via fill
  10. 如有必要,再进行第三次3D布线,不包含via fill
  11. 进行via fill,并获取总长度和总via数
  12. 返回结果并释放空间
  • 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的数量、总线长以及其他一些信息。

该函数具体实现是:

  1. 遍历每个网络,计算用于FLUTE算法或具有拥塞驱动的FLUTE算法的系数(coeffV)。如果启用congestionDriven,则coeffV需要根据网络的拥塞情况进行调整。

  2. 如果reRoute被激活,则尝试路由非降级的网络。

  3. 使用FLUTE或具有拥塞驱动的FLUTE算法生成RSMT。如果启用congestionDriven,则需要针对网络的拥塞情况选择FLUTE算法。

  4. 将RSMT存储在seglist中。如果发现两个分支之间的距离小于等于1,请将其视为树的路线段。

  5. 将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布线算法运行流程(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922959

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica