-group 选项是定义组成员(即没有时序关系的时钟)的位置。当有多个用来驱动时钟树的时钟源可供选择,包括 BUFGMUX 和 BUFGCTL,应使用 logically 和 physically exclusive 选项。
从而,这些时钟不能同时出现在时钟树上。所以,我们不希望 Vivado 分析这些时钟之间的关系,因为它们是互斥的。最后,–asynchronous 约束可用来定义异步时钟路径。
建立时序关系的最后一个方面是考虑时钟的非理想关系,尤其是抖动。您需要考虑两种形式的抖动:输入抖动和系统抖动。输入抖动出现在主时钟输入上,体现了实际跳变出现时间与理想条件下跳变出现时间之间的差异。系统抖动源自设计中存在的噪声。
您可以使用 set_input_jitter 约束来定义每个主输入时钟的抖动。同时,使用 set_system_jitter 约束为整个设计(所有时钟)设定系统抖动。
时序例外
当有时序例外时,您还必须关注已定义的时钟组内发生了什么。然而,什么是时序例外呢?
一种常见的时序例外是只有每隔一个时钟周期所采样的结果。另一种情况是将数据从慢时钟传输到更快的时钟(或相反),其中两个时钟都是同步的。事实上,这两种时序例外一般被称为多周期路径,如图 2 所示。