静态时序分析工具默认的分析规则是在单周期下对所有的时序路径进行分析,但实际设计中并不是所有路径都需要分析,而且也不是所有时序路径的延时都规定在一个周期以内。所以通过定义时序例外来对特殊的时序路径进行特殊声明,指导时序分析工具对特殊的时序路径做出正确地分析,这样的特殊声明叫作时序例外(timing exception)。这些时序例外约束相互配合实现设计者的真实设计意图。
时序例外主要由伪路径设置(set_false_path)、最大最小延迟设置(set_max_delay/set_min_delay)和多周期路径设置(set_muticycle_path)组成。具体介绍如下:
1.set_fale_path (伪路径设置)
1.1语法结构
[-setup]
[-hold]
[-rise]
[-fall]
[-reset_path]
[-from from_list]
[-to to_list]
[-through through_list]
[-rise_from rise_from_list]
[-rise_to rise_to_list]
[-rise_through rise_through_list]
[-fall_from fall_from_list]
[-fall_to fall_to_list]
[-fall_through fall_through_list]
[-comment comment_string]
//注:该命令的选项和参数顺序任意
-setup选项指定只设置时序路径为建立时间检查时的虚假路径(只检查保持时间),-hold选项指定只设置时序路径为保持时间检查时的虚假路径(只检查建立时间)。如果这两个选项都没有指定,时序路径为建立时间和保持时间的虚假路径,此时这两种时序都不检查。
-rise选项指定只设置终点是上升沿的时序路径为虚假路径,-fall选项指定只设置终点是下降沿的时序路径为虚假路径。如果这两个选项都没有指定,时序路径为终点是上升沿和下降沿的虚假路径。
-reset_path选项移除了之前设置的虚假路径,使用该选项时,其它选项要和设置虚假路径时一样。
-from选项、-rise_from选项、-fall_from选项指定了需要设置为虚假路径的时序路径的起点列表,每条命令中它们三者只能指定一个。
-from选项指定了时序路径的起点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的起点是以该时钟触发的触发器时钟引脚;对象可以是端口,代表着时序路径的起点是该端口;对象可以是引脚,代表着时序路径的起点是该引脚(例如触发器时钟引脚);对象可以是单元,代表着时序路径的起点在该单元上(例如该单元时钟引脚)。
-rise_from选项指定了时序路径的上升沿起点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的起点是所有以该时钟上升沿触发的触发器时钟引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号上升沿为准);对象可以是端口,代表着时序路径的起点是该端口的上升沿;对象可以是引脚,代表着时序路径的起点是该引脚(例如触发器时钟引脚)的上升沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元时钟引脚)的上升沿。
-fall_from选项指定了时序路径的下降沿起点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的起点是所有以该时钟下降沿触发的触发器时钟引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号下降沿为准);对象可以是端口,代表着时序路径的起点是该端口的下降沿;对象可以是引脚,代表着时序路径的起点是该引脚(例如触发器时钟引脚)的下降沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元时钟引脚)的下降沿。
-through选项、-rise_through选项、-fall_through选项需要设置为虚假路径的时序路径的途经点列表,它们可以指定多个,表示依次途径每个列表中的一个对象的时序路径,它们可以以混合使用。
-through选项指定了时序路径的途径点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是端口,代表着时序路径途径该端口;对象可以是引脚,代表着时序路径途径该引脚;对象可以是叶单元(库单元),代表着时序路径途径该单元。
-rise_through选项指定了时序路径的上升沿途径点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是端口,代表着时序路径的上升沿途径该端口;对象可以是引脚,代表着时序路径的上升沿途径该引脚;对象可以是叶单元(库单元),代表着时序路径的上升沿途径该单元。
-fall_through选项指定了时序路径的下降沿途径点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是端口,代表着时序路径的下降沿途径该端口;对象可以是引脚,代表着时序路径的下降沿途径该引脚;对象可以是叶单元(库单元),代表着时序路径的下降沿途径该单元。
-to选项、-rise_to选项、-fall_to选项指定了需要设置为虚假路径的时序路径的起点列表,每条命令中它们三者只能指定一个,并且不能与-fall选项和-rise选项的指定冲突(如已经指定了-fall选项,则只能指定-fall_to选项,因为没有时序路径的终点即是上升沿也是下降沿)。
-to选项指定了时序路径的终点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的终点是以该时钟触发的触发器数据输入引脚;对象可以是端口,代表着时序路径的终点是该端口;对象可以是引脚,代表着时序路径的终点是该引脚(例如触发器数据输入引脚);对象可以是单元,代表着时序路径的起点在该单元上(例如该单元数据输入引脚)。
-rise_to选项指定了时序路径的上升沿终点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的终点是以该时钟上升沿触发的触发器数据输入引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号上升沿为准);对象可以是端口,代表着时序路径的终点是该端口的上升沿;对象可以是引脚,代表着时序路径的终点是该引脚(例如触发器数据输入引脚)的上升沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元数据输入引脚)的上升沿。
-fall_to选项指定了时序路径的下降沿终点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的终点是以该时钟下降沿触发的触发器数据输入引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号下降沿为准);对象可以是端口,代表着时序路径的终点是该端口的下降沿;对象可以是引脚,代表着时序路径的终点是该引脚(例如触发器数据输入引脚)的下降沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元数据输入引脚)的下降沿。
-comment选项允许添加一条字符串注释,工具会将注释保存在SDC对象中,以便在使用write_sdc或write_script命令写出约束时输出准确的字符串。注释在综合、布局布线以及时序分析的流中中保持完整。
1.2用法
当数字逻辑的功能运行时,某些时序路径可能不真实(或不可能)存在。在执行STA时可以将这些路径设置为伪路径(false_path)。STA将不分析伪路径。下面是设置伪路径的举例:
set_false_path -from [get_clocks SCAN_CLK] -to [get_clocks CORE_CLK]
set_false_path -through [get_pins UMUX0/S]
set_false_path -to [get_ports TEST_REG*]
一般使用伪路径的设置建议如下:
(1)两个时钟域之间设置伪路径,尽量使用
set_false_path -from [get_clocks clockA] -to [get_clocks clockB]
而不是set_false_path -from [get_pins {regA_ * }/CK] -to [get_pins {regB_ * }/D],后者分析速度慢。
(2)尽可能少使用-through选项,因为它增加了运行时不必要的复杂性。
(3)不要将一条多周期路径约束为伪路径。如果把一条许多时钟周期后进行采样的路径指定为了伪路径,则对设计中其余逻辑路径的优化可能会使该路径变长,甚至超出所需的时间。
为路径设置使用场景如下:
(1)组合逻辑中的伪路径
set_false_path -through [get_pins MUX0/I0] -through [get_pins MUX1/I1]
因为两个mux的sel 选择为同一个,所以数据路径在会同时选择MUX0和MUX1的I0或者I1。
(2)跨时钟域中的伪路径
</