Skip to content

Commit 6f85985

Browse files
authored
Merge pull request #2874 from siliconcompiler/fix-openroad-driver
update openroad driver
2 parents a894989 + 5db2cef commit 6f85985

File tree

5 files changed

+69
-17
lines changed

5 files changed

+69
-17
lines changed

siliconcompiler/tools/openroad/floorplan.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from siliconcompiler.tools._common import input_provides, add_common_file, get_tool_task
2+
from siliconcompiler.tools._common.asic import set_tool_task_var
23
from siliconcompiler.tools.openroad.openroad import setup as setup_tool
34
from siliconcompiler.tools.openroad.openroad import build_pex_corners
45
from siliconcompiler.tools.openroad.openroad import post_process as or_post_process
@@ -46,6 +47,10 @@ def setup(chip):
4647
'script to insert the padring',
4748
field='help')
4849

50+
set_tool_task_var(chip, param_key='remove_synth_buffers',
51+
default_value=True,
52+
schelp='remove buffers inserted by synthesis')
53+
4954
snap = chip.get('tool', tool, 'task', task, 'var', 'ifp_snap_strategy',
5055
step=step, index=index)[0]
5156
snaps_allowed = ('none', 'site', 'manufacturing_grid')

siliconcompiler/tools/openroad/openroad.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -583,10 +583,16 @@ def _define_pad_params(chip):
583583

584584

585585
def _define_rsz_params(chip):
586+
set_tool_task_var(chip, param_key='rsz_skip_setup_repair',
587+
default_value=False,
588+
schelp='skip setup timing repair')
586589
set_tool_task_var(chip, param_key='rsz_setup_slack_margin',
587590
default_value='0.0',
588591
schelp='specifies the margin to apply when performing setup repair '
589592
'in library timing units')
593+
set_tool_task_var(chip, param_key='rsz_skip_hold_repair',
594+
default_value=False,
595+
schelp='skip hold timing repair')
590596
set_tool_task_var(chip, param_key='rsz_hold_slack_margin',
591597
default_value='0.0',
592598
schelp='specifies the margin to apply when performing setup repair '
@@ -920,9 +926,12 @@ def _set_reports(chip, reports):
920926
def check_enabled(type):
921927
for key in (('tool', tool, 'task', task, 'var', f'skip_{type}'),
922928
('option', 'var', f'openroad_skip_{type}')):
923-
if chip.valid(*key) and \
924-
chip.get(*key, step=step, index=index) == ["true"]:
925-
return False
929+
if chip.valid(*key):
930+
if chip.get(*key, field='pernode') == 'never':
931+
if chip.get(*key) == ["true"]:
932+
return False
933+
elif chip.get(*key, step=step, index=index) == ["true"]:
934+
return False
926935
return True
927936

928937
for report in reports:

siliconcompiler/tools/openroad/scripts/sc_cts.tcl

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ if { [llength [all_clocks]] > 0 } {
3131

3232
sc_detailed_placement
3333

34-
estimate_parasitics -placement
35-
3634
set repair_timing_args []
3735
if { $openroad_rsz_skip_pin_swap == "true" } {
3836
lappend repair_timing_args "-skip_pin_swap"
@@ -41,18 +39,25 @@ if { [llength [all_clocks]] > 0 } {
4139
lappend repair_timing_args "-skip_gate_cloning"
4240
}
4341

44-
repair_timing -setup -verbose \
45-
-setup_margin $openroad_rsz_setup_slack_margin \
46-
-hold_margin $openroad_rsz_hold_slack_margin \
47-
-repair_tns $openroad_rsz_repair_tns \
48-
{*}$repair_timing_args
42+
if { [lindex [sc_cfg_tool_task_get var rsz_skip_setup_repair] 0] != "true" } {
43+
estimate_parasitics -placement
4944

50-
estimate_parasitics -placement
51-
repair_timing -hold -verbose \
52-
-setup_margin $openroad_rsz_setup_slack_margin \
53-
-hold_margin $openroad_rsz_hold_slack_margin \
54-
-repair_tns $openroad_rsz_repair_tns \
55-
{*}$repair_timing_args
45+
repair_timing -setup -verbose \
46+
-setup_margin $openroad_rsz_setup_slack_margin \
47+
-hold_margin $openroad_rsz_hold_slack_margin \
48+
-repair_tns $openroad_rsz_repair_tns \
49+
{*}$repair_timing_args
50+
}
51+
52+
if { [lindex [sc_cfg_tool_task_get var rsz_skip_hold_repair] 0] != "true" } {
53+
estimate_parasitics -placement
54+
55+
repair_timing -hold -verbose \
56+
-setup_margin $openroad_rsz_setup_slack_margin \
57+
-hold_margin $openroad_rsz_hold_slack_margin \
58+
-repair_tns $openroad_rsz_repair_tns \
59+
{*}$repair_timing_args
60+
}
5661

5762
sc_detailed_placement
5863
}

siliconcompiler/tools/openroad/scripts/sc_floorplan.tcl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,9 @@ if { [sc_design_has_unplaced_macros] } {
330330
# technologies we support do not, so we don't include that step for now.
331331
}
332332
}
333+
334+
sc_print_macro_information
335+
333336
if { [sc_design_has_unplaced_macros] } {
334337
utl::error FLW 1 "Design contains unplaced macros."
335338
}
@@ -402,4 +405,6 @@ foreach net [sc_psm_check_nets] {
402405
# Remove buffers inserted by synthesis
403406
###########################
404407

405-
remove_buffers
408+
if { [lindex [sc_cfg_tool_task_get var remove_synth_buffers] 0] == "true" } {
409+
remove_buffers
410+
}

siliconcompiler/tools/openroad/scripts/sc_procs.tcl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,34 @@ proc sc_design_has_unplaced_macros { } {
220220
return false
221221
}
222222

223+
###########################
224+
# Print macros placement
225+
###########################
226+
227+
proc sc_print_macro_information { } {
228+
set print_header "true"
229+
foreach inst [[ord::get_db_block] getInsts] {
230+
if { [$inst isBlock] } {
231+
set master [$inst getMaster]
232+
set status [$inst getPlacementStatus]
233+
234+
if { $print_header == "true" } {
235+
puts "Macro placement information"
236+
set print_header "false"
237+
}
238+
if { [$inst isPlaced] } {
239+
set location [$inst getLocation]
240+
set orient [$inst getOrient]
241+
set xloc [ord::dbu_to_microns [lindex $location 0]]
242+
set yloc [ord::dbu_to_microns [lindex $location 1]]
243+
puts "[$inst getName] ([$master getName]): $status at ($xloc um, $yloc um) $orient"
244+
} else {
245+
utl::warn FLW 1 "[$inst getName] ([$master getName]): UNPLACED"
246+
}
247+
}
248+
}
249+
}
250+
223251
###########################
224252
# Design has unplaced pads
225253
###########################

0 commit comments

Comments
 (0)