siliconcompiler 0.29.2__py3-none-any.whl → 0.29.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/apps/sc_install.py +19 -4
  3. siliconcompiler/core.py +8 -3
  4. siliconcompiler/flowgraph.py +23 -5
  5. siliconcompiler/remote/client.py +3 -0
  6. siliconcompiler/scheduler/__init__.py +30 -12
  7. siliconcompiler/tools/__init__.py +1 -1
  8. siliconcompiler/tools/_common/asic.py +3 -0
  9. siliconcompiler/tools/_common/asic_clock.py +101 -0
  10. siliconcompiler/tools/bambu/__init__.py +32 -0
  11. siliconcompiler/tools/bambu/convert.py +93 -11
  12. siliconcompiler/tools/bluespec/convert.py +2 -1
  13. siliconcompiler/tools/chisel/convert.py +2 -1
  14. siliconcompiler/tools/genfasm/bitstream.py +2 -2
  15. siliconcompiler/tools/ghdl/convert.py +2 -2
  16. siliconcompiler/tools/gtkwave/show.py +2 -1
  17. siliconcompiler/tools/icarus/compile.py +2 -2
  18. siliconcompiler/tools/klayout/drc.py +2 -1
  19. siliconcompiler/tools/magic/magic.py +1 -1
  20. siliconcompiler/tools/netgen/lvs.py +2 -1
  21. siliconcompiler/tools/openroad/_apr.py +16 -4
  22. siliconcompiler/tools/openroad/fillmetal_insertion.py +0 -1
  23. siliconcompiler/tools/openroad/init_floorplan.py +7 -1
  24. siliconcompiler/tools/openroad/macro_placement.py +1 -2
  25. siliconcompiler/tools/openroad/pin_placement.py +0 -1
  26. siliconcompiler/tools/openroad/rdlroute.py +2 -2
  27. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +3 -2
  28. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +1 -0
  29. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +78 -94
  30. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +12 -1
  31. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +24 -0
  32. siliconcompiler/tools/openroad/scripts/common/procs.tcl +3 -2
  33. siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl +1 -0
  34. siliconcompiler/tools/openroad/scripts/common/reports.tcl +4 -13
  35. siliconcompiler/tools/openroad/scripts/common/write_data.tcl +2 -5
  36. siliconcompiler/tools/openroad/scripts/common/write_data_physical.tcl +3 -0
  37. siliconcompiler/tools/openroad/scripts/common/write_data_timing.tcl +1 -0
  38. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +1 -1
  39. siliconcompiler/tools/opensta/__init__.py +2 -2
  40. siliconcompiler/tools/opensta/report_libraries.py +2 -2
  41. siliconcompiler/tools/opensta/timing.py +2 -1
  42. siliconcompiler/tools/slang/__init__.py +79 -2
  43. siliconcompiler/tools/slang/elaborate.py +46 -0
  44. siliconcompiler/tools/slang/lint.py +10 -76
  45. siliconcompiler/tools/surelog/parse.py +1 -1
  46. siliconcompiler/tools/sv2v/convert.py +2 -2
  47. siliconcompiler/tools/template/template.py +2 -2
  48. siliconcompiler/tools/verilator/verilator.py +3 -1
  49. siliconcompiler/tools/vivado/vivado.py +2 -1
  50. siliconcompiler/tools/vpr/place.py +2 -2
  51. siliconcompiler/tools/vpr/route.py +2 -2
  52. siliconcompiler/tools/vpr/show.py +2 -1
  53. siliconcompiler/tools/yosys/__init__.py +26 -23
  54. siliconcompiler/tools/yosys/procs.tcl +17 -0
  55. siliconcompiler/tools/yosys/syn_asic.py +20 -65
  56. siliconcompiler/tools/yosys/syn_asic.tcl +10 -51
  57. siliconcompiler/toolscripts/_tools.json +4 -4
  58. siliconcompiler/toolscripts/rhel8/install-slang.sh +0 -0
  59. siliconcompiler/toolscripts/rhel8/install-sv2v.sh +7 -1
  60. siliconcompiler/toolscripts/rhel8/install-yosys.sh +1 -1
  61. siliconcompiler/toolscripts/rhel9/install-openroad.sh +34 -0
  62. siliconcompiler/toolscripts/rhel9/install-slang.sh +0 -0
  63. siliconcompiler/toolscripts/rhel9/install-sv2v.sh +7 -1
  64. siliconcompiler/toolscripts/rhel9/install-yosys.sh +1 -1
  65. siliconcompiler/toolscripts/ubuntu20/install-slang.sh +0 -0
  66. siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +1 -0
  67. siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +7 -1
  68. siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +1 -1
  69. siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +7 -1
  70. siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +7 -1
  71. siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +1 -1
  72. siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +3 -4
  73. siliconcompiler/toolscripts/ubuntu24/install-slang.sh +0 -0
  74. siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +7 -1
  75. siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +7 -1
  76. siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +1 -1
  77. siliconcompiler/utils/__init__.py +24 -0
  78. siliconcompiler/utils/logging.py +67 -0
  79. {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/METADATA +8 -8
  80. {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/RECORD +80 -75
  81. siliconcompiler/tools/bambu/bambu.py +0 -32
  82. {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/LICENSE +0 -0
  83. {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/WHEEL +0 -0
  84. {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/entry_points.txt +0 -0
  85. {siliconcompiler-0.29.2.dist-info → siliconcompiler-0.29.4.dist-info}/top_level.txt +0 -0
@@ -3,6 +3,7 @@ import os
3
3
  from siliconcompiler.tools.gtkwave import setup as tool_setup
4
4
  from siliconcompiler.tools._common import \
5
5
  add_require_input, get_tool_task, input_provides
6
+ from siliconcompiler import utils
6
7
 
7
8
 
8
9
  def setup(chip):
@@ -16,7 +17,7 @@ def setup(chip):
16
17
  index = chip.get('arg', 'index')
17
18
  tool, task = get_tool_task(chip, step, index)
18
19
 
19
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
20
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
20
21
  step=step, index=index)
21
22
 
22
23
  chip.set('tool', tool, 'task', task, 'refdir',
@@ -1,7 +1,7 @@
1
- import os
2
1
  from siliconcompiler.tools._common import \
3
2
  add_require_input, add_frontend_requires, get_input_files, get_frontend_options, \
4
3
  get_tool_task
4
+ from siliconcompiler import utils
5
5
 
6
6
 
7
7
  def setup(chip):
@@ -20,7 +20,7 @@ def setup(chip):
20
20
  chip.set('tool', tool, 'vswitch', '-V')
21
21
  chip.set('tool', tool, 'version', '>=10.3', clobber=False)
22
22
 
23
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
23
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
24
24
  step=step, index=index, clobber=False)
25
25
 
26
26
  chip.set('tool', tool, 'task', task, 'var', 'verilog_generation',
@@ -7,6 +7,7 @@ from siliconcompiler.tools._common.asic import set_tool_task_var, get_tool_task_
7
7
 
8
8
  from siliconcompiler.tools.klayout.klayout import setup as setup_tool
9
9
  import xml.etree.ElementTree as ET
10
+ from siliconcompiler import utils
10
11
 
11
12
 
12
13
  def make_docs(chip):
@@ -35,7 +36,7 @@ def setup(chip):
35
36
  chip.set('tool', tool, 'task', task, 'option', option,
36
37
  step=step, index=index, clobber=clobber)
37
38
 
38
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
39
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
39
40
  step=step, index=index, clobber=clobber)
40
41
 
41
42
  chip.add('tool', tool, 'task', task, 'require', 'option,pdk')
@@ -47,7 +47,7 @@ def setup(chip):
47
47
  chip.set('tool', tool, 'version', '>=8.3.196', clobber=False)
48
48
  chip.set('tool', tool, 'format', 'tcl')
49
49
 
50
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
50
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
51
51
  step=step, index=index, clobber=False)
52
52
  chip.set('tool', tool, 'task', task, 'refdir', refdir,
53
53
  step=step, index=index,
@@ -1,5 +1,6 @@
1
1
  import os
2
2
 
3
+ from siliconcompiler import utils
3
4
  from siliconcompiler.tools.netgen import count_lvs
4
5
  from siliconcompiler import sc_open
5
6
  from siliconcompiler.tools._common import get_tool_task, record_metric
@@ -24,7 +25,7 @@ def setup(chip):
24
25
  chip.set('tool', tool, 'version', '>=1.5.192', clobber=False)
25
26
  chip.set('tool', tool, 'format', 'tcl')
26
27
 
27
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
28
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
28
29
  step=step, index=index, clobber=False)
29
30
  chip.set('tool', tool, 'task', task, 'refdir', refdir,
30
31
  step=step, index=index,
@@ -16,7 +16,7 @@ def setup(chip, exit=True):
16
16
  index = chip.get('arg', 'index')
17
17
  tool, task = get_tool_task(chip, step, index)
18
18
 
19
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
19
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
20
20
  step=step, index=index)
21
21
 
22
22
  pdkname = chip.get('option', 'pdk')
@@ -148,6 +148,10 @@ def extract_metrics(chip):
148
148
 
149
149
  metrics_file = "reports/metrics.json"
150
150
 
151
+ if not os.path.exists(metrics_file):
152
+ chip.logger.warning("OpenROAD metrics file is missing")
153
+ return
154
+
151
155
  def get_metric_sources(metric):
152
156
  metric_sources = [metrics_file]
153
157
  if metric in metric_reports:
@@ -572,6 +576,13 @@ def define_rsz_params(chip):
572
576
  default_value='100',
573
577
  schelp='percentage of violating nets to attempt to repair (0 - 100)')
574
578
 
579
+ set_tool_task_var(chip, param_key='rsz_skip_recover_power',
580
+ default_value=False,
581
+ schelp='skip power recovery')
582
+ set_tool_task_var(chip, param_key='rsz_recover_power',
583
+ default_value=100,
584
+ schelp='percentage of paths to attempt to recover power (0 - 100)')
585
+
575
586
  step = chip.get('arg', 'step')
576
587
  index = chip.get('arg', 'index')
577
588
  tool, task = get_tool_task(chip, step, index)
@@ -792,6 +803,10 @@ def define_psm_params(chip):
792
803
  'list of nets to skip power grid analysis on',
793
804
  field='help')
794
805
 
806
+ chip.set('tool', tool, 'task', task, 'var', 'psm_allow_missing_terminal_nets',
807
+ 'list of nets where a missing terminal is acceptable',
808
+ field='help')
809
+
795
810
 
796
811
  def define_fin_params(chip):
797
812
  set_tool_task_var(chip, param_key='fin_add_fill',
@@ -810,9 +825,6 @@ def define_mpl_params(chip):
810
825
  schelp='macro channel to use when performing automated '
811
826
  'macro placement ([x, y] in microns)')
812
827
 
813
- set_tool_task_var(chip, param_key='rtlmp_enable',
814
- default_value=True,
815
- schelp='true/false, enables the RTLMP macro placement')
816
828
  set_tool_task_var(chip, param_key='rtlmp_min_instances',
817
829
  schelp='minimum number of instances to use while clustering for '
818
830
  'macro placement')
@@ -43,7 +43,6 @@ def setup(chip):
43
43
  'hold',
44
44
  'unconstrained',
45
45
  'clock_skew',
46
- 'power',
47
46
  'drv_violations',
48
47
  'fmax',
49
48
 
@@ -1,5 +1,5 @@
1
1
  from siliconcompiler.tools._common import input_provides, add_common_file, get_tool_task
2
- from siliconcompiler.tools._common.asic import set_tool_task_var
2
+ from siliconcompiler.tools._common.asic import set_tool_task_var, get_mainlib
3
3
 
4
4
  from siliconcompiler.tools.openroad._apr import setup as apr_setup
5
5
  from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
@@ -74,6 +74,8 @@ def setup(chip):
74
74
  'power'
75
75
  ])
76
76
 
77
+ mainlib = get_mainlib(chip)
78
+
77
79
  # Setup required
78
80
  for component in chip.getkeys('constraint', 'component'):
79
81
  for key in chip.getkeys('constraint', 'component', component):
@@ -92,6 +94,10 @@ def setup(chip):
92
94
  chip.add('tool', tool, 'task', task, 'require',
93
95
  ','.join(['constraint', ifp]),
94
96
  step=step, index=index)
97
+ if chip.valid('library', mainlib, 'option', 'file', 'openroad_tracks'):
98
+ chip.add('tool', tool, 'task', task, 'require',
99
+ ','.join(['library', mainlib, 'option', 'file', 'openroad_tracks']),
100
+ step=step, index=index)
95
101
 
96
102
 
97
103
  def pre_process(chip):
@@ -40,8 +40,7 @@ def setup(chip):
40
40
 
41
41
  set_reports(chip, [
42
42
  'setup',
43
- 'unconstrained',
44
- 'power'
43
+ 'unconstrained'
45
44
  ])
46
45
 
47
46
 
@@ -38,7 +38,6 @@ def setup(chip):
38
38
  set_reports(chip, [
39
39
  'setup',
40
40
  'unconstrained',
41
- 'power',
42
41
 
43
42
  # Images
44
43
  'placement_density',
@@ -1,5 +1,6 @@
1
1
  import os
2
2
 
3
+ from siliconcompiler import utils
3
4
  from siliconcompiler.tools._common import input_provides, get_tool_task
4
5
  from siliconcompiler.tools._common.asic import set_tool_task_var
5
6
  from siliconcompiler.tools.openroad._apr import build_pex_corners
@@ -44,7 +45,7 @@ def setup(chip):
44
45
  package='siliconcompiler')
45
46
  chip.set('tool', tool, 'task', task, 'script', script,
46
47
  step=step, index=index)
47
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
48
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
48
49
  step=step, index=index, clobber=False)
49
50
 
50
51
  if chip.get('option', 'nodisplay'):
@@ -83,7 +84,6 @@ def setup(chip):
83
84
  ','.join(['input', 'netlist', 'verilog']),
84
85
  step=step, index=index)
85
86
 
86
- chip.add('tool', tool, 'task', task, 'output', design + '.sdc', step=step, index=index)
87
87
  chip.add('tool', tool, 'task', task, 'output', design + '.vg', step=step, index=index)
88
88
  chip.add('tool', tool, 'task', task, 'output', design + '.def', step=step, index=index)
89
89
  chip.add('tool', tool, 'task', task, 'output', design + '.odb', step=step, index=index)
@@ -91,5 +91,6 @@ if { [llength $openroad_dont_touch] > 0 } {
91
91
  # set don't touch list
92
92
  set_dont_touch $openroad_dont_touch
93
93
  }
94
- tee -file reports/dont_touch.start.rpt {report_dont_touch}
95
- tee -file reports/dont_use.start.rpt {report_dont_use}
94
+ tee -quiet -file reports/dont_touch.start.rpt {report_dont_touch}
95
+ tee -quiet -file reports/dont_use.start.rpt {report_dont_use}
96
+ tee -file reports/global_connections.start.rpt {report_global_connect}
@@ -25,6 +25,7 @@ if { [sc_cfg_tool_task_exists {file} global_connect] } {
25
25
  source $global_connect
26
26
  }
27
27
  }
28
+ tee -file reports/global_connections.rpt {report_global_connect}
28
29
 
29
30
  ###############################
30
31
  # Initialize floorplan
@@ -14,104 +14,88 @@ source -echo "$sc_refdir/apr/preamble.tcl"
14
14
  # Need to check if we have any macros before performing macro placement,
15
15
  # since we get an error otherwise.
16
16
  if { [sc_design_has_unplaced_macros] } {
17
- if { [lindex [sc_cfg_tool_task_get var rtlmp_enable] 0] == "true" } {
18
- ###############################
19
- # Macro placement
20
- ###############################
17
+ ###############################
18
+ # Macro placement
19
+ ###############################
21
20
 
22
- lassign [sc_cfg_tool_task_get var macro_place_halo] halo_x halo_y
21
+ lassign [sc_cfg_tool_task_get var macro_place_halo] halo_x halo_y
23
22
 
24
- set rtlmp_args []
25
- set rtlmp_max_levels [lindex [sc_cfg_tool_task_get var rtlmp_max_levels] 0]
26
- if { $rtlmp_max_levels != "" } {
27
- lappend rtlmp_args -max_num_level $rtlmp_max_levels
28
- }
29
- set rtlmp_min_instances [lindex [sc_cfg_tool_task_get var rtlmp_min_instances] 0]
30
- if { $rtlmp_min_instances != "" } {
31
- lappend rtlmp_args -min_num_inst $rtlmp_min_instances
32
- }
33
- set rtlmp_max_instances [lindex [sc_cfg_tool_task_get var rtlmp_max_instances] 0]
34
- if { $rtlmp_max_instances != "" } {
35
- lappend rtlmp_args -max_num_inst $rtlmp_max_instances
36
- }
37
- set rtlmp_min_macros [lindex [sc_cfg_tool_task_get var rtlmp_min_macros] 0]
38
- if { $rtlmp_min_macros != "" } {
39
- lappend rtlmp_args -min_num_macro $rtlmp_min_macros
40
- }
41
- set rtlmp_max_macros [lindex [sc_cfg_tool_task_get var rtlmp_max_macros] 0]
42
- if { $rtlmp_max_macros != "" } {
43
- lappend rtlmp_args -max_num_macro $rtlmp_max_macros
44
- }
45
- set rtlmp_min_aspect_ratio [lindex [sc_cfg_tool_task_get var rtlmp_min_aspect_ratio] 0]
46
- if { $rtlmp_min_aspect_ratio != "" } {
47
- lappend rtlmp_args -min_ar $rtlmp_min_aspect_ratio
48
- }
49
- set rtlmp_fence [sc_cfg_tool_task_get var rtlmp_fence]
50
- if { $rtlmp_fence != "" } {
51
- lappend rtlmp_args -fence_lx [lindex $rtlmp_fence 0]
52
- lappend rtlmp_args -fence_ly [lindex $rtlmp_fence 1]
53
- lappend rtlmp_args -fence_ux [lindex $rtlmp_fence 2]
54
- lappend rtlmp_args -fence_uy [lindex $rtlmp_fence 3]
55
- }
56
- set rtlmp_bus_planning [lindex [sc_cfg_tool_task_get var rtlmp_bus_planning] 0]
57
- if { $rtlmp_bus_planning == "true" } {
58
- lappend rtlmp_args -bus_planning
59
- }
60
- set rtlmp_target_dead_space [lindex [sc_cfg_tool_task_get var rtlmp_target_dead_space] 0]
61
- if { $rtlmp_target_dead_space != "" } {
62
- lappend rtlmp_args -target_dead_space $rtlmp_target_dead_space
63
- }
64
-
65
- set rtlmp_area_weight [lindex [sc_cfg_tool_task_get var rtlmp_area_weight] 0]
66
- if { $rtlmp_area_weight != "" } {
67
- lappend rtlmp_args -area_weight $rtlmp_area_weight
68
- }
69
- set rtlmp_outline_weight [lindex [sc_cfg_tool_task_get var rtlmp_outline_weight] 0]
70
- if { $rtlmp_outline_weight != "" } {
71
- lappend rtlmp_args -outline_weight $rtlmp_outline_weight
72
- }
73
- set rtlmp_wirelength_weight [lindex [sc_cfg_tool_task_get var rtlmp_wirelength_weight] 0]
74
- if { $rtlmp_wirelength_weight != "" } {
75
- lappend rtlmp_args -wirelength_weight $rtlmp_wirelength_weight
76
- }
77
- set rtlmp_guidance_weight [lindex [sc_cfg_tool_task_get var rtlmp_guidance_weight] 0]
78
- if { $rtlmp_guidance_weight != "" } {
79
- lappend rtlmp_args -guidance_weight $rtlmp_guidance_weight
80
- }
81
- set rtlmp_fence_weight [lindex [sc_cfg_tool_task_get var rtlmp_fence_weight] 0]
82
- if { $rtlmp_fence_weight != "" } {
83
- lappend rtlmp_args -fence_weight $rtlmp_fence_weight
84
- }
85
- set rtlmp_notch_weight [lindex [sc_cfg_tool_task_get var rtlmp_notch_weight] 0]
86
- if { $rtlmp_notch_weight != "" } {
87
- lappend rtlmp_args -notch_weight $rtlmp_notch_weight
88
- }
89
- set rtlmp_blockage_weight [lindex [sc_cfg_tool_task_get var rtlmp_blockage_weight] 0]
90
- if { $rtlmp_blockage_weight != "" } {
91
- lappend rtlmp_args -blockage_weight $rtlmp_blockage_weight
92
- }
93
-
94
- rtl_macro_placer \
95
- -report_directory reports/rtlmp \
96
- -halo_width $halo_x \
97
- -halo_height $halo_y \
98
- -target_util [sc_global_placement_density] \
99
- {*}$rtlmp_args
100
- } else {
101
- ###############################
102
- # TDMS Global Placement
103
- ###############################
104
-
105
- sc_global_placement -disable_routability_driven
106
-
107
- ###############################
108
- # Macro placement
109
- ###############################
23
+ set rtlmp_args []
24
+ set rtlmp_max_levels [lindex [sc_cfg_tool_task_get var rtlmp_max_levels] 0]
25
+ if { $rtlmp_max_levels != "" } {
26
+ lappend rtlmp_args -max_num_level $rtlmp_max_levels
27
+ }
28
+ set rtlmp_min_instances [lindex [sc_cfg_tool_task_get var rtlmp_min_instances] 0]
29
+ if { $rtlmp_min_instances != "" } {
30
+ lappend rtlmp_args -min_num_inst $rtlmp_min_instances
31
+ }
32
+ set rtlmp_max_instances [lindex [sc_cfg_tool_task_get var rtlmp_max_instances] 0]
33
+ if { $rtlmp_max_instances != "" } {
34
+ lappend rtlmp_args -max_num_inst $rtlmp_max_instances
35
+ }
36
+ set rtlmp_min_macros [lindex [sc_cfg_tool_task_get var rtlmp_min_macros] 0]
37
+ if { $rtlmp_min_macros != "" } {
38
+ lappend rtlmp_args -min_num_macro $rtlmp_min_macros
39
+ }
40
+ set rtlmp_max_macros [lindex [sc_cfg_tool_task_get var rtlmp_max_macros] 0]
41
+ if { $rtlmp_max_macros != "" } {
42
+ lappend rtlmp_args -max_num_macro $rtlmp_max_macros
43
+ }
44
+ set rtlmp_min_aspect_ratio [lindex [sc_cfg_tool_task_get var rtlmp_min_aspect_ratio] 0]
45
+ if { $rtlmp_min_aspect_ratio != "" } {
46
+ lappend rtlmp_args -min_ar $rtlmp_min_aspect_ratio
47
+ }
48
+ set rtlmp_fence [sc_cfg_tool_task_get var rtlmp_fence]
49
+ if { $rtlmp_fence != "" } {
50
+ lappend rtlmp_args -fence_lx [lindex $rtlmp_fence 0]
51
+ lappend rtlmp_args -fence_ly [lindex $rtlmp_fence 1]
52
+ lappend rtlmp_args -fence_ux [lindex $rtlmp_fence 2]
53
+ lappend rtlmp_args -fence_uy [lindex $rtlmp_fence 3]
54
+ }
55
+ set rtlmp_bus_planning [lindex [sc_cfg_tool_task_get var rtlmp_bus_planning] 0]
56
+ if { $rtlmp_bus_planning == "true" } {
57
+ lappend rtlmp_args -bus_planning
58
+ }
59
+ set rtlmp_target_dead_space [lindex [sc_cfg_tool_task_get var rtlmp_target_dead_space] 0]
60
+ if { $rtlmp_target_dead_space != "" } {
61
+ lappend rtlmp_args -target_dead_space $rtlmp_target_dead_space
62
+ }
110
63
 
111
- macro_placement \
112
- -halo [sc_cfg_tool_task_get var macro_place_halo] \
113
- -channel [sc_cfg_tool_task_get var macro_place_channel]
64
+ set rtlmp_area_weight [lindex [sc_cfg_tool_task_get var rtlmp_area_weight] 0]
65
+ if { $rtlmp_area_weight != "" } {
66
+ lappend rtlmp_args -area_weight $rtlmp_area_weight
67
+ }
68
+ set rtlmp_outline_weight [lindex [sc_cfg_tool_task_get var rtlmp_outline_weight] 0]
69
+ if { $rtlmp_outline_weight != "" } {
70
+ lappend rtlmp_args -outline_weight $rtlmp_outline_weight
71
+ }
72
+ set rtlmp_wirelength_weight [lindex [sc_cfg_tool_task_get var rtlmp_wirelength_weight] 0]
73
+ if { $rtlmp_wirelength_weight != "" } {
74
+ lappend rtlmp_args -wirelength_weight $rtlmp_wirelength_weight
114
75
  }
76
+ set rtlmp_guidance_weight [lindex [sc_cfg_tool_task_get var rtlmp_guidance_weight] 0]
77
+ if { $rtlmp_guidance_weight != "" } {
78
+ lappend rtlmp_args -guidance_weight $rtlmp_guidance_weight
79
+ }
80
+ set rtlmp_fence_weight [lindex [sc_cfg_tool_task_get var rtlmp_fence_weight] 0]
81
+ if { $rtlmp_fence_weight != "" } {
82
+ lappend rtlmp_args -fence_weight $rtlmp_fence_weight
83
+ }
84
+ set rtlmp_notch_weight [lindex [sc_cfg_tool_task_get var rtlmp_notch_weight] 0]
85
+ if { $rtlmp_notch_weight != "" } {
86
+ lappend rtlmp_args -notch_weight $rtlmp_notch_weight
87
+ }
88
+ set rtlmp_blockage_weight [lindex [sc_cfg_tool_task_get var rtlmp_blockage_weight] 0]
89
+ if { $rtlmp_blockage_weight != "" } {
90
+ lappend rtlmp_args -blockage_weight $rtlmp_blockage_weight
91
+ }
92
+
93
+ rtl_macro_placer \
94
+ -report_directory reports/rtlmp \
95
+ -halo_width $halo_x \
96
+ -halo_height $halo_y \
97
+ -target_util [sc_global_placement_density] \
98
+ {*}$rtlmp_args
115
99
  }
116
100
 
117
101
  sc_print_macro_information
@@ -33,6 +33,7 @@ foreach pdnconfig [sc_cfg_tool_task_get {file} pdn_config] {
33
33
 
34
34
  lappend pdn_files $pdnconfig
35
35
  }
36
+ tee -quiet -file reports/power_grid_configuration.rpt {pdngen -report_only}
36
37
  pdngen -failed_via_report "reports/${sc_design}_pdngen_failed_vias.rpt"
37
38
 
38
39
  ###############################
@@ -47,10 +48,20 @@ foreach net [sc_supply_nets] {
47
48
 
48
49
  foreach net [sc_psm_check_nets] {
49
50
  puts "Check supply net: $net"
51
+
52
+ set check_args []
53
+ if {
54
+ [sc_check_version 18610] &&
55
+ [sc_cfg_tool_task_check_in_list $net var psm_allow_missing_terminal_nets]
56
+ } {
57
+ lappend check_args -dont_require_terminals
58
+ }
59
+
50
60
  check_power_grid \
51
61
  -floorplanning \
52
62
  -error_file "reports/power_grid_${net}.rpt" \
53
- -net $net
63
+ -net $net \
64
+ {*}$check_args
54
65
  }
55
66
 
56
67
  ###############################
@@ -20,6 +20,7 @@ set rsz_hold_slack_margin [lindex [sc_cfg_tool_task_get {var} rsz_hold_slack_mar
20
20
  set rsz_slew_margin [lindex [sc_cfg_tool_task_get {var} rsz_slew_margin] 0]
21
21
  set rsz_cap_margin [lindex [sc_cfg_tool_task_get {var} rsz_cap_margin] 0]
22
22
  set rsz_repair_tns [lindex [sc_cfg_tool_task_get {var} rsz_repair_tns] 0]
23
+ set rsz_recover_power [lindex [sc_cfg_tool_task_get {var} rsz_recover_power] 0]
23
24
 
24
25
  set repair_timing_args []
25
26
  if { [lindex [sc_cfg_tool_task_get {var} rsz_skip_pin_swap] 0] == "true" } {
@@ -77,6 +78,29 @@ if { [lindex [sc_cfg_tool_task_get var rsz_skip_hold_repair] 0] != "true" } {
77
78
  sc_set_dont_use
78
79
  }
79
80
 
81
+ if { [lindex [sc_cfg_tool_task_get var rsz_skip_recover_power] 0] != "true" } {
82
+ ###############################
83
+ # Recover power
84
+ ###############################
85
+
86
+ estimate_parasitics -placement
87
+
88
+ # Enable cells
89
+ sc_set_dont_use -hold -scanchain -multibit -report dont_use.repair_timing.power
90
+
91
+ repair_timing \
92
+ -recover_power $rsz_recover_power \
93
+ -verbose \
94
+ -setup_margin $rsz_setup_slack_margin \
95
+ -hold_margin $rsz_hold_slack_margin \
96
+ {*}$repair_timing_args
97
+
98
+ sc_detailed_placement
99
+
100
+ # Restore dont use
101
+ sc_set_dont_use
102
+ }
103
+
80
104
  global_connect
81
105
 
82
106
  # estimate for metrics
@@ -581,7 +581,7 @@ proc sc_setup_sta { } {
581
581
 
582
582
  # Check timing setup
583
583
  if { [sc_cfg_tool_task_check_in_list check_setup var reports] } {
584
- check_setup
584
+ tee -file "reports/check_timing_setup.rpt" {check_setup -verbose}
585
585
  }
586
586
 
587
587
  if { [llength [all_clocks]] == 0 } {
@@ -758,6 +758,7 @@ proc sc_set_dont_use { args } {
758
758
  }
759
759
 
760
760
  if { [info exists keys(-report)] } {
761
- tee -file reports/$keys(-report).rpt {report_dont_use}
761
+ puts "Dont use report: reports/$keys(-report).rpt"
762
+ tee -quiet -file reports/$keys(-report).rpt {report_dont_use}
762
763
  }
763
764
  }
@@ -56,4 +56,5 @@ if { [sc_has_input_files odb "input layout odb"] } {
56
56
  source $global_connect
57
57
  }
58
58
  }
59
+ tee -file reports/global_connections.rpt {report_global_connect}
59
60
  }
@@ -98,6 +98,10 @@ if { [sc_cfg_tool_task_check_in_list fmax var reports] } {
98
98
  }
99
99
  }
100
100
 
101
+ if { [llength [all_clocks]] > 0 } {
102
+ tee -file "reports/timing/clocks.rpt" {report_clock_properties}
103
+ }
104
+
101
105
  # get logic depth of design
102
106
  utl::metric_int "design__logic__depth" [sc_count_logic_depth]
103
107
 
@@ -164,17 +168,4 @@ foreach markerdb [[ord::get_db_block] getMarkerCategories] {
164
168
 
165
169
  utl::push_metrics_stage "sc__cellarea__{}"
166
170
  tee -file reports/cell_usage.rpt {report_cell_usage -verbose}
167
-
168
- foreach modinst [[ord::get_db_block] getModInsts] {
169
- tee -quiet -append -file reports/cell_usage.rpt { puts "" }
170
- tee -quiet -append -file reports/cell_usage.rpt {
171
- puts "########################################################"
172
- }
173
- tee -quiet -append -file reports/cell_usage.rpt { puts "" }
174
-
175
- utl::metric "design__instance__name__in_module:[[$modinst getMaster] getName]" \
176
- [$modinst getHierarchicalName]
177
- tee -quiet -append -file reports/cell_usage.rpt \
178
- "report_cell_usage -verbose [$modinst getHierarchicalName]"
179
- }
180
171
  utl::pop_metrics_stage
@@ -1,5 +1,2 @@
1
- write_db "outputs/${sc_design}.odb"
2
- write_sdc "outputs/${sc_design}.sdc"
3
-
4
- write_def "outputs/${sc_design}.def"
5
- write_verilog -include_pwr_gnd "outputs/${sc_design}.vg"
1
+ source "$sc_refdir/common/write_data_physical.tcl"
2
+ source "$sc_refdir/common/write_data_timing.tcl"
@@ -0,0 +1,3 @@
1
+ write_db "outputs/${sc_design}.odb"
2
+ write_def "outputs/${sc_design}.def"
3
+ write_verilog -include_pwr_gnd "outputs/${sc_design}.vg"
@@ -0,0 +1 @@
1
+ write_sdc "outputs/${sc_design}.sdc"
@@ -180,5 +180,5 @@ utl::pop_metrics_stage
180
180
  ###############################
181
181
 
182
182
  utl::push_metrics_stage "sc__write__{}"
183
- source "$sc_refdir/common/write_data.tcl"
183
+ source "$sc_refdir/common/write_data_physical.tcl"
184
184
  utl::pop_metrics_stage
@@ -8,7 +8,7 @@ Sources: https://github.com/The-OpenROAD-Project/OpenSTA
8
8
  Installation: https://github.com/The-OpenROAD-Project/OpenSTA (also installed with OpenROAD)
9
9
  '''
10
10
 
11
- import os
11
+ from siliconcompiler import utils
12
12
  from siliconcompiler.tools.openroad._apr import get_library_timing_keypaths
13
13
  from siliconcompiler.tools._common import get_tool_task
14
14
  from siliconcompiler.tools._common.asic import get_libraries
@@ -43,7 +43,7 @@ def setup(chip):
43
43
  chip.set('tool', tool, 'task', task, 'refdir', 'tools/opensta/scripts',
44
44
  step=step, index=index,
45
45
  package='siliconcompiler', clobber=False)
46
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
46
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
47
47
  step=step, index=index, clobber=False)
48
48
 
49
49
  if delaymodel != 'nldm':
@@ -1,4 +1,4 @@
1
- import os
1
+ from siliconcompiler import utils
2
2
  from siliconcompiler.tools.opensta import setup as tool_setup
3
3
  from siliconcompiler.tools.opensta import runtime_options as tool_runtime_options
4
4
  from siliconcompiler.tools._common import get_tool_task
@@ -17,7 +17,7 @@ def setup(chip):
17
17
  chip.set('tool', tool, 'task', task, 'script', 'sc_report_libraries.tcl',
18
18
  step=step, index=index, clobber=False)
19
19
 
20
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
20
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
21
21
  step=step, index=index)
22
22
 
23
23
 
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  import re
3
+ from siliconcompiler import utils
3
4
  from siliconcompiler import sc_open, SiliconCompilerError
4
5
  from siliconcompiler.tools.opensta import setup as tool_setup
5
6
  from siliconcompiler.tools.opensta import runtime_options as tool_runtime_options
@@ -22,7 +23,7 @@ def setup(chip):
22
23
  chip.set('tool', tool, 'task', task, 'script', 'sc_timing.tcl',
23
24
  step=step, index=index, clobber=False)
24
25
 
25
- chip.set('tool', tool, 'task', task, 'threads', os.cpu_count(),
26
+ chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
26
27
  step=step, index=index)
27
28
 
28
29
  design = chip.top()