建立关系
定义:指任意一个launch时钟沿和其对应的capture时钟沿之间,因为分析setup(建立时间时序约束)而产生的关系。
描述:对于任意一个选定的launch时钟沿,和其有建立关系的capture时钟沿默认是离launch时钟沿最近的、launch时钟沿后面的那一个capture时钟沿。
说明:launch时钟沿有千千万,所以建立关系也是有万万千,但是工具只会分析最差的建立关系,也就是只对建立时间最难满足的那对launch和capture时钟沿之间的关系进行建立时间检查。
官方表述:
The setup check is performed only on the most pessimistic setup relationship between two clocks. By default, this corresponds to the smallest positive delta between the launch and capture edges. For example, consider a path between two flip-flops that are sensitive to the rising edge of their respective clock. The launch and capture edges of this path are the clock rising edges only.
翻译:仅对 2 个时钟之间最消极的建立关系执行建立时间检查。默认情况下,此项检查对应于发送沿与捕获沿之间最小正增量。以 2 个触发器之间的路径为例,这 2 个触发器易受其各自时钟的上升沿影响。此路径的发送沿和捕获沿均仅为时钟上升沿。
如图所示,存在两对建立关系,分别是Setup(1)和Setup(2),工具只会分析Setup(2)这对建立关系。同时也可以看到只要launch时钟和capture时钟之间存在公共周期,那么建立关系的数量一定是有限的,如果不存在公共周期,那么vivado工具会分析1000 个周期内的最差建立关系。
引申:setup定义的时候明明说的是时钟达到前数据保持稳定的最小时间,为何分析setup时都没有提到数据呢?
实际上,工具内部是分析了数据的,如果打开vivado的时序报告,如图所示,可以看到里面一般有3条路径报告:源时钟路径(launch)、数据路径和目的时钟路径(capture)。
如果选取数据和capture时钟沿的关系进行时序分析,那么工具肯定还是要确定数据何时变化,而同步设计中数据的变化又是由launch时钟沿驱动的,那相当于工具还是不可避免地要确定launch时钟沿何时到达。反过来,如果工具确定了launch时钟沿,工具再结合数据路径的延迟就可以推算出数据变化的时刻,所以只要分析了launch时钟沿和capture时钟沿间的建立关系,就不需要再分析数据和capture时钟沿间的建立时间满足情况了。
保持关系
定义:伴随一对建立关系而产生的一种与hold检查相关的关系。
描述:保持关系可以由以下两个必须遵循的原则来描述,
- 由建立发送沿所发送的数据不会被位于建立捕获沿之前的活动沿捕获;
- 由位于建立发送沿之后的下一个活动源时钟沿发送的数据不会被建立捕获沿捕获。
说明:
- 保持关系是依赖于建立关系的,确定了建立关系才有与其相对应的保持关系
- 保持关系可分为两对保持关系,分别由上述的两个原则确定
- 保持分析期间,时序引擎仅报告任意 2 个时钟之间最差的保持关系。最差的保持关系并非始终是最差的建立关系所对应的那个保持关系。时序引擎必须复查所有可能的建立关系及其对应的保持关系才能识别最差的保持关系。
我们分析一下下图中的保持关系,首先可以看出S1和S2是两对不同的建立关系,那么S1和S2必然对应各自的保持关系,S1对应的保持关系有两对即H1a和H1b,S2对应的保持关系也有两对即H2a和H2b。
我们先看H1a,它是根据“由建立发送沿所发送的数据不会被位于建立捕获沿之前的活动沿”这个原则产生的保持关系,这里的“建立发送沿”就是0ns处“source clock”上升沿,它的“建立捕获沿”是4ns处的“destination clock”的上升沿,“建立捕获沿之前的活动沿”就是0ns处的“destination clock”的上升沿,所以H1a的保持要求为 0 ns(0ns-0ns)。这里的保持要求Xns意思是如果要满足保持时间的话,那么数据至少需要延迟Xns,对于保持时间的分析,这个X越大意味着保持要求越高,等价于保持关系越差。当然这个描述不是完全准确,因为没有把HOLD时间和时钟抖动考虑进去,但是各个保持关系之间都按照这样的方式去比较谁的保持关系最差,是没问题的,因为其他保持关系也都忽略HOLD时间和时钟抖动来计算就可以了,类似于大家都先抢跑一步再比赛,结果还是公平的。
再看H1b,相似的,H1b是根据“由位于建立发送沿之后的下一个活动源时钟沿发送的数据不会被建立捕获沿捕获”这个原则产生的保持关系,这里的“建立发送沿”就是0ns处“source clock”上升沿,“建立发送沿之后的下一个活动源时钟沿”就是6ns处的“source clock”上升沿,“建立捕获沿”就是是4ns处的“destination clock”的上升沿,所以H1b的保持要求为 -2 ns(4ns-6ns)。很显然-2小于0,因此保持关系Ha1比Hb1差。相当于Hb1保持关系不但不要求数据有延迟,还能接受数据提前变化。
以此类推,H2a的保持要求为 -2 ns(4ns-6ns)、H2b的保持要求为 -4 ns(8ns-12ns)。
因此,工具最终给出的时序分析结果是基于最差保持关系H1a报告的。很明显,S2才是建立关系最差的,而保持关系最差的是S1对应的保持关系H1a,这也很好印证了上述说明c对应的表述。
总结
建立关系和保持关系这两个概念,本质上来说就是描述了时序分析的基本原则。阐明了默认情况下,vivado工具给出的时序报告,是针对哪个建立时钟沿到哪个捕获时钟沿的。
vivado时序约束工具,只会分析最差的建立关系。
vivado时序约束工具,会分析所有可能的建立关系对应的保持关系,但是仅报告任意 2 个时钟之间最差的保持关系。