mirror of https://github.com/efabless/caravel.git
update signoff scripts with:
- set the parasitics log file for each RC corner to be in the directory `./signoff/<design_name>/primetime-signoff/logs/` - flag if there is any error in reading a spef file - correct paths of `RAM256` and `RAM128` spef files - set PT message limit to 1500 instead of the default 100 - report SI bottleneck nets for any design
This commit is contained in:
parent
fd80ef4003
commit
a7e8d9d224
|
@ -14,6 +14,8 @@ if {\
|
|||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_tt_025C_1v80_3v30.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_tt_025C_1v80_3v30_3v30.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_tt_025C_1v80_3v30.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vddio_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssio_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib \
|
||||
"
|
||||
} elseif {$::env(PROC_CORNER) == "f"} {
|
||||
set link_path "* $::env(PT_LIB_ROOT)/scs130hd_ff_1.95v_-40C.lib \
|
||||
|
@ -27,10 +29,13 @@ if {\
|
|||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ff_n40C_1v95_5v50.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ff_n40C_1v95_5v50_5v50.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ff_n40C_1v95_5v50.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vddio_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssio_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib \
|
||||
"
|
||||
} elseif {$::env(PROC_CORNER) == "s"} {
|
||||
set link_path "* $::env(PT_LIB_ROOT)/scs130hd_ss_1.40v_100C.lib \
|
||||
$::env(PT_LIB_ROOT)/scs130hvl_ss_3.00v_100C.lib \
|
||||
$::env(PT_LIB_ROOT)/scs130hvl_ss_3.00v_lowhv_1.65v_lv_1.6v_150C.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_ss_ss_100C_1v60_3v00.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_ss_ss_100C_1v60_3v00.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \
|
||||
|
@ -39,6 +44,8 @@ if {\
|
|||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ss_100C_1v60_3v00.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ss_100C_1v60_3v00_3v00.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ss_100C_1v60_3v00.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vddio_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \
|
||||
$::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssio_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib \
|
||||
"
|
||||
}
|
||||
|
||||
|
@ -58,19 +65,19 @@ if {\
|
|||
read_sdc $::env(MCW_ROOT)/signoff/$::env(DESIGN)/$::env(DESIGN).sdc
|
||||
} else {
|
||||
read_sdc $::env(CARAVEL_ROOT)/signoff/$::env(DESIGN)/$::env(DESIGN).sdc
|
||||
}
|
||||
# -filter is supported by PT but not in the read_sdc
|
||||
# add max_tran constraint as the default max_tran of the ss hd SCL is 10 so the violations are not caught in ss corners
|
||||
# apply the constraint to hd cells at the ss corner on caravel/caravan
|
||||
if { $::env(DESIGN) == "caravel" | $::env(DESIGN) == "caravan" } {
|
||||
# apply the constraint to hd cells at the ss corner
|
||||
if { $::env(PROC_CORNER) == "s" } {
|
||||
set max_tran 1.5
|
||||
puts "\[INFO\]: Setting maximum transition of HD cells in slow process corner to: $max_tran"
|
||||
puts "For HD cells in the hierarchy of $::env(DESIGN)"
|
||||
set_max_transition $max_tran [get_pins -of_objects [get_cells -filter {ref_name=~sky130_fd_sc_hd*}]]
|
||||
set_max_transition $max_tran [get_pins -of_objects [get_cells */* -filter {ref_name=~sky130_fd_sc_hd*}]]
|
||||
set_max_transition $max_tran [get_pins -of_objects [get_cells */*/* -filter {ref_name=~sky130_fd_sc_hd*}]]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Reading parasitics based on the RC corner specified
|
||||
proc read_spefs {design rc_corner} {
|
||||
|
@ -78,13 +85,13 @@ if {\
|
|||
foreach key [array names spef_mapping] {
|
||||
read_parasitics -keep_capacitive_coupling -path $key $spef_mapping($key)
|
||||
}
|
||||
|
||||
# add -complete_with wlm to let PT complete incomplete RC networks at the top-level
|
||||
if {$design == "mgmt_core_wrapper" | $design == "RAM128" | $design == "RAM256"} {
|
||||
read_parasitics -keep_capacitive_coupling -verbose $::env(MCW_ROOT)/signoff/${design}/openlane-signoff/spef/${design}.${rc_corner}.spef -pin_cap_included
|
||||
read_parasitics -keep_capacitive_coupling -verbose $::env(MCW_ROOT)/signoff/${design}/openlane-signoff/spef/${design}.${rc_corner}.spef -complete_with wlm -pin_cap_included
|
||||
} else {
|
||||
read_parasitics -keep_capacitive_coupling -verbose $::env(CARAVEL_ROOT)/signoff/${design}/openlane-signoff/spef/${design}.${rc_corner}.spef -pin_cap_included
|
||||
read_parasitics -keep_capacitive_coupling -verbose $::env(CARAVEL_ROOT)/signoff/${design}/openlane-signoff/spef/${design}.${rc_corner}.spef -complete_with wlm -pin_cap_included
|
||||
}
|
||||
|
||||
report_annotated_parasitics
|
||||
}
|
||||
|
||||
proc report_results {design rc_corner proc_corner} {
|
||||
|
@ -93,47 +100,47 @@ if {\
|
|||
|
||||
report_constraint -all_violators -significant_digits 4 -nosplit > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-all_viol.rpt
|
||||
|
||||
report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
report_timing -unique_pins -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 10 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-min_timing.rpt
|
||||
|
||||
report_timing -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
report_timing -unique_pins -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 10 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-max_timing.rpt
|
||||
|
||||
report_si_bottleneck -significant_digits 4 -nosplit -slack_lesser_than 10 -all_nets > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-si_bottleneck.rpt
|
||||
|
||||
if {$design == "caravel" | $design == "caravan"} {
|
||||
report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group clk \
|
||||
report_timing -unique_pins -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group clk \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 10 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-clk-min_timing.rpt
|
||||
|
||||
report_timing -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group clk \
|
||||
report_timing -unique_pins -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group clk \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 10 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-clk-max_timing.rpt
|
||||
|
||||
report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group hk_serial_clk \
|
||||
report_timing -unique_pins -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group hk_serial_clk \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 10 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-hk_serial_clk-min_timing.rpt
|
||||
|
||||
report_timing -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group hk_serial_clk \
|
||||
report_timing -unique_pins -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group hk_serial_clk \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 10 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-hk_serial_clk-max_timing.rpt
|
||||
|
||||
report_timing -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group hkspi_clk \
|
||||
report_timing -unique_pins -delay max -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group hkspi_clk \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 10 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-hkspi_clk-max_timing.rpt
|
||||
|
||||
report_timing -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group hkspi_clk \
|
||||
report_timing -unique_pins -delay min -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit -group hkspi_clk \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 10 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-hkspi_clk-min_timing.rpt
|
||||
|
||||
report_timing -delay min -through [get_cells soc] -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
report_timing -unique_pins -delay min -through [get_cells soc] -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-soc-min_timing.rpt
|
||||
|
||||
report_timing -delay max -through [get_cells soc] -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
report_timing -unique_pins -delay max -through [get_cells soc] -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
-max_paths 10000 -nworst 10 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-soc-max_timing.rpt
|
||||
|
||||
report_case_analysis -nosplit > $::env(OUT_DIR)/reports/${design}.case_analysis.rpt
|
||||
report_exceptions -nosplit > $::env(OUT_DIR)/reports/${design}.false_paths.rpt
|
||||
|
||||
report_timing -delay min -through [get_cells mprj] -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
report_timing -unique_pins -delay min -through [get_cells mprj] -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
-max_paths 10000 -nworst 5 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-mprj-min_timing.rpt
|
||||
|
||||
report_timing -delay max -through [get_cells mprj] -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
report_timing -unique_pins -delay max -through [get_cells mprj] -path_type full_clock_expanded -transition_time -capacitance -nets -crosstalk_delta -derate -nosplit \
|
||||
-max_paths 10000 -nworst 5 -slack_lesser_than 100 -significant_digits 4 -include_hierarchical_pins > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-mprj-max_timing.rpt
|
||||
|
||||
report_si_bottleneck -significant_digits 4 -nosplit -slack_lesser_than 10 -all_nets > $::env(OUT_DIR)/reports/${rc_corner}/${design}.${proc_corner}${proc_corner}-si_bottleneck.rpt
|
||||
}
|
||||
|
||||
write_sdf -version 3.0 -significant_digits 4 $::env(OUT_DIR)/sdf/${rc_corner}/${design}.${proc_corner}${proc_corner}.sdf
|
||||
|
@ -148,10 +155,13 @@ if {\
|
|||
set extract_model_use_conservative_current_slew true
|
||||
set extract_model_enable_report_delay_calculation true
|
||||
set extract_model_with_clock_latency_arcs true
|
||||
extract_model -output $::env(OUT_DIR)/lib/${rc_corner}/${design}.${proc_corner}${proc_corner} -format {db lib} -test_design
|
||||
extract_model -output $::env(OUT_DIR)/lib/${rc_corner}/${design}.${proc_corner}${proc_corner} -format {lib}
|
||||
}
|
||||
|
||||
# set timing_report_unconstrained_paths TRUE
|
||||
set parasitics_log_file $::env(OUT_DIR)/logs/$::env(DESIGN)-$::env(RC_CORNER)-parasitics.log
|
||||
set si_enable_analysis TRUE
|
||||
# set si_enable_analysis FALSE
|
||||
set sh_message_limit 1500
|
||||
read_spefs $::env(DESIGN) $::env(RC_CORNER)
|
||||
update_timing
|
||||
report_results $::env(DESIGN) $::env(RC_CORNER) $::env(PROC_CORNER)
|
||||
|
|
|
@ -90,8 +90,11 @@ def run_sta (
|
|||
print(f"There are violations. check report: {output_dir}/reports/{rc_corner}/{design}.{proc_corner}{proc_corner}-all_viol.rpt")
|
||||
log.write(f"There are violations. check report: {output_dir}/reports/{rc_corner}/{design}.{proc_corner}{proc_corner}-all_viol.rpt")
|
||||
elif sta_pass == "no cons":
|
||||
print(f"Reading constraints SDC file failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
log.write(f"Reading constraints SDC file failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
print(f"Reading constraints SDC failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
log.write(f"Reading constraints SDC failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
elif sta_pass == "spef":
|
||||
print(f"Reading parasitics failed. check log: {log_dir}/{design}-{rc_corner}-parasitics.log")
|
||||
log.write(f"Reading parasitics failed. check log: {log_dir}/{design}-{rc_corner}-parasitics.log")
|
||||
else:
|
||||
print(f"Linking failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
log.write(f"Linking failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
|
@ -134,14 +137,27 @@ def check_env_vars():
|
|||
def search_viol(
|
||||
report_path: str
|
||||
):
|
||||
proc_corner = report_path[-12]
|
||||
rc_corner = os.path.basename(os.path.dirname(report_path))
|
||||
log_path = report_path.replace(f"/reports/{rc_corner}/", "/logs/")
|
||||
log_path = log_path.replace(f".{proc_corner}{proc_corner}-global.rpt", f"-{rc_corner}-{proc_corner}-sta.log")
|
||||
with open(log_path, 'r') as report:
|
||||
data = report.read()
|
||||
if "Could not auto-link design" in data:
|
||||
return "no link"
|
||||
elif "Error: Errors reading SDC file:" in data:
|
||||
return "no cons"
|
||||
log_path = log_path.replace(f"{proc_corner}-sta", f"parasitics")
|
||||
with open(log_path, 'r') as report:
|
||||
data = report.read()
|
||||
if "Error: Cannot open file" in data:
|
||||
return "spef"
|
||||
with open(report_path, 'r') as report:
|
||||
data = report.read()
|
||||
if "Setup violations" in data:
|
||||
return "setup"
|
||||
elif "Hold violations" in data:
|
||||
if "Hold violations" in data:
|
||||
return "hold"
|
||||
elif "Could not auto-link design" in data:
|
||||
return "no link"
|
||||
elif "Setup violations" in data:
|
||||
return "setup"
|
||||
report_path = report_path.replace("global", "all_viol")
|
||||
with open(report_path, 'r') as report:
|
||||
data = report.read()
|
||||
|
@ -153,11 +169,6 @@ def search_viol(
|
|||
return "max_cap"
|
||||
elif "VIOLATED" in data:
|
||||
return "viol"
|
||||
report_path = report_path.replace("all_viol", "min_timing")
|
||||
with open(report_path, 'r') as report:
|
||||
data = report.read()
|
||||
if "No constrained paths" in data:
|
||||
return "no cons"
|
||||
else:
|
||||
return "pass"
|
||||
|
||||
|
|
|
@ -260,21 +260,26 @@ def check_errors(
|
|||
logging.info(f"{log_name} STA: Passed")
|
||||
f.write(f"{log_name} STA: Passed\n")
|
||||
elif "max_transition and max_capacitance" in lines[-1]:
|
||||
logging.info(lines[-1])
|
||||
logging.warning(lines[-1])
|
||||
logging.info(f"{log_name} STA: Passed (except: max_tran & max_cap)")
|
||||
f.write(f"{log_name} STA: Passed (except: max_tran & max_cap)\n")
|
||||
elif "max_transition" in lines[-1]:
|
||||
logging.info(lines[-1])
|
||||
logging.warning(lines[-1])
|
||||
logging.info(f"{log_name} STA: Passed (except: max_tran)")
|
||||
f.write(f"{log_name} STA: Passed (except: max_tran)\n")
|
||||
elif "max_capacitance" in lines[-1]:
|
||||
logging.info(lines[-1])
|
||||
logging.warning(lines[-1])
|
||||
logging.info(f"{log_name} STA: Passed (except: max_cap)")
|
||||
f.write(f"{log_name} STA: Passed (except: max_cap)\n")
|
||||
else:
|
||||
logging.error(lines[-1])
|
||||
logging.error(f"{log_name} STA: Failed")
|
||||
f.write(f"{log_name} STA: Failed\n")
|
||||
if "setup" in lines[-1]:
|
||||
f.write(f"{log_name} STA: Failed (setup)\n")
|
||||
elif "hold" in lines[-1]:
|
||||
f.write(f"{log_name} STA: Failed (hold)\n")
|
||||
else:
|
||||
f.write(f"{log_name} STA: Failed (" + lines[-1].split(" failed")[0] + ")\n")
|
||||
|
||||
if antenna:
|
||||
antenna_report = os.path.join(signoff_dir, f"{design}/standalone_pvr/antenna-vios.report")
|
||||
|
|
|
@ -8,15 +8,15 @@ if {$design == "caravel" | $design == "caravan"} {
|
|||
}
|
||||
|
||||
# add spefs of modules instantiated in user_project_wrapper/user_analog_project_wrapper here
|
||||
set spef_mapping(mprj/mprj) $::env(UPRJ_ROOT)/signoff/user_project_example/openlane-signoff/spef/user_project_example.${rc_corner}.spef
|
||||
set spef_mapping(mprj/mprj) $::env(UPRJ_ROOT)/signoff/user_proj_example/openlane-signoff/spef/user_proj_example.${rc_corner}.spef
|
||||
|
||||
#caravel/caravan macros
|
||||
set spef_mapping(flash_clkrst_buffers) $::env(CARAVEL_ROOT)/signoff/buff_flash_clkrst/openlane-signoff/buff_flash_clkrst.${rc_corner}.spef
|
||||
set spef_mapping(rstb_level) $::env(CARAVEL_ROOT)/signoff/xres_buf/openlane-signoff/xres_buf.${rc_corner}.spef
|
||||
set spef_mapping(flash_clkrst_buffers) $::env(CARAVEL_ROOT)/signoff/buff_flash_clkrst/openlane-signoff/spef/buff_flash_clkrst.${rc_corner}.spef
|
||||
set spef_mapping(rstb_level) $::env(CARAVEL_ROOT)/signoff/xres_buf/openlane-signoff/spef/xres_buf.${rc_corner}.spef
|
||||
|
||||
set spef_mapping(padframe) $::env(CARAVEL_ROOT)/signoff/chip_io/chip_io.${rc_corner}.spef
|
||||
set spef_mapping(padframe) $::env(CARAVEL_ROOT)/signoff/chip_io/openlane-signoff/spef/chip_io.${rc_corner}.spef
|
||||
if {$design == "caravan"} {
|
||||
set spef_mapping(padframe) $::env(CARAVEL_ROOT)/signoff/chip_io_alt/chip_io_alt.${rc_corner}.spef
|
||||
set spef_mapping(padframe) $::env(CARAVEL_ROOT)/signoff/chip_io_alt/openlane-signoff/spef/chip_io_alt.${rc_corner}.spef
|
||||
}
|
||||
set spef_mapping(padframe/\constant_value_inst[0]) $::env(CARAVEL_ROOT)/signoff/constant_block/openlane-signoff/spef/constant_block.${rc_corner}.spef
|
||||
set spef_mapping(padframe/\constant_value_inst[1]) $::env(CARAVEL_ROOT)/signoff/constant_block/openlane-signoff/spef/constant_block.${rc_corner}.spef
|
||||
|
@ -40,8 +40,8 @@ if {$design == "caravel" | $design == "caravan"} {
|
|||
set spef_mapping(mgmt_buffers/mprj2_logic_high_inst) $::env(CARAVEL_ROOT)/signoff/mprj2_logic_high/openlane-signoff/spef/mprj2_logic_high.${rc_corner}.spef
|
||||
|
||||
set spef_mapping(soc) $::env(MCW_ROOT)/signoff/mgmt_core_wrapper/openlane-signoff/spef/mgmt_core_wrapper.${rc_corner}.spef
|
||||
set spef_mapping(soc/\core.RAM256) $::env(MCW_ROOT)/signoff/RAM256/spef/openlane-signoff/spef/RAM256.${rc_corner}.spef
|
||||
set spef_mapping(soc/\core.RAM128) $::env(MCW_ROOT)/signoff/RAM128/spef/openlane-signoff/spef/RAM128.${rc_corner}.spef
|
||||
set spef_mapping(soc/\core.RAM256) $::env(MCW_ROOT)/signoff/RAM256/openlane-signoff/spef/RAM256.${rc_corner}.spef
|
||||
set spef_mapping(soc/\core.RAM128) $::env(MCW_ROOT)/signoff/RAM128/openlane-signoff/spef/RAM128.${rc_corner}.spef
|
||||
|
||||
set spef_mapping(\gpio_control_bidir_1[0]) $::env(CARAVEL_ROOT)/signoff/gpio_control_block/openlane-signoff/spef/gpio_control_block.${rc_corner}.spef
|
||||
set spef_mapping(\gpio_control_bidir_1[1]) $::env(CARAVEL_ROOT)/signoff/gpio_control_block/openlane-signoff/spef/gpio_control_block.${rc_corner}.spef
|
||||
|
@ -160,9 +160,11 @@ if {$design == "caravel" | $design == "caravan"} {
|
|||
set spef_mapping(gpio_defaults_block_8) $::env(CARAVEL_ROOT)/signoff/gpio_defaults_block_0403/openlane-signoff/spef/gpio_defaults_block_0403.${rc_corner}.spef
|
||||
set spef_mapping(gpio_defaults_block_9) $::env(CARAVEL_ROOT)/signoff/gpio_defaults_block_0403/openlane-signoff/spef/gpio_defaults_block_0403.${rc_corner}.spef
|
||||
|
||||
set spef_mapping(sigbuf) $::env(CARAVEL_ROOT)/signoff/gpio_signal_buffering/openlane-signoff/spef/gpio_signal_buffering.${rc_corner}.spef
|
||||
|
||||
} elseif {$design == "mgmt_core_wrapper"} {
|
||||
set spef_mapping(\core.RAM128) $::env(MCW_ROOT)/signoff/RAM128/openlane-signoff/spef/RAM128.${rc_corner}.spef
|
||||
set spef_mapping(\core.RAM256) $::env(MCW_ROOT)/signoff/RAM512/openlane-signoff/spef/RAM512.${rc_corner}.spef
|
||||
set spef_mapping(\core.RAM256) $::env(MCW_ROOT)/signoff/RAM256/openlane-signoff/spef/RAM256.${rc_corner}.spef
|
||||
} elseif {$design == "gpio_control_block"} {
|
||||
set spef_mapping(gpio_logic_high) $::env(CARAVEL_ROOT)/signoff/gpio_logic_high/openlane-signoff/spef/gpio_logic_high.${rc_corner}.spef
|
||||
} elseif {$design == "mgmt_protect"} {
|
||||
|
@ -170,3 +172,4 @@ if {$design == "caravel" | $design == "caravan"} {
|
|||
set spef_mapping(mprj_logic_high_inst) $::env(CARAVEL_ROOT)/signoff/mprj_logic_high/openlane-signoff/spef/mprj_logic_high.${rc_corner}.spef
|
||||
set spef_mapping(mprj2_logic_high_inst) $::env(CARAVEL_ROOT)/signoff/mprj2_logic_high/openlane-signoff/spef/mprj2_logic_high.${rc_corner}.spef
|
||||
}
|
||||
puts "\[INFO\]: Spef mapping done"
|
Loading…
Reference in New Issue