• 正文
  • 相关推荐
申请入驻 产业图谱

芯片设计 –– SDC设计约束

08/21 10:45
4170
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

SDC设计约束全称为Synopsys Design Constraint,它是用来描述对时序、面积和功耗的设计要求,是EDA工具中用于综合、静态时序分析、布局布线最常用的格式。SDC命令基于TCL语言,工具命令语言(又称TCL,tool command language)是一种非常流行的脚本语言。

1.组合电路路径

对于组合电路路径,一般使用set_input_delay、set_output_delay、set_max_delay、set_min_delay进行约束。如果是纯组合逻辑,没有任何路径分支进入时序部分,则可以只用set_max_delay/ set_min_delay约束;若组合逻辑的中途有分支进入时序部分,并从时序部分分支出来,建议使用set_input_delay/  set_output_delay约束。

set_input/output_delay

在输入端口指定延迟的SDC命令是set_input_delay,在输出端口指定延迟的SDC命令是set_output_delay,他们的约束条件相似。

set_input_delay命令具体如下:

-clock clock_name   -clock用来指定参考时钟,根据参考时钟指定延迟时间。这个时钟是指触发器输入端的时钟。如下图,输入I1由触发器F1驱动,而触发器F1由Clk1时钟驱动,因此clock_name应该设置为Clk1。

-clock_fall  通常情况下,我们讨论的触发器触发条件都是上升沿,因此输入延时也是基于时钟的上升沿指定,但是也存在特殊的下降沿触发,上图假如F1是由下降沿触发的寄存器,同时延迟为2,可以使用如下sdc进行约束:

set_input_delay -clock Clk1 -clock_fall 2.0 [get_ports I1]
set_input_delay -clock Clk1 7.0 [get_ports I1]

这两条SDC等价的前提是时钟周期为10,因此对于下降沿的2.0 delay和对于上升沿的7.0 delay等价。

-level_sensitive  如果前级的输出不来自触发器,而来自锁存器,那么可以通过-level_sensitive来进行约束。

-rise/fall限定符  -rise/fall指的是输入延迟与输入端口的上升沿/下降沿相对应(注意与-clock_fall的区别,-clock_fall是指前一级触发器是上升沿时钟触发还是下降沿时钟触发)。通常情况下并不需要指定-rise/fall,因为在CMOS电路中,上升沿和下降沿过渡的路径延迟非常相似。

-min/max限定符  -min用于限定输入信号端口的最早到达时间的延迟值; -max用于限定输入信号端口的最晚到达时间的延迟值。如果没有指定-min/-max,那么这两个限定符使用相同的设定值。通常不使用-min/-max,其值与指定的最大延迟相同。

-add_delay  如果需要在同一个端口指定多个参考事件的输入延迟,那么后续所有规格需要增加-add_delay,避免后面的约束覆盖前面的约束,例如:

时钟延迟  实际的电路中时钟源延迟和网络延迟的存在会使clk信号到达不同步,假如input的delay包括时钟源延迟,指定[-source_latency_included],计入input的delay包括网络延迟的话,我们需要指定[-network_latency_included],但是这些语句并不常用。

set_output_delay与set_input_delay非常相似,命令格式如下:

set_max/min_delay

组合逻辑电路路径可以通过限制延迟的上限和下限来进行约束,即set_max_delay和set_min_delay。一般情况下只需要约束set_max_delay即可。

在设置了最大延时后,若路径延迟超过这个值则违例;同理,在设置了最小延时后,若延时小于这个值则违例。

set_max_delay命令格式如下:

set_min_delay命令格式如下:

具体实例:

如下图,输入和输出不仅是组合路径而且是寄存器路径的一部分。假设clk的周期是15ns,时钟沿到达之后输入4ns后到达I1,输出O1必须经过3ns,才能被下一级寄存器捕获。

所以,在这个电路单元之外的延迟是7ns。因此,组合电路路径可以具有的最大延迟为8ns,可以将其指定为:

set_max_delay -from [get_ports I1] -to [get_ports O1] 8.0

因为输入要送到一个寄存器中。所以在I1上还需要一个输入延迟(为了定时I1到F1的路径)。这将被指定为:

set_input_delay -max -clock CLK [get_ports I1] 4.0

然后为了定时F2到O1的路径,在O1上还需要一个输出延迟。这将被指定为:

set_output_delay _max -clock CLK [get_ports O1] 3.0

在寄存器路径中,由于I1和O1的参与,所以无论如何必须指定set_input delay和set_output_delay。有了这两个规格,无论如何都要将组合电路路径约束在8ns。因此不需要明确指定set_max_delay。

因此,指定的组合电路路径的限制为8ns(通过set_max_delay指定)。其中,由输入延迟和输出延迟分配7ns。因此实际路径只剩下1ns。因此对于通过set_max_delay约束的组合电路路径,可能由于输入输出延迟规格而修改了实际允许的延迟。

2. 多时钟周期路径

默认情况下,每条路径都是单周期的,即在本周期时钟边沿启动的数据,会在下一个时钟上升沿捕获,如下图所示:

但是也有些情况,我们希望在数个时钟周期后再进行捕获(比如为了确保复位信号有效的多周期低电平等),在时序分析中进行额外周期约束的方案,称为多周期路径。

set_multicycle_path

用于将路径声明为多周期的SDC命令为set_multicycle_path,具体如下:

具体实例:

下面介绍一个多时钟周期路径的例子。下图中,Cs驱动F1寄存器产生data信号,同时驱动F2寄存器产生enable信号。这个enable信号经过一个FSM(即类似小云朵的图形),然后使能F3去捕获数据。假设在F3准备好捕获数据之前,enable信号在FSM内需要N个周期。

这种情况下,data信号不需要立即进入到F3寄存器中,它可能需要N个时钟周期才能到达,因此在SDC中可以进行如下约束:

set_multicycle_path -from Cs -through F1/Q -to Cd -setup N -end

set_multicycle_path -from Cs -through F1/Q -to Cd -hold N-1 -end

参考内容:

《综合与时序分析的设计约束 - Synopsys设计约束(SDC)实用指南》

相关推荐