摘要:有关xdc约束、时序优化的文章很多,并不重头开始介绍,仅仅记录一下在实际工程中遇到的情况。时序不好是非常正常的现象,此时需要进行大量的约束。我认为时序约束的难点其实更多的是在,有时候约束一条路径之后导致了功能出现异常。此时不得不采取其它的方式,这就需要更多约束手段去完成这些事情,但是这并不意味这些手段都能保证工程功能是正常的。
很多约束属性、参数等根本无法用百度直接查询得到,看文档也会极其的慢。建议使用ChatGPT辅助理解。
目录
1. XDC约束
1.1 creat_clock
1.2 set_input_delay
1.3 set_clock_groups
1.4 set_false_path
1.5 set_property MAX_FANOUT
1.6 ASYNC_REG
1.7 phys_opt_design -force_replication_on_nets
2. 时序优化
2.1 策略
2.2 Incremental implementation
2.3 修改代码
总结
参考文章:
1. XDC约束
1.1 creat_clock
像时钟的create是必须的,如果不create的话就会导致工具不分析这个时钟的所有路径,那么工具并不会帮助你将一些建立时间或保持时间不够的路径进行优化,非常容易出现功能的问题。我在测试以太网多lane内外环中踩过坑。
1.2 set_input_delay
1.3 set_clock_groups
比如我的工程中用两个122.88MHz时钟,分了两个mmcm,那这两个mmcm需要分组,但是彼此之间不是同源时钟,不需要进行分析。
1.4 set_false_path
非常常用的约束,需要注意的是:
1.约束不分析的路径时,极有可能造成功能不正确
2.正确约束路径,可以让时序变好,并且工程综合、布线更快
可以约束from的路径不分析,也可以约束to的路径不分析,也可以约束时钟到时钟的路径不分析,也可以约束点到点的路径不分析。
1.5 set_property MAX_FANOUT
看时序报告的时候,路径越差的地方,有可能伴随着fanout很高;但是更改MAX_FANOUT有可能会导致功能出线问题,需要综合使用。
1.6 ASYNC_REG
1.7 phys_opt_design -force_replication_on_nets
2.时序优化
2.1 策略
首先不同的策略会对时序进行不同的优化(综合也可以选择不同的策略):
解决Vivado implementation拥塞的策略方法(一)_Y__Yshans的博客-CSDN博客文章来源:https://www.toymoban.com/news/detail-413124.html
Vivado implementation策略使用(二)_Y__Yshans的博客-CSDN博客_vivado实现策略的选择文章来源地址https://www.toymoban.com/news/detail-413124.html
在一般情况下Xilinx提供的策略已经比较优的了,但是在极端情况下,还是可以手动配置策略让策略组合达到最优解。
2.2 Incremental implementation
有的时候不同的电脑跑出来的时序可能不一样(不确定,有人说跟电脑硬件也有关系)。并且每台电脑每次跑出来的时序也可能会略有不同,有的时候就能跑出来稍微好点的时序,这个时候可以保存下来,给以后的每次跑版本用。
2.3 修改代码
2.1和2.2都是工具在优化时序,很多时候治标不治本,所以最好还是尽可能的修改代码,例如:
- 跨时钟域的处理:快到慢可以扩宽脉冲、打拍;慢到快可以用ram、fifo
- assign语句太多,这种语句前后的连接必须都经过always
- 计数器太大,需要进行拆分
- 冗余逻辑、不规范代码进行修改
总结
目前我所用到的XDC约束和时序优化,时序优化是一个很大的内容,还需要不断地学习。
参考文章:
ChatGPT
解决Vivado implementation拥塞的策略方法(一)_Y__Yshans的博客-CSDN博客
Vivado implementation策略使用(二)_Y__Yshans的博客-CSDN博客_vivado实现策略的选择
到了这里,关于Vivado XDC约束与时序优化(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!