当前位置: 首页 > news >正文

优化布线拥塞

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个可选值:LOWMEDIUMHIGH。该属性的使用方法如下图所示:

        如果布线拥塞区域较小,就可以将该属性施加在位于拥塞区域内的主要模块上。该属性在布局阶段生效,通过增大模块内单元间的间距来降低拥塞程度。不过,如果设计已经消耗了大量的布线资源,那么不建议使用属性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进行混合开发时&#xff0c;可以通过以下步骤进行适配&#xff1a; 1.更新项目的build.gradle文件&#xff0c;确保使用最新的Compose库版本。 dependencies { implementation androidx.compose.ui:ui:<latest_version> implementat…...

PH热榜 | 2024-11-14

DevNow 是一个精简的开源技术博客项目模版&#xff0c;支持 Vercel 一键部署&#xff0c;支持评论、搜索等功能&#xff0c;欢迎大家体验。 [在线预览](https://www.laughingzhu.c 1. Vocera 标语&#xff1a;利用模拟和监控加速语音代理上线 这句话的意思是&#xff1a;通过…...

删库跑路,启动!

起因&#xff1a;这是一个悲伤的故事&#xff0c;在抓logcat时 device待机自动回根目录了&#xff0c;而题主对当前路径的印象还停留在文件夹下&#xff0c;不小心在根目录执行了rm -rf * … 所以&#xff0c;这是个悲伤的故事&#xff0c;东西全没了…device也黑屏了&#xff…...

Vue 3 在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 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 一、 问题背景&#xff1a; 无法调试debug应用&#xff0c;IDE右下角显示该弹窗&#xff1a; Hdc server port XXXX has been used.Configure environment variable ‘OHOS_HDC_SERVER_POR…...

使用 ts-node 运行 ts文件,启动 nodejs项目

最近在写一个nodejs项目&#xff0c;使用 ts-node 启动项目。遇到了一些问题&#xff0c;在此记录一下。 ts-node 是 TypeScript 执行引擎和 Node.js 的 REPL(一个简单的交互式的编程环境)。 它能够直接在 Node.js 上执行 TypeScript&#xff0c;而无需预编译。 这是通过挂接…...

scala中的case class

package test_27 //Set的特点&#xff1a;唯一&#xff08;元素不同&#xff09;&#xff1b;无序 //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 方法&#xff1a;用于获取资源二、POST 方法&#xff1a;用于提交数据三、PUT 方法&#xff1a;用于更新资源四、DELETE 方法&#xff1a;用于删除资源五、PATCH 方法&#xff1a;用于部分更新资源六、HEAD 方法&#xff1a;用于请求响应头七、OPTIONS 方…...

前端项目中,public文件下的system.js有什么作用

‌SystemJS在前端项目中的作用主要包括模块加载、资源管理和兼容性处理。‌ 模块加载 SystemJS是一个通用的模块加载器&#xff0c;支持多种模块规范&#xff0c;包括CommonJS、AMD、全局模块对象和ES6模块。通过使用插件&#xff0c;它还可以加载CoffeeScript和TypeScript。…...

odoo-040 odoo17前端的js方法调用后端py方法action报错

文章目录 问题描述梳理写法xml写法前端方法后端action的写法 错误解释 问题描述 在前端的kanban视图上添加了几个自定义按钮&#xff0c;按钮点击可以跳转到对应的tree视图&#xff0c;在写按钮调用方法的时候报错如下&#xff1a; 前端调用后端action报错&#xff1a; actio…...

图形 2.7 LDR与HDR

LDR与HDR B站视频&#xff1a;图形 2.7 LDR与HDR 文章目录 LDR与HDR基本概念LDRHDR为什么需要HDR不同显示屏的差异 Unity中的HDRCamera HDR 设置Lightmap HDR设置拾色器 HDR设置优缺点 HDR与Bloom通常Bloom渲染步骤渲染出原图获取图像中较亮部分高斯模糊叠加 Unity中Bloom渲染…...

DP动态规划基础题(Kadane算法)

动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种在数学、管理科学、计算机科学、经济学和生物信息学等领域中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划算法通常用于优化问题&#xff0c;特别是那…...

[UnLua]动态创建SceneCapture2d相机,并且添加渲染目标纹理

在 Unlua 开发中&#xff0c;相机相关的操作是构建场景视觉效果的重要部分。以下我们来详细分析一段涉及相机实例化和为相机赋予纹理目标的 Unlua 代码。 -- 实例化相机local World self:GetWorld()maskCamera World:SpawnActor(UE.ASceneCapture2D)-- 给相机赋值纹理目标lo…...

【leetcode练习·二叉树】用「分解问题」思维解题 I

本文参考labuladong算法笔记[【强化练习】用「分解问题」思维解题 I | labuladong 的算法笔记] 105. 从前序与中序遍历序列构造二叉树 | 力扣 | LeetCode | 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵…...

【gitlab-ce】各组件介绍

主要组件功能接介绍&#xff08;chatgpt回答的&#xff09; nginx&#xff1a;作为Web服务器和反向代理&#xff0c;用于访问GitLab的Web界面。可以关闭&#xff0c;但会导致无法通过Web界面访问GitLab。prometheus_monitoring&#xff1a;提供监控和报警功能&#xff0c;收集和…...

PostgreSQL分区表:基础语法与运维实践

引言 简介&#xff1a;什么是数据库分区 数据库分区是一种将大型表物理上分割成多个较小的部分的技术。每个部分称为一个分区&#xff0c;这些分区可以分布在不同的存储设备上&#xff0c;以提高查询性能和管理效率。 为什么使用分区表 提高查询性能&#xff1a;通过减少需…...

Docker入门系列——DockerFile的使用

前面了解了Docker的基本概念&#xff0c;今天来认识一下DockerFile。 Dockerfile 是一个文本文件&#xff0c;包含一系列指令来组装 Docker 镜像。每个指令执行一个特定动作&#xff0c;例如安装包、复制文件或定义启动命令。正确使用 Dockerfile 指令对于构建高效容器至关重要…...

数据集平台分享

Kaggle: Your Machine Learning and Data Science CommunityKaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.https://www.kaggle.com/Kaggle 包含非常丰富的数据集和代码&#xff0c;…...

去地面算法——depth_clustering算法调试(1)

1 源码下载 论文&#xff1a; 《2016-Fast Range Image-Based Segmentation of Sparse 3D Laser Scans for Online Operation》 《2017-Efficient Online Segmentation for Sparse 3D Laser Scans》 代码&#xff1a;git链接 2 问题记录 2.1 无法找到qt问题 问题截图&…...

设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例

单一职责原理:(SRP) 面向对象七个基本原则之一 清晰的职责&#xff1a;每个类应该有一个明确的职责&#xff0c;避免将多个责任混合在一起。降低耦合&#xff1a;通过将不同的职责分开&#xff0c;可以降低类之间的耦合度&#xff0c;提高系统的灵活性。易于维护&#xff1a;当…...

HWA高速辅助驾驶系统组成及功能场景

HWA最基本功能包括智能跟车、拨杆变道、压速变道、车道居中保持等功能&#xff0c;有效减轻驾驶疲劳。随着智能驾驶不断走向成熟&#xff0c;HWA升级到高速自动驾驶HWP&#xff0c;可实现智能避让汇入口、智能避让大车、分心/疲劳监测、智能进出匝道、智能判别易混分叉路口、智…...