作者:Yin Chaowen,AMD工程师;来源:AMD开发者社区
一. 现象描述
Design Timing Summary内的THS与Clock Interaction 内所有时钟之间的THS的和不相等:
下面是个例子:

在Design Timing Summary内可以看到THS为-6.995ns,但是在Clock Interaction-timing_2窗口内我们可以看多存在如下的四种跨时钟的THS为负的交互路径:

如果直接相加所有交互路径的THS和为:-(4.151+3.771+2.845+0.671)= -11.438 ns与Design Timing Summary的THS = -6.995ns 不一致。
当前的设计整体时钟结构如下:

二. 原因分析
这个现象和一个endpoint对应多个时钟域对相关,比如endpoint “SD_CMD load” 关联了两个时钟域对:
(clk_out5_clk_wiz_0_Gen → SD_CLK_200K) ,THS = -4.151ns

(clk_out2_clk_wiz_0_Gen → SD_CLK_25M) ,THS = -3.771ns

这两个时钟域对都列在 “Inter Clock Table” 中,但在 “Design Timing Summary” 表中,只会使用其中的最小值(-4.151)作为该端点的 THS。最终的总 THS 则是所有端点的最小 THS 值的总和,这也解释了两个表格之间的数值差异。
以此类推,查看endpoint “init_ok_reg_reg/D”和“data_reg_reg[0]/D”分别关联了两个时钟域对:

所以最终的Design Timing Summary的THS= -(4.151+1.500+1.345)=-6.996ns。注意这里的结果与Design Timing Summary的-6.995差了0.001ns是因为报告的时候采用三位小数有效位的计算精度带来的误差。
三. 小结
(Design Timing Summary)表中报告的 总保持裕量(Total Hold Slack,THS) 是对所有时序端点的最小 THS 值求和得到的。对于每个端点,可能存在多个(source clock - destination clock)域对。工具会分别计算每个时钟对的 THS,然后选取其中最严格(即最小)的 THS 值作为该端点的代表值。