本文承接上一篇文章《时序约束方法及解决timing问题的方法(一)》,记录我在实际工程中fix timing问题的方法。
xilinx的Vivado工具也一直在更新,到本人记录此文的时候,Vivado已经有2017.3版本了,建议大家使用最新的Vivado工具。
继续上一篇博客中提到的约束问题,在修改了timing约束之后,有了false_path,set_multicycle等宽松的命令之后,如果timing还不收敛,那就可以考虑适当增加place约束来达到效果。
- 尝试不同的Place策略,Vivado的P&R过程是可以选择不同策略的,大家最好在vivado 的tcl命令行中,输入place_design -help,可以看本文附图的Log,注意我圈出来的选项,-directive有丰富的选择,如果在你的flow里不做配置,会用Default,可以尝试Explore、ExtraNetDelay_high等策略;
- 类似的,也可以替换route_design时的策略,在vivado中输入route_design -help来看-directive可以选择哪些策略,需要注意,这些策略和vivado的版本有关,随着vivado的版本更新,大家可能看到一些新的策略。
- 增加优化过程,根据xilinx自己推荐flow可以进行如下调整,需要注意的时,这个过程会极大的增加flow的时间消耗。
- 在place_design完成后,使用一次phys_opt_design -placement_opt优化;
- 然后在route_design完成后再用一次phys_opt_design -routing_opt优化;
- 再调用一次place_desing -post_place_opt,这个阶段会根据hold timing问题重新摆放一些cell;
- 最后调用一次route_desing;
以上提到的这些都是对vivado build flow的调整,还是依靠工具自动运行,我会在后面的文章中列出根据timing问题进行人工place critical cell的方法,这种方式主要依靠个人经验,工程师对自己使用FPGA的架构熟悉程度至关重要,所以在进行人工place之前一定要把所用的FPGA的datasheet了解清楚。