Skip to content

Commit 9161f46

Browse files
committed
openroad: improve parasitics estimation, add RCX
1 parent fca9ca2 commit 9161f46

File tree

4 files changed

+49
-14
lines changed

4 files changed

+49
-14
lines changed

openroad/run_backend.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,15 @@ open_openroad_script() {
9696
2>&1 | TZ=UTC gawk '{ print strftime(\"[%H:%M %Z]\"), \$0 }'"
9797
}
9898

99+
download_rcx_file() {
100+
local ihp_rcx_url="https://raw.githubusercontent.com/The-OpenROAD-Project/OpenROAD-flow-scripts/7747f88f70daaeb63f43ce36e71829707b7e3fa7/flow/platforms/ihp-sg13g2/IHP_rcx_patterns.rules"
101+
local ihp_rcx_file="IHP_rcx_patterns.rules"
102+
103+
if [ ! -f "${ihp_rcx_file}" ]; then
104+
run_cmd "curl -L -o ${ihp_rcx_file} ${ihp_rcx_url}"
105+
fi
106+
}
107+
99108

100109
####################
101110
# Parse Arguments
@@ -164,6 +173,10 @@ while [[ $# -gt 0 ]]; do
164173
open_openroad_script "$2"
165174
shift 2
166175
;;
176+
--download-rcx)
177+
download_rcx_file
178+
shift
179+
;;
167180
# Error handling
168181
*)
169182
echo "[ERROR] Unknown option: $1 (use --help for usage)" >&2

openroad/scripts/05_finishing.tcl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ write_sdc ${out_dir}/${proj_name}.sdc
5858

5959
## WARNING: Currently the extract_parasitics command removes metal patches (eg for min area)
6060
## So if you want to use it, do so at the very end after writing out the def and odb files
61-
# define_process_corner -ext_model_index 0 X
62-
# extract_parasitics -ext_model_file IHP_rcx_patterns.rules
63-
# write_spef ${out_dir}/${proj_name}.spef
64-
# read_spef ${out_dir}/${proj_name}.spef; # readback parasitics for OpenSTA
65-
# report_metrics "${step_nr}_${proj_name}.extract"
61+
define_process_corner -ext_model_index 0 X
62+
extract_parasitics -ext_model_file IHP_rcx_patterns.rules
63+
write_spef ${out_dir}/${proj_name}.spef
64+
read_spef ${out_dir}/${proj_name}.spef; # readback parasitics for OpenSTA
65+
report_metrics "05_${proj_name}.extract"
6666

6767
utl::report "###############################################################################"
6868
utl::report "# Stage 05 complete: Final outputs written to ${out_dir}/"

openroad/scripts/init_tech.tcl

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,36 @@ foreach file [glob -directory $pdk_sram_lib RM_IHPSG13*_fast_1p32V_m55C.lib] {
5454
}
5555

5656
puts "Init tech-lef"
57-
read_lef ${pdk_cells_lef}/ez130_tech.lef
57+
read_lef -tech ${pdk_cells_lef}/ez130_tech.lef
5858

5959
puts "Init cell-lef"
60-
read_lef ${pdk_cells_lef}/ez130_8t.lef
61-
read_lef ${pdk_io_lef}/sg13g2_io.lef
62-
read_lef ${pdk_pad_lef}/bondpad_70x70.lef
60+
read_lef -library ${pdk_cells_lef}/ez130_8t.lef
61+
read_lef -library ${pdk_io_lef}/sg13g2_io.lef
62+
read_lef -library ${pdk_pad_lef}/bondpad_70x70.lef
6363

6464
foreach file [glob -directory $pdk_sram_lef RM_IHPSG13*.lef] {
65-
read_lef "$file"
65+
read_lef -library "$file"
6666
}
6767

6868
# Set layers used for estimate_parasitics
6969
proc setDefaultParasitics {} {
70-
set_wire_rc -clock -layer Metal3
70+
# derived from https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/blob/master/flow/platforms/ihp-sg13g2/setRC.tcl
71+
# and process spec by IHP, simplified since its only for estimation
72+
# units: kohm/um and pF/um of standard-width wire on each layer
73+
set_layer_rc -layer Metal1 -resistance 5.2E-04 -capacitance 1e-10
74+
set_layer_rc -layer Metal2 -resistance 5.2E-04 -capacitance 1.85E-04
75+
set_layer_rc -layer Metal3 -resistance 5.2E-04 -capacitance 1.85E-04
76+
set_layer_rc -layer Metal4 -resistance 5.2E-04 -capacitance 1.85E-04
77+
set_layer_rc -layer Metal5 -resistance 5.2E-04 -capacitance 8.6E-05
78+
79+
set_layer_rc -via Via1 -resistance 2.0E-3
80+
set_layer_rc -via Via2 -resistance 2.0E-3
81+
set_layer_rc -via Via3 -resistance 2.0E-3
82+
set_layer_rc -via Via4 -resistance 2.0E-3
83+
set_layer_rc -via TopVia1 -resistance 4.0E-4
84+
set_layer_rc -via TopVia2 -resistance 2.0E-4
85+
86+
set_wire_rc -clock -layer Metal3
7187
set_wire_rc -signal -layer Metal3
7288
}
7389

openroad/src/constraints.sdc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,26 @@ source src/instances.tcl
1717
#############################
1818
## Driving Cells and Loads ##
1919
#############################
20-
2120
# As a default, drive multiple GPIO pads and be driven by one.
2221
# accomodate for driving up to 2 74HC pads plus a 5pF trace
2322
set_load [expr 2 * 5.0 + 5.0] [all_outputs]
2423
set_driving_cell [all_inputs] -lib_cell sg13g2_IOPadOut16mA -pin pad
2524

2625

26+
###################
27+
## Global Limits ##
28+
###################
29+
# Limit fanout to ease routing and keep loads reasonable
30+
set_max_fanout 32 [current_design]
31+
set_max_transition 0.5 [current_design]
32+
2733
##################
2834
## Input Clocks ##
2935
##################
3036
puts "Clocks..."
3137

32-
# We target 100 MHz
33-
set TCK_SYS 10.0
38+
# We target 90 MHz
39+
set TCK_SYS 11.2
3440
create_clock -name clk_sys -period $TCK_SYS [get_ports clk_i]
3541

3642
set TCK_JTG 25.0

0 commit comments

Comments
 (0)