本文目标是定义所有输入、内部和输出路径的setup timing约束。
假设我们有一个非常简单和通用的设计(IP),我们是IP designer。它有一个时钟域;它有一个输入端口和触发器之间的组合逻辑,两个触发器之间的内部组合逻辑,以及触发器和输出端口之间的组合逻辑。我们如何约束这个设计?
通常我们的IP将与SoC中的其他IP集成。因此,我们的IP的输入将来自另一个IP,在这种情况下来自IP-2,我们的IP的输出将驱动另一个IP,在这种情况下是IP-3。
注意:在定义输入和输出约束后,默认情况下,综合工具假设输入数据来自我们设计之前的pos-edge时序元件(即来自IP-2),输出数据在后续设计中进入pos-edge时序元件(即IP-3)
当综合工具执行时序分析时,它会将设计分解为timing path。timing path有一个起点和一个终点,下面讨论的是timing path的可能起点和终点。
起点
- 输入端口input(时钟端口除外)
- 触发器的时钟端口
终点
- 输出端口output(时钟端口除外)
- 触发器的任何输入引脚(时钟引脚除外)
让我们看一个例子
Path1:从输入端口开始,以触发器的输入引脚结束。
Path2:从触发器的时钟引脚开始,以触发器的输入引脚结束。
Path3:从触发器的时钟引脚开始,在输出端口结束。
Path4:从输入端口开始,在输出端口结束。
现在让我们回到我们的设计。
首先,我们将专注于约束寄存器到寄存器路径——
为了约束寄存器到寄存器路径,我们只需要向综合工具提供时钟周期。假设我们设计中的时钟的时间周期为5ns,因此我们将定义一个时间周期为5ns的时钟,并指定时钟端口。
create_clock -period 5 [get_ports CLK]
注意:综合工具假设时钟在0ns时上升,占空比为50%。
问题-1:假设在我们的设计中,两个触发器(FF-1和FF-2)都来自同一个工艺库,CK到Q的延迟为0.5ns,setup时间为1ns。如果我们不想违反setup时间,两个触发器(combo logic-2)之间的组合逻辑可以引入的最大可能延迟是多少?鉴于时钟的时间周期是5ns。[答案是3.5ns]
答案-1:为了满足setup时间 –
(clock-to-Q delay of FF-1 + delay due to combo logic-2) ≤ (time period of clock – setup time of FF-2)
因此,combo logic-2可以引入的最大可能延迟为3.5ns。
在综合工具中,时钟具有理想的行为,这意味着0上升/下降时间和0 skew。可以估计skew和transition timing,以便更准确地表示时钟行为,从而进行更真实的时序分析。
建模clock skew