当前位置: 首页 > 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渲染…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...