DC综合脚本

本文详细描述了使用SynopsysDC工具进行环境设置、库路径定义、设计编译步骤,包括RTL文件分析、时序检查、约束设置和报告生成等关键过程。
摘要由CSDN通过智能技术生成

环境设置

默认脚本 .synopsys_dc.setup
设置环境变量

set SYN_ROOT_PATH 	/home/my_home/work/syn
set RTL_PATH       	$SYN_ROOT_PATH/src
set CONFIG_PATH		$SYN_ROOT_PATH/config
set OUTPUT_PATH 	$SYN_ROOT_PATH/mapped
set SCRIPT_PATH 	$SYN_ROOT_PATH/script
set REPORT_PATH 	$SYN_ROOT_PATH/report
set UNMAPPED_PATH 	$SYN_ROOT_PATH/unmapped

#define work directory
set WORK_PATH 	$SYN_ROOT_PATH/work
set DC_PATH 	$DC_HOME
define_design_lib work -path $WORK_PATH

set BC_LIB_PATH 	std_best_corner/1.8v
set WC_LIB_PATH  	std_worst_corner/1.62v
set IP_BC_LIB_PATH  ip_best/1.8v
set IP_WC_LIB_PATH 	ip_worst/1.62v
set_app_var search_path [list . $search_path 	\
								$BC_LIB_PATH	\
								$WC_LIB_PATH	\
								$IP_BC_LIB_PATH	\
								$IP_WC_LIB_PATH	\
								$RTL_PATH		\
								$SCRIPT_PATH	\
								${DC_PATH}/libraries/syn]

#DC is setup to use this library by default
set_app_var synthetic_library 	[list dw_foundation.sldb standard.sldb]
set_app_var target_library 		[list 	std_best_corner_ccs.db	\
										std_worst_corner_ccs.db	\
										ip_best.db	\
										ip_worst.db]
#Specify for cell resolution during link
set_app_var link_library	"* ${target_library} "
set_app_var symbol_library	[list * ${target_library"]

echo "*************************************************************"
echo "************ End of load .synopsys_dc.setup ************"
echo "*************************************************************"

dc脚本设置

## Prepare
#Intraassignment delays for nonblocking assignment are ignored。(VER-130)
suppress_message VER-130


## SVF
set TOP_DESIGN dig_top
#Generate SVF for LEC
set_svf  [format "%s%s%s"  $OUTPUT_PATH $TOP_DESIGN ".svf"]

## Step 1: Read elaborate the RTL file list & check
analyze -format verilog [list ./src/define.v]
elaborate 		$TOP_DESIGN	-architecture verilog
current_design	$TOP_DESIGN

if {[link] == 0} {
	echo "link with error !"
	exit;
}

if {[check_design] == 0} {
	echo "Check design with error !";
	exit;
}

## Step 2: Reset the design first
reset_design

## Step 3: Write the unmapped ddc file
uniquify
set uniquify_naming_style	"%s_%d"
write -f ddc -hier -output	${UNMAPPED_PATH}/${TOP_DESIGN}.ddc

## Step 4: Define clock
set	CLK_I_NAME			clk
set	CLK_I_PERIOD		10
set	CLK_I_SKEW			[expr ${CLK_PERIOD} * 0.05]
set	CLK_I_TRAN			[expr ${CLK_PERIOD} * 0.01]
set	CLK_I_SRC_LATENCY	[expr ${CLK_PERIOD} * 0.1 ]
set CLK_I_LATENCY		[expr ${CLK_PERIOD} * 0.1 ]

create_clock			-period	$CLK_I_PERIOD	[get_ports $CLK_I_NAME]
set_ideal_network								[get_ports $CLK_I_NAME]
set_dont_touch_network							[get_ports $CLK_I_NAME]
set_drive	0									[get_ports $CLK_I_NAME]
set_clock_uncertainty	-setup	$CLK_I_SKEW		[get_ports $CLK_I_NAME]
set_clock_transition	-max	$CLK_I_TRAN		[get_ports $CLK_I_NAME]
set_clock_latency	-source -max $CLK_I_SRC_LATENCY [get_ports $CLK_I_NAME]
set_clock_latency		-max	$CLK_I_LATENCY	[get_ports $CLK_I_NAME]

## Step 5: Define reset
set			RST_NAME	rst_n
set_ideal_network		[get_ports	$RST_NAME]
set_dont_touch_network	[get_ports	$RST_NAME]
set_drive	0			[get_ports	$RST_NAME]

## Step 6: Set input delay (Using timing budget)
## Assume a weak cell to drive the input pins
set	MAX_LIB_NAME	std_ff_ccs
set	MIN_LIB_NAME	std_ss_ccs
set	DRIVE_CELL		INV2
set	DRIVE_PIN		Y
set	LOAD_CELL		INV4
set	MAX_OP_CON		ff_v1p8_-40c
set	MIN_OP_CON		ss_1p62_125c
set	ALL_IN_EXC_CLK	[remove_from_collection [all_inputs] [get_ports "$CLK_NAME"]]
set	INPUT_DELAY		[expr	$CLK_PERIOD * 0.6]
set_input_delay		$INPUT_DELAY		-clock			$CLK_NAME	$ALL_IN_EXC_CLK
set_driving_cell	-lib_cell	${DIRVE_CELL}	-pin	$DRIVE_PIN 	$ALL_IN_EXC_CLK

## Step 7: Set output delay
set 	OUTPUT_DELAY	[expr	$CLK_PERIOD * 0.6]
set		MAX_LOAD		[expr	[load of	${MAX_LIB_NAME}/$LOAD_CELL/$LOAD_PIN] * 10 ]
set_output_delay		$OUTPUT_DELAY	-clock	$CLK_NAME	[all_outputs]
set_load				[expr	$MAX_LOAD * 3]				[all_outputs]
set_isolate_ports		-type buffer						[all_outputs]

## Step 8: Set max delay for comb logic
set_input_delay		[expr $CLK_PERIOD * 0.1]	-clock	$CLK_NAME	-add_delay	[get_ports	spi_i]
set_output_delay	[expr $CLK_PERIOD * 0.1]	-clock	$CLK_NAME	-add_delay	[get_ports	spi_o]

## Step 9:Set operating condition & wire load model
set_operating_conditions	-max			$MAX_OPERA_CONDITION	\
							-max_library	$MAX_LIB_NAME	\
							-min			$MIN_OPERA_CONDITION	\
							-min_library	$MIN_LIB_NAME	
set	auto_wire_load_selection	false
set_wire_load_mode	top
#set_wire_load_mode	-name	$WIRE_LOAD_MODEL	\
							-library	$MAX_LIB_NAME
## Step 10:Set area constraint (Let DC try its best)
set_max_area 0

## Step 11:Set DRC constraint
set	MAX_CAPACITANCE	[expr	[load of $LIB_NAME/NAND4X2/Y] * 5]
set_max_capacitance	$MAX_CAPACITANCE	$ALL_IN_EXC_CLK

## Step 12: Set DRC constraint
## for debug constraint and design critical path
group_path	-name	$CLK_NAME	-weight 5 \
			-critical_range	[expr $CLK_PERIOD * 0.1]
group_path	-name	INPUT	-from	[all_inputs]	\
			-critical_range	[expr $CLK_PERIOD * 0.1]
group_path	-name	OUTPUTS	-to		[all_outputs]
			-critical_range [expr $CLK_PERIOD * 0.1]
group_path	-name	COMBI	-from	[all_inputs]	\
			-to						[all_outputs]	\
			-critical_range	[expr $CLK_PERIOD * 0.1]
## Step 13: Elimate the multiple_port inter-connect & define name style
set_app_var	verilogout_show_unconnected_pins	true
set_app_var	bus_naming_style	{%s[%d]}
set_fix_multiple_port_nets	-all	-buffer_constants

## Step 14: Timing exception define
#set_false_path	-from	[get_clocks clk1_i]	-to [get_clocks clk2_i]
#set				ALL_CLOCKS	[all_clocks]
#foreach_in_collection CUR_CLK	$ALL_CLOCKS	{
#	set OTHER_CLKS	[remove_from_collection [all_clocks]	$CUR_CLK]
#	set_false_path	-from	$CUR_CLK	-to	$OTHER_CLKS
#}

#set_false_path -from [get_clocks $CLK1_NAME] -to [get_clocks $CLK2_NAME]
#set_disable_timing	TOP/U1	-from	YOUR_DEFINE_A	\
#							-to		YOUR_DEFINE_B
#set_case_analysis			0		[get_ports	sel_i]
#set_multicycle_path	-setup	6	-from	FFA/CP	-through ADD/out -to FFB/D
#set_multicycle_path	-hold 	5	-from	FFA/CP	-through ADD/out -to FFB/D
#set_multicycle_path	-setup	2	-to		[get_pins	YOUR_DEF2/D]
#set_multicycle_path	-hold	1	-to		[get_pins	YOUR_DEF2/D]

## Step 15: Compile	flow
#ungroup	-flatten	-all
####----- 1st-pass compile
#compile	-map_effort high -area_effort high
#compile	-map_effort high -area_effort high -boundary_optimization
compile 	-map_effort high -area_effort high -scan

#simplify_constants	-boundary_optimization
#compile 	-map_effort high -area_effort high -incremental_mapping -scan
####----- 2nd-pass compile
#compile_ultra	-incr

## Step 16: Write post_process files
change_names	-rules	verilog	-hier
#remove_unconnected_ports	[get_cells	-hier	*]	-blast_buses
####----- Write the mapped files
write -f ddc		-hier -output	$OUTPUT_PATH/$TOP_DESIGN.ddc
write -f verilog	-hier -output	$OUTPUT_PATH/$TOP_DESIGN.v
write_sdc			-version 1.7	$OUTPUT_PATH/$TOP_DESIGN.sdc
write_sdf			-version 2.1	$OUTPUT_PATH/$TOP_DESIGN.sdf

## Step 17: Generate report files
## Get report file
redirect	-tee	-file	$REPORT_PATH/check_design.rpt	{check_design}
redirect	-tee	-file	$REPORT_PATH/check_timing.rpt	{check_timing}
redirect	-tee	-file	$REPORT_PATH/rpt_constraint.rpt	{report_constraint -all_violators}
redirect	-tee	-file	$REPORT_PATH/check_setup.rpt	{report_timing -delay_type max}
redirect	-tee	-file	$REPORT_PATH/check_hold.rpt		{report_timing -delay_type min}
redirect	-tee	-file	$REPORT_PATH/rpt_area.rpt		{report_area	}
redirect	-tee	-file	$REPORT_PATH/rpt_path_group.rpt	{report_path_group}
redirect	-tee	-file	$REPORT_PATH/rpt_timing_req.rpt	{report_timing_requirements}

## Step 18: At the end
sh rm command.log
sh rm default.svf
exit




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值