上图显示了最常见的时序路径,寄存器到寄存器。然而,为了可靠地将数据保存到后续的触发器中,需要满足触发器的建立和保持时间要求。
setup和hold slack被定义为所需时间(基于建立和保持时间)与数据到达端点时间之间的差额。
STA工具使用slack值来识别违例的时序路径,以进一步优化以满足建立和保持时间。
Setup Slack = Required Time - Arrival Time
Hold Slack = Arrival Time - Required Time
正slack表明时序路径符合时序约束要求(setup和hold),而负slack表示时序路径违反了时序约束,需要进一步优化。
以下是不同时序路径的建立和保持slack方程
1.Register-to-Register Setup Slack
Required Time = Clock Period - Setup Time
Setup Slack = Required Time - Arrival Time
= Clock Period - Setup Time - Tck->q - Combo Delay
以下是一个负建立时间slack的示例。由于组合延迟(慢逻辑)太大,数据D2在建立时间窗口内延迟到达,这违反了建立时间时序要求。
2.Register-to-Register Hold Slack
Required Time = Hold Time
Arrival Time = Tck->q + Combo Delay
Hold Slack = Arrival Time - Required Time
= Tck->q + Combo Delay - Hold Time
这表明触发器CK-to-Q延迟和组合延迟的总延迟要求大于保持时间约束。这解释了为什么最常见的保持时间优化是在寄存器之间添加buffer,这增加了满足保持时间约束的组合延迟。