本附录将介绍1.7版本的SDC格式,此格式主要用于指定设计的时序约束。它不包含任何特定工具的命令,例如链接(link)和编译(compile)。它是一个文本文件,可以手写或由程序创建,并由程序读取。某些SDC命令仅适用于实现(implementation)或综合(synthesis),但是本附录会列出所有SDC命令。
SDC语法是基于TCL的格式,即所有命令都遵循TCL语法。一个SDC文件会在文件开头包含SDC版本号,其次是设计约束,注释(注释以字符#开始,并在行尾处结束)在SDC文件中可以散布在设计约束中。设计约束中较长的命令行可以使用反斜杠()字符分成多行。
以下是SDC中的基本命令:
● current_instance [instance_pathname]
上述命令设置了设计的当前实例,这允许其它命令从该实例中设置或获取属性(attribute)。如果未提供任何参数,则当前实例将成为顶层(top-level)。
例子:
● current_instance /core/U2/UPLL
● current_instance .. (向上一层)
● current_instance (设为顶层)
● expr arg1 arg2 ... argn
● list arg1 arg2 ... argn
● set variable_name value
● set_hierarchy_separator separator
上述命令指定了SDC文件中使用的默认层次结构分隔符。在允许的情况下,可以通过在各个SDC命令中使用-hsc选项来覆盖此设置。
例子:
● set_hierarchy_separator /
● set_hierarchy_separator .
● set_units [-capacitance cap_unit] [-resistance res_units] [-time time_unit] [-voltage voltage_unit] [-current current_unit] [-power power_unit]
上述命令指定了SDC文件中使用的单位。
例子:
● set_units -capacitance pf -time ps
以下命令指定了如何访问设计实例中的对象。
all_clocks命令会返回一个所有时钟的集合:
● foreach_in_collection clkvar [all_clocks]
● set_clock_transition 0.150 [all_clocks]
all_inputs [-level_sensitive] [-edge_triggered] [-clock clock_name] 命令会返回一个设计中所有输入端口的集合:
● set_input_delay -clock VCLK 0.6 -min [all_inputs]
all_outputs [-level_sensitive] [-edge_triggered] [-clock clock_name] 命令会返回一个设计中所有输出端口的集合:
● set_load 0.5 [all_outputs]
all_registers [-no_hierarchy] [-clock clock_name] [-rise_clock clock_name] [-fall_clock clock_name] [-cells] [-data_pins] [-clock_pins] [-slave_clock_pins] [-async_pins] [-output_pins] [-level_sensitive] [-edge_triggered] [-master_slave] 命令会返回一个具有指定属性的寄存器的集合:
● all_registers -clock DAC_CLK
上述这个命令返回的集合中为所有由时钟DAC_CLK触发的寄存器。
current_design [design name] 命令会返回当前设计的名称。如果使用参数指定,则将会设置当前设计为指定的名称:
● current_design FADD
● current_design
get_cells [-hierarchical] [-hsc separator] [-regexp] [-nocase] [-of_objects objects] patterns 命令会返回一个设计中与指定模型(pattern)匹配的单元的集合,通配符可用于匹配多个单元:
● get_cells RegEdge*
● foreach_in_collection cvar [get_cells -hierarchical *]
get_clocks [-regexp] [-nocase] patterns 命令会返回一个设计中与指定模型匹配的时钟的集合。当在-from或-to等上下文中使用时,它将返回一个由指定时钟驱动的所有触发器的集合:
● set_propagated_clock [get_clocks SYS_CLK]
● set_multicycle_path -to [get_clocks jtag*]
get_lib_cells [-hsc separator] [-regexp] [-nocase] patterns 命令会创建一个当前正在加载的库中并且与指定模型匹配的库单元的集合:
● get_lib_cells cmos131v/AOI3*
get_lib_pins [-hsc separator] [-regexp] [-nocase] patterns 命令会返回一个与指定模型匹配的库单元引脚的集合。
get_libs [-regexp] [-nocase] patterns 命令会返回一个设计中当前加载的库的集合。
get_nets [-hierarchical] [-hsc separator] [-regexp] [-nocase] [-of_objects objects] patterns 命令会返回一个与指定模型匹配的网络的集合:
● get_nets -hierarchical *
● get_nets FIFO_patt*
get_pins [-hierarchical] [-hsc separator] [-regexp] [-nocase] [-of_objects objects] patterns 命令会返回一个与指定模型匹配的引脚名称的集合:
● get_pins *
● get_pins U1/U2/U3/UAND/Z
get_ports [