本篇文章将回答以下几个问题:
(1)什么是时序例外约束?
(2)时序例外约束都有什么?
(3)时序例外约束怎么用?
1、什么是时序例外约束?
在静态时序分析时,时序分析工具默认的时序检查方式可能与实际情况不吻合,为了减少工程某些非关键路径对布局布线资源的占用,确保系统时序更好的收敛,需要对某些跨时钟域的路径添加一些额外的约束命令。这些额外的时序约束即为时序例外约束。
2、时序例外约束都有什么?
时序例外的约束包含伪路径(set_False_Path)、最大延迟路径(set_max_Delay)和最小延迟路径(set _min_Delay)、多周期路径(set_multycle_path)。对于时钟组(set_Clock_Groups)约束,其作用与伪路径(set_False_Path)基本相同,也会经常遇到,所以这里也作为时序例外约束来说明。如果约束重叠(例如,如果多个定时异常应用于同一路径)从最高到最低的优先级为:
1.时钟组(set_Clock_Groups)
2.伪路径(set_False_Path)
3.最大延迟路径(set_max_Delay)和最小延迟路径(set _min_Delay)
4.多周期路径(set_multycle_path)
注:这里优先级的意思是优先生效,例如如果有了此路径的伪路径(set_False_Path)约束,那么再对其进行set_max_Delay约束,set_max_Delay约束就不会再生效了。这里非常重要,而且也是非常容易出错的地方。
3、时序例外约束怎么用?
时序例外约束在我们进行异步信号同步处理的方法时经常使用的,而异步FIFO是我们常用的异步信号进行同步的方法。当使用异步FIFO时,FPGA 应该怎么对相关的路径约束呢?下面以xilinx FPGA为例进行说明
(1)对于使用的FIFO类型是built-in FIFO时。
这种FIFO实际上就是用FPGA内部的BRAM来搭建,所有控制逻辑都在BRAM内部,是推荐的FIFO 实现方式。其所需的XDC也相对简单,只要像上述简单同步器的时钟关系约束一样用set_clock_groups将读写时钟约束为异步即可。(注意这里需要确保这两个时钟在其他地方不会被用到,否则应视情况设置时钟组)
图 1
图 2
(2)对于使用其他的FIFO类型时(shift-Register、block ram、distributed ram)。
这里先说一下结论:当使用vivado时,对于异步路径的同步,尽量使用xilinx提供的xpm模块来进行。此时开发者不需要做任何额外的约束(不要对两个异步时钟加set_false_path或者set_Clock_Groups约束),vivado工具本身会自动对异步路径进行约束,具体分析见下一篇。
这些FIFO中均使用了格雷码进行数据的同步。当异步时钟域之间传递格雷码数据,且目的时钟域用两级同步器(寄存器)采样数据时,应该set_max_delay为一个源时钟周期,set_min_delay为0。这样有两个好处:1.防止数据路径太长而导致较长的同步所需时间,引起电路性能下降 2.限制格雷码的多个bit之间的skew,防止多个bit在目的时钟域的寄存器输入端同时变化,使得传递的数据不再是格雷码。
为了使set_max/min_delay生效,需要注意以下两点:
1)设置set_max/min_delay的路径,不能加set_false_path或者set_Clock_Groups,因为set_max/min_delay的优先级更低。
2)对于Synopsys的编译工具异步时钟之间不能只设置async,而应该加入-allow_paths,完整命令如下:
set_clock_groups -asynchronous -allow_paths -group clk_a -group clk_b
以下是Synopsys Synthesis Commands中关于该选项的解释
allow_paths
Enable the timing analysis between specified clock groups. If this option is not specified, the timing analysis among the defined clock groups are disabled. This option can be used with asynchronous clock groups only.
启用指定时钟组之间的时序分析。如果未指定此选项,则将禁用定义的时钟组之间的时序分析。此选项仅适用于异步时钟组。
注:从上面的意思来理解,使用这个选项之后,EDA工具仍旧会分析时钟组之间的时序路径。但是vivado不支持此选项。具体如图3所示。
图 3
自2013.4开始,Vivado中还提供一个称作methodology_checks的DRC检查,其中包含有对此类异步 FIFO 的max delay 约束与时钟域clock groups约束的冲突检查。
对于intel FPGA,如果使用的是quartus生成的异步FIFO IP,这个IP里面已经携带了相应的sdc文件,可以不用管。如果是自己制作的参数化IP则需要自己对应官方约束文件,修改一份sdc文件(只用修改一个文件名字即可)。