附录A:SDC

Posted KuoGavin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了附录A:SDC相关的知识,希望对你有一定的参考价值。

文章目录


本附录将介绍1.7版本的 S D C ( S y n o p s y s   D e s i g n   C o n s t r a i n t s ) SDC(Synopsys\\ Design\\ Constraints) SDC(Synopsys Design Constraints)格式,此格式主要用于指定设计的时序约束。它不包含任何特定工具的命令,例如链接(link)和编译(compile)。它是一个文本文件,可以手写或由程序创建,并由程序读取。某些 S D C SDC SDC命令仅适用于实现(implementation)或综合(synthesis),但是本附录会列出所有 S D C SDC SDC命令。

S D C SDC SDC语法是基于 T C L TCL TCL的格式,即所有命令都遵循 T C L TCL TCL语法。一个 S D C SDC SDC文件会在文件开头包含 S D C SDC SDC版本号,其次是设计约束,注释(注释以字符开始,并在行尾处结束)在 S D C SDC SDC文件中可以散布在设计约束中。设计约束中较长的命令行可以使用反斜杠(\\)字符分成多行。



A.1 基本命令(Basic Commands)

以下是基本的 S D C SDC SDC命令:

=========================================================================
current_instance [instance_pathname]
# Sets the current instance of design. This allows other
# commands to set or get attributes from that instance.
# If no argument is supplied, then the current instance
# becomes the top-level.
Examples:
	current_instance /core/U2/UPLL
	current_instance .. # Go up one hierarchy.
	current_instance # Set to top.
=========================================================================	
expr arg1 arg2 . . . argn
=========================================================================
list arg1 arg2 . . . argn
=========================================================================
set variable_name value
=========================================================================
set_hierarchy_separator separator
# Specifies the default hierarchy separator used within
# the SDC file. This can be overridden by using the -hsc
# option in the individual SDC commands where allowed.
Examples:
	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]
# Specifies the units used in the SDC file.
Examples:
	set_units -capacitance pf -time ps
=========================================================================


A.2 对象访问命令(Object Access Commands)

以下命令指明了如何访问一个设计实例中的对象:

=========================================================================
all_clocks
# Returns a collection of all clocks.
Examples:
	foreach_in_collection clkvar [all_clocks] 
	. . .
	
	set_clock_transition 0.150 [all_clocks]
=========================================================================	
all_inputs [-level_sensitive] [-edge_triggered]
	[-clock clock_name]
# Returns a collection of all input ports in the design.
Example:
	set_input_delay -clock VCLK 0.6 -min [all_inputs]
=========================================================================
all_outputs [-level_sensitive] [-edge_triggered]
[-clock clock_name]
# Returns a collection of all output ports in the design.
Example:
	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]
# Returns the set of registers with the properties
# as specified, if any.
Examples:
	all_registers -clock DAC_CLK
	# Returns all registers clocked by clock DAC_CLK.
=========================================================================	
current_design [design_name]
# Returns the name of the current design. If specified with
# an argument, it sets the current design to the one
# specified.
Examples:
	current_design FADD # Sets the current context to FADD.
	current_design # Returns the current context.
=========================================================================	
get_cells [-hierarchical] [-hsc separator] [-regexp]
	[-nocase] [-of_objects objects] patterns
# Returns a collection of cells in the design that match the
# specified pattern. Wildcard can be used to match
# multiple cells.
Examples:
	get_cells RegEdge* # Returns all cells that
					   # match pattern.
	foreach_in_collection cvar [get_cells -hierarchical *] 
		. . .
	 # Returns all cells in design by searching
	  # recursively down the hierarchy.
=========================================================================	  
get_clocks [-regexp] [-nocase] patterns
# Returns a collection of clocks in the design that match
# the specified pattern. When used in context such as -from
# or -to, it returns a collection of all flip-flops driven
# by the specified clocks.
Examples:
	set_propagated_clock [get_clocks SYS_CLK]
	set_multicycle_path -to [get_clocks jtag*]
=========================================================================
get_lib_cells [-hsc separator] [-regexp] [-nocase] patterns
# Creates a collection of library cells that are currently
# loaded and those that match the specified pattern.
Example:
	get_lib_cells cmos13lv/AOI3*
=========================================================================	
get_lib_pins [-hsc separator] [-regexp] [-nocase] patterns
# Returns a collection of library cell pins that match the
# specified pattern.
=========================================================================
get_libs [-regexp] [-nocase] patterns
# Returns a collection of libraries that are currently
# loaded in the design.
=========================================================================
get_nets [-hierarchical] [-hsc separator] [-regexp]
[-nocase] [-of_objects objects] patterns
# Returns a collection of nets that match the specified
# pattern.
Examples:
	get_nets -hierarchical * # Returns list of all nets in
		# design by searching recursively down the hierarchy.
	get_nets FIFO_patt*
=========================================================================	
get_pins [-hierarchical] [-hsc separator] [-regexp]
	[-nocase] [-of_objects objects] patterns
# Returns a collection of pin names that match the
# specified pattern.
Examples:
	get_pins *
	get_pins U1/U2/U3/UAND/Z
=========================================================================
get_ports [-regexp] [-nocase] patterns
# Returns a collection of port names (inputs and outputs)
# of design that match the specified pattern.
Example:
	foreach_in_collection port_name [get_ports clk*] 
	# For all ports that start with “clk”.
	. . .
	
=========================================================================

可以在不“获取”对象的情况下引用诸如端口(port)之类的对象吗?当设计中只有一个具有该名称的对象时,实际上没有任何区别。但是,当多个对象具有相同的名称时,使用get_ *命令将变得更加重要,它可以避免在引用哪种类型对象方面所带来的任何可能的混淆。假设有一个名为 B I S T _ N 1 BIST\\_N1 BIST_N1的网络和一个名为 B I S T _ N 1 BIST\\_N1 BIST_N1的端口,考虑以下 S D C SDC SDC命令:

set_load 0.05 BIST_N1

问题是要引用哪个 B I S T _ N 1 BIST\\_N1 BIST_N1?网络还是端口?在大多数情况下,最好明确表明对象的类型,例如:

set_load 0.05 [get_nets BIST_N1]

现在再假设有一个时钟 M C L K MCLK MCLK和另一个也称为 M C L K MCLK MCLK的端口,考虑以下 S D C SDC SDC<

以上是关于附录A:SDC的主要内容,如果未能解决你的问题,请参考以下文章

SDC设计约束——其他SDC命令

SDC设计约束——其他SDC命令

SDC设计约束——其他SDC命令

附录A NumPy高级应用

Redhat7 搭建ISCSI target

现代中小企业IT基础平台建设 - 完整案例实战(09_附录A)