sock

vivado常用约束

0
阅读(7506)

最近刚开始使用vivado,当然逻辑开发的东西都一样just  Verilog,都一样,但是一些约束的语法跟以前不太一样,这里记录下我使用中遇到的一些不懂的语法,希望能够帮助自己的同时帮助一下其他同学~~~


set_false_path:


FPGA设计中,并不是所有的路径都需要做时序分析,称之为假路径(false path),比如有些路径在正常工作时并没有实现具体的逻辑功能,或者一些测试阶段使用的逻辑;有些是不需要做时序分析,如跨时钟域路径。

可以通过添加false_path约束,告知vivado在时序分析时忽略这些路径,这样带来的好处有:

1.       减少编译时间:vivado不需要对这些路径进行时序分析,也不需要为了优化这些路径而在P&R中花过多的时间;

2.       增加结果可靠性:约束false path并不是让vivado**,而是在实际工作中确实并不需要考虑这些路径。如果不约束,反而会使vivado偏离了正规,在努力优化false path时可能忽略了true path的时序问题。

       set_false_path约束命令如下,可以约束两个节点(node_list)间的路径,也可以约束两个时钟间的所有路径:

       set_false_path [-setup] [-hold] [-from <node_list>] [-to <node_list/clock>] [-through <node_list/clock>]

         注:false path约束和multicycle path约束同属于时序例外(timing exception)的范畴,两者的区别是:false path约束彻底取消对该路径的时序分析,而multicycle path约束只是放松时序分析的要求,vivado依然会对multicycle path进行时序分析和优化。


creat_clock:

    用create_clock定义的主时钟的起点即时序的“零起点”,在这之前的上游路径延时都被工具自动忽略。所以主时钟创建在哪个“点”很重要。

例子:有GTX生成的RXOUTCLK输入到MMCM中,其中RXOUTCLK周期为3.33ns,占空比是50%。RXOUTCLK明显是一个生成的时钟,所以在约束中会用到get_pins。get_ports用在IO口上。

约束语句为:create_clock -name rxclk -period 3.33 [get_pins gt0/RXOUTCLK]

之前总是不明白-name是什么意思,只知道是起个名字,但不知道为什么要起,现在明白了。RXOUTCLK和CLKIN1,在程序中可以通过接口直接线性相连,在约束中,我们就是为这条线起的。这条线的起点,就是我们本时钟约束的0时刻。

set_clock_group:

    http://bbs.ednchina.com/BLOG_ARTICLE_3019798.HTM在这篇文章说明了一些东西,我在实际用GTX的时候,tx和rx的时钟为异步,相位不确定,加上了异步的约束。

待续