vivado 中的多周期约束语法的设置选项有:基于 setup(建立时间)的个数,基于
hold(保持时间)的个数,start 模式和 end 模式,如下所示。
set_multicycle_path -setup -start from [get_clocks {clk_s}] to [get_clocks {clk_r}] 2
set_multicycle_path -hold -end from [get_clocks {clk_s}] to [get_clocks {clk_r}] 2
但在使用过程中,为什么有时只设置基于建立时间的多周期个数就可以了?
而为什么有时建立时间和保持时间的多周期个数都要设置?
保持时间设置和建立时间设置存在什么依赖关系?
为什么会有 start 和 end 两种模式,分别在什么情况下使用?
我们是时许约束工具的的用户,用户使用产品时只会去关心自己的需求,而用户成千上
万,需求也千奇百怪,产品设计者为了满足所有用户,必须提高产品的通用性,最简单的
方法就是增加选项模式,当一个需求简单的用户使用这个通用产品时,面对多重的选择和
模式,往往会无从下手,因为根本就不知道这些选项设置的作用,自然就会产生上述的那
些为什么。要解答这些为什么,我们可以试着换位思考,从 TimeQuest 设计者的角度出
发,如何设计多周期约束的语法规则?
明确设计目的
先来看看一个最常见的发送接收波形如图一所示,A 时刻发送的数据 B 时刻锁存,
launch(发送)边沿和 latch(锁存)边沿间隔为一个时钟周期。
图一
这种情况下,建立时间和保持时间裕量为
setup slack = (current latch edge - current launch edge ) + Tskew - (Tdelay + Tco + Tsu)
= T + Tskew - (Tdelay + Tco + Tsu)
hold slack = Tdelay + Tco - (Th + previous latch edge - current launch edge)
= Tdelay + Tco - Th
其中 Tskew 是时钟偏斜,Tdelay 为传输延迟,Tco 为源寄存器的输出延迟,Tsu 和 Th 为
寄存器需要的建立保持时间。
如果接收波形整体延迟一个时钟周期,如图二所示,latch 边沿改变了,A 时刻发送的数据
C 时刻锁存,B 时刻发送的数据 D 时刻锁存。
评论0
最新资源