优化布线拥塞
Note:文章内容以 Xilinx 系列 FPGA 进行讲解
随着设计规模的增大和复杂度的提升,布线拥塞成为常见的问题,尤其是在用UltraScale FPGA或UltraScale + FPGA时,布线拥塞往往成为时序收敛的瓶颈,也成为编译时间过长的“罪魁祸首”。
1、布线拥塞的三种类型

如上图所示,布线拥塞主要分为三种类型:全局拥塞、短线拥塞、长线拥塞。在UltraScale FPGA中,短线拥塞更常见;而在UltraScale + FPGA中,长线拥塞更常见。
2、拥塞报告分析
利用拥塞报告,我们可以确定当前设计中的拥塞是何种拥塞,具体Tcl命令如下所示:(建议在布局后生成拥塞报告)
![]()
拥塞报告由三部分构成,第一部分如下图所示:
该部分显示了拥塞的区域(Window列)、类型(Type列)、程度(Level列)。通过Type列可以查看拥塞类型,Global对应全局拥塞,Long对应长线拥塞,Short对应短线拥塞。不过如果设计没有出现拥塞,查看拥塞报告是没有Type列的。通过Level列可以查看拥塞程度,该数值越大,拥塞越严重。当拥塞程度为5时,表明布线会遇到一些困难;当拥塞程度为6时,表明布线会遇到很大困难;当拥塞程度为7时,表明几乎无法布线。
拥塞报告的第二部分显示了每个拥塞区域的资源利用率情况,结合拥塞类型可进一步判断哪类资源可能会增加,如下图所示:
拥塞报告的第三部分会显示前三个导致拥塞的设计单元,如下图所示:
有时,我们还需要借助设计复杂度报告查看模块之间的互连程度,可以利用如下Tcl命令,在获得拥塞报告的同时也获得设计复杂度报告,如下图所示:
![]()
在设计复杂度报告中,如下图所示,我们首先要关注的是Rent值(对应Rent列),当0.65 ≤ Rent值<0.85,且Total Instances列的对应值大于15000时,该模块与其他模块的互联程度就被认为比较重,而当Rent值大于0.85时,该模块与其他模块的互联程度就被认为过重,尤其是Total Instances列的对应值大于25000时。

3、改善布线拥塞的方法
方法一:利用设计流程改善布线拥塞
针对布线拥塞,Vivado在综合和布局布线阶段均提供了相应的策略。在综合阶段,策略Flow_AlternateRoutability可用于改善布线拥塞,如下图所示:

一旦将综合策略选为Flow_AlternateRoutability,相应的Settings里的其他一些选项也会随之变化,如下图所示:

-directive变为AlternateRoutability,-no_lc被勾选,这意味不再出现LUT整合;-shreg_min_size值更新为10,意味着深度小于10的移位寄存器将被综合为级联触发器,只有当深度大于或等于10时,工具才会将其映射为LUT。
此外,还可以采用更细粒度化的综合策略设置,这是因为Vivado支持模块化综合。如果已经探明某个模块是构成布线拥塞的“罪魁祸首”,那么就可以针对该模块设置综合策略。相应Tcl命令如下图所示:
![]()
这种方法相比全局设置是有好处的:
(1)避免所有的模块都无法使用LUT整合,导致LUT资源利用率上升;
(2)避免所有模块中的移位寄存器深度小于10的都无法映射为LUT,导致触发器的利用率上升。
从布局布线的角度而言,Vivado也提供了相应的策略以缓解布线拥塞,如下图所示:

对于UltraScale FPGA中出现的布线拥塞,使用①中的几种策略更为合适,不过其中带有SSI字符串的策略仅仅适用于SSI器件,不可将其应用于单die芯片。对于UltraScale+ FPGA中出现的布线拥塞,使用②中的两种策略更为合适。
方法二:利用约束缓解布线拥塞
我们既然知道拥塞的各种类型以及其产生的根本原因,那我们只要根据拥塞报告找到拥塞模块,进行对症下药即可。
例如,全局拥塞与LUT整合和触发器控制集有关,那么我们可以通过模块化综合技术针对拥塞模块设置这两个约束条件,如下图所示:
![]()
例如,短线拥塞与MUXF有关,可以采用如下Tcl约束阻止工具推断出MUXF,用LUT取而代之。
![]()
除了上面的几条Tcl约束外,还可以采用属性CELL_BLOAT_FACTOR缓解布线拥塞。该属性有3个可选值:LOW、MEDIUM、HIGH。该属性的使用方法如下图所示:
![]()
如果布线拥塞区域较小,就可以将该属性施加在位于拥塞区域内的主要模块上。该属性在布局阶段生效,通过增大模块内单元间的间距来降低拥塞程度。不过,如果设计已经消耗了大量的布线资源,那么不建议使用属性CELL_BLOAT_FACTOR。对于较大的模块,使用CELL_BLOAT_FACTOR会使工具将子模块放的较远(子模块间距较大)。
方法三:从代码层面降低布线拥塞程度
布线拥塞本质上跟设计本身的一些特征有密切的关系,而这些特征又和代码相关,所以在前期代码编写时最好遵守下面的一些策略:
(1)限制信号扇出数:高扇出网线会消耗大量的布线资源,容易引起长线拥塞。因此,在设计中对这类网线要格外关注,最好在综合阶段就能发现。通过设置最大扇出约束或使用寄存器复制等方法来降低信号的扇出数,从而减少布线资源的消耗。
(2)优化存储单元的使用:在可能的情况下,使用本地寄存器而不是全局寄存器,这样可以减少长距离的布线,从而减轻拥塞。对于基于SSI(Silicon Interconnect)器件的设计,要做好早期设计规划,使得跨die路径尽可能少,因为过多的跨 die 路径容易导致长线拥塞。
(3)并行化处理:如果设计允许,尝试将一些计算并行化,这可以减少单个路径上的布线负载。
(4)时钟设计:避免在设计中使用过多的全局信号和复杂的时钟树网络,这些都可能导致布线拥塞。确保所有异步时钟域之间有适当的同步,避免跨时钟域的信号成为瓶颈。
(5)合理分配资源:在设计中注意资源的均衡分配,避免某些资源过度集中而其他资源空闲的情况。
(6)模块化与层次化设计:通过模块化设计、层次化设计等方法来降低设计的复杂度,减少布线资源的消耗。
4、缓解布线拥塞的正确流程
我们可以从设计流程、约束和代码层面三个维度缓解布线拥塞,但哪种效果更明显,Vivado提供了一个非常好用的命令report_qor_suggestions,可以为我们提供些参考。就布线拥塞而言,建议针对布局生成的.dcp执行该命令。如果设计出现了布线拥塞,该命令通常会生成一些可缓解拥塞的建议。
所以,针对缓解布线拥塞的流程可以参考如下:

~End~
相关文章:
优化布线拥塞
Note:文章内容以 Xilinx 系列 FPGA 进行讲解 随着设计规模的增大和复杂度的提升,布线拥塞成为常见的问题,尤其是在用UltraScale FPGA或UltraScale FPGA时,布线拥塞往往成为时序收敛的瓶颈,也成为编译时间过长的“罪魁…...
盲盒APP开发,电商模式下盲盒的未知乐趣
在互联网电商模式逐渐成熟的当下,盲盒电商为消费者提供了一个全新的娱乐购物体验,让众多粉丝和消费者通过手机系统就可以体验拆盲盒的惊喜感和刺激性。在消费者享受线上拆盲盒的乐趣时,企业也能够获得新的发展机遇,扩大发展空间。…...
RocketMQ-02 集群架构部署
根据上一章《RocketMQ消费模型和部署模型》得知,启动rocketmq非常简单,只需要分别执行mqnamesrv启动NameServer,执行mqbroker启动Broker即可。但生产环境不可能仅使用单节点MQ,为提高可用性和吞吐量,生产常使用集群模式…...
处理报文后 展示在qtdesigner界面 ,有大量数据存储 怎样创建临时文件减少内存占用
处理大量数据并将其展示在 Qt Designer 创建的界面中时,确实可能会遇到内存占用过高的问题。使用临时文件来存储和管理数据是一种有效的解决方案,可以帮助减少内存占用。 import os import shutil import tempfile from PyQt5.QtWidgets import QApplica…...
后端-实现excel的导出功能(超详细讲解)
首先,不管是一大段文字还是一个几行几列的表格实现方式都是一样的。把动态的内容使用英文单词代替。动态的内容加不加下划线都可以,加了下划线最后生成的表格动态内容部分带有下划线,不加下划线最后生成的表格动态内容部分不带下划线。大家各…...
Docker compose部署portainer
整个工具的代码都在Gitee或者Github地址内 gitee:solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github:GitHub - ZeroNing/solomon-parent: 这个项目主要是…...
【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看
【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看 2024年 5月20日-6月4日:攻克2D物理引擎。 2024年 6月4日-6月13日:攻克《3D数学基础》。 2024年 6月13日-6月20日:攻克《3D…...
相等日期问题(c++方法解决)
问题描述 对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 1 月 1 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之…...
深度学习——优化算法、激活函数、归一化、正则化
文章目录 🌺深度学习面试八股汇总🌺优化算法方法梯度下降 (Gradient Descent, GD)动量法 (Momentum)AdaGrad (Adaptive Gradient Algorithm)RMSProp (Root Mean Square Propagation)Adam (Adaptive Moment Estimation)AdamW 优化算法总结 经验和实践建议…...
Android 老项目适配 Compose 混合开发
在Android项目中使用Jetpack Compose进行混合开发时,可以通过以下步骤进行适配: 1.更新项目的build.gradle文件,确保使用最新的Compose库版本。 dependencies { implementation androidx.compose.ui:ui:<latest_version> implementat…...
PH热榜 | 2024-11-14
DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 [在线预览](https://www.laughingzhu.c 1. Vocera 标语:利用模拟和监控加速语音代理上线 这句话的意思是:通过…...
删库跑路,启动!
起因:这是一个悲伤的故事,在抓logcat时 device待机自动回根目录了,而题主对当前路径的印象还停留在文件夹下,不小心在根目录执行了rm -rf * … 所以,这是个悲伤的故事,东西全没了…device也黑屏了ÿ…...
Vue 3 在现代前端开发中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Vue 3 在现代前端开发中的应用 Vue 3 在现代前端开发中的应用 Vue 3 在现代前端开发中的应用 引言 Vue 3 概述 定义与原理 发展历…...
【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable
【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable 一、 问题背景: 无法调试debug应用,IDE右下角显示该弹窗: Hdc server port XXXX has been used.Configure environment variable ‘OHOS_HDC_SERVER_POR…...
使用 ts-node 运行 ts文件,启动 nodejs项目
最近在写一个nodejs项目,使用 ts-node 启动项目。遇到了一些问题,在此记录一下。 ts-node 是 TypeScript 执行引擎和 Node.js 的 REPL(一个简单的交互式的编程环境)。 它能够直接在 Node.js 上执行 TypeScript,而无需预编译。 这是通过挂接…...
scala中的case class
package test_27 //Set的特点:唯一(元素不同);无序 //case class定义一组数据 case class Book(var bookName:String,var author:String,var price:Double){} object caseclass {def main(args: Array[String]): Unit {//定义一个…...
探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解
文章目录 前言一、GET 方法:用于获取资源二、POST 方法:用于提交数据三、PUT 方法:用于更新资源四、DELETE 方法:用于删除资源五、PATCH 方法:用于部分更新资源六、HEAD 方法:用于请求响应头七、OPTIONS 方…...
前端项目中,public文件下的system.js有什么作用
SystemJS在前端项目中的作用主要包括模块加载、资源管理和兼容性处理。 模块加载 SystemJS是一个通用的模块加载器,支持多种模块规范,包括CommonJS、AMD、全局模块对象和ES6模块。通过使用插件,它还可以加载CoffeeScript和TypeScript。…...
odoo-040 odoo17前端的js方法调用后端py方法action报错
文章目录 问题描述梳理写法xml写法前端方法后端action的写法 错误解释 问题描述 在前端的kanban视图上添加了几个自定义按钮,按钮点击可以跳转到对应的tree视图,在写按钮调用方法的时候报错如下: 前端调用后端action报错: actio…...
图形 2.7 LDR与HDR
LDR与HDR B站视频:图形 2.7 LDR与HDR 文章目录 LDR与HDR基本概念LDRHDR为什么需要HDR不同显示屏的差异 Unity中的HDRCamera HDR 设置Lightmap HDR设置拾色器 HDR设置优缺点 HDR与Bloom通常Bloom渲染步骤渲染出原图获取图像中较亮部分高斯模糊叠加 Unity中Bloom渲染…...
Mainframer错误排查指南:常见问题及解决方法大全
Mainframer错误排查指南:常见问题及解决方法大全 【免费下载链接】mainframer Tool for remote builds. Sync project to remote machine, execute command, sync back. 项目地址: https://gitcode.com/gh_mirrors/ma/mainframer Mainframer是一款高效的远程…...
11.三层网络VXLAN
先把之前基于flat模式创建的虚机,全部删除 控制节点配置:1.修改配置文件/etc/neutron/neutron.conf 将[DEFAULT]区域 core_plugin ml2 service_plugins 修改为 core_plugin ml2 service_plugins router allow_overlapping_ips True2.修改/etc/neutro…...
10B小模型为何在真实业务中碾压百B大模型
1. 项目概述:小模型正在悄悄改写大模型的游戏规则最近在几个技术团队的内部分享会上,我连续三次被问到同一个问题:“你们还在追着百B参数的大模型跑吗?”——问话的人里,有刚从云厂商调来的架构师,有带AI产…...
ChatGPT Plus 怎么购买?2026 开通教程
如果你还在犹豫是否有必要开通 Plus,可以先通过AI模型聚合平台 做一些基础体验,对比不同模型在写代码、改文档、做总结时的效果,再决定要不要正式升级 ChatGPT Plus。到了 2026 年,ChatGPT 已经不只是“聊天工具”,更像…...
如何通过纯JavaScript拖拽构建器实现零代码网站开发
如何通过纯JavaScript拖拽构建器实现零代码网站开发 【免费下载链接】VvvebJs Drag and drop page builder library written in vanilla javascript without dependencies or build tools. 项目地址: https://gitcode.com/gh_mirrors/vv/VvvebJs 在网站开发领域…...
知识竞赛实时排名:平分怎么处理?
知识竞赛实时排名算法:平分怎么处理?公平 精准 高效 让每一分都经得起推敲🎯 一、平分问题的核心挑战在知识竞赛中,当多位选手或队伍总分相同时,如何公平、高效地确定实时排名,是组织者面临的关键技术难…...
ModSecurity-nginx终极指南:如何为Nginx部署下一代WAF防护
ModSecurity-nginx终极指南:如何为Nginx部署下一代WAF防护 【免费下载链接】ModSecurity-nginx ModSecurity v3 Nginx Connector 项目地址: https://gitcode.com/gh_mirrors/mo/ModSecurity-nginx 在当今网络安全威胁日益复杂的环境中,为Web服务器…...
2026年数字孪生升级版:三维重构透明建筑实时重构跟踪定位
2026数字孪生升级:三维重构透明建筑实时重构跟踪定位结合2026年数字孪生技术前沿迭代趋势,围绕实景三维重构、建筑透明可视化、场景实时重构、全域跟踪定位四大核心能力,完成新一代数字孪生体系技术升级。彻底解决传统数字孪生静态滞后、建筑…...
中兴B863AV3.2-M刷机避坑指南:S905L3A芯片识别、固件选择与Amlogic USB Burning Tool 2.2.0配置详解
中兴B863AV3.2-M刷机全流程精解:从芯片识别到固件烧录的进阶实践 在智能电视盒的玩家圈子里,中兴B863AV3.2-M因其出色的硬件配置和可玩性备受关注。这款搭载Amlogic S905L3A芯片的设备,通过刷机可以解锁更多功能,但过程中暗藏的&q…...
Cursor AI助手功能扩展技术实现:5步实现永久免费使用的完整方案
Cursor AI助手功能扩展技术实现:5步实现永久免费使用的完整方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached…...



