⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proc_explore.tcl

📁 synopsys icc 使用参考脚本
💻 TCL
字号:
###################################################################################################### ICC Design Planning RM## proc_explore.tcl: performs explore run with vitual flat placement, PNS/PNA, IPO, and proto route##                   the procedure "dp_explore" is used by icc_dp_scripts/explore.tcl## Version B-2008.09   ##################################################################################################### =============================================================================================# Variables that usually may not need to be changed during exploration# You can change the setting here and will affect all explore runs# =============================================================================================set vfp_num_cpus $ICC_NUM_CPUSset vfp_legalize 1# =============================================================================================# 		Procedure# =============================================================================================# This procedure is to have all arguments # Usage is like the following:# dp_explore run0 default off low  on  off off off 512 low off "" "" automatic 10 low 1 1 1 off on highproc dp_explore {run_num objective vfp_macros_on_edge vfp_auto_grouping vfp_hierarchy_gravity vfp_congestion_driven vfp_timing_driven vfp_set_ideal_network vfp_max_fanout vfp_effort vfp_incremental vfp_plan_groups vfp_voltage_areas vfp_macro_orientation vfp_sliver_size vfp_congestion_effort vfp_io_net_weight vfp_plangroup_net_weight vfp_va_net_weight vfp_va_net_weight_ls_only vfp_spread_spare_cells vfp_legalizer_effort ipo_ahfs ipo_ahfs_remove_effort ipo_effort ipo_fix_drc ipo_area_recovery} {       ##Declare all global variables as "global" to the explore procedure        set vars__proc_explore [uplevel 1 info globals]        foreach v__proc_explore $vars__proc_explore {           if {$v__proc_explore != "args" && ![info exists $v__proc_explore]} {              global $v__proc_explore              #echo "SCRIPT-debug: global $v__proc_explore"           }        }################################################################	Virtual Flat Placement (create_fp_placement)##############################################################	echo ""	echo "================================================================="	echo "              Now starting $run_num $objective"	echo "================================================================="	echo ""		echo "------------------- Running Vitual Flat Placement --------------------"	copy_mw_cel -from saved_cel_before_explore_mode -to ${run_num}_${objective} > ${REPORTS_DIR}/${run_num}_${objective}_place.log	open_mw_cel ${run_num}_${objective} >> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -macro_orientation			$vfp_macro_orientation	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -auto_grouping 			$vfp_auto_grouping	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	#set_fp_placement_strategy -array_macros_only 			$vfp_preplace_hm_only	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -macros_on_edge 			$vfp_macros_on_edge	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -sliver_size		 		$vfp_sliver_size	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -congestion_effort 			$vfp_congestion_effort	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -IO_net_weight	 		$vfp_io_net_weight	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -plan_group_interface_net_weight 	$vfp_plangroup_net_weight >> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -voltage_area_interface_net_weight 	$vfp_va_net_weight	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -voltage_area_net_weight_LS_only 	$vfp_va_net_weight_ls_only >> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -legalizer_effort			$vfp_legalizer_effort	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	set_fp_placement_strategy -spread_spare_cells		 	$vfp_spread_spare_cells	>> ${REPORTS_DIR}/${run_num}_${objective}_place.log	if { $vfp_set_ideal_network eq "on" } {	    set hf_nets [all_high_fanout -nets -threshold $vfp_max_fanout]	    if { $hf_nets != "" } {		redirect /dev/null {set_load 0 -subtract_pin_load $hf_nets}	    	redirect /dev/null {set_ideal_network -no_propagate $hf_nets}	    }	}	set create_fp_placement_cmd "create_fp_placement -effort $vfp_effort -num_cpus $vfp_num_cpus"	if { $vfp_hierarchy_gravity eq "off" } {	    lappend create_fp_placement_cmd -no_hierarchy_gravity	}	if { $vfp_legalize eq "off" } {	    lappend create_fp_placement_cmd -no_legalize	}	if { $vfp_congestion_driven eq "on" } {	    lappend create_fp_placement_cmd -congestion_driven	}	if { $vfp_timing_driven eq "on" } {	    lappend create_fp_placement_cmd -timing_driven	}	if { $vfp_incremental eq "plan_groups" } {	    lappend create_fp_placement_cmd -incremental $vfp_incremental -plan_groups $vfp_plan_groups	} elseif { $vfp_incremental eq "voltage_areas" } {	    lappend create_fp_placement_cmd -incremental $vfp_incremental -voltage_areas $vfp_voltage_areas	}	eval $create_fp_placement_cmd >> ${REPORTS_DIR}/${run_num}_${objective}_place.log	echo "create_fp_placement is done. Log file: ${REPORTS_DIR}/${run_num}_${objective}_place.log"	if {$ICC_DP_EXPLORE_SAVE_CEL_EACH_STEP eq "true"} {save_mw_cel -as ${run_num}_${objective}_place >> ${REPORTS_DIR}/${run_num}_${objective}_place.log}if { $ICC_DP_EXPLORE_STYLE ne "placement_only" } {	echo ""	if { $ICC_DP_EXPLORE_USE_GLOBAL_ROUTE eq "true" } {	    echo "------------------- Running Global Route --------------------"	    route_global -effort medium > ${REPORTS_DIR}/${run_num}_${objective}_groute_after_place.log 	    echo "route_global -effort medium is done. Log file: ${REPORTS_DIR}/${run_num}_${objective}_groute_after_place.log"} else {	    echo "------------------- Running Proto Route --------------------"            route_fp_proto -effort medium > ${REPORTS_DIR}/${run_num}_${objective}_groute_after_place.log 	    echo "route_fp_proto -effort medium is done. Log file: ${REPORTS_DIR}/${run_num}_${objective}_groute_after_place.log"}	if {$ICC_DP_EXPLORE_SAVE_CEL_AFTER_GROUTE eq "true"} {save_mw_cel -as ${run_num}_${objective}_groute_after_place >> ${REPORTS_DIR}/${run_num}_${objective}_groute_after_place.log}	if {$ICC_DP_EXPLORE_REPORTING_EACH_STEP eq "true" } {		    remove_route_by_type -signal_detail_route -clock_tie_off -pg_tie_off		    extract_rc -estimate		    create_qor_snapshot -name feasibility_dp_place -qor -timing -constraint	}}	if {[all_macro_cells] != ""} {		set_dont_touch_placement [all_macro_cells]	}################################################################	PNS/PNA (synthesize_fp_rail/analyze_fp_rail)##############################################################if { $ICC_DP_EXPLORE_STYLE eq "default" || $ICC_DP_EXPLORE_STYLE eq "no_ipo" } {	echo ""		echo "------------------- Running Power Network Synthesis --------------------"	set synthesize_fp_rail_cmd "synthesize_fp_rail -power_budget $PNS_POWER_BUDGET -voltage_supply $PNS_VOLTAGE_SUPPLY -output_directory $PNS_OUTPUT_DIR -nets \{$PNS_POWER_NETS\} -synthesize_power_plan"	if { $PNS_TARGET_VOLTAGE_DROP eq "lowest" } { 		lappend synthesize_fp_rail_cmd -lowest_voltage_drop	} elseif { $PNS_TARGET_VOLTAGE_DROP ne "" } { 		lappend synthesize_fp_rail_cmd -target_voltage_drop $PNS_TARGET_VOLTAGE_DROP	}	if { $PNS_VIRTUAL_RAIL_LAYER ne "" } { lappend synthesize_fp_rail_cmd -create_virtual_rails $PNS_VIRTUAL_RAIL_LAYER }	if { $PNS_BLOCK_MODE eq "true" } {	    	lappend synthesize_fp_rail_cmd -use_strap_ends_as_pads 		# can't use -use_pins_as_pads because tool can't determin if PG pins exist	} else {		if { $PNS_PAD_MASTERS ne "" } {	    	lappend synthesize_fp_rail_cmd -pad_masters $PNS_PAD_MASTERS		} elseif {[file exists [which $PNS_PAD_MASTER_FILE]]} {		lappend synthesize_fp_rail_cmd -read_pad_master_file $PNS_PAD_MASTER_FILE		} elseif {[file exists [which $PNS_PAD_INSTANCE_FILE]]} {		lappend synthesize_fp_rail_cmd -read_pad_instance_file $PNS_PAD_INSTANCE_FILE		} else {lappend synthesize_fp_rail_cmd -synthesize_power_pad}			}	eval $synthesize_fp_rail_cmd > $REPORTS_DIR/${run_num}_${objective}_pns.log	commit_fp_rail >> $REPORTS_DIR/${run_num}_${objective}_pns.log	echo "synthesize_fp_rail is done. Log file: $REPORTS_DIR/${run_num}_${objective}_pns.log"	if {$ICC_DP_EXPLORE_SAVE_CEL_EACH_STEP eq "true"} {save_mw_cel -as ${run_num}_${objective}_pns >> $REPORTS_DIR/${run_num}_${objective}_pns.log}		set analyze_fp_rail_cmd "analyze_fp_rail -power_budget $PNS_POWER_BUDGET -voltage_supply $PNS_VOLTAGE_SUPPLY -output_directory $PNS_OUTPUT_DIR -nets \{$PNS_POWER_NETS\}"	if { $PNS_VIRTUAL_RAIL_LAYER ne "" } { lappend analyze_fp_rail_cmd -create_virtual_rails $PNS_VIRTUAL_RAIL_LAYER }	if { $PNS_BLOCK_MODE eq "true" } {		# Assuming we use -use_pins_as_pads in PNS	    	create_fp_virtual_pad -load_file ${PNS_OUTPUT_DIR}/strap_end.${MW_POWER_NET}.vpad	    	create_fp_virtual_pad -load_file ${PNS_OUTPUT_DIR}/strap_end.${MW_GROUND_NET}.vpad	    	lappend analyze_fp_rail_cmd -use_pins_as_pads	} else {		if { $PNS_PAD_MASTERS ne "" } {	    	lappend analyze_fp_rail_cmd -pad_masters $PNS_PAD_MASTERS		} elseif {[file exists [which $PNS_PAD_MASTER_FILE]]} {		lappend analyze_fp_rail_cmd -read_pad_master_file $PNS_PAD_MASTER_FILE		} elseif {[file exists [which $PNS_PAD_INSTANCE_FILE]]} {		lappend analyze_fp_rail_cmd -read_pad_instance_file $PNS_PAD_INSTANCE_FILE		} else {	    		create_fp_virtual_pad -load_file ${PNS_OUTPUT_DIR}/strap_end.${MW_POWER_NET}.vpad	   		create_fp_virtual_pad -load_file ${PNS_OUTPUT_DIR}/strap_end.${MW_GROUND_NET}.vpad}			}	eval $analyze_fp_rail_cmd > $REPORTS_DIR/${run_num}_${objective}_pna.log	echo "analyze_fp_rail is done. Log file: $REPORTS_DIR/${run_num}_${objective}_pna.log"}###############################################	IPO (optimize_fp_timing)#############################################if { $ICC_DP_EXPLORE_STYLE eq "default" || $ICC_DP_EXPLORE_STYLE eq "no_pns_pna" } {	echo ""	echo "------------------- Running Optimization --------------------"        #source ./icc_scripts/common_optimization_settings_icc.tcl > $REPORTS_DIR/${run_num}_${objective}_ipo.log	if {$ICC_DP_EXPLORE_REPORTING_EACH_STEP eq "true"} {		extract_rc -estimate		report_timing -cap -tran -input -net -delay max > $REPORTS_DIR/${run_num}_${objective}_optimize_fp_timing_before.rpt	}	set compile_instance_name_prefix dp_ipo	if { $ipo_ahfs eq "on" } {	    set_ahfs_options -remove_effort $ipo_ahfs_remove_effort	    set_ahfs_options -hf_threshold $vfp_max_fanout	}	set optimize_fp_timing_cmd "optimize_fp_timing -effort $ipo_effort"	if { $ipo_fix_drc eq "on" } {	    lappend optimize_fp_timing_cmd -fix_design_rule	}	if { $ipo_area_recovery eq "on" } {	    lappend optimize_fp_timing_cmd -area_recovery	}	eval $optimize_fp_timing_cmd >> $REPORTS_DIR/${run_num}_${objective}_ipo.log	echo "optimize_fp_timing is done. Log file: $REPORTS_DIR/${run_num}_${objective}_ipo.log"	if {$ICC_DP_EXPLORE_SAVE_CEL_EACH_STEP eq "true"} {save_mw_cel -as ${run_num}_${objective}_optimize >> $REPORTS_DIR/${run_num}_${objective}_ipo.log}}#################################################		Final Report##############################################	echo ""	echo "------------------- Final Report --------------------"	echo ""	if { $ICC_DP_EXPLORE_USE_GLOBAL_ROUTE eq "true" } {	    route_global -effort medium > ${REPORTS_DIR}/${run_num}_${objective}_groute.log 	    echo "route_global -effort medium is done. Log file: ${REPORTS_DIR}/${run_num}_${objective}_groute.log"} else {            route_fp_proto -effort medium > ${REPORTS_DIR}/${run_num}_${objective}_groute.log 	    echo "route_fp_proto -effort medium is done. Log file: ${REPORTS_DIR}/${run_num}_${objective}_groute.log"}	if { $ICC_DP_EXPLORE_SAVE_CEL_AFTER_GROUTE eq "true" } {save_mw_cel -as ${run_num}_${objective}_groute >> ${REPORTS_DIR}/${run_num}_${objective}_groute.log}	source icc_dp_scripts/gui_save_snapshots.tcl	remove_route_by_type -signal_detail_route -clock_tie_off -pg_tie_off	extract_rc -estimate		create_qor_snapshot -name feasibility_dp -qor -timing -constraint	report_timing -cap -tran -input -net -delay max > ${REPORTS_DIR}/${run_num}_${objective}_final.rpt	report_qor_snapshot > ${REPORTS_DIR}/${run_num}_${objective}_final.qor#	if {[all_macro_cells] != ""} {#		set_dont_touch_placement [all_macro_cells]#	}	save_mw_cel -overwrite	write_floorplan -placement {io hard_macro soft_macro} ${RESULTS_DIR}/${run_num}_${objective}_dump.floorplan	write_floorplan -preroute ${RESULTS_DIR}/${run_num}_${objective}_dump.route	write_floorplan -all ${RESULTS_DIR}/${run_num}_${objective}_dump.complete_floorplan	write_io_constraints -cel [get_object_name  [current_mw_cel]] -constraint_type side_order \	                     ${RESULTS_DIR}/${run_num}_${objective}_dump.tdf -io_only	close_mw_cel ${run_num}_${objective}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -