awubal

常用时序分析SDC 命令参考

0
阅读(9876)

常用时序分析SDC 命令参考 (一)
1.       Define design environment
1.1.    Set_operating_conditions
1.2.    Set_wire_load_model
1.3.    Set_driving_cell
1.4.    Set_load
1.5.    Set_fanout_load
1.6.    Set_min_library
   
2.       Set design constraints
2.1.    Design rule constraints
2.1.1.  Set_max_transition
2.1.2.  Set_max_fanout
2.1.3.  Set_max_capacitance
2.2.    Design optimization constraints
2.2.1.  Create_clock
2.2.2. create_generated_clock
2.2.3.  Set_clock_latency
2.2.4.  Set_propagated_clock
2.2.5.  Set_clock_uncertainty
2.2.6.  Set_input_delay
2.2.7.  Set_output_delay
2.2.8.  Set_max_area
   
3.       Other commands
3.1.    set_clock_groups
3.2.    set_false_path
3.3.    set_case_analysis
3.4.    set_max_delay
   
1.       Do not exist in timing fix sdc file:
1.1.    Set_max_area
1.2.    set_operation_conditions
1.3.    set_wire_load_model
1.4.    set_ideal_*
2.       Must be placed in timing fix sdc file:
2.1.    Set_clock_uncertainty,
2.2.    set_max_transition
2.3.    set_propagated_clock
set_operating_conditions
定义当前设计的控制条件
语法:
Int set_operating_conditions
[-analysis_type bc_wc | on_chip_variation]
[-min min_condition]
[-max max_condition]
[-min_library min_lib]
[-max_library max_lib]
[-min_phys min_proc]
[-max_phys max_proc]
[-library lib]
[-object_list objects]
[condition]
数据类型:
min_condition    列表
max_conditon    列表
objects                 列表
condition             列表
参数:
-analysis_type bc_wc | on_chip_variation
设定分析的类型。两个选项只能选择其中一个。使用bc_wc或on_chip_variation切换设计到min_max模式。bc_wc值设定最小(快)最大(慢)控制条件是两个极端的控制条件。在bc_wc分析,用最大的控制条件分析SETUP,用最小控制条件分析HOLD。
on_chip_variation 分析分别有最小和最大控制条件表示片上最大偏差的上下限。对所有最大延迟的路径运用最大控制条件,对所有最小延迟的路径运用最小控制条件。
-min min_condition
指定用于最小延迟分析的控制条件。如果没有指定,工具默认使用最大控制条件。-min必须与-max 同时使用。
-max max_condition
指定用于最大延迟分析的控制条件。
-min_library min_lib
指定用于最短延迟分析,并包含有控制条件定义的库。可以是一个库的名称或集合。如果是集合,工具将选择集合中首个满足条件的库。
-max_library max_lib
指定用于最大延迟分析,并包含控制条件定义的库。可以是一个库的名称或集合。如果是集合,工具将选择集合中首个满足条件的库。
-min_phys min_proc
指定工艺资源名称搜索相匹配的电阻和电容值,用于最小延迟分析。该选项必须与-max_phys一起使用。
-max_phys max_proc
 指定工艺资源名称搜索相匹配的电阻和电容值,用于最大延迟分析。该选项必须与-min_phys一起使用。
-library lib
指定包含控制条件定义的库,用于最小和最大延迟分析。可以是一个库的名称或集合。如果是集合,工具将选择集合中首个包含控制条件的库。
-object_list objects
指定要设置控制条件的单元或端口。如果没有指定,默认为整个设计。该选项支持子单元或子模块。
Condition
指定有环境特征定义的条件,在最小最大延迟分析时使用。
描述:
该命令设定控制条件或环境特征,据此对当前设计进行时序或布局的优化。控制条件必须定义在.lib或link_library包含的任一库中。当前设计的local_link_library 会被加到link_library的开头,查找时优先于link_library。库搜索顺序依次为:
1.       lib
2.       local_link_library
3.       link_library
如果没有为设计设定控制条件,compile命令寻找链接库中首个库的控制条件作为初始值。如果库中没有控制条件定义,控制条件将不会被使用。
使用-object_list 选项将取代来自于设计或更高层次设计上的设定。
使用report_design命令可以查看当前设计控制条件设定和链接库信息。使用report_lib命令可以查看指定库控制条件设定。
多条件多模式支持:
该命令仅使用当前方案的信息
范例:
operating_conditions(“BCCOM”) { process : 0.6 ;
temperature : 20 ;
voltage : 5.25 ;
tree_type : “best_case_tree” ;
}
控制条件的名称是BCCOM,参数定义为:
process
浮点数代表半导体工艺特征
temperature
浮点数代表环境设定的温度
voltage
浮点数定义环境设定中电压范围的上限,下限为0.0
tree_type
环境互连模型。compile命令使用互连模式选择互连延迟的计算公式。三个有效模型:
         best_case_tree, 假设连线延迟为0
         worst_case_tree, 使用集中(总)RC模型
         balanced_tree, 所有负载均匀分摊线电阻
当工艺因素,控制温度和控制电压与标称值有偏差,compile使用线性模型补偿偏差的带来的影响,模拟为单元延迟,输入负载,输出驱动等值。包含有控制条件定义的库中有标称值设计的定义。
以下例子设定控制条件为WCIND,如果link_library是my_lib.db,并且设计没有local_link_library设定。my_lib.db的库为my_lib_core。
set_operating_conditions WCIND
控制条件’WCIND’在库”my_lib_core”中查找。
   
使用other_lib_core.db库中BCIND值 用于最小延迟分析,WCIND用于最大延迟分析。other_lib_core.db的库名称为other_lib_core
set_operating_conditions –min BCIND –max WCIND –library other_lib_core
   
删除当前控制条件设定
set_operating_conditions
更多:
compile, report_lib, reset_design, set_local_link_library, link_library
set_wire_load_model
为设计、端口、当前设计中层次化单元设定wire_load_attach_name属性,选择一个连线模型用于连线电容的计算。
语法:
status set_wire_load_model
-name model_name
[-library lib]
[-min][-max]
[object_list]
数据类型:
model_name  字符
object_list        集合
参数:
-name model_name
指定连线负载模型的名称。该模型必须是已定义的。这个选项必须使用。
-library lib
指定包含模型的库。可以是一个库的名称或集合。如果是集合,工具将选择集合中首个满足条件的库。
-min
指定仅用于最小延迟分析的模型。你不能用-min选项设定一个不同的模型或最小模块尺寸。因为对于这些参数,无论最大最小延迟分析都使用相同的值。
-max
指定仅用于最大延迟分析的模型。任何用于最小延迟分析的模型集都没有影响。
object_list
指定将被设定连线负载模型的端口、设计或单元的列表。连线负载模型默认设定给当前设计。
描述:
该命令设置wire_load_attach_name属性给特定的端口,设计或对象列表中单元或当前设计,用于连线电容的计算。如果没有任何选项,模型将作用于顶层设计。-name选项是必须的。
如果指定的是一个设计,将作用于整个设计中的所有连线。如果指定的是一个单元,存在在当前设计中。设定给单元的连线模型会取代设计赋值给单元的连线模型。
你可以使用该命令设定端口外部连线负载模型,并且不受设计连线模型的影响。
如果没有为设计指定连线模型,首个满足条件的连线模型将默认设定给设计。当auto_wire_load_selection 属性被打开,如果库有wire_load_selection 表,当前设计的单元部分将自动搜索与wire_load_selection表相匹配的连线模型。如果库有不只一个表,将设置default_wire_selecting_group属性将其中一个表设定为初始表。你也可以通过set_wrie_load_selection_group进行手工设定。 如果你没有使用set_wire_load_min_block_size 设定模块大小,当合适的连线被选用,设计单元面积被假设为至少与这个值一样大。如果没有wire_load_selection表,库中的default_wire_load会被使用。如果上述情况都没有,将没有连线会被使用。
当auto_wire_load_selection 属性被设为false,并且没有指定model_name,也同样没有连线模型会被使用。
report_design命令显示当前设计的连线模型和模式,以及相关联的库。report_wire_load命令可提供更多连线模型信息。
report_lib命令显示指定库中定义的连线模型及选择表。你可以使用report_port显示设计端口连线模型。
你可以对当前设计中的层次化单元设定特定的连线模型,引用层次化单元的其他设计,其连线模型不会被改变。
如果你对子设计设定连线模型,你需要确保顶层设计连线模型不是top,否则下层模块的连线模型的选择会被忽略。
如果你为设计指定连线模式,工具在compile时,会搜索首个满足条件的连线模式作为初始设定。如果初始设定没有被指定,会假设top作为初始值。你可以使用set_wire_load_mode重新指定。对于set_wire_load_mode属性的top, enclosed和segmented 值的定义,可参考set_wire_load_mode命令。
连线电阻及面积也会遵照规则考虑进连线电容的计算。
使用-min选项,你可以使用set_wire_load_model指定一个不同的连线模型用于最小延迟分析 。除非明确的指定,最大最小延迟分析使用相同的连线模型。你可以设定不同的连线模型指定给设计或端口。你不可以指定不同的连线模型或模块尺寸仅用于最小延迟分析。对于这种情况,最大最小分析使用相同的值。
布线面积总是使用与最大延迟分析的相同连线负载来计算。
连线负载模型包含compile估计连线延迟所需要的所有信息。下面是一个连线负载模型的例子。
wire_load(“90x90”)  {  resistance : 0;
capacitance : 1 ;
area : 0 ;
slope : 1.64 ;
fanout_length(1 , 1.9 );
fanout_length(2, 2.8 );
fanout_length(3, 4.7 );
}
模型名称90x90,模型字段定义为:
resistance
互连线单位长度电阻
capacitance
互连线单位长度电容
area
互连线单位长度连线面积
fanout_length (fanout1, length1)
这些数组描述一个查找表,工具可以据此用给定的扇出估算出被驱动单元的互连线长度。你必须指定至少一组数据,可以更多附加数据表达期望的扇出长度行为特征。在邻近的两组数据之间使用线性插值方法来估算查找表中不存在的点。
slope
该值用来表征线性超出查找表的扇出或长度行为。
删除连线负载模式使用remove_wire_load_model命令或reset_design命令。
范例:
在顶层设计设定布线负载模型,没有local_link_library设定前提下:
report_lib tech_lib

Wire Loading Model:
NameLibrary ResCap Area Slope Fanout Length  
------------------------------------------------------  
05x05tech_lib0.00001.00000.00000.1860100.3900  
10x10tech_lib0.00001.00000.00000.3110 10.5300  

link_library = {tech_lib.db}
set_wire_load_model –name “10x10”
以下范例使用-library 选项指定库my_lib.db中的连线负载模型10x10
set_wire_load_model –name “10x10” –library my_lib.db
   
以下范例为子设计LOW设定连线负载模型10x10,用于最大最小延迟分析 。接着为顶层设计TOP设定连线模型20x20,模型模式为enclosed。最后设定20x20MIN模型仅用于最小延迟分析。
current_design LOW
set_wire_load_model –name “10x10”
current_design TOP
set_wire_load_mode enclosed
set_wire_load_model –name “20x20”
set_wire_load_model –name “20x20MIN” -min
   
以下例子设定子设计LOW没有连线负载模式,让它基于单元面积来选择。连线负载模式enclosed和连线负载模型20x20设定给顶层设计,使用-min_block_size选项描述假设对于子设计的一个模块的尺寸至少为200。
current_design LOW /*没有连线负载设定*/
current_design TOP
set_wire_load_mode enclosed
set_wire_load_min_block_size 200.0
set_wire_load_model –name “20x20”
   
以下命令描述一个端口的外部扇出
set_wire_load_model [get_ports O1] “default_wl”
set_port_fanout_number 5 [get_ports O1]
   
假设U1,U2和U3是TOP设计中的三个单元,它们都被子设计LOW所引用。以下命令设定10x10连线模型给LOW,20x20连线模型给U1和U2。
current_design TOP
set_wire_load_model –name “10x10” LOW
set_wire_load_model –name “20x20” {U1 U2}
更多:
characterize, current_design, remove_wire_load_model, report_lib, reset_design, set_load,
set_local_link_library, set_port_fanout_number, set_wire_load_min_block_size,
set_wire_load_mode, set_wire_load_selection_group, auto_wire_load_selection,
link_library
set_driving_cell
为当前设计的输入或输入/出类型的端口设定属性。指定一个单元或单元的输出端口来驱动特定的端口。
语法:
int set_driving_cell
[-lib_cell lib_cell_name]
[-library lib]
[-rise]
[-fall]
[-min]
[-max]
[-pin pin_name]
[-from_pin from_pin_name]
[-dont_scale]
[-no_design_rule]
[-none]
[-input_transition_rise rtran]
[-input_transition_fall ftran]
[-multiply_by factor]
port_list
[-cell obsolete_-_please_use_-lib_cell_instead]
数据类型:
lib_cell_name     字符
lib                           字符
pin_name           字符
from_pin_name 字符
rtran                      浮点
ftran                      浮点
factor                    浮点
port_list               列表
参数:
-lib_cell  lib_cell_name
指定用来驱动端口的单元名称。你可以配合-pin选项指定有不至一个输出的单元,将driving_cell_rise和driving_cell_fall属性设定给端口上的lib_cell_name。要指定不同的单元给上升和下降情况,需要执行两次命令。分别使用-rise选项和-fall选项。你如果使用本选项,还需要同时使用-dont_scale和multiply_by选项。命令默认搜索link_library中的单元。
-libray  lib
指定驱动单元所在的库名或库的集合。如果库单元没有找到,与端口控制条件相匹配的库将会被使用。当没有库被指定时,会根据控制条件搜索所有的库。如果与控制条件相匹配的库单元不能找到,第一个与库单元名称相匹配的单元会被使用。本选项只能与-lib_cell一起使用。它设定driving_cell_library_rise和driving_cell_library_fall字符属性给在端口的库。指定不同的库,需要执行两次,分别使用-rise和-fall选项。
-rise
指定lib_cell_name, lib, pin_name, 和 from_pin_name对应到上升情况。并且为目标设定相应driving_cell_rise, driving_cell_library_rise, driving_cell_pin_rise, 和driving_cell_from_pin_rise字符属性。你可与-fall选项一起使用,指定上升和下降情况。
-fall
指定lib_cell_name, lib, pin_name, 和 from_pin_name对应到下降情况。并且为目标设定相应driving_cell_rise, driving_cell_library_rise, driving_cell_pin_rise, 和driving_cell_from_pin_rise字符属性。你可与-rise选项一起使用,指定上升和下降情况。
-min
设定驱动单元信息仅用于最小控制条件分析。
-max
设定驱动单元信息仅用于最大控制条件分析。
-pin pin_name
指定驱动单元驱动端口的输出脚。当你使用-lib_cell选项驱动单元有不至一个输出脚或使用-from_pin选项时,需要使用-pin选项。本选项设定driving_cell_pin_rise和driving_cell_pin_fall属性给在端口上的接脚。指定不同的接脚用于不同情况,需要执行命令两次,分别是上升或下降情况。初始值为库单元中第一个被找到的时序弧(单元内部路径)。
-from_pin from_pin_name
指定驱动单元输入脚用于搜索时序弧。当驱动单元有不至一个输入接脚,并且这些接脚有不同的特性弧,而且使用了-pin和-lib_cell选项时,本选项需要使用。-from_pin选项设定driving_cell_from_pin_rise和driving_cell_from_pin_fall属性给在端口上的from_pin_name。初始值为库单元中第一个被找到的时序弧。
-dont_scale
指定时序分析器不要依照当前控制条件改变端口驱动能力。本选项只能与-lib_cell一起使用。-dont_scale产生driving_cell_dont_scale 布尔属性true 给端口。当驱动单元被改变时,端口驱动能力会根据控制条件进行改变。
-none
去除前一个驱动单元信息
-input_transition_rise rtran
指定与-from_pin选项相连的输入上升转变时间。使用-input_transiton_rise和-input_transition_fall选项通过截取与-from_pin相关的精确转变时间去获取输出接脚一个更准确的转变时间和延迟时间。初始值 为0。
-input_transition_fall ftran
指定与-from_pin选项相关的输入下降转变时间。初始值为0.
-multiply_by factor
指定一个倍数,用它来加倍端口的延迟特征。本选项只能与-lib_cell一起使用。它作用于端口的负载延迟与转变时间。它产生driving_cell_multiply_by 浮点属性给端口上特定的因子。初始值 为1.0 。
post_list
指定当前设计要放置驱动单元属性的输入输出端口的列表。如果不至一个端口要指定,可以使用括号或花括号。
描述:
该命令设定属性给当前设计中指定的输入或双向端口,这些端口连接外部驱动单元。端口的驱动能力相同,如同指定的驱动单元都是在相同的环境中被连接,以允许端口驱动能力非线性延迟模型的精确建模。对于CMOS2延迟模型,由端口驱动的接脚的边沿率相同,如同端口驱动单元都被取代了一样。除非使用-dont_scale 选项,端口驱动能力会根据当前控制条件发生变化。
要显示端口驱动信息,使用report_port命令加-drive选项。
你可使用characterize命令会基于他们在整个设计中的关系,自动设定子设计端口上驱动单元的属性。
你可以使用remove_driving_cell 或者 reset_design命令删除端口驱动单元属性。remove_driving_cell命令删除指定端口上任何匹配上升或下降驱动电阻属性(由set_drive命令产生)。现在认为较好的方式是使用set_driving_cell命令取代set_drive,因为set_driving_cell更准确。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
分配AND2单元驱动力给端口IN1
set_driving_cell –lib_cell AND2 {IN1}
   
分配tech_lib库中INV单元的Z端的驱动给所有输入端口
set_driving_cell –lib_cell INV –pin Z –library tech_lib [all_inputs]
   
分配驱动不因控制条件而发生改变
set_driving_cell –lib_cell INV –dont_scale {IN1}
   
在上升沿情况与下降沿情况分配不同的端口驱动
set_driving_cell –rise –lib_cell BUF1_TS –pin Z
set_driving_cell –fall –lib_cell BUF1_TS –pin Q {IN1}
   
设定AN2驱动单元给top1 输入端口,并使用由-from_pin选项指定的A上的输入上升转变时间2.3。
set_driving_cell –lib_cell AN2 –input_transition_rise 2.3 –from_pin A top1
更多:
all_inputs, characterize, current_design, remove_driving_cell, report_port, reset_design, set_drive, set_load, set_max_capacitance, set_max_fanout, set_max_transiton, set_min_capacitance, set_port_fanout_number
set_load
设定特定端口或连线的load属性。
语法:
status set_load
value
objects
[-subtract_pin_load]
[-min]
[-max]
[[-pin_load] [-wire_load]]
数据类型:
value      浮点
objects   列表
参数:
value
指定端口或连线load属性的值。注意单位要与技术库的一致。比如,如果技术库是pf,指定值的单位也必须是pf.
objects
指定当前设计中的端口或连线的列表,给它们设定负载属性。
-subtract_pin_load
指明当前连线接脚的电容值减去value后再设为负载。如果结果为负将设为0。该选项产生subtract_pin_load属性。如果带有这个属性,在update_timing时不计入总负载。使用该选项,如果value包含接脚或端口电容,subtract_pin_load属性将不会产生。
-min
指明负载是在最小延迟分析时使用。你不能使用继承选项-fanout_number加-min,因为对于最大最小延迟不支持不同的扇出数。如果没有指定最小负载值,将使用最大值。
-max
指明用于最大延迟分析的负载值。有一个值被分配给最小延迟分析,但没有最大延迟分析的值,最小值也会被忽略。你不能只声明一个最小值给某个连线。
-pin_load –wire_load
指明分配给端口的值是接脚负载,是连线负载,还是两者都是。这些选项仅能与端口一起使用。如果objects中包含连线,会报错。如果你没有指明两者中任意一个,-pin_load作为初始选项。你可以两个同时使用,一个为接脚负载,一个为连线负载。
描述:
该命令在当前设计端口或连线上生成load属性。如果当前设计是层次化的,它必须已经用link命令进行关联。连线上总计负载是所有与连线相关的接脚负载、端口负载、连线负载的总和。指定的value会取代内部估计的负载值。
你可以使用set_load命令在层次化设计,对下层连线产生作用。下层连线的命名方式如:BLOCK1/BLOCK2/NET_NAME.
查看端口负载可使用report_port命令。查看连线负载可使用report_net或report_internal_loads命令。
重设负载值可使用remove_attribute命令。重设所有在设计中标注的值,可使用reset_design。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
设定2个单位给端口the_answer
set_load 2 the_answer
   
用3倍反相器输入负载加一个预估的2.5单位负载给所有的输出端口
link –all
port_load = 2.5 + 3 * load_of(tech_lib/IV/A)
set_load port_load all_outputs()
   
将tech_lib库单元IV端口Z上的负载值赋给input_1和input_2
set_load load_of(tech_lib/IV/Z) {input_1 input_2}
   
将3分配给连线U1/U2/NET3。如果接脚或端口电容为2,即连线电容标为1。 如果电容不小于3,即标为0。
set_load –subtract_pin_load 3 U1/U2/NET3
   
设定5单位连线负载给端口the_answer
set_load –wire_load 5 the_answer
   
描述一个输出端口外部扇出
set_load –fanout_number 5 [get_ports O1]
set_wire_load_model –port_list [get_ports O1] “default_wl”
   
删除反标属性
remove_attribute [get_ports the_answer] load
remove_attribute [get_ports the_answer] “wire_capacitance”
remove_attribute [get_ports O1] “fanout_number”
remove_attribute [get_nets U1/U2/NET3] load
更多:
all_outputs, current_design, load_of, remove_attribute, report_internal_loads, report_net, report_port, reset_design, set_drive, set_wire_load_min_block_size, set_wire_load_mode, set_wire_load_model, set_wire_load_selection_group, target_library
set_fanout_load
赋值给当前设计中特定的端口,并产生fanout_load 属性。
语法:
int  set_fanout_load
value
port_list
数据类型:
value       浮点
port_list  列表
参数:
value
指定给端口fanout_load 属性的值,端口要在port_list列表中。注意单位必须与max_fanout及fanout_load在技术库中用于优化的值的单位保持一致。
port_list
要设定fanout_load属性的端口。如果不至一个,需要用{} 括起来。
描述:
赋值给当前设计中特定的端口,并产生fanout_load 属性。compile会尽可能确保总的负载不超过驱动接脚max_fanout限制。对于某个端口的fanout_load,其初始值为0。
注:双向端口不在最大扇出计算之列。所以,使用set_fanout_load命令应用于双向端口时,不会对compile产生任何影响。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
设定2个单位的扇出负载给所有的输出端口
set_fanout_load 2 all_outputs()
更多:
all_outputs, compile, remove_attribute, report_port, reset_design, set_max_fanout
set_min_library
设定一个替代库用于最小延迟分析。
语法:
int set_min_library
max_library
-min_version min_library  | -none
数据类型:
max_library    字符
min_library     字符
参数:
max_library
指定库文件名称作为link_library或target_library。这个库仅用作最大延迟分析。不要为库文件增加路径。
-min_version min_library
指定对应于最大延迟分析的库文件名称用于最小延迟分析。min_library不应指定在link_library或target_library中。库文件名称不包含路径。
-none
取消最小延迟库设定
描述:
Set_min_library命令在两个库之间创建了一个最小/最大关系。max_library 用于最大延迟分析,min_library用于最小延迟分析。
无论何时工具计算一个最小延迟值,它首先从最大延迟库里寻找库单元。如果一个单元在最小延迟库有相同名称、相同接脚以及相同时序弧,最小延迟库中的时序信息将被使用。如果工具不能从最小延迟库中找到匹配单元,就会使用最大延迟库中的单元。
不要在库文件名称中加入路径。用$search_path是指定路径。
多条件多模式支持:
该命令不依靠特定方案的信息。
范例:
以下例子是set_min_library通常的用法:
set link_library “LIB_WC_COM.db”
set target_library $link_library
set_min_library LIB_WC_COM.db –min_version LIB_BC_COM.db
set_operating_conditions –max WC_COM –max_library LIB_WC_COM \
        –min BC_COM –min_library LIB_BC_COM
report_timing –delay max
report_timing –delay min
更多:
link, set_operating_conditions, link_library, target_library
set_max_transition
对指定的时钟组、端口或设计创建max_transition属性。
语法:
int set_max_transition
transition_value
object_list
参数:
transition_value
设定最大转换时间给特定的时钟组、端口或设计。设定max_transition属性到时钟组、端口或设计上的transition_value。transition_value 的单位必须与用于优化的库的单位保持一致。比如,比如库特定的驱动值为kohms,负载值为pf,那么transition_value必须是在ns。
object_list
要分配transiton_value的时钟组、端口及设计名称的列表。
描述:
设定max_transition属性给时钟组、端口及设计。compile尽可能保证连线的转变时间小于设定值。连线的最大转变时间定义为单元接脚及设计端口上的最大转换时间的最小值。
全局和局部最大转变时间都有设定时,compile使用更严格的条件。
初始情况下,输入输出端口没有转变限制,所以驱动连线的最大转变时间取决于驱动单元输入或输出的最大转变时间。分配一个更小的转变时间给端口,连线的最大转变时间就会减小。那么设计约束也会更严格。
max_transition是设计规则约束。因此,compile优先于其他约束。即使,它有悖于设计的优化约束。max_delay和max_area为优化约束,相应的max_fanout和max_transition为设计规则约束。设计规则约束影响这些保证功能正确的技术限制,优化约束影响期望的目标和限制,但对于设计的操作都不是决定性的。设计编译器尽可能达到所有约束,但会在优化阶段优先考虑设计规则约束。
使用report_constraint可以得到优化约束和设计规则约束。
使用remove_attribute 可以删除设计端口上的最大转变时间。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
设定2.0单位给端口late_riser
set_max_transition 2.0 late_riser
   
设定2.0单位给设计 TEST
set_max_transition 2.0 TEST
更多:
all_inputs, all_outputs, characterize, current_design, remove_attribute, report_constraint, reset_design
set_max_fanout
给指定的输入端口或设计设定max_fanout属性。
语法:
int set_max_fanout
fanout_value
object_list
参数:
fanout_value
指定将设定给max_fanout属性的值。即,最大扇出值。
object_list
指定要设定max_fanout属性的输入端口或设计的列表。
描述:
给指定的输入端口或设计设定max_fanout属性。compile尽可能确保总计fanout_load小于设定的值 。扇出数没有最大初始值,但技术库中设定了max_fanout属性。
全局和局部都有设定时,compile使用更严格的条件。
通常,设计规则约束是影响保障功能正确的技术规格约束。优化约束是设计目标与非关键性合理限制。设计编译器尽可能达到所有约束,但会在优化阶段优先考虑设计规则约束。
使用report_constraint可以得到优化约束和设计规则约束。
使用remove_attribute 可以删除设计端口上的最大扇出限制。reset_design可以删除当前设计所有属性,包括max_fanout。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
给端口going_places设定20.0单位最大扇出
set_max_fanout 20.0 going_places
   
设计18.5单位给设计 TEST
set_max_fanout 18.5 TEST
更多:
all_inputs, current_design, remove_attribute, report_constraint, report_port, reset_design, set_fanout_load
set_max_capacitance
为端口或设计设定max_capacitance属性
语法:
int  set_max_capacitance
capacitance_value
object_list
参数:
capacitance_value
设定max_capacitance的值。capacitance_value的单位必须与技术库一致。比如,如果库电容值单位为pf, 则该值也必须为pf。
object_list
要设定max_capacitance属性的端口或设计的名称列表
描述:
设定max_capacitance属性给端口或设计。compile尽可能确保连线电容小于设定的值。最大电容值定义为单元接脚和设计端口最大电容值的最小值。
无论全局或局部最大电容值限制,compile都会尽可能满足最严格的约束。
如果max_capacitance属性已经存在在技术库中,compile 会自动满足约束。
缺省情况下,端口或设计没有max_capacitance约束。
该命令的max_capacitance属性不能赋值给输出或双向端口。
max_capacitance, max_fanout 以及max_transition 为设计规则约束。max_delay和max_area为优化约束。设计规则约束必须要满足,因为它关系到设计功能的正确性。优化约束是期望值,并非设计操作的关键因素。design compiler尽可能满足所有约束,但设计规则约束优先与优化约束。因此,compile 处理时,max_capacitance 优先于其他约束,即使它有可能不利于设计优化。
显示约束信息可以使用report_constraint命令。显示端口约束可以使用report_port命令。删除max_capacitance属性使用remove_attribute命令。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
给端口later_rise和设计 TEST 设置2.0单位max_capacitance 属性。
set_max_capacitance 2.0 later_riser
set_max_capacitance 2.0 TEST
更多:
all_inputs, all_outputs, characterize, current_design, remove_attribute, report_constraint, report_port, reset_design, set_min_capacitance
   
create_clock
在当前设计中创建一个时钟
语法:
status create_clock
[-name clock_name]
[-add]
[source_ojbects]
[-period period_value]
[-waveform edge_list]
数据类型:
clock_name      字符
source_objects  列表
period_value      浮点
edge_list            列表
参数:
-name  clock_name
指定时钟名称。如果你不使用该选项,时钟名称将会与第一个时钟源在source_objects指定的一样。如果你没有使用souce_objects,你就必须使用本选项,它会创建一个与端口或接脚无关的虚拟时钟。本选项与source_objects一起使用可以为时钟增加一个描述性的名称。
如果你使用-add选项,你必须使用-name选项,并且要为有相同源的时钟分配不同的名称。
-add
指明是否将该时钟加到已存在的时钟中或将其覆盖。使用本选项抓取有相同源不同波形,进行同时分析的复合时钟。你使用该选项时,必须使用-name选项。定义在相同源接脚或端口的复合时钟相比一个单一时钟,会导致更长的运行时间和更高的内存占用。因为时序综合引擎必须搜索所有开始和截取组合的可能性。使用set_false_path命令限制不期望的组合。该选项在默认为关闭,除非复合时钟分析的相关变量timing_enable_multiple_clocks_pre_reg 被设为true。
source_objects
指定应用于时钟的接脚或端口的列表。如果你没有使用本选项,你必须使用-name clock_name ,它会创建一个与接脚或端口无关的虚拟时钟。如果你指定的时钟已经在接脚上了,旧的时钟会被取代, 除非你增加-add选项。
-period period_value
以库时间单位指定时钟波形的周期。
-waveform edge_list
以库时间单位指定整个时间周期中时钟的上升或下降沿时间。列表中第一个时间是上升转换,通常第一个上升转换在时间零点之后。这里增加次数必须是偶数,并且它们假定为交替的上升和下降时间。数值上,为一个完整时钟周期。如果-waveform edge_list没有设定,但有-period period_value,默认情况,波形假定为一个0.0上升沿和一个period_value/2下降沿。
描述:
create_clock命令在当前设计中创建一个时钟。该命令在当前设计中定义指定的source_objects作为时钟源。一个接脚或端口可以成为一个单时钟源。如果source_objects没有指定,但clock_name给定,一个虚拟时钟会被创建。一个虚拟时钟可以被创建,代表一个片外时钟用于描述输入或输出延迟。更多关于输入和输出延迟的信息,可以阅读set_input_delay和set_oupt_delay参考。
时钟影响到时钟网络的属性,比如dont_touch_network, fix_hold和propagated_clock。使用create_clock在已存在的时钟上会覆盖时钟上已有的属性。create_clock也同时定义时钟波形。时钟允许每个周期多脉冲形式。建立和保持路径延迟是从时钟波形路径的起点到终点自动衍生的。fix_hold属性(用set_fix_hold设定)指导compile修复时钟保持 (hold) 错误。
默认状态,时钟对应一组路径。该组与时钟相关的终点用于估算函数的计算。要将时钟从分配的组中删除,使用group_path命令分配时钟到另一个组或默认路径组。更多的信息可参考group_path命令帮助。
新的时钟有理想时序,不能通过时钟网络传播延迟。使用set_propagated_clock命令让时钟能够进行延迟传播。要添加偏差(skew)和不确定因素(uncertainty)到理想波形中,使用set_clock_latency或set_clock_uncertainty 命令。
显示当前设计中所有时钟源信息,使用report_clock命令。得到时钟源列表,使用get_clocks命令。返回所有与特定时钟相关的序列单元,使用all_registers命令。取消create_clock,使用remove_clock命令。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
在端口PHI1创建时钟周期为10,上升在5.0,下降在9.5.
create_clock “PHI1” –period 10 –waveform {5.0 9.5}
   
在端口PHI2创建时钟周期为10,下降在5,上升在10
create_clock “PHI2” –period 10 –waveform {10 15}
   
在接脚 u12/Z创建时钟CLK,周期25,下降在0.0,上升在5.0,下降在10.0,上升在15.0.
create_clock “u13/Z” –name “CLK” –period 25 –waveform {5 10 15 25}
   
创建一个虚拟时钟PHI2,周期10,上升在0.0, 下降在5.0
create_clock –name “PHI2” –period 10 –waveform {0.0 5.0}
   
创建多源复合波形时钟
create_clock –name “clk2” –period 10 –waveform {0.0 2.0 4.0 6.0} \
{clkgen1/Z clkgen2/Z clkgen3/Z}
更多:
all_clocks, all_registers, check_timing, compile, current_design, get_clocks, group_path, remove_clock, reset_design, set_clock_latency, set_clock_uncertainty, set_dont_touch_network, set_fix_hold, set_max_delay, set_output_delay, set_propagated_clock
create_generated_clock
创建一个生成时钟
语法:
string create_generated_clock
[-name clock_name]
[-add]
source_objects
-source master_pin
[-divide_by divide_factor | multiply_by multiply_factor]
[-duty_cycle percent]
[-invert]
[-preinvert]
[-edges edge_list]
[-dege_shift dege_shift_list]
[-combinational]
数据类型:
clock_name                        字符
source_objects                 列表
master_pin                         列表
clock                                      字符
divide_factor                     整数
multiply_factor                 整数
percent                                                浮点
edge_list                             列表
edge_shift_list                  列表
参数:
-name clock_name
指定生成时钟的名称。如果你不使用本选项,时钟接受与第一个时钟的-source设定的名称相同的名称。如果你使用-add选项,你必须使用-name 选项,并且不能与源时钟有相同的名称。
-add
指定是否增加这个时钟到已经存在的时钟中或将其覆盖。使用本选项去截取相同源的复合时钟。理想状态,一个生成时钟必须设定为每个时钟扇出的源接脚。如果你使用该选项,必须同时使用-name 选项。
定义相同源接脚或端口的复合时钟,会增加运行时间和需要更多的内存,因为时序综合引擎搜索启动与截取组合的所有可能。使用set_false_path取消不希望有的组合。默认状态,忽略该选项,除非将timing_enable_multiple_clock_per_reg变量设为true 打开复合时钟分析.
source_objects
指定一组端口或接脚定义为要产生的生成时钟源。
-source master_pin
指定主时钟接脚,可以是一个主时钟源接脚或被主时钟驱动的一个接脚,并且是驱动生成时钟定义的接脚。主接脚的时钟波形用于驱动生成时钟波形。
-master_clock clock
如果多个时钟扇入这个主接脚,指定主时钟用于这个生成时钟。
-divider_by divide_factor
指定频率被除数。如果divide_factor为2,生成时钟周期是主时钟周期的两倍。
-multiply_by multiply_factor
指定频率倍数。如果multiply_factor为3,则生成时钟周期为原先的三分之一。
-duty_cycle percent
指定倍频使用时的占空比。允许0-100之间的数值。占空比是高电平脉冲宽度。
-invert
反转生成时钟信号,不管主接脚上,源时钟反应或判断(sense)是单因素决定(unate)还是非单因素决定(non-unate) (遇到倍频时)。
-preinvert
创建一个生成时钟基于反转的时钟信号,仅当主接脚源时钟有非单因素决定反应,或生成时钟不被反转,仅当该选项没有被指明时。-invert与-preinvert不同之处在于,-invert先创建生成时钟后反转信号,而preinvert是先反转信号,再创建生成时钟。
-edges edge_list
指定正整数列表,代表形成生成时钟沿的源时钟沿。沿解释为交替变化的上升和下降沿,并且每个沿不小于它之前的沿。沿的数值必须是不小于3的奇数,用来创建一个完整的生成时钟的波形。第一个沿必须大于或等于1。比如,1代表第一个源边沿,2代表第二个源边沿,依次类推。
-edge_shift edge_shitf_list
指定浮点数列表代表偏移量,指定的沿经过变化产生最终的生成时钟波形,单位与库时钟单位相同。指定的沿偏移量必须等于沿指定的数值。数值可以为正或负。正数表示延后,负的表示提前。比如,1代表相应的沿被延后了1个时间单位。
-combinational
指定源滞后路径,作用于某个类型的生成时钟,其包含主时钟传播组合路径上的逻辑。源滞后路径不会通过序列单元的时钟接脚,透明锁存器数据接脚,或其他生成时钟的源接脚。
描述:
create_generated_clock命令在当前设计中创建一个生成时钟。该命令定义一个对象列表作为当前设计生成时钟源。你可以指定接脚或端口作为生成时钟对象。命令同时指定被生成时钟源。使用该命令的优势在于,无论何时主时钟发生改变,生成时钟也同时发生改变。
生成时钟可以进行变频处理,降低频率时使用-divide_by选项,增加频率时使用-multiply_by选项,沿派生使用-edge选项。另外,频率在除或乘时也可以用-invert选项进行反转。沿派生时钟的沿偏移使用-edge_shift选项。-edge_shift使用在对沿的故意偏移,而非时钟滞后。如果生成时钟使用divide_factor 是2的幂,主时钟上升沿被用来决定生成时钟的沿。如果divider_factor不是2的幂,则是从对主时钟沿尺寸改变得来。
对已有的generated_clock使用create_generated_clock,会覆盖已有的generated_clock属性。
generated_clock在时序分析时被扩展为真实的时钟。
以下命令能够引用generated_clock:
set_clock_latency
set_clock_uncertainty
set_propagated_clock
set_clock_transition
显示有关生成时钟的信息使用report_clock命令。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
创建频率-divide_by 2的生成时钟
create_generated_clock –divide_by 2 –source CLK [get_pins foo]
   
创建频率-divide_by 3的生成时钟。主时钟周期为30, 主波形为{24 36},则生成时钟周期为90,波形为{72 108}
create_gneraged_clock –divide_by 3 –source CLK [get_pins div3/Q]
   
创建频率-multiply_by 2的生成时钟,占空比为60%。
create_generated_clock –multiply_by 2 –duty_cycle 60 –source CLK [get_pins foo1]
   
创建频率-multiply_by 3的生成时钟,占空比不变。如果主时钟周期为30,主波形为{24 36} ,生成周期为10,波形为{8 12}
create_gnerated_clock –multiply_by 3 –source CLK [get_pins div3/Q]
   
创建生成时钟沿为主时钟的1,3,5沿。如果主时钟周期为30,波形{24 36},生成时钟周期为60,波形为{24 54}
create_generated_clock –edges {1 3 5} –source CLK [get_pints foo2]
   
与上个例子相似,但沿偏移1个单位。如果主周期为30,主波形为{24 36},生成时钟周期为60,波形为{25 55}
create_generated_clock –edges {1 3 5} –edge_shift {1 1 1} –source CLK [get_pins foo2]
   
创建一个反转时钟
create_generated_clock –divider_by 2 –invert
   
更多
check_timing, create_clock, get_generated_clocks, remove_generated_clock, report_clock, set_clock_latency, set_clock_unertainty, set_propagated_clock, timing_enable_multiple_clocks_per_reg
set_clock_latency
指定时钟网络滞后
语法:
string set_clock_latency
[-rise]
[-fall]
[-min]
[-max]
[-source]
[-early]
[-late]
[-clock clock_list]
delay
object_list
数据类型:
clock_list   列表
delay          浮点
object_list 列表
参数:
-rise
指示delay仅应用于上升类型时钟网络滞后。默认情况下,delay应用于上升和下降类型时钟网络滞后。
-fall
指示delay仅应用于下降类型时钟网络滞后。默认情况下,delay应用于上升和下降类型时钟网络滞后。
-min
指示delay仅应用于最小延迟类型时钟网络滞后。默认情况下,delay应用于最大最小类型时钟网络滞后。
-max
指示delay仅应用于最大延迟类型时钟网络滞后。默认情况下,delay应用于最大最小类型时钟网络滞后。
-source
指示delay仅应用于时钟源滞后。默认情况下,delay应用于时钟网络滞后。
-early
指示delay仅应用于最早时钟源滞后。默认情况下,如果-source指定,delay应用于最早最晚时钟源滞后。
-late
指示delay仅应用于最晚时钟源滞后。默认情况下,如果-source指定,delay应用于最早最晚时钟源滞后。
-clock clock_list
指示delay应用于相关时钟。默认情况下,delay应用于所有指定目标。
delay
指定时钟滞后值。
object_list
指定时钟,端口或接脚列表用于时钟滞后设定。
描述:
两种类型时钟滞后可以指定给设计。时钟网络滞后是时钟信号从时钟定义点传播到寄存器时钟接脚的时间。上升和下降滞后分别表示在寄存器时钟接脚的上升和下降转变的滞后。时钟波形的反转,如果出现在时钟网络中,当计算时钟网络在寄存器时钟接脚处的滞后时,要带进去考虑。时钟源滞后(或称为插入延迟)是对于一个时钟信号从它的实际理想波形原点传播到时钟定义点的时钟。当时时钟产生电路不是设计的一部分时,它通常定义为片外时钟滞后。对于生成时钟,时钟源滞后通常定义为从主时钟到生成时钟定义点的延迟。-early和-late选项通常指定最早和最晚时钟源滞后。
如果多重时钟允许应用于每个对象,可以用-clock选项指定时钟滞后来考虑每个时钟。不同的值被应用,这样不同的时钟网络就有不同的时钟滞后。
design compiler假定理想时钟,这意味着初始时钟只有一个指定的网络滞后(用set_clock_latency命令设定)或零网络滞后。传播时钟网络滞后(用set_propagated_clock命令)通常对于后版图,就是已经完成时钟树的建立。理想时钟网络滞后可供前版图时钟树评估。
时钟源可以指定为理想或可传播时钟。在寄存器接脚上总的时钟滞后是时钟源和时钟网络滞后之和。
取消set_clock_latency设定,使用remove_clock_latency。
查看时钟网络和时钟源滞后信息,可以使用report_clock -skew命令。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
指定时钟”CLK1”上升滞后1.2,下降滞后0.9
set_clock_latency 1.2 –rise [get_clocks CLK1]
set_clock_latency 0.9 –fall [get_clocks CLK2]
   
设定时钟”CLK1” 最早上升下降滞后0.8, 最晚上升下降滞后0.9
set_clock_latency 0.8 –source –early [get_clocks CLK1]
set_clock_latency 0.9 –source –late [get_clocks CLK1]
更多:
create_clock, current_design, report_clock, set_clock_transition, set_clock_uncertainty, set_input_delay, set_propagated_clock
set_propagated_clock
指定传播时钟滞后。
语法:
string set_propagated_clock
object_list
数据类型:
object_list   列表
参数:
object_list
提供时钟,端口,接脚或单元的列表
描述:
指定通过时钟网络传播,决定寄存器时钟接脚滞后的延迟。如果没有指定,就假定为理想时钟。理想时钟意思为时钟网络有一个指定的滞后(用set_clock_latency命令)或初始零滞后。传播时钟滞后用于时钟树生成后的后版图。理想时钟滞后可供时钟树建立之前,用来作评估。
如果set_propagated_clock应用于接脚或端口,它作用于所有与传递扇出的接脚或端口相连的寄存器的时钟接脚。
取消set_propagated_clock,使用remove_propagated_clock或set_clock_latency提供一个理想滞后。
查看时钟的传播属性,使用report_clock –skew。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
设计中的所有时钟都使用传播时钟滞后。
set_propagated_clock [all_clocks]
更多:
remove_propagated_clock, set_clock_latency, report_clock, set_input_delay, create_clock, current_design
set_clock_uncertainty
指定不确定(偏差)给特定的时钟网络。
语法:
string set_clock_uncertainty
[object_list
|-from from_clock
|-rise_from rise_from_clock
|-fall_from fall_from_clock
-to to_clock
|-rise_to rise_to_clock
|-fall_to fall_to_clock]
[-rise]
[-fall]
[-setup]
[-hold]
uncertainty
数据类型:
object_list                           列表
from_clock                         列表
rise_from_clock                               列表
fall_from_clock                 列表
to_clock                               列表
rise_to_clock                     列表
fall_to_clock                      列表
uncertainty                         列表
参数:
object_list
指定一个时钟,端口或接脚列表,用于不确定因素设定。不确定应用于截取被object_list列表中的时钟启动的锁存器,或者截取时钟接脚在object_list的端口扇出或接脚列表中的锁存器。你必须使用-from –to对或object_list。你不能同时设定它们。
-from from_clock
本选项指定源时钟用于内部时钟不确定。你必须使用-from/-rise_from/-fall_from 和-to/-rise_to/-fall_to对,或object_list。你不能两者都设定。
-rise_from rise_from_clock
与-from 相同,但指定的uncertainty仅应用于源时钟上升沿。你可以仅使用-from,-rise_from或-fall_from选项中的一个。
-fall_from fall_from_clock
与-from相同,但指定的uncertainty仅作用于源时钟的下降沿。你可以仅使用-from,-rise_from或-fall_from选项中的一个。
-to to_clock
该选项指定作用于内部时钟不确定的终点时钟。你必须使用-from/-rise_from/-fall_from 和-to/-rise_to/-fall_to对,或object_list。你不能两者都设定。
-rise_to rise_to_clock
与-to相同,但指定的uncertainty仅应用于终点时钟上升沿。你可以仅使用-to,-rise_to或-fall_to选项中的一个。
-fall_to fall_to_clock
与-to相同,但指定的uncertainty仅应用于终点时钟下降沿。你可以仅使用-to,-rise_to或-fall_to选项中的一个。
-rise
指定uncertainty 仅作用于终点时钟上升沿。默认情况下,uncertainty作用于上升和下降沿。本选项仅对内部时钟uncertainty有效,并且目前已经被废弃。除非你需要该选项兼容旧版本,否则用-rise_to代替。
-fall
指定uncertainty 仅作用于终点时钟下降沿。默认情况下,uncertainty作用于上升和下降沿。本选项仅对内部时钟uncertainty有效,并且目前已经被废弃。除非你需要该选项兼容旧版本,否则用-fall_to代替。
-setup
指定uncertainty仅作用于建立时间(setup)检查。默认情况下,uncertainty作用于建立和保持两种情况的检查。
-hold
指定uncertainty仅作用于保持时间(hold)检查。默认情况下,uncertainty作用于建立和保持两种情况的检查。
uncertainty
使用浮点数设定uncertainty的值。通常,时钟的不确定应该为正。负的不确定值也支持,用于设计的复合时钟约束。负值的使用会导致分析过于乐观,建议在特殊情况下使用。
描述:
指定特定时钟网络中时钟的不确定(偏差特征)。该命令可以指定内部时钟不确定或简单不确定。对于内部时钟不确定,使用-from/-rise_from/-fall_from 和-to/-rise_to/-fall_to选项设定源或终点时钟。在这之间的所有路径接受设定的uncertainty值。对于简单不确定,使用object_list。uncertainty的值应用于截取被object_list列表中的时钟启动的锁存器,或者截取时钟接脚在object_list的端口扇出或接脚列表中的锁存器。
设定uncertainty会给终点或在时钟域之间一个最坏的偏差预期。你可以增加这个值占用建立或保持时间的富余时间。
当你指定内部时钟不确定,确保你的设定作用于时钟域相互之间的所有可能性。比如,你指定的路径从CLKA到CLKB和CLKB到CLKA,你必须两个都指定uncertainty值,即使指定的值是相同的。
内部时钟不确定比简单不确定更明确。如果内部时钟不确定设定命令与简单不确定设定命令冲突,内部时钟设定命令优先。
如果路上没有一个合适的内部时钟uncertainty,其值等于简单不确定的值。
删除set_clock_uncertainty设定的不确定设定,使用remove_clock_uncertainty命令。
查看时钟不确定信息,使用report_clock –skew命令
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
被时钟CLK驱动的到达寄存器的所有路径或端口,附加0.65建立时间不确定,和0.45保持时间不确定。
set_clock_uncertainty –setup 0.65 [get_clocks CLK]
set_clock_uncertainty –hold 0.45 [get_clocks CLK]
   
设定PHI1与PHI2 两个时钟域之间的内部时钟不确定
set_clock_uncertainty 0.4 –from PHI1 –to PHI1
set_clock_uncertainty 0.4 –from PHI2 –to PHI2
set_clock_uncertainty 1.1 –from PHI1 –to PHI1
set_clock_uncertainty 1.1 –from PHI2 –to PHI1
   
设定PHI1与PHI2 两个时钟域之间的内部时钟特定沿的不确定
set_clck_uncertainty 0.4 –rise_from PHI1 –to PHI2
set_clock_uncertainty 0.4 –fall_from PHI2 –rise_to PHI2
set_clock_uncertainty 1.1 –from PHI1 –fall_to PHI2
   
显示命令冲突时,内部时钟不确定设定命令优先,所以第二条件命令优先。
set_clock_uncertainty 5 [get_clocks CLKA]
set_clock_uncertainty 2 –from [get_clocks CLKB] –to [get_clocks CLKA]
   
设定从CLKA到CLKB 和从CLKB到CLKA 的不确定值。
set_clock_uncertainty 2 –from [get_clocks CLKA] –to [get_clocks CLKB]
set_clock_uncertainty 2 –from [get_clocks CLKB] –to [get_clocks CLKA]
   
命令冲突时内部时钟不确定设定优先,但如果有从CLKA到其他时钟的路径时,第一个命令将发生作用。
set_clock_uncertainty 5 [get_clocks CLKA]
set_clock_uncertainty 2 –from [get_clocks CLKB] –to [get_clocks CLKA]
   
更多:
current_design, remove_clock_uncertainty, report_clock, set_clock_latency, set_clock_transition
set_input_delay
设定与时钟相关接脚或输入端口的输入延迟
语法:
status set_input_delay
delay_value
[-reference_pin pin_port_name]
[-clock clock_name]
[-clock_fall]
[-level_sensitive]
[-network_latency_included]
[-rise]
[-fall]
[-max]
[-min]
[-add_delay]
port_pin_list
数据类型:
delay_value       浮点
clock_name        字符
port_pint_list    列表
参数:
delay_value
指定路径延迟。delay_value必须与技术库优化时采用的单位一致。delay_value代表时钟沿后有效信号的时间数量。它代表组合路径从一个寄存器时钟接脚的延迟。
-reference_pin pin_port_name
指定与指定延迟相关的时钟接脚或端口。如果你使用该选项,并且如果传播时钟也已经设定,与特定参照接脚的到达时间相关的延迟值等于时钟源滞后加上它从时钟源到达参照接脚的网络滞后。选项-network_latency_include 和 –source_latency_included 不能与-reference_pin选项同时使用。对于理想时钟网络,仅使用源滞后。
接脚使用-reference_pin选项设定,应该是一个分支接脚或一个时钟网络上的端口,并且在-clock选项指定的时钟源,直接或间接地传递扇出。如果多个时钟到达有输入延迟设定的端口或接脚时,并且 –clock选项没有使用,命令视为对所有的时钟有效。
-clock clock_name
指定与指定延迟相关的时钟。如果-clock_fall被使用,-clock clock_name必须指定。如果-clock没有指定,组合设计的延迟参照时间零。对于连续设计,延迟考虑参考其周期由在每个端口传递扇出的序列单元决定的新时钟。
clock_name可以是字符也可以是一个对象的集合。
-clock_fall
指定延迟参照时钟的下降沿。默认为上升沿。
-level_sensitive
指定延迟源是一个级敏感锁存。当端口是一个级敏感锁存时,这个选项允许工具从端口得到建立和保持关系。如果-level_sensitive没有使用,输入延迟被看作从触发器的路径来的。
-network_latency_included
指定时钟网络滞后不被加到输入延迟值中。如果该选项没有指定,与时钟相关的时钟网络滞后会被加入到输入延迟值中。如果时钟是传播的或者输入延迟没有指定相关时钟,它就是无效的。
-source_latency_included
指定时钟源滞后不被加入到输入延迟中。如果该选项没有指定,相关时钟的时钟源滞后将会被加入到输入延迟中。如果输入延迟没有指定相关时钟,它就是无效的。
-rise
指定delay_value,它指的是在当前设计中特定的端口上的一个上升转变。如果既没有设定-rsie也没有设定-fall,上升与下降延迟假设为相同。
-fall
指定delay_value,它指的是在当前设计中特定的端口上的一个下降转变。如果既没有设定-rsie也没有设定-fall,上升与下降延迟假设为相同。
-max
指定一个最长的路径上的delay_value。如果既没有设定-max也没有设定-min,最长最短输入延迟假设为相同。
-min
指定一个最短的路径上的delay_value。如果既没有设定-max也没有设定-min,最长最短输入延迟假设为相同。
-add_delay
指定是否增加延迟信息给已存在的输入延迟或将其取代。-add_delay选项能够让你截取通向与不同时钟或时钟边沿相关的输入端口的多路径信息。
比如,如果没有指定-add_delay ,以下命令删除所有其他从A开始的最大上升延迟。其他有不同时钟或带-clock_fall选项输入延迟会被删除。
set_inptut_delay 5.0 –max –rise –clock phi1 {A}
在以下例子中,-add_delay被设定。如果有一个输入最大上升延迟给A 与时钟phi1上升沿相关,大的值被使用。小的值不能影响最大延迟分析的关键时序。对于最小延迟分析,小的迟被使用。这里没有与不同时钟或同一时钟不同沿相关的最大上升输入延迟,它与新的延迟一起被保留。
set_input_delay 5.0 –max –rise –clock phi1 –add_delay {A}
port_pin_list
在当前设计中,指定一个输入端口或内部接脚名称的列表用于delay_value分配。如果不至一个对象被指定,对象要用双引号或花括号括住。如果输入延迟指定在接脚,接脚单元被设定为只能变化尺寸,为compile应用尺寸变化提供空间。
描述:
set_input_delay命令为当前设计设定输入路径延迟。跟set_load和set_driving_cell一起使用,输入输出延迟描述了当前设计控制环境的特征。
一个路径开始于主输入或序列单元时钟,并且结束于一个序列单元或主输出。delay_value是起始点和与时钟沿相关,并且设定有set_input_delay对象之间的延迟。
set_input_delay命令设定与一个时钟沿相关的输入端口的输入路径延迟。输入端口被假定为零输入延迟,除非已有指定。对于输入/出双向端口,你可以指定路径延迟用于输入和输出两种模式。
要描述一个来自级敏感锁存的路径延迟,使用-level_sensitive选项。如果锁存是为正有效,设定输入延迟与上升时钟沿相关。如果是为负有效,则设定输入延迟与下降时钟沿相关。如果锁存时间被缩减,增加被缩减的时间给从决定输入延迟的锁存器开始的路径延迟。
characterize命令依据被引用单元的环境,自动设定输入和输出延迟,驱动和负载值。
计时器增加输入延迟给从主输入端开始的路径延迟,增加输出延迟给到主输出端结束的路径延迟。
列出内部接脚输入延迟,使用report_design命令。
使用remove_input_delay或reset_design去删除输入延迟设定。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
给组合逻辑设计的端口IN1和IN2设定输入延迟2.3。因为组合逻辑不需要时钟。
set_input_delay 2.3 {IN1 IN2}
   
设定1.2输入延迟给与CLK1上升沿相关的所有输入端口
set_input_delay 1.2 –clock [get_clocks CLK1] [all_inputs]
   
设定输入和输出延迟给双向端口INOUT1。输入信号在CLK1下降沿之后2.5单位时间到达INOUT1。输出信号要求在CLK2上升沿之前1.4单元到达INOUT1。
set_input_delay 2.5 –clock CLK1 –clock_fall {INOUT1}
set_output_delay 1.4 –clock CLK2 {INOUT1}
   
下面的例子有三个路径到达IN1输入端口。其中一个与CLK1上升沿有关。另一个与CLK1下降沿有关。第三个路径与CLK2下降沿有关。-add_delay选项用来指示新的输入延迟信息不会导致旧的信息被覆盖。
set_input_delay 2.2 –max –clock CLK1 –add_delay {IN1}
set_input_delay 1.7 –max –clock CLK1 –clock_fall –add_delay {IN1}
set_input_delay 4.3 –max –clock CLK2 –clock_fall –add_delay
   
用-add_delay设定两个不同的最大延迟和两个最小延迟给端口A。因为信息与相同的时钟和时钟沿相关,仅最大最小值有效,比如5.0或1.1有效。如果-add_delay没有使用,新的信息将覆盖原有的信息。
set_input_delay 3.4 –max –clock CLK1 –add_delay {A}
set_input_delay 5.0 –max –clock CLK1 –add_delay {A}
set_input_delay 1.1 –min –clock CLK1 –add_delay {A}
set_input_delay 1.3 –min –clock CLK1 –add_delay {A}
   
更多:
all_inputs, characterize, create_clock, current_design, remove_input_delay, report_design, reset_design, set_driving_cell, set_load, set_output_delay
set_output_delay
设定接脚或输出端口与时钟信号相关的输出延迟
语法:
int set_output_delay
delay_value
[-reference_pin pin_port_name]
[-clock clock_name [-clock_fall] [-level_sensitive]]
[-network_latency_included]
[-rise]
[-fall]
[-max]
[-min]
[-add_delay]
[-group_path group_name]
port_pin_list
数据类型:
delay_value                       浮点
clock_name                        字符或集合
group_name                      字符
port_pin_list                      列表
参数:
delay_value
指定路径延迟。delay_value必须与技术库优化时采用的单位一致。delay_value代表时钟沿前有效信号的时间数量。对于最大输出延迟,它代表组合路径从一个寄存器时钟接脚的延迟加寄存器上库建立时间。对于最小输出延迟,这个值通常是寄存器最短路径延迟减去库保持时间。
-reference_pin pin_port_name
指定与指定延迟相关的时钟接脚或端口。如果你使用该选项,并且如果传播时钟也已经设定,与特定参照接脚到达时间相关的延迟值等于时钟源滞后加上它的从时钟源到达参照接脚的网络滞后。选项-network_latency_include 和 –source_latency_included 不能与-reference_pin选项同时使用。对于理想时钟网络,仅使用源滞后。
接脚使用-reference_pin选项设定,应该是一个分支接脚或一个时钟网络上的端口,并且在-clock选项指定的时钟源,直接或间接地传递扇出。如果多个时钟到达设定有输入延迟的端口或接脚,并且 –clock选项没有使用,命令视为对所有的时钟有效。
-clock clock_name
指定与指定延迟相关的时钟。如果-clock_fall被使用,-clock clock_name必须指定。如果-clock没有指定,组合设计的延迟参考时间零。对于连续设计,延迟考虑参考周期由在每个端口传递扇出的序列单元决定的新时钟。
clock_name可以是字符也可以是一个对象的集合。
-clock_fall
指定延迟参照时钟的下降沿。默认为上升沿
-level_sensitive
指定延迟源是一个级敏感锁存。当端口是一个级敏感锁存时,这个选项允许工具从端口得到建立和保持关系。如果-level_sensitive没有使用,输入延迟被看作是从触发器的路径来的。
-network_latency_included
指定时钟网络滞后不被加到输入延迟值中。如果该选项没有指定,与时钟相关的时钟网络滞后会被加入到输入延迟值中。如果时钟是传播的或者输入延迟没有指定相关时钟,它就是无效的。
-source_latency_included
指定时钟源滞后不被加入到输入延迟中。如果该选项没有指定,相关时钟的时钟源滞后将会被加入到输入延迟中。如果输入延迟没有指定相关时钟,它就是无效的。
-rise
指定delay_value,它指的是在当前设计中特定的端口上的一个上升转变。如果既没有设定-rsie也没有设定-fall,上升与下降延迟假设为相同。
-fall
指定delay_value,它指的是在当前设计中特定的端口上的一个下降转变。如果既没有设定-rsie也没有设定-fall,上升与下降延迟假设为相同。
-max
指定一个最长的路径上的delay_value。如果既没有设定-max也没有设定-min,最长最短输入延迟假设为相同。
-min
指定一个最短的路径上的delay_value。如果既没有设定-max也没有设定-min,最长最短输入延迟假设为相同。
-add_delay
指定是否增加延迟信息给已存在的输出延迟或将其取代。-add_delay选项能够让你截取通向与不同时钟或时钟边沿相关的输出端口的多路径信息。
比如,如果没有指定-add_delay ,以下命令删除所有其他从OUT1开始的最大上升延迟。其他有不同时钟或带-clock_fall选项输出延迟会被删除。
set_outptut_delay 5.0 –max –rise –clock phi1 {OUT1}
在以下例子中,-add_delay被设定。如果有一个输出最大上升延迟给Z 与时钟phi1上升沿相关,大的值被使用。小的值不能影响最大延迟分析的关键时序。对于最小延迟分析,小的迟被使用。这里没有与不同时钟或同一时钟不同沿相关的最大上升输出延迟,它与新的延迟一起保留。
set_output_delay 5.0 –max –rise –clock phi1 –add_delay {Z}
-group_path group_name
指定在特定的端口或接脚结束的路径,将其加到名称组中。如果组不存在,会被创建。这里有一个额外的方法来设定名称组。
group_path –name group_name –to port_pin_list
                如果 –group_path没有指定,已有路径组不会被改变。
port_pin_list
在当前设计中,指定一个输出端口或内部接脚名称的列表用于delay_value分配。如果不至一个对象被指定,对象要用双引号或花括号括住。如果输出延迟指定在接脚,接脚单元被设定为只能变化尺寸,为compile应用尺寸变化提供空间。
描述:
set_output_delay命令为当前设计设定输出路径延迟。跟set_load和set_driving_cell一起使用,输入输出延迟描述了当前设计的控制环境的特征。
set_output_delay命令设定与一个时钟沿相关的输出端口的输出路径延迟。输出端口被假定为零输入延迟,除非已有指定。对于输入/出双向端口,你可以指定路径延迟用于输入和输出两种模式。
要描述一个来自级敏感锁存的路径延迟,使用-level_sensitive选项。如果锁存是为正有效,设定输出延迟与上升时钟沿相关。如果是为负有效,则设定输出延迟与下降时钟沿相关。如果锁存时间被缩减,增加被缩减的时间给从决定输出延迟的锁存器开始的路径延迟。
characterize命令依据被引用单元的环境,自动设定输入和输出延迟,驱动和负载值。
工具增加输入延迟路径给从主输入端开始的路径延迟,增加输出延迟给到主输出端结束的路径延迟。
-group_path 选项改变路径分组。路径分组影响到最大延迟的估算功能。每组中最差一个被加入到估算中。对于优化,一些路径的单独重组改善他们的延迟估算,但也增加了设计的面积和编译时间。
使用report_port列出与端口相关的输出延迟。列出内部接脚的输出延迟,使用report_design。使用report_path_group列出定义过的路径组。
使用remove_output_delay或reset_design去删除输出延迟设定。修改路径分组使用-group_path选项。使用group_path命令增加路径到另一组或默认组。
多条件多模式支持:
该命令仅使用当前方案中的信息。
范例:
设定与CLK1上升沿相关的输出延迟1.7给所有输出端口
set_output_delay 1.7 –clock [get_clocks CLK1] [all_ouputs]
   
输入信号在CLK1下降沿后2.5时间单位到达INOUT1。输出信号在CLK2上升沿之前1.4到达INOUT1
set_input_delay 2.5 –clock CLK1 –clock_fall {INOUT1}
set_output_delay 1.4 –clock CLK2 {INOUT1}
   
第一个路径与CLK1上升沿有关。第二个路径与CLK1下降沿有关。第三个路径与CLK2下降沿有关。-add_delay选项用来指示新的输出信息不会导致旧的信息被覆盖。
set_output_delay 2.2 –max –clock CLK1 –add_delay {OUT1}
set_output_delay 1.7 –max –clock CLK1 –clock_fall –add_delay {OUT1}
set_output_delay 4.3 –max –clock CLK2 –clock_fall –add_delay {OUT1}
   
下面的例子指定两个最大延迟与两个最小延迟给Z端,并且使用-add_delay选项。因为信息与同一时钟和同一时钟边沿相关,仅最大{5.0}和最小{1.1}的值会被使用。如果-add_delay没有使用,新的信息会覆盖旧的信息。
set_output_delay 3.4 –max –clock CLK1 –add_delay {Z}
set_output_delay 5.0 –max –clock CLK1 –add_delay {Z}
set_output_delay 1.1 –min –clock CLK1 –add_delay {Z}
set_output_delay 1.3 –min –clock CLK1 –add_delay {Z}
   
使用-group_path选项增加端口给名称组。没有这个选项,到这些端口的路径被会加入到CLK分组。
set_output_delay 4.5 –max –clock CLK –group_path busA {busA[*]}
更多:
all_outputs, characterize, create_clock, current_design, group_path, remove_output_delay, report_design, report_path_group, report_port, reset_design, set_driving_cell, set_load, set_output_delay
set_max_area
将max_area属性加到当前设计中
语法:
int set_max_are
[-ignore_tns]
area_value
数据类型:
area_value   浮点
参数:
-ignore_tns
指定面积优先与所有不满足规则的项(TNS : Total Negative Slack )
area_value
指定要赋给max_area属性的值。单位必须与技术库在优化时用的单位保持一致。
描述:
该命令设定max_area属性给当前设计中的area。max_area属性代表设计目标面积,并且compile命令以此计算面积的花费。
默认情况下,compile优先于面积处理与规则冲突的对象。意思是说compile不会为改善面积而产生新的规则冲突或恶化不满足规则路径的时序。
当-ignore_tns选项被使用时,ignore_tns属性加入到设计中。如果该属性被设定,compile优先与TNS处理面积约束。意思是说,compile为了达到面积约束而使得时序变差。
如果多次指定max_area,旧的会被新的取代。
如果set_max_area没有使用-ignore_tns选项,那么 ignore_tns属性会被删除。
取消set_max_area,可以使用remove_attribute或reset_design命令。
使用report_area命令可以得到设计面积详细描述。使用report_constraint可以显示面积的花费。
多条件多模式支持:
该命令不依靠方案的信息
范例:
设定目标面积为零。compile会尽可能的让面积优化到最小。
set_max_area 0.0
更多:
compile, current_design, remove_attribute, report_area, report_constraint, reset_design
set_clock_groups
指定设计中,时钟组互相排斥或彼此异步。因此,这些时钟之间的路径不会在时序分析时被考虑。
语法:
Boolean set_clock_groups
-physically_exclusive
|-logically_exclusive
|-asynchronous
[-allow_paths]
[-name name]
-group clock_list
参数:
-physicall_exclusive
指定时钟组在物理上彼此排斥。物理排斥时钟不能同时存在在实际物理设计中。比如多个时钟定义在同一个源接脚。-physical_exclusive, -logically_exclusive和-asynchronous选项是相互排斥的,你只能选择其中一个。
-logicall_exclusive
两个时钟排斥类型,一个是物理排斥,另一个是逻辑排斥。逻辑排斥的例子比如MUX多路选择。但如果存在物理路径,就不推荐对多路选择时钟进行排斥设定。-physically_exclusive, -logically_exclusive和-asynchronous 选项是互相排斥的,你只能选择其中一个。
-asynchronous
指定时钟组是彼此异步的。两个时钟是异步的如果它们彼此之间没有相位关系。信号完整性分析使用一个无限到达窗口给干扰源,除非所有到达窗口的受噪声干扰的连线和干扰源的连线由同步时钟控制。-physically_exclusive, -logically_exclusive和-asynchronous 选项是互相排斥的,你只能选择其中一个。
-allow_paths
允许在指定的时钟组之间进行时序分析。如果这一选项没有被使用,在时钟之间的时序分析会被禁止。该选项仅可以用于异步时钟组。
-name name
指定被创建时钟组的名称。每个命令只能指定一个唯一的名称,这些名称指明指定时钟组的排斥或异步关系,并且这个名称之后也便于对时钟组定义的删除。默认情况下,命令创建一个唯一的名称。
-group clock_list
指定一个时钟列表。
你可以多次使用-group选项在一条执行命令中。每个-group循环设定一组时钟,与其他所有时钟组是排斥或异步关系。如果仅有一个组被指定,这意味着该组与其他所有时钟是排斥或异步的。包含其他时钟的另一个组也同时会产生。无论何时一个新的时钟被创建,它会自动地加入到这个组。
给clock_list替换上你希望的列表。
描述:
指定设计中的时钟组彼此排斥或异步。这些时钟之间的时序路径在时序分析时不会被考虑,除非使用-allow_paths选项。一条set_clock_groups执行命令不能对同一时钟定义多次,但可以多次使用该命令把它加入到多个分组中。
两个不同类型的互斥时钟在简单时序分析时不会视为不同。然而,信号完整性分析会在时序窗口视逻辑排斥时钟为异步 。物理排斥时钟不会被时序窗口分析所考虑。
这些排斥或异步时钟之间的路径不会在时序分析时被搜索,除非使用-allow_path设定。这类似于在时间之间设定禁止路径(false path)。因此你无需人为的再次设定禁止路径。如果一个在两个排斥或异步时钟之间禁止路径已经设定,那么set_clock_groups产生的禁止路径会将其覆盖。其他不会受影响。
当时钟彼此异步,在时序窗口重叠分析时,串扰分析忽略之间的时序关系。这一情形也可称为无限窗口重叠。对于同步时钟没有无限窗口重叠,结果会变得乐观。所以当时钟不彼此同步时,使用set_clock_groups –asynchronous是十分重要的。
当一些排斥或异步时钟组被定义时,一个生成时钟和它的主时钟默认不在同一分组中。如果有必要,你必须明确地将他们让在一起。
如果多个时钟组关系为相同成对时钟而定义,物理排斥有最高优先级,其次是异步和逻辑排斥。
取消set_clock_groups设定,使用remove_clock_groups命令。报告设计中的时钟分组,使用report_clock命令加-groups选项。
多条件多模式支持:
该命令从当前方案中读取信息
范例:
定义两个异步时钟域
set_clock_groups –asynchronous –name g1 –group CLK1 –group CLK2
   
定义一个名为CLK1的时钟作为与其他时钟异步的时钟
set_clock_groups –asynchronous –group CLK1
   
显示同时分析多个时钟每个寄存器而无需手工设定禁止路径。假设有两对相互排斥的时钟被复用:
CLK1和CLK2, CLK3和CLK4
每对时钟被不同的信号选择,你必须执行两次来同时分析四个时钟:
set_clock_groups –logically_exclusive –group CLK1 –group CLK2
set_clock_groups –logically _excluseive –group CLK3 –group CLK4
   
如果每对由相同信号选择,则只要一条命令:
set_clock_groups –logically_exclusive –group {CLK1 CLK3} –group {CLK2 CLK4}
   
定义 CLK1和CLK2作为物理排斥。
set_clock_groups –physically_exclusive –group {CLK1} –group {CLK2}
更多:
remove_clock_groups, report_clock, set_false_path, create_clock, create_generated_clock
set_false_path
删除特殊路径时序约束
语法:
int set_false_path
[-rise | -fall] [-setup | -hold]
[-from from_list
| -rise_from rise_from_list
|fall_from fall_from_list]
[-through through_list]
[-rise_through rise_through_list]
[-fall_through fall_through_list]
[-to to_list
| -rise_to rise_to_list
| -fall_to fall_to_list]
[-reset_path]
数据类型:
from_list                              列表
rise_from_list                    列表
fall_from_list                     列表
through_list                       列表
rise_through_list             列表
fall_through_list               列表
to_list                                   列表
rise_to_list                         列表
fall_to_list                           列表
参数:
-rise
标识上升延迟禁止,以路径的终点作为衡量依据。如果你没有指定-rise或-fall,上升或下降时序都标识为禁止。
-fall
标识下降延迟禁止,以路径的终点作为衡量依据。如果你没有指定-rise或-fall,上升或下降时序都标识为禁止。
-setup
标识建立(最大)路径为禁止。-setup取消指定路径的建立检查。如果你没有指定-setup或-hold,建立和保持都标识为禁止。
-hold
标识保持(最小)路径为禁止。-hold取消指定路径的保持检查。如果你没有指定-setup或-hold,建立和保持都标识为禁止。
-from from_lis
指定禁止路径的起点(时钟、端口、接脚或单元)。如果你没有指定一个from_list,所有终点在to_list的路径都被设为禁止。from_list可以包含时钟、接脚或端口。如果你指定一个时钟,所有起点与指定时钟相关的路径都会有影响。如果你指定一个内部接脚,接脚必须是一个路径的起点(比如一个触发器的时钟接脚)。如果一个单元被指定,起点在单元上的路径也会被影响到。
-rise_from rise_from_list
与-from选项相同,除了通过路径上指定的对象时,必须是上升状态。如果一个时钟对象被指定,这个选项选择由相同时钟驱动的起点,但仅在时钟源由时钟上升沿启动的路径考虑沿时钟路径的任意逻辑反转。你仅能使用-from,-rise_from和-fall_from中的一个选项。
-fall_from fall_from_list
与-from选项相同,除了通过路径上指定的对象时,必须是下降状态。如果一个时钟对象被指定,这个选项选择由相同时钟驱动的起点,但仅在时钟源由时钟下降沿启动的路径考虑沿时钟路径的任意逻辑反转。你仅能使用-from,-rise_from和-fall_from中的一个选项。
-through through_list
当前设计路径通过点(端口、接脚或子单元名称)的列表。禁止路径仅为通过路径的点在throught_list列表中。如果不止一个对象,你必须使用引号或花括号。如果你多次使用-through选项,禁止路径设定应用给那些路径通过在每个给定的按顺序排列的through_list列表中的一个成员。也就是说,路径必须首先通过第一个through_list中的一个成员,接着通过第二个列表的一个成员,像这样依次通过每个指定列表。如果你使用了-through选项组合-from或-to选项,禁止路径仅当-from或-to条件被满足,并且-through条件也被满足时有效。
-rise_through rise_through_list
与-through选项相同,但,仅作用于上升转变发生在指定对象的路径。你可以在一条命令中多次使用-rise_through选项,就你-through选项一样。
-fall_through fall_through_list
与-through选项相同,但,仅作用于下降转变发生在指定对象的路径。你可以在一条命令中多次使用-fall_through选项,就你-through选项一样。
-to to_list
指定禁止路径的结束点(时钟、端口、接脚或单元)。如果你没有指定一个列表,所有起点设定在from_list中的路径都被设定为禁止。to_list可以包含时钟、接脚或端口。如果你设定一个时钟,所有与时钟相关的终点都会被考虑。如果你设定一个内部接脚,接脚必须是一个路径的终点(比如一个触发器的数据接脚)。如果你指定一个单元,终点在单元上的路径会有影响。
-rise_to rise_to_list
与-to选项相同,但仅应用于终点为上升状态的路径。如果指定的是一个时钟对象,该选项选择由相同时钟驱动的终点,但只有被时钟源上升沿截取的路径,考虑沿时钟路径的任意逻辑反转。你仅能使用-to、-rise_to和-fall_to中的一个选项。
-fall_to fall_to_list
与-to选项相同,但仅应用于终点为下降状态的路径。如果指定的是一个时钟对象,该选项选择由相同时钟驱动的终点,但只有被时钟源下降沿截取的路径,考虑沿时钟路径的任意逻辑反转。你仅能使用-to、-rise_to和-fall_to中的一个选项。
-reset_path
删除已存在的点到点,除了指定路径上的信息。仅相同上升/下降或建立/保持的信息被复位。这与在set_false_path出现之前,使用reset_path 命令带类似参数的效果一样。
描述:
如你所知,删除特定路径的时序约束不影响电路控制。set_false_path可以禁止最大延迟(建立)检查和最小延迟(保持)检查。
set_false_path命令禁止从路径起点、途径点到终点的时序。路径起点是输入端口或寄存器时钟接脚。路径途径点可以是单元、接脚或端口。路径终点是寄存器的数据接脚或输出端口。
要禁止当前设计中一个特定单元的时序,使用set_disable_timing。这会从单元时序图上删除特定的时序弧。如此,路径上经过这些弧的路径就无法通过了。set_false_path命令仍然允许通过这些路径,只不过它们的时序约束被删除了。
set_false_path是一个点到点的时序排除命令。这就意味着对于一个或更多时序路径,它帮助重写了默认单周期时序关系。其他点到点时序排除命令包括set_max_delay、set_min_delay和set_multicycle_path。
如果一个路径满足多时序排除,以下规则协助决定哪个排除产生作用。与-from相关的规则与-rise_from和-fall_from有相同的应用,与-through和-to上升和下降选项类似。
1.       两个group_path命令可能彼此冲突。但一个group_path自身排除不会与另一个类型的排除相冲突。 所剩下的规则应用到两个group_path排除或两个非group_path排除。
2.       如果两个排除都是set_false_path。它们没有冲突。
3.       如果一个排除是set_max_delay,另一个是set_min_delay,它们没有冲突。
4.       如果一个排除是set_multicycle_path –hold,另一个是set_multicycle_path –setup,它们没有冲突。
5.       如果一个排除是set_false_path,其他的不是,那么,set_false_path优先。
6.       如果一个排除是set_max_delay,其他的不是,那么,set_max_delay优先。
7.       如果一个排除是set_min_delay,其他的不是,那么,set_min_delay优先。
8.       如果一个排除有-from pin或-from cell,其他的不是,那么,前者优先。
9.       如果一个排除有-to pin或-to cell,其他的不是,那么,前者优先。
10.   如果一个排除有-through points,其他的不是,那么,前者优先。
11.   如果一个排除有-from clock,其他的不是,那么,前者优先。
12.   如果一个排除有-to clock,其他的不是,那么,前者优先。
13.   排除附加限制性约束则优先。对于set_max_delay和set_multicycle_path –setup,有更低值的约束。对于set_min_delay和set_multicycle_path –load有更高值的约束。
取消set_false_path的影响,使用reset_path或reset_design。
使用report_timing_requirements列出设计中点到时点排除路径。
多条件多模式支持:
该命令仅使用当前方案的信息
范例:
删除从ff12到ff34的时序约束
set_false_path –from {ff12} –to {ff34}
   
删除通过u14/z到ff29/Reset,并且在终点为上升状态路径的时序约束
set_false_path –rise –through {u14/Z} –to {ff29/Reset}
   
取消终点由时钟PHI1驱动的保持检查(最小延迟时序)。触发器和锁存器由时钟PHI1驱动的都要考虑建立时间冲突,但不考虑保持时间冲突。
set_false_path –hold –to [get_clocks PHI1]
   
删除首次通过u1/Z或u2/Z,又通u5/Z或u6/Z所有路径的时序约束
set_false_path  -through {u1/Z u2/Z} –through {u5/Z u6/Z}
   
取消通过u14/Z到达ff29/Reset上升时序路径
set_false_path –rise_through {u14/Z} –to {ff29/Reset}
更多:
current_design, reset_design, reset_path, set_disable_timing, set_max_delay, set_min_delay, set_multicycle_path
set_case_analysis
指定一个端口或接脚是在一个常数逻辑值1或0。或者被认为有上升或下降转变。
语法:
string set_case_analysis
value
port_or_pin_list
数据类型:
port_or_pin_list               列表
参数:
value
指定常数逻辑值或转变,并赋值给接脚或端口。有效的常数值是 0或1,zero或one。有效的转变值是rising、falling、rise和fall。
port_or_pin_list
案例分析的端口或接脚。命令执行非反向常数传播。
描述:
指定一个端口或接脚在常数逻辑值1或0.
案例分析是一种方法,指定一个给定的模式,而无需改变网表结构。对于当前时序分析进程,你可以指定一些信号在常数值或仅某一种转变去做验证。但你指定案例分析为常数值时,常数值通过网络进行传播,只要通过逻辑的控制值是常数值。
比如,如果你指定一个NAND门的一个输入为常数0,它被传播到NAND的输出,现在就被认为是逻辑常数1。这个被传播的常数值,本身通过这个信号被传播到所有单元的驱动。
转变的案例分析事件中,给定的接脚或端口仅在时序分析时考虑指定的转变。其他转变为禁止。
所有分析命令使用案例分析信号,包含排除路径侦测算法使用report_timing命令带-true选项和-justify选项。
你可使用案例分析(除模式命令外)完整地指定设计的模式。比如,你使用set_mode命令指定一个设计有TESTMODE的实例化模型,在时序分析时被禁止。另外,如果一个TESTMODE信号存在在设计中,它可以被指定为常数逻辑值,如此所有测试逻辑由TESTMODE信号控制的都会被禁止。
多条件多模式支持:
该命令仅使用当前方案的信息
范例:
指定名为IN1的端口为常数,逻辑值为0
set_case_analysis 0 IN1
   
指定如何关闭引用单元的TESTMODE模式。并将TEST_PORT 端口设为常数,逻辑值为0.
remove_mode TESTMODE U1/U2
set_case_analysis 0 TEST_PORT
   
指定接脚U1/U2/A仅考虑上升转变。下降转变对于这些接脚无效。
set_case_analysis  rising U1/U2/A
更多:
remove_case_analysis, report_analysis, set_mode
set_max_delay
给当前设计路径指定都大延迟目标。
语法:
int set_max_delay
delay_value
[-rise | -fall]
[-from from_list
| -rise_from rise_from_list
| -fall_from fall_from_list]
[-through through_list]
[-rise_through rise_through_list]
[-fall_through fall_through_list]
[-to to_list
| -rise_to rise_to_list
| -fall_to fall_to_list]
[-group_path group_name]
[-reset_path]
数据类型:
delay_value                       浮点
from_list                              列表
rise_from_list                    列表
fall_from_list                     列表
through_list                       列表
rise_through_list             列表
fall_through_list               列表
to_list                                   列表
rise_to_list                         列表
fall_to_list                           列表
group_name                      字符
参数:
delay_value
指定路径开始到结尾的最大延迟的期望值。你必须使用与技术库在优化时一样的单位来表达delay_value。如果路径的起点是在一个序列器件,时钟偏差包含在计算的延迟中。如果路径起点有一个输入延迟的指定,延迟值会被加入到路径延迟中。如果路径的终点是在一个序列器件上,时钟偏差和库建立时间都被包含进计算延迟中。如果路径终点有一个输出延迟指定,延迟会被加入到路径延迟中。
-rise|-fall
指定终点是上升或下降延迟约束。如果你两者都不指定,则两者都会被约束。
-from from_list
指定当前设计路径起点(端口、接脚、时钟或单元)列表。如果你指定一个时钟,所有起点与时钟相关的路径都会有影响。如果你指定一个单元,起点在单元上的路径会受影响。所有路径从这些起点到在to_list中的终点都被约束到delay_value。如果你没有指定to_list,所有从from_list开始的路径都会受影响。这个列表不能包含输出端口。如果你的指定超过一个对象,你必须使用双引号或花括号括起来。
-rise_from rise_from_list
与-from选项相同,除了路径必须是从指定对象上升开始。如果一个时钟对象被指定,这个选项选择由被命名的时钟控制的起点,但仅选择由在时钟源上升沿启动的路径,考虑沿时钟路径的任意逻辑反转。你仅能使用-from、-rise_from或-fall_from中的一个选项。
-fall_from fall_from_list
与-from选项相同,除了路径必须是从指定对象下降开始。如果一个时钟对象被指定,这个选项选择由被命名的时钟控制的起点,但仅选择由在时钟源下降沿启动的路径,考虑沿时钟路径的任意逻辑反转。你仅能使用-from、-rise_from或-fall_from中的一个选项。
-through through_list
指定当前设计中路径途径点(端口、接脚或子单元)列表。最大延迟值仅应用于通过through_list中一点的路径。如果不止一个对象,必须使用双引号或花括号。如果你指定-through选项多次,最大延迟应用于依次通过through_list中一个成员的路径。也就是说,路径必须先通过第一个列表中的一个成员,接着通过第二个列表中的一个成员,以此类推。如果使用-through选项组合-from或-to选项,最大延迟仅应用于在-from或-to条件下,满足-through条件的路径。
-rise_through rise_through_list
与-through选项相同,但仅应用于上升转变在指定对象的路径。你可以指定-rise_through多次在一条命令中,调用与-through选项一样。
-fall_through fall_through_list
与-through选项相同,但仅应用于下降转变在指定对象的路径。你可以指定-fall_through多次在一条命令中,调用与-through选项一样。
-to to_list
指定一个当前设计中路径终点(端口、时钟、单元或接脚名称)的列表。所有终点在列表的路径都被约束到delay_value。如果你没有指定一个from_list,所有到to_list的路径都会受影响。这个列表不能包含输入端口。如果有不止一个对象,要使用双引号或花括号。如果你指定一个单元,一个终点在单元上的路径会被影响。如果你指定一个时钟,所有终点与时钟相关的路径都被影响。
-rise_to rise_to_list
与-to选项相同,但仅应用于上升在终点的路径。如果一个时钟对象被指定,该选项选择被命名时钟驱动的终点,但仅有在时钟源被时钟上升沿截取的路径,被考虑沿时钟路径的任意逻辑翻转。你仅可以使用-to、-rise_to和-fall_to中的一个选项。
-fall_to fall_to_list
与-to选项相同,但仅应用于下降在终点的路径。如果一个时钟对象被指定,该选项选择被命名时钟驱动的终点,但仅有在时钟源被时钟下降沿截取的路径,被考虑沿时钟路径的任意逻辑翻转。你仅可以使用-to、-rise_to和-fall_to中的一个选项。
-group_path group_name
指定路径组的名称。如果组不存在,会被创建。这等于分别使用group_path命令-name group_name –from from_list –to to_lsit 选项,指定set_max_delay命令除外。如果你不指定该选项,存在路径的组不会被改变。
-reset_path
删除现存点到点,指定路径上的信息除外。仅相同上升/下降 或 建立/保持 的信息被重设。这等同于在执行set_max_delay命令之前,使用reset_path命令附加类似的选项。
描述:
给当前设计中的路径指定期望的最大延迟。该命令指定from_list中任意起点到to_list中任意终点的最大路径长度必须小于delay_value。
单个的最大延迟目标被自动从时钟波形和端口输入或输出延迟中衍生出来。更多的信息可以查看create_clock、set_input_delay和set_output_delay信息。
设计优化的花费依靠那些被指定的路径组。更多的信息可以查看group_path命令。
set_max_delay命令是点到点时序排除命令。也就是,对于一个或更多的时序路径而言,它取代了默认单循环时序关系。其他点到点排除命令包括,set_multicycle_path、set_min_delay和set_false_path命令。
如果一个路径满足多个时序排除,以下规则决定哪一个排除有效。规则涉及-from应用等同于-rsie_from或-fall_from,并且与-through和-to的上升或下降类似。
1.       两个group_path命令彼此冲突。但一个group_path排除不会与它的另一个排除产生冲突。因此,剩下的规则应用于两个group_path排除或两个非group_path排除。
2.       如果两个排除都是set_false_path,没有冲突发生。
3.       如果一个排除是set_max_delay,并且另一个是set_min_delay,没有冲突发生。
4.       如果一个排除是set_multicycle_path –hold,并且另一个是set_multicycle_path –setup,没有冲突发生。
5.       如果一个排除是set_false_path,另一个不是,set_false_path优先。
6.       如果一个排除是set_max_delay,另一个不是,set_max_delay优先。
7.       如果一个排除是set_min_delay,另一个不是,set_min_delay优先。
8.       如果一个排除有-from pin或-from cell,另一个没有,前者优先。
9.       如果一个排除有-to pin或-to cell,另一个没有,前者优先。
10.   如果一个排除有-through points,另一个没有,前者优先。
11.   如果一个排除有-from clock,另一个没有,前者优先。
12.   如果一个排除有-to clock,另一个没有,前者优先。
13.   有更多限制约束的排除优先。对于set_max_delay和set_multicycle_path –setup,这个约束用更低的值。对于set_min_delay和set_multicycle_path –hold,它的约束用更高的值。
max_rise_delay属性的值不能小于相同路径min_rise_delay属性的值 (同样适用fall属性)。如果冲突发生,旧的属性会被删除。
注意,指定一个min_delay或max_delay给一个不是路径终点的接脚,会给单元带上一个隐含的dont_touch 属性。
-group_path选项修改路径分组。路径分组影响最大延迟花费函数。每组中最差违规者会被加入到花费中。对于优化,一些路径的单独分组可以改善他们的延迟消耗,但也可能增加设计面积和编译时间。
取消set_max_delay,使用reset_path。
修改分组使用-group_path选项,使用group_path命令摆放路径到另一个组或默认组。
多条件多模式支持:
该命令仅使用本方案中的信息
范例:
下面例子显示如何优化设计如此任何延迟路径到达名为Y的端口小于10个单位。
set_max_delay 10.0 –to {Y}
   
指定所有从ff1a或ff1b通过单元u1且结束于ff2e的路径必须小于15.0个单位。
set_max_delay 15.0 –from {ff1a ff1b}  -through {u1} –to {ff2e}
   
所有终点由时钟PHI2控制的路径必须小于8.5个单位。
set_max_delay 8.5 –to [get_clocks PHI2]
   
所有到达端口busA[*]的路径延迟小于5.0,并且包含在路径组busA中。
set_max_delay 5.0 –to “busA[*]” –group_path “busA”
   
一开始通过u1/Z或u2/Z接着通过 u5/Z或u6/Z的所有路径延迟小于3.0。
set_max_delay 3.0 –through {u1/Z u2/Z} –through {u5/Z u6/Z}
   
所有路径从ff1/CP到ff2/D,并且上升通过u1/Z或u2/Z,并且下降通过u3/Z或u4/C的延迟必须小于8.0个单位。
set_max_delay 8.0 –from {ff1/CP} –rise_through {U1/Z U2/Z} –fall_through {U3/Z U4/C} –to {ff2/D}
更多:
compile, create_clock, current_design, group_path, report_constriant, report_path_group, reset_design, reset_path, set_false_path, set_input_delay, set_min_delay, set_multicycle_path, set_output_delay