0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA布线拥塞主要原因及解决方法

微云疏影 来源:FPGA算法工程师 作者:FPGA算法工程师 2022-12-07 10:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

FPGA开发设计中,我们可能会经历由于资源占用过高的情况,例如BRAM、LUT和URAM等关键资源利用率达到或超过80%,此时出现时序违例是常有的事,甚至由于拥塞导致布线失败,整个FPGA工程面临无法生成bit文件的危险。

那么,有没有办法来解决这类问题呢?

此类问题是FPGA设计实现中比较棘手的问题,Xilinx针对7系列及以后的UltraScale/UltraScale+等,提出了UltraFast设计方法论,用于指导该系列器件的成功设计和实现,完成复杂系统设计。

时序收敛是指设计满足所有的时序要求。针对综合采用正确的 HDL 和约束条件就能更易于实现时序收敛。通过选择更合适的 HDL、约束和综合选项,经过多个综合阶段进行迭代同样至关重要,如下图所示。

poYBAGOP-PmAGzyEAAEnrEwmNOQ542.jpg

Xilinx提出的实现快速收敛的设计方法论

FPGA布线拥塞怎么办?

如果关键路径在拥塞区域内或者紧邻拥塞区域,或者是资源利用率较高,都会导致时序收敛困难。在很多情况下,拥塞会消耗大量的布线时间,甚至布线失败。如果布线延迟显著大于预期值,那么我们就得考虑降低设计的拥塞程度。

在确保时序约束和物理约束正确的情况下,我们可以通过以下方法解决拥塞问题。

1.拥塞类型

Xilinx FPGA布线结构包括东、南、西、北共4个方向不同长度的互联资源。拥塞区域以最小的正方形体现,这个正方形覆盖了相邻的互联资源或CLB单元。

pYYBAGOP-PqAbOnOAANBm99fwnM627.jpg

“Device”视图中的拥塞等级和拥塞区域

拥塞包括3种类型:全局拥塞、短线拥塞和长线拥塞。

拥塞类型

poYBAGOP-PuAEbSgAABBkfsFtKA792.png

2.生成设计拥塞报告

为了检查拥塞程度,我们可以基于布局之后生成的DCP,通过以下Tcl命令生成设计拥塞报告。

report_design_analysis -congestion -name cong

分析拥塞时,工具报告的等级可按下表所示方式进行分类。拥塞等级为 5 或更高时,通常会影响 QoR 并且必然会导致布线器运行时间延长。

pYYBAGOP-PuAXLBGAABeLVl4tp4898.png

为帮助识别拥塞,Report Design Analysis命令支持生成拥塞报告以显示器件的拥塞区域,以及这些区域内存在的设计模块的名称。此报告中的拥塞表会显示布局器和布线器算法发现的拥塞区域。下图显示了拥塞表示例。

poYBAGOP-PyACFMuAAC48PTtcgw932.jpg

拥塞表

“Placed Maximum”、“Initial Estimated Router Congestion”和“Router Maximum”拥塞表可提供有关东西南北四个方向上拥塞最严重的区域的信息。选中该表中的窗口时,在“Device”窗口中会突出显示对应的拥塞区域。

3.生成设计复杂性报告

我们也可以通过设计复杂性报告来预判是否出现拥塞。我们可以对布局生成的DCP,通过以下Tcl命令生成设计复杂度报告。

report_design_analysis -complexity -name comp

复杂性报告 (Complexity Report) 可按顶层设计和/或层级单元的叶节点单元的类型显示 Rent 指数 (Rent Exponent)、平均扇出 (Average Fanout) 和分布方式。Rent 指数是指在使用min-cut算法以递归形式对设计进行分区时,网表分区的端口数量和单元数量之间的关系。其计算方法与在全局布局期间布局器所使用的算法类似。因此,它可准确表明布局器所面临的困难,当设计的层级与在全局布局期间所发现的物理分区匹配良好时尤其如此。

Rent 指数较高的设计表示此类设计中包含逻辑紧密相连的分组,并且这些分组与其它分组同样连接紧密。这通常可理解为全局布线资源利用率较高并且布线复杂性也更高。此报告中提供的 Rent 指数是根据未布局和未布线的网表来计算的。完成布局后,相同设计的 Rent 指数可能改变,因为它基于物理分区而不是逻辑分区。

pYYBAGOP-PyAP2v4AAFi7kACK90397.jpg

复杂性报告

Rent 指数的典型范围

poYBAGOP-P2AHD4TAACDP18NotA966.jpg

“平均扇出”典型范围

pYYBAGOP-P2ABLXhAACwBtaZ9XE247.jpg

4.解决拥塞问题

根据前文所述造成拥塞的原因,我们可以采用以下办法解决布线拥塞问题。

拥塞原因1:过多的MUXF(将MUXF转化为LUT)

方法1:利用模块化综合技术,对特定模式设置MUXF_REMAPPING:

set_property BLOCK_SYNTH.MUXF_MAPPING 1 [get_cells top/instance]

方法2:在opt_design阶段使用-remap选项:

opt_design -mux_remap -remap

方法3:针对特定MUXF设置MUXF_REMAP属性为ture

set_property MUXF_REMAP 1 [get_cells -hier-filter {NAME=~ cpu*&& REF_NAME=~MUXF*}]

拥塞原因2:过长的进位链(将进位链转化为LUT)

方法1:在opt_design阶段使用-remap选项:

opt_design -carry_remap -remap

方法2:针对特定MUXF设置CARRY_REMAP属性

set_property CARRY_REMAP 2 [get_cells -hier-filter { REF_NAME==CARRY8}]

拥塞原因3:过多的控制集(合并控制集)

方法1:利用模块化综合技术,对特定模式设置CONTROL_SET_THRESHOLD:

set_property BLOCK_SYNTH. CONTROL_SET_THRESHOLD 10 [get_cells top/instance]

方法2:在opt_design阶段,使用-control_set_merge合并等效控制集

opt_design -control_set_merge

方法3:在opt_design阶段,使用merge_equivalent_drivers合并等效控制集,包括非控制逻辑

opt_design -merge_equivalent_drivers

拥塞原因4:过多的LUT整合(阻止LUT整合)

方法1:利用模块化综合技术,对特定模式设置LUT_COMBINING:

set_property BLOCK_SYNTH. LUT_COMBINING 0 [get_cells top/instance]

方法2:设定LUT的LUTNM属性为空:

set_property LUTNM “”[get_cells hier-filter {REF_NAME =~LUT*&& NAME=~inst}]

在综合阶段,除了使用以上的方法外,对于IP,我们最好采用OOC的综合方式。

在实现阶段,可以选择适当的实现策略来缓解拥塞。对于UltraScale系列芯片,可尝试采用“Congestion_*”策略缓解拥塞;对于UltraScale+系列芯片,可尝试采用“performance_NetDelay_*” 策略缓解拥塞。如下图所示。

poYBAGOP-P6AFb9UAAGGfcq2PUg197.jpg

实现时解决拥塞策略

当然,我们也尝试采用“performance_ExtraTimingOpt” 策略进行时序优化,但可能无法解决拥塞问题。

FPGA算法工程师

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1664

    文章

    22504

    浏览量

    639304
  • Xilinx
    +关注

    关注

    73

    文章

    2208

    浏览量

    131919
  • 时序
    +关注

    关注

    5

    文章

    411

    浏览量

    39008
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MOS 管烧坏、炸管的主要原因有哪些?怎么快速排查和解决?

    MOS管烧坏/炸管的主要原因有哪些?怎么快速排查和解决?相信不少工程师都经历过这样的“高光时刻”:上电瞬间,一声脆响,一缕青烟,MOS管直接报废。更让人头疼的是,有时候换上新管子,一上电又“故技重施
    的头像 发表于 03-23 13:59 538次阅读
    MOS 管烧坏、炸管的<b class='flag-5'>主要原因</b>有哪些?怎么快速排查和解决?

    一般电气线路起火的原因和预防方法

    电气线路起火是日常生活中常见的火灾隐患之一,其危害性极大,不仅可能造成财产损失,甚至威胁生命安全。了解电气线路起火的原因及预防方法,对于保障家庭和公共场所的安全至关重要。以下是电气线路起火的主要原因及相应的预防措施。
    的头像 发表于 03-06 17:19 1814次阅读

    C编译器错误与解决方法

    C语言keil编译器提示错误的解决方法,可以帮你解决程序编译中的烦恼!! C编译器错误与解决方法 1. Warning 280:’i’:unreferenced local variable
    发表于 01-22 08:03

    ODF配线架常见故障及解决方法

    ODF配线架常见故障及解决方法如下: 一、接地故障 故障表现: 防雷性能下降,静电积累,甚至引发设备损坏。 光信号传输不稳定,出现误码或中断。 常见原因: 接地端子氧化、松动或接触不良。 接地线
    的头像 发表于 01-05 10:43 624次阅读

    轴承锈蚀的主要原因分析

    轴承锈蚀的主要原因分析 环境因素 湿度:空气中湿度的大小对轴承的锈蚀速度有很大的影响。在临界湿度下,金属锈蚀的速度很慢,一旦湿度超过临界湿度,金属锈蚀的速度会突然上升。钢铁的临界湿度在65%左右
    的头像 发表于 11-22 10:50 2166次阅读

    Vivado仿真之后没有出现仿真结果的解决方法

    ;Run Behavioral Simulation之后,会出现如下图界面,此时,在Tcl Console中并没有出现仿真结果。 没有出现仿真结果的原因是没有给Vivado时间进行仿真,解决方法
    发表于 10-31 06:24

    程序加载过程中遇到的问题及其解决方法

    /quick_start/ide.html。 (1)遇到的问题1:在创建好项目后,运行配置设置为ILM,可以编译成功;当修改运行配置为Flash后,编译失败;重启软件,仍会遇到类似问题。 解决方法
    发表于 10-30 07:59

    TFT液晶屏开机时开机闪屏的原因解决方法

    启动后再给屏幕上电。 总结 主要原因 导致现象 优先解决方法 背光开启过早 一片无结构的白光/杂光 延迟背光开启或使用PWM软启动 电源时序混乱 杂色、乱码闪烁 优化电源排序,确保信号稳定后再供电
    发表于 10-18 11:49

    FPGA测试DDR带宽跑不满的常见原因及分析方法

    FPGA 中测试 DDR 带宽时,带宽无法跑满是常见问题。下面我将从架构、时序、访问模式、工具限制等多个维度,系统梳理导致 DDR 带宽跑不满的常见原因及分析方法
    的头像 发表于 10-15 10:17 1276次阅读

    LVDS接口的显示屏,显示偏暗问题的解决方法

    问题:点亮屏幕后画面显示偏暗 可能原因: 主板输出的LVDS 模式与屏幕的不一致; PWM亮度并未调节到最亮; 解决方法 检查主板的LVDS输出模式是否和屏幕一致; 一般主板端的LVDS模式是可以配置的,配置成与屏幕相同的模式即可; 检查PWM亮度调节是否正常?或者
    发表于 10-09 15:55

    ECN如何在HPC和数据中心中应对网络拥塞

    ECN(Explicit Congestion Notification)是一种改进后的拥塞控制方法,它不依赖于丢包来指示拥塞,而是在数据包的头部标记拥塞发生的信号。ECN通过向数据包
    的头像 发表于 09-26 14:53 2915次阅读
    ECN如何在HPC和数据中心中应对网络<b class='flag-5'>拥塞</b>

    403 Forbidden是什么意思?最佳解决方法有哪些?

    请求的资源或操作受到了访问控制列表(ACL)的限制,或者请求的用户没有足够的权限,服务器就会拒绝授权执行此请求。下面 华纳云 整理的关于403 Forbidden产生原因解决方法内容希望对大家有所帮助! 403 Forbidden产生的
    的头像 发表于 06-25 16:33 3w次阅读

    如何解决CAN通讯故障?原因分析与解决方法全攻略

    在日常工作中,我们经常收到客户的反馈,他们表示CAN卡无法正常通讯,这给工作带来了诸多不便。今天,就让我们深入探讨一下导致CAN卡通讯失败的常见原因,以及相应的解决方法。单个CAN设备发送失败有些
    的头像 发表于 06-16 11:39 2367次阅读
    如何解决CAN通讯故障?<b class='flag-5'>原因</b>分析与<b class='flag-5'>解决方法</b>全攻略

    PLC为什么容易烧坏?主要原因在哪里?

    什么原因导致PLC容易烧坏?我们可以从硬件设计、环境因素、操作维护等多个角度深入分析这一问题。 一、电源问题:PLC烧毁的首要诱因 电源异常是导致PLC损坏的最常见原因之一。根据工业现场统计,超过35%的PLC故障与电源问题直接相关。
    的头像 发表于 05-12 08:42 3796次阅读
    PLC为什么容易烧坏?<b class='flag-5'>主要原因</b>在哪里?

    sys_sem_free()传入的参数变成了NULL,引起这个现象的主要原因有哪些?

    ).sem); 此时该传入的参数在莫名的情况下变成了NULL,该问题发生在频繁建立和断开TCP连接的测试案例中。 请教一下引起这个现象的主要原因有哪些?
    发表于 04-30 07:35