| proc init_floorplan {args} { |
| TIMER::timer_start |
| set ::env(CURRENT_STAGE) floorplan |
| if {$::env(FP_SIZING) == "absolute"} { |
| try_catch verilog2def \ |
| -verilog $::env(yosys_result_file_tag).v \ |
| -lef $::env(MERGED_LEF) \ |
| -liberty $::env(LIB_SYNTH) \ |
| -top_module $::env(DESIGN_NAME) \ |
| -site $::env(PLACE_SITE) \ |
| -tracks $::env(TRACKS_INFO_FILE) \ |
| -units $::env(DEF_UNITS_PER_MICRON) \ |
| \ |
| -die_area $::env(DIE_AREA) \ |
| -core_area $::env(CORE_AREA) \ |
| \ |
| -def $::env(verilog2def_tmp_file_tag)_broken.def \ |
| -verbose \ |
| |& tee $::env(TERMINAL_OUTPUT) $::env(verilog2def_log_file_tag).log |
| } else { |
| try_catch verilog2def \ |
| -verilog $::env(yosys_result_file_tag).v \ |
| -lef $::env(MERGED_LEF) \ |
| -liberty $::env(LIB_SYNTH) \ |
| -top_module $::env(DESIGN_NAME) \ |
| -site $::env(PLACE_SITE) \ |
| -tracks $::env(TRACKS_INFO_FILE) \ |
| -units $::env(DEF_UNITS_PER_MICRON) \ |
| \ |
| -utilization $::env(FP_CORE_UTIL) \ |
| -aspect_ratio $::env(FP_ASPECT_RATIO) \ |
| -core_space $::env(FP_CORE_MARGIN) \ |
| \ |
| -def $::env(verilog2def_tmp_file_tag)_broken.def \ |
| -verbose \ |
| |& tee $::env(TERMINAL_OUTPUT) $::env(verilog2def_log_file_tag).log |
| } |
| exec cat $::env(verilog2def_tmp_file_tag)_broken.def | sed -r "s/(ROW.*) by /\\1 BY /g" > $::env(verilog2def_tmp_file_tag).def |
| TIMER::timer_stop |
| exec echo "[TIMER::get_runtime]" >> $::env(verilog2def_log_file_tag)_runtime.txt |
| set_def $::env(verilog2def_tmp_file_tag).def |
| #try_catch openroad_debug -exit $::env(SCRIPTS_DIR)/or_init_fp.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(verilog2def_tmp_file_tag)_openroad.log |
| #exit |
| } |
| |
| proc place_io {args} { |
| TIMER::timer_start |
| # try_catch ioPlacer \ |
| # -l $::env(MERGED_LEF) \ |
| # -d $::env(CURRENT_DEF) \ |
| # -h $::env(FP_IO_HMETAL) \ |
| # -v $::env(FP_IO_VMETAL) \ |
| # --random $::env(FP_IO_RANDOM) \ |
| # -w 1 \ |
| # \ |
| # -o $::env(ioPlacer_tmp_file_tag).def \ |
| # |& tee $::env(TERMINAL_OUTPUT) $::env(ioPlacer_log_file_tag).log |
| try_catch openroad -exit $::env(SCRIPTS_DIR)/ioplacer.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(ioPlacer_log_file_tag).log |
| TIMER::timer_stop |
| exec echo "[TIMER::get_runtime]" >> $::env(ioPlacer_log_file_tag)_runtime.txt |
| set_def $::env(ioPlacer_tmp_file_tag).openroad.def |
| } |
| |
| proc tap_decap {args} { |
| #try_catch cp $::env(CURRENT_DEF) $::env(tapcell_result_file_tag).def |
| TIMER::timer_start |
| # try_catch tapcell -lef $::env(MERGED_LEF) \ |
| # -def $::env(tapcell_result_file_tag).def \ |
| # -rule [expr $::env(FP_TAPCELL_DIST) * 2] \ |
| # -welltap $::env(FP_WELLTAP_CELL) \ |
| # -endcap $::env(FP_ENDCAP_CELL) \ |
| # -outdef $::env(tapcell_result_file_tag).def \ |
| # |& tee $::env(TERMINAL_OUTPUT) $::env(tapcell_log_file_tag).log |
| # TIMER::timer_stop |
| set ::env(SAVE_DEF) $::env(tapcell_result_file_tag).def |
| try_catch openroad -exit $::env(SCRIPTS_DIR)/openroad/or_tapcell.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(tapcell_log_file_tag).log |
| exec echo "[TIMER::get_runtime]" >> $::env(tapcell_log_file_tag)_runtime.txt |
| set_def $::env(tapcell_result_file_tag).def |
| } |
| |
| proc chip_floorplan {args} { |
| # intial fp |
| init_floorplan |
| # remove pins section and others |
| remove_pins -input $::env(CURRENT_DEF) |
| remove_empty_nets -input $::env(CURRENT_DEF) |
| } |
| |
| proc run_floorplan {args} { |
| # |----------------------------------------------------| |
| # |---------------- 2. FLOORPLAN ------------------| |
| # |----------------------------------------------------| |
| # |
| # intial fp |
| init_floorplan |
| |
| # place io |
| place_io |
| |
| # # pdn generation |
| # gen_pdn |
| |
| # tapcell |
| tap_decap |
| } |
| |
| package provide openlane 0.9 |