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

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

3天内不再提示

聊聊那些导致时序约束不收敛的常见问题

FPGA研究院 来源:FPGA研究院 2026-05-06 17:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

FPGA开发的同学,十有八九都被时序约束折磨过。代码写得好好的,仿真也没问题,一跑综合实现就报一堆setup/hold violation,改来改去就是收敛不了。按我的经验,这时候与其继续盲目调参数,不如静下心来检查一下自己的约束是不是从根子上就写错了。

今天咱们就聊聊那些导致时序约束不收敛的常见问题,手把手帮你排坑。

cbb7dd80-4423-11f1-90a1-92fbcf53809c.jpg

时钟路径分析示意

时钟约束:你真的定义对了吗

说起来,时钟约束应该是最基础的东西,但偏偏出问题最多的也是这里。很多人习惯性地只约束主时钟,忽略了衍生时钟。什么叫衍生时钟?比如你用MMCM/PLL输出的时钟、用BUFG/BUFR处理的时钟,这些都是由主时钟派生出来的。Vivado不会自动帮你识别它们,必须显式声明。

有个坑特别容易踩:定义了MMCM输出时钟,但忘了把它的输入输出关系通过generated_clock关联起来。这样时序引擎就不知道这两个时钟之间的相位关系,分析的时候自然会出错。

还有个更隐蔽的问题——时钟的抖动(Jitter)和不确定性(Uncertainty)。默认值往往偏乐观,你要是直接用,没准在更严苛的条件下就崩了。建议大家在约束文件里显式设置合理的抖动值,别完全依赖工具的默认值。

cc119d52-4423-11f1-90a1-92fbcf53809c.jpg

FPGA IO时序分析

IO约束:别忘了外部世界的存在

很多新手只关注内部时序,对IO约束不上心。问题是,你的芯片不是孤立存在的,它要和外面的器件通信。外部器件的时序特性你得考虑进去。

set_input_delay和set_output_delay这两个约束,参数选择特别讲究。你得知道上游器件的时钟周期、输出数据Valid窗口,下游器件的Setup/Hold要求。很多时候报timing violation,不是内部逻辑太慢,而是IO约束设得太宽松或者太严格。

有个小技巧分享给大家:不确定外部器件参数的时候,可以先按50%时钟周期来估算,然后根据实际测试结果微调。比一上来就随便写个数字强多了。

cc70c944-4423-11f1-90a1-92fbcf53809c.jpg

时钟域交叉(CDC)路径分析

跨时钟域:最容易出问题的边界地带

跨时钟域问题堪称FPGA设计的"癌症",处理不好轻则时序不收敛,重则功能异常。常见的问题是对CDC路径要么完全不约束,要么约束得一塌糊涂。

完全不约束的情况比较少见,毕竟综合工具会报警告。但约束不当就很普遍了。最典型的错误是用set_false_path一刀切,把所有跨时钟域路径都设成false path。问题是,不是所有CDC路径都能安全地用false path,有些关键路径必须保证正确的时序关系。

正确做法是分门别类处理:慢时钟到快时钟的采样路径可以用set_false_path或set_max_delay;快时钟到慢时钟的握手路径往往需要set_false_path加额外的时序裕量;而异步复位这类路径,set_false_path才是正解。

有意思的是,很多人知道CDC同步器的重要性,但在约束层面却忽略了对同步器本身打拍级数的考虑。同步器链本身的路径也是有时序要求的,别漏掉了。

cccddecc-4423-11f1-90a1-92fbcf53809c.jpg

时序约束综合分析

时序例外:用错了比不用更糟糕

set_max_delay、set_multicycle_path这些时序例外约束,用好了能救命,用错了就是埋雷。我见过最离谱的案例是,有人为了"提高"时序收敛,把整个设计的所有路径都设了很宽松的max_delay。结果呢?工具在优化的时候完全失去了方向,性能反而更差了。

时序例外约束有几条黄金法则:第一,约束范围尽量精准,用最具体的路径表达式,别动不动就-through * -to *;第二,多周期路径要确认清楚是setup还是hold语境下的多周期;第三,用完记得清理,别让过期的约束继续生效。

还有个容易忽略的地方:set_case_analysis这个约束。它用来固定某些信号的值,但很多人设完之后忘了这个约束会影响整条路径的时序分析,有时候时序不收敛的根源就在这里。

复位设计:被忽视的隐形成本

复位信号看起来不起眼,但它对时序的影响可能是致命的。全局异步复位会让工具在布局布线的时候很为难,因为复位信号要连到设计里的每一个寄存器,负载极大。

我建议能不用复位就不用复位,Xilinx 7系列以后的器件,上电初始值都是确定的,很多场景完全可以用初始化代替复位。如果非要用复位,优先选择高扇出的同步复位,并且通过set_property ASYNC_REG标记CDC路径上的寄存器。

关于复位的时序约束,有个细节很多人不知道:set_false_path -from [get_async_pins]这种写法已经过时了,正确做法是通过综合属性来控制。

总结:约束是个系统工程

按我的经验,时序约束不收敛,80%的问题出在约束本身,20%才需要调综合实现策略。与其一味地加pipeline、加buffer,不如先把自己的约束文件过一遍。

几个自查清单送给大家:时钟定义是否完整?IO约束参数是否有依据?CDC路径是否分类处理?时序例外是否精准且不过期?复位策略是否合理?

时序约束这东西,入门容易精通难。但只要理解了工具的分析逻辑,约束写对做好收敛,其实也没那么玄乎。希望今天的分享对大家有帮助,有问题欢迎留言交流。

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

    关注

    1664

    文章

    22513

    浏览量

    639627
  • 仿真
    +关注

    关注

    55

    文章

    4540

    浏览量

    138707
  • 时序约束
    +关注

    关注

    1

    文章

    121

    浏览量

    14008

原文标题:时序约束怎么设都不收敛,到底哪里错了

文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    UltraFast设计方法时序收敛快捷参考指南

    资源利用率、逻辑层次和时序约束。 2时序基线设定:在每个实现步骤后检查并解决时序违例,从而帮助布线后收敛
    的头像 发表于 11-05 15:10 6227次阅读
    UltraFast设计方法<b class='flag-5'>时序</b><b class='flag-5'>收敛</b>快捷参考指南

    FPGA的IO口时序约束分析

      在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束时序例外
    发表于 09-27 09:56 2549次阅读

    记录一次时序收敛的过程

    在之前的文章里面介绍了Canny算法的原理和基于Python的参考模型,之后呢在FPGA上完成了Canny算法的实现,可是遇到了时序不收敛的问题,记录一下。
    的头像 发表于 11-18 16:38 2002次阅读
    记录一次<b class='flag-5'>时序</b><b class='flag-5'>收敛</b>的过程

    FPGA时序收敛学习报告

    的方法一般有四个步骤:时序分析→时序约束时序报告→时序收敛。 为什么要进行
    发表于 09-23 10:26

    FPGA时序约束的几种方法

    对自己的设计的实现方式越了解,对自己的设计的时序要求越了解,对目标器件的资源分布和结构越了解,对EDA工具执行约束的效果越了解,那么对设计的时序约束目标就会越清晰,相应地,设计的
    发表于 06-02 15:54

    FPGA时序约束的几种方法

    (InputDelay、OutputDelay)、上下拉电阻、驱动电流强度等。加入I/O约束后的时序约束,才是完整的时序约束。FPGA作为P
    发表于 12-27 09:15

    时序约束资料包

    、Vivado基本操作流程2、时序基本概念3、时序基本约束和流程4、Baselining时序约束5、CDC
    发表于 08-01 16:45

    multisim仿真错误不收敛

    multisim出现仿真错误,不收敛,使用收敛小助手后报告成功解决,但是关掉之后重新仿真还是不行。电路是席勒振荡器,电路新手哦,希望不吝赐教。/(ㄒoㄒ)/~~
    发表于 07-03 11:17

    模型不收敛是怎么回事?

    模型不收敛是怎么回事?
    发表于 09-07 10:13

    时序约束时序分析 ppt教程

    时序约束时序分析 ppt教程 本章概要:时序约束时序分析基础常用
    发表于 05-17 16:08 0次下载

    FPGA中的时序约束设计

    一个好的FPGA设计一定是包含两个层面:良好的代码风格和合理的约束时序约束作为FPGA设计中不可或缺的一部分,已发挥着越来越重要的作用。毋庸置疑,时序
    发表于 11-17 07:54 3102次阅读
    FPGA中的<b class='flag-5'>时序</b><b class='flag-5'>约束</b>设计

    深入了解时序约束以及如何利用时序约束实现FPGA 设计的最优结果

    作为赛灵思用户论坛的定期访客(见 ),我注意到新用户往往对时序收敛以及如何使用时序约束来达到时序收敛
    发表于 11-24 19:37 6140次阅读
    深入了解<b class='flag-5'>时序</b><b class='flag-5'>约束</b>以及如何利用<b class='flag-5'>时序</b><b class='flag-5'>约束</b>实现FPGA 设计的最优结果

    FPGA时序约束的6种方法详细讲解

    对自己的设计的实现方式越了解,对自己的设计的时序要求越了解,对目标器件的资源分布和结构越了解,对EDA工具执行约束的效果越了解,那么对设计的时序约束目标就会越清晰,相应地,设计的
    发表于 01-11 17:44 8次下载
    FPGA<b class='flag-5'>时序</b><b class='flag-5'>约束</b>的6种方法详细讲解

    Abaqus橡胶仿真不收敛问题的排查方法

    在进行有限元仿真计算时,常常会遇到计算不收敛的问题,而且导致求解不收敛的原因也是多种多样的,处理起来也是相当的麻烦。
    的头像 发表于 03-25 10:12 7028次阅读

    唠一唠解决FPGA约束时序不收敛的问题

    FPGA时序不收敛,会出现很多随机性问题,上板测试大概率各种跑飞,而且不好调试定位原因,所以在上板测试前,先优化时序,再上板。
    发表于 06-26 15:41 3995次阅读
    唠一唠解决FPGA<b class='flag-5'>约束</b>中<b class='flag-5'>时序</b><b class='flag-5'>不收敛</b>的问题