siliconcompiler 0.28.9__py3-none-any.whl → 0.29.0__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 (109) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/apps/sc_remote.py +15 -14
  3. siliconcompiler/apps/sc_show.py +5 -5
  4. siliconcompiler/apps/utils/replay.py +136 -0
  5. siliconcompiler/core.py +14 -12
  6. siliconcompiler/flows/_common.py +11 -13
  7. siliconcompiler/flows/asicflow.py +83 -42
  8. siliconcompiler/remote/__init__.py +11 -0
  9. siliconcompiler/remote/client.py +753 -815
  10. siliconcompiler/report/report.py +2 -0
  11. siliconcompiler/report/summary_table.py +1 -1
  12. siliconcompiler/scheduler/__init__.py +51 -9
  13. siliconcompiler/schema/schema_cfg.py +15 -3
  14. siliconcompiler/schema/schema_obj.py +16 -0
  15. siliconcompiler/sphinx_ext/dynamicgen.py +4 -3
  16. siliconcompiler/targets/gf180_demo.py +3 -3
  17. siliconcompiler/templates/replay/requirements.txt +6 -0
  18. siliconcompiler/templates/replay/run.py.j2 +22 -0
  19. siliconcompiler/templates/replay/setup.sh +17 -0
  20. siliconcompiler/tools/_common/__init__.py +15 -1
  21. siliconcompiler/tools/_common/asic.py +10 -3
  22. siliconcompiler/tools/builtin/concatenate.py +1 -1
  23. siliconcompiler/tools/openroad/__init__.py +103 -0
  24. siliconcompiler/tools/openroad/{openroad.py → _apr.py} +413 -422
  25. siliconcompiler/tools/openroad/antenna_repair.py +78 -0
  26. siliconcompiler/tools/openroad/clock_tree_synthesis.py +64 -0
  27. siliconcompiler/tools/openroad/detailed_placement.py +59 -0
  28. siliconcompiler/tools/openroad/detailed_route.py +62 -0
  29. siliconcompiler/tools/openroad/endcap_tapcell_insertion.py +52 -0
  30. siliconcompiler/tools/openroad/fillercell_insertion.py +58 -0
  31. siliconcompiler/tools/openroad/{dfm.py → fillmetal_insertion.py} +35 -19
  32. siliconcompiler/tools/openroad/global_placement.py +58 -0
  33. siliconcompiler/tools/openroad/global_route.py +63 -0
  34. siliconcompiler/tools/openroad/init_floorplan.py +103 -0
  35. siliconcompiler/tools/openroad/macro_placement.py +65 -0
  36. siliconcompiler/tools/openroad/metrics.py +23 -8
  37. siliconcompiler/tools/openroad/pin_placement.py +56 -0
  38. siliconcompiler/tools/openroad/power_grid.py +65 -0
  39. siliconcompiler/tools/openroad/rcx_bench.py +7 -4
  40. siliconcompiler/tools/openroad/rcx_extract.py +2 -1
  41. siliconcompiler/tools/openroad/rdlroute.py +4 -4
  42. siliconcompiler/tools/openroad/repair_design.py +59 -0
  43. siliconcompiler/tools/openroad/repair_timing.py +63 -0
  44. siliconcompiler/tools/openroad/screenshot.py +9 -20
  45. siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +44 -0
  46. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +95 -0
  47. siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +51 -0
  48. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +62 -0
  49. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +41 -0
  50. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +71 -0
  51. siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +55 -0
  52. siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +27 -0
  53. siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +36 -0
  54. siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +26 -0
  55. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +61 -0
  56. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +333 -0
  57. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +123 -0
  58. siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +22 -0
  59. siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +41 -0
  60. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +60 -0
  61. siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +68 -0
  62. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +83 -0
  63. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +125 -0
  64. siliconcompiler/tools/openroad/scripts/common/debugging.tcl +28 -0
  65. siliconcompiler/tools/openroad/scripts/common/procs.tcl +675 -0
  66. siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl +59 -0
  67. siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl +20 -0
  68. siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl +16 -0
  69. siliconcompiler/tools/openroad/scripts/common/reports.tcl +180 -0
  70. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +18 -0
  71. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +395 -0
  72. siliconcompiler/tools/openroad/scripts/{sc_rcx_bench.tcl → rcx/sc_rcx_bench.tcl} +5 -5
  73. siliconcompiler/tools/openroad/scripts/{sc_rcx_extract.tcl → rcx/sc_rcx_extract.tcl} +0 -0
  74. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +5 -16
  75. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +51 -51
  76. siliconcompiler/tools/openroad/scripts/sc_show.tcl +105 -0
  77. siliconcompiler/tools/openroad/show.py +28 -23
  78. siliconcompiler/tools/openroad/{export.py → write_data.py} +31 -26
  79. siliconcompiler/tools/opensta/__init__.py +1 -1
  80. siliconcompiler/tools/yosys/syn_asic.py +7 -0
  81. siliconcompiler/tools/yosys/syn_asic.tcl +27 -6
  82. siliconcompiler/tools/yosys/syn_fpga.tcl +26 -18
  83. siliconcompiler/toolscripts/_tools.json +4 -4
  84. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.0.dist-info}/METADATA +14 -12
  85. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.0.dist-info}/RECORD +90 -63
  86. siliconcompiler/tools/openroad/cts.py +0 -45
  87. siliconcompiler/tools/openroad/floorplan.py +0 -75
  88. siliconcompiler/tools/openroad/physyn.py +0 -27
  89. siliconcompiler/tools/openroad/place.py +0 -41
  90. siliconcompiler/tools/openroad/route.py +0 -45
  91. siliconcompiler/tools/openroad/scripts/__init__.py +0 -0
  92. siliconcompiler/tools/openroad/scripts/sc_apr.tcl +0 -514
  93. siliconcompiler/tools/openroad/scripts/sc_cts.tcl +0 -68
  94. siliconcompiler/tools/openroad/scripts/sc_dfm.tcl +0 -22
  95. siliconcompiler/tools/openroad/scripts/sc_export.tcl +0 -100
  96. siliconcompiler/tools/openroad/scripts/sc_floorplan.tcl +0 -456
  97. siliconcompiler/tools/openroad/scripts/sc_metrics.tcl +0 -1
  98. siliconcompiler/tools/openroad/scripts/sc_physyn.tcl +0 -6
  99. siliconcompiler/tools/openroad/scripts/sc_place.tcl +0 -84
  100. siliconcompiler/tools/openroad/scripts/sc_procs.tcl +0 -494
  101. siliconcompiler/tools/openroad/scripts/sc_report.tcl +0 -189
  102. siliconcompiler/tools/openroad/scripts/sc_route.tcl +0 -143
  103. siliconcompiler/tools/openroad/scripts/sc_screenshot.tcl +0 -18
  104. siliconcompiler/tools/openroad/scripts/sc_write_images.tcl +0 -393
  105. /siliconcompiler/tools/openroad/scripts/{sc_write.tcl → common/write_data.tcl} +0 -0
  106. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.0.dist-info}/LICENSE +0 -0
  107. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.0.dist-info}/WHEEL +0 -0
  108. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.0.dist-info}/entry_points.txt +0 -0
  109. {siliconcompiler-0.28.9.dist-info → siliconcompiler-0.29.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,65 @@
1
+ from siliconcompiler import NodeStatus
2
+
3
+ from siliconcompiler.tools._common import has_pre_post_script, get_tool_task
4
+
5
+ from siliconcompiler.tools.openroad._apr import setup as apr_setup
6
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
7
+ from siliconcompiler.tools.openroad._apr import \
8
+ define_ord_params, define_sta_params, define_sdc_params, \
9
+ define_mpl_params, define_gpl_params
10
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
11
+ from siliconcompiler.tools.openroad._apr import extract_metrics
12
+
13
+
14
+ def setup(chip):
15
+ '''
16
+ Macro placement
17
+ '''
18
+
19
+ # Generic apr tool setup.
20
+ apr_setup(chip)
21
+
22
+ # Task setup
23
+ step = chip.get('arg', 'step')
24
+ index = chip.get('arg', 'index')
25
+ tool, task = get_tool_task(chip, step, index)
26
+
27
+ chip.set('tool', tool, 'task', task, 'script', 'apr/sc_macro_placement.tcl',
28
+ step=step, index=index)
29
+
30
+ # Setup task IO
31
+ set_pnr_inputs(chip)
32
+ set_pnr_outputs(chip)
33
+
34
+ # set default values for openroad
35
+ define_ord_params(chip)
36
+ define_sta_params(chip)
37
+ define_sdc_params(chip)
38
+ define_mpl_params(chip)
39
+ define_gpl_params(chip)
40
+
41
+ set_reports(chip, [
42
+ 'setup',
43
+ 'unconstrained',
44
+ 'power'
45
+ ])
46
+
47
+
48
+ def pre_process(chip):
49
+ step = chip.get('arg', 'step')
50
+ index = chip.get('arg', 'index')
51
+ input_nodes = chip.get('record', 'inputnode', step=step, index=index)
52
+ if not has_pre_post_script(chip) and all([
53
+ chip.get('metric', 'macros', step=in_step, index=in_index) == 0
54
+ for in_step, in_index in input_nodes
55
+ ]):
56
+ chip.set('record', 'status', NodeStatus.SKIPPED, step=step, index=index)
57
+ chip.logger.warning(f'{step}{index} will be skipped since are no macros to place.')
58
+ return
59
+
60
+ build_pex_corners(chip)
61
+ define_ord_files(chip)
62
+
63
+
64
+ def post_process(chip):
65
+ extract_metrics(chip)
@@ -1,8 +1,10 @@
1
- from siliconcompiler.tools.openroad.openroad import setup as setup_tool
2
- from siliconcompiler.tools.openroad.openroad import build_pex_corners
3
- from siliconcompiler.tools.openroad.openroad import post_process as or_post_process
4
- from siliconcompiler.tools.openroad.openroad import pre_process as or_pre_process
5
- from siliconcompiler.tools.openroad.openroad import _set_reports, set_pnr_inputs, set_pnr_outputs
1
+ from siliconcompiler.tools._common import get_tool_task
2
+ from siliconcompiler.tools.openroad._apr import setup as setup_tool
3
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
4
+ from siliconcompiler.tools.openroad._apr import \
5
+ define_ord_params, define_sta_params, define_sdc_params
6
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
7
+ from siliconcompiler.tools.openroad._apr import extract_metrics
6
8
 
7
9
 
8
10
  def setup(chip):
@@ -13,10 +15,23 @@ def setup(chip):
13
15
  # Generic tool setup.
14
16
  setup_tool(chip)
15
17
 
18
+ # Task setup
19
+ step = chip.get('arg', 'step')
20
+ index = chip.get('arg', 'index')
21
+ tool, task = get_tool_task(chip, step, index)
22
+
23
+ chip.set('tool', tool, 'task', task, 'script', 'apr/sc_metrics.tcl',
24
+ step=step, index=index)
25
+
16
26
  set_pnr_inputs(chip)
17
27
  set_pnr_outputs(chip)
18
28
 
19
- _set_reports(chip, [
29
+ # set default values for openroad
30
+ define_ord_params(chip)
31
+ define_sta_params(chip)
32
+ define_sdc_params(chip)
33
+
34
+ set_reports(chip, [
20
35
  'setup',
21
36
  'hold',
22
37
  'unconstrained',
@@ -36,9 +51,9 @@ def setup(chip):
36
51
 
37
52
 
38
53
  def pre_process(chip):
39
- or_pre_process(chip)
54
+ define_ord_files(chip)
40
55
  build_pex_corners(chip)
41
56
 
42
57
 
43
58
  def post_process(chip):
44
- or_post_process(chip)
59
+ extract_metrics(chip)
@@ -0,0 +1,56 @@
1
+ from siliconcompiler.tools._common import get_tool_task
2
+ from siliconcompiler.tools.openroad._apr import setup as apr_setup
3
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
4
+ from siliconcompiler.tools.openroad._apr import \
5
+ define_ord_params, define_sta_params, define_sdc_params, \
6
+ define_gpl_params, define_ppl_params
7
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
8
+ from siliconcompiler.tools.openroad._apr import extract_metrics
9
+
10
+
11
+ def setup(chip):
12
+ '''
13
+ Perform IO pin placement refinement
14
+ '''
15
+
16
+ # Generic apr tool setup.
17
+ apr_setup(chip)
18
+
19
+ # Task setup
20
+ step = chip.get('arg', 'step')
21
+ index = chip.get('arg', 'index')
22
+ tool, task = get_tool_task(chip, step, index)
23
+
24
+ chip.set('tool', tool, 'task', task, 'script', 'apr/sc_pin_placement.tcl',
25
+ step=step, index=index)
26
+
27
+ # Setup task IO
28
+ set_pnr_inputs(chip)
29
+ set_pnr_outputs(chip)
30
+
31
+ # set default values for openroad
32
+ define_ord_params(chip)
33
+ define_sta_params(chip)
34
+ define_sdc_params(chip)
35
+ define_gpl_params(chip)
36
+ define_ppl_params(chip)
37
+
38
+ set_reports(chip, [
39
+ 'setup',
40
+ 'unconstrained',
41
+ 'power',
42
+
43
+ # Images
44
+ 'placement_density',
45
+ 'routing_congestion',
46
+ 'power_density'
47
+ ])
48
+
49
+
50
+ def pre_process(chip):
51
+ define_ord_files(chip)
52
+ build_pex_corners(chip)
53
+
54
+
55
+ def post_process(chip):
56
+ extract_metrics(chip)
@@ -0,0 +1,65 @@
1
+ from siliconcompiler import NodeStatus
2
+
3
+ from siliconcompiler.tools._common import get_tool_task, has_pre_post_script
4
+
5
+ from siliconcompiler.tools.openroad._apr import setup as apr_setup
6
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
7
+ from siliconcompiler.tools.openroad._apr import \
8
+ define_ord_params, define_sta_params, define_sdc_params, \
9
+ define_pdn_params, define_psm_params
10
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, \
11
+ define_ord_files, define_pdn_files
12
+ from siliconcompiler.tools.openroad._apr import extract_metrics
13
+
14
+
15
+ def setup(chip):
16
+ '''
17
+ Perform power grid insertion and connectivity analysis
18
+ '''
19
+
20
+ # Generic apr tool setup.
21
+ apr_setup(chip)
22
+
23
+ # Task setup
24
+ step = chip.get('arg', 'step')
25
+ index = chip.get('arg', 'index')
26
+ tool, task = get_tool_task(chip, step, index)
27
+
28
+ chip.set('tool', tool, 'task', task, 'script', 'apr/sc_power_grid.tcl',
29
+ step=step, index=index)
30
+
31
+ # Setup task IO
32
+ set_pnr_inputs(chip)
33
+ set_pnr_outputs(chip)
34
+
35
+ # set default values for openroad
36
+ define_ord_params(chip)
37
+ define_sta_params(chip)
38
+ define_sdc_params(chip)
39
+ define_pdn_params(chip)
40
+ define_psm_params(chip)
41
+
42
+ set_reports(chip, [])
43
+
44
+
45
+ def pre_process(chip):
46
+ step = chip.get('arg', 'step')
47
+ index = chip.get('arg', 'index')
48
+ tool, task = get_tool_task(chip, step, index)
49
+
50
+ define_pdn_files(chip)
51
+ pdncfg = [file for file in chip.find_files('tool', tool, 'task', task, 'file', 'pdn_config',
52
+ step=step, index=index) if file]
53
+ if not has_pre_post_script(chip) and \
54
+ (chip.get('tool', tool, 'task', task, 'var', 'pdn_enable',
55
+ step=step, index=index)[0] == 'false' or len(pdncfg) == 0):
56
+ chip.set('record', 'status', NodeStatus.SKIPPED, step=step, index=index)
57
+ chip.logger.warning(f'{step}{index} will be skipped since power grid is disabled.')
58
+ return
59
+
60
+ define_ord_files(chip)
61
+ build_pex_corners(chip)
62
+
63
+
64
+ def post_process(chip):
65
+ extract_metrics(chip)
@@ -1,4 +1,4 @@
1
- from siliconcompiler.tools.openroad import openroad
1
+ from siliconcompiler.tools import openroad
2
2
  from siliconcompiler.tools._common import get_tool_task
3
3
 
4
4
 
@@ -12,8 +12,10 @@ def setup_tool(chip):
12
12
  index = chip.get('arg', 'index')
13
13
  tool, task = get_tool_task(chip, step, index)
14
14
 
15
- chip.set('tool', tool, 'task', task, 'script', 'sc_rcx.tcl', step=step, index=index)
16
- chip.set('tool', tool, 'task', task, 'threads', 1, step=step, index=index)
15
+ chip.set('tool', tool, 'task', task, 'script', 'sc_rcx.tcl',
16
+ step=step, index=index)
17
+ chip.set('tool', tool, 'task', task, 'threads', 1,
18
+ step=step, index=index)
17
19
 
18
20
 
19
21
  def setup_task(chip):
@@ -49,7 +51,8 @@ def setup_task(chip):
49
51
 
50
52
 
51
53
  def setup(chip):
52
- ''' Helper method for configs specific to extraction tasks.
54
+ '''
55
+ Builds the RCX extraction bench
53
56
  '''
54
57
 
55
58
  # Generic tool setup.
@@ -3,7 +3,8 @@ from siliconcompiler.tools._common import get_tool_task
3
3
 
4
4
 
5
5
  def setup(chip):
6
- ''' Helper method for configs specific to extraction tasks.
6
+ '''
7
+ Convert extracted results into RCX.
7
8
  '''
8
9
 
9
10
  # Generic tool setup.
@@ -2,8 +2,8 @@ import os
2
2
 
3
3
  from siliconcompiler.tools._common import input_provides, get_tool_task
4
4
  from siliconcompiler.tools._common.asic import set_tool_task_var
5
- from siliconcompiler.tools.openroad.openroad import build_pex_corners
6
- from siliconcompiler.tools.openroad.openroad import post_process as or_post_process
5
+ from siliconcompiler.tools.openroad._apr import build_pex_corners
6
+ from siliconcompiler.tools.openroad._apr import extract_metrics
7
7
 
8
8
 
9
9
  def setup(chip):
@@ -26,7 +26,7 @@ def setup(chip):
26
26
 
27
27
  chip.set('tool', tool, 'exe', tool)
28
28
  chip.set('tool', tool, 'vswitch', '-version')
29
- chip.set('tool', tool, 'version', '>=v2.0-16839')
29
+ chip.set('tool', tool, 'version', '>=v2.0-17581')
30
30
  chip.set('tool', tool, 'format', 'tcl')
31
31
 
32
32
  # exit automatically in batch mode and not breakpoint
@@ -94,4 +94,4 @@ def pre_process(chip):
94
94
 
95
95
 
96
96
  def post_process(chip):
97
- or_post_process(chip)
97
+ extract_metrics(chip)
@@ -0,0 +1,59 @@
1
+ from siliconcompiler.tools._common import get_tool_task
2
+ from siliconcompiler.tools.openroad._apr import setup as apr_setup
3
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
4
+ from siliconcompiler.tools.openroad._apr import \
5
+ define_ord_params, define_sta_params, define_sdc_params, \
6
+ define_rsz_params, define_tiecell_params
7
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
8
+ from siliconcompiler.tools.openroad._apr import extract_metrics
9
+
10
+
11
+ def setup(chip):
12
+ '''
13
+ Perform timing repair and tie-off cell insertion
14
+ '''
15
+
16
+ # Generic apr tool setup.
17
+ apr_setup(chip)
18
+
19
+ # Task setup
20
+ step = chip.get('arg', 'step')
21
+ index = chip.get('arg', 'index')
22
+ tool, task = get_tool_task(chip, step, index)
23
+
24
+ chip.set('tool', tool, 'task', task, 'script', 'apr/sc_repair_design.tcl',
25
+ step=step, index=index)
26
+
27
+ # Setup task IO
28
+ set_pnr_inputs(chip)
29
+ set_pnr_outputs(chip)
30
+
31
+ # set default values for openroad
32
+ define_ord_params(chip)
33
+ define_sta_params(chip)
34
+ define_sdc_params(chip)
35
+ define_rsz_params(chip)
36
+ define_tiecell_params(chip)
37
+
38
+ set_reports(chip, [
39
+ 'setup',
40
+ 'unconstrained',
41
+ 'power',
42
+ 'drv_violations',
43
+ 'fmax',
44
+
45
+ # Images
46
+ 'placement_density',
47
+ 'routing_congestion',
48
+ 'power_density',
49
+ 'optimization_placement'
50
+ ])
51
+
52
+
53
+ def pre_process(chip):
54
+ define_ord_files(chip)
55
+ build_pex_corners(chip)
56
+
57
+
58
+ def post_process(chip):
59
+ extract_metrics(chip)
@@ -0,0 +1,63 @@
1
+ from siliconcompiler.tools._common import get_tool_task
2
+ from siliconcompiler.tools.openroad._apr import setup as apr_setup
3
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
4
+ from siliconcompiler.tools.openroad._apr import \
5
+ define_ord_params, define_sta_params, define_sdc_params, \
6
+ define_rsz_params, define_dpl_params
7
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
8
+ from siliconcompiler.tools.openroad._apr import extract_metrics
9
+
10
+
11
+ def setup(chip):
12
+ '''
13
+ Perform setup and hold timing repairs
14
+ '''
15
+
16
+ # Generic apr tool setup.
17
+ apr_setup(chip)
18
+
19
+ # Task setup
20
+ step = chip.get('arg', 'step')
21
+ index = chip.get('arg', 'index')
22
+ tool, task = get_tool_task(chip, step, index)
23
+
24
+ chip.set('tool', tool, 'task', task, 'script', 'apr/sc_repair_timing.tcl',
25
+ step=step, index=index)
26
+
27
+ # Setup task IO
28
+ set_pnr_inputs(chip)
29
+ set_pnr_outputs(chip)
30
+
31
+ # set default values for openroad
32
+ define_ord_params(chip)
33
+ define_sta_params(chip)
34
+ define_sdc_params(chip)
35
+ define_rsz_params(chip)
36
+ define_dpl_params(chip)
37
+
38
+ set_reports(chip, [
39
+ 'setup',
40
+ 'hold',
41
+ 'unconstrained',
42
+ 'clock_skew',
43
+ 'power',
44
+ 'drv_violations',
45
+ 'fmax',
46
+
47
+ # Images
48
+ 'placement_density',
49
+ 'routing_congestion',
50
+ 'power_density',
51
+ 'optimization_placement',
52
+ 'clock_placement',
53
+ 'clock_trees'
54
+ ])
55
+
56
+
57
+ def pre_process(chip):
58
+ define_ord_files(chip)
59
+ build_pex_corners(chip)
60
+
61
+
62
+ def post_process(chip):
63
+ extract_metrics(chip)
@@ -1,17 +1,14 @@
1
- from siliconcompiler.tools.openroad import openroad
2
- from siliconcompiler.tools.openroad.openroad import setup as setup_tool
3
- from siliconcompiler.tools.openroad.openroad import build_pex_corners
4
- from siliconcompiler.tools.openroad.show import copy_show_files, generic_show_setup
5
- from siliconcompiler.tools.openroad.openroad import pre_process as or_pre_process
6
- from siliconcompiler.tools.openroad.openroad import _set_reports
7
1
  from siliconcompiler.tools._common import get_tool_task
2
+ from siliconcompiler.tools.openroad import make_docs as or_make_docs
3
+ from siliconcompiler.tools.openroad import show
4
+ from siliconcompiler.tools.openroad._apr import set_reports
8
5
 
9
6
 
10
7
  ####################################################################
11
8
  # Make Docs
12
9
  ####################################################################
13
10
  def make_docs(chip):
14
- openroad.make_docs(chip)
11
+ or_make_docs(chip)
15
12
  chip.set('tool', 'openroad', 'task', 'screenshot', 'var', 'show_filepath', '<path>')
16
13
 
17
14
 
@@ -19,19 +16,13 @@ def setup(chip):
19
16
  '''
20
17
  Generate a PNG file from a layout file
21
18
  '''
19
+ show.generic_show_setup(chip, True)
22
20
 
23
- tool = 'openroad'
24
- design = chip.top()
25
21
  step = chip.get('arg', 'step')
26
22
  index = chip.get('arg', 'index')
27
- _, task = get_tool_task(chip, step, index)
23
+ tool, task = get_tool_task(chip, step, index)
28
24
 
29
- # Generic tool setup.
30
- setup_tool(chip)
31
-
32
- generic_show_setup(chip, task, True)
33
-
34
- chip.add('tool', tool, 'task', task, 'output', design + '.png', step=step, index=index)
25
+ chip.add('tool', tool, 'task', task, 'output', f'{chip.top()}.png', step=step, index=index)
35
26
 
36
27
  chip.set('tool', tool, 'task', task, 'var', 'show_vertical_resolution', '1024',
37
28
  step=step, index=index, clobber=False)
@@ -42,7 +33,7 @@ def setup(chip):
42
33
  'true/false, include the images in reports/',
43
34
  field='help')
44
35
 
45
- _set_reports(chip, [
36
+ set_reports(chip, [
46
37
  # Images
47
38
  'placement_density',
48
39
  'routing_congestion',
@@ -55,6 +46,4 @@ def setup(chip):
55
46
 
56
47
 
57
48
  def pre_process(chip):
58
- or_pre_process(chip)
59
- copy_show_files(chip)
60
- build_pex_corners(chip)
49
+ show.pre_process(chip)
@@ -0,0 +1,44 @@
1
+ if { [llength $openroad_dont_touch] > 0 } {
2
+ # unset for next step
3
+ unset_dont_touch $openroad_dont_touch
4
+ }
5
+ utl::pop_metrics_stage
6
+
7
+ utl::push_metrics_stage "sc__poststep__{}"
8
+ if { [sc_cfg_tool_task_exists postscript] } {
9
+ foreach sc_post_script [sc_cfg_tool_task_get postscript] {
10
+ puts "Sourcing post script: ${sc_post_script}"
11
+ source -echo $sc_post_script
12
+ }
13
+ }
14
+ utl::pop_metrics_stage
15
+
16
+ ###############################
17
+ # Write Design Data
18
+ ###############################
19
+
20
+ utl::push_metrics_stage "sc__write__{}"
21
+ source "$sc_refdir/common/write_data.tcl"
22
+ utl::pop_metrics_stage
23
+
24
+ ###############################
25
+ # Reporting
26
+ ###############################
27
+
28
+ utl::push_metrics_stage "sc__metric__{}"
29
+ source "$sc_refdir/common/reports.tcl"
30
+ utl::pop_metrics_stage
31
+
32
+ # Images
33
+ utl::push_metrics_stage "sc__image__{}"
34
+ if {
35
+ [sc_has_gui] &&
36
+ [lindex [sc_cfg_tool_task_get var ord_enable_images] 0] == "true"
37
+ } {
38
+ if { [gui::enabled] } {
39
+ source "$sc_refdir/common/write_images.tcl"
40
+ } else {
41
+ gui::show "source \"$sc_refdir/common/write_images.tcl\"" false
42
+ }
43
+ }
44
+ utl::pop_metrics_stage
@@ -0,0 +1,95 @@
1
+ ##############################
2
+ # Schema Adapter
3
+ ###############################
4
+
5
+ set sc_step [sc_cfg_get arg step]
6
+ set sc_index [sc_cfg_get arg index]
7
+ set sc_flow [sc_cfg_get option flow]
8
+ set sc_tool [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index tool]
9
+ set sc_task [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index task]
10
+
11
+ set sc_refdir [sc_cfg_tool_task_get refdir]
12
+
13
+ ##############################
14
+ # Setup debugging
15
+ ###############################
16
+
17
+ source -echo "$sc_refdir/common/debugging.tcl"
18
+
19
+ ###############################
20
+ # Setup helper functions
21
+ ###############################
22
+
23
+ source "$sc_refdir/common/procs.tcl"
24
+
25
+ ###############################
26
+ # Design information
27
+ ###############################
28
+
29
+ # Design
30
+ set sc_design [sc_top]
31
+ set sc_optmode [sc_cfg_get option optmode]
32
+ set sc_pdk [sc_cfg_get option pdk]
33
+ set sc_stackup [sc_cfg_get option stackup]
34
+
35
+ # APR Parameters
36
+ set sc_targetlibs [sc_get_asic_libraries logic]
37
+ set sc_mainlib [lindex $sc_targetlibs 0]
38
+ set sc_delaymodel [sc_cfg_get asic delaymodel]
39
+
40
+ # Hard macro libraries
41
+ set sc_macrolibs [sc_get_asic_libraries macro]
42
+
43
+ # Threads
44
+ set_thread_count [sc_cfg_tool_task_get threads]
45
+
46
+ ###############################
47
+ # Read Files
48
+ ###############################
49
+
50
+ source -echo "$sc_refdir/common/read_liberty.tcl"
51
+
52
+ source -echo "$sc_refdir/common/read_input_files.tcl"
53
+
54
+ source -echo "$sc_refdir/common/read_timing_constraints.tcl"
55
+
56
+ ###############################
57
+ # Common Setup
58
+ ###############################
59
+
60
+ sc_setup_sta
61
+
62
+ sc_setup_parasitics
63
+
64
+ set_dont_use [sc_cfg_get library $sc_mainlib asic cells dontuse]
65
+
66
+ sc_setup_global_routing
67
+
68
+ ###############################
69
+ # Source Step Script
70
+ ###############################
71
+
72
+ report_units_metric
73
+
74
+ utl::push_metrics_stage "sc__prestep__{}"
75
+ if { [sc_cfg_tool_task_exists prescript] } {
76
+ foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
77
+ puts "Sourcing pre script: ${sc_pre_script}"
78
+ source -echo $sc_pre_script
79
+ }
80
+ }
81
+ utl::pop_metrics_stage
82
+
83
+ utl::push_metrics_stage "sc__step__{}"
84
+
85
+ set openroad_dont_touch {}
86
+ if { [sc_cfg_tool_task_exists {var} dont_touch] } {
87
+ set openroad_dont_touch [sc_cfg_tool_task_get {var} dont_touch]
88
+ }
89
+
90
+ if { [llength $openroad_dont_touch] > 0 } {
91
+ # set don't touch list
92
+ set_dont_touch $openroad_dont_touch
93
+ }
94
+ tee -file reports/dont_touch.start.rpt {report_dont_touch}
95
+ tee -file reports/dont_use.start.rpt {report_dont_use}
@@ -0,0 +1,51 @@
1
+ ###############################
2
+ # Reading SC Schema
3
+ ###############################
4
+
5
+ source ./sc_manifest.tcl > /dev/null
6
+
7
+ ###############################
8
+ # Task Preamble
9
+ ###############################
10
+
11
+ set sc_refdir [sc_cfg_tool_task_get refdir]
12
+ source -echo "$sc_refdir/apr/preamble.tcl"
13
+
14
+ ###############################
15
+ # Report and Repair Antennas
16
+ ###############################
17
+
18
+ estimate_parasitics -global_routing
19
+ if {
20
+ [lindex [sc_cfg_tool_task_get {var} ant_check] 0] == "true" &&
21
+ [check_antennas -report_file "reports/${sc_design}_antenna.rpt"] != 0
22
+ } {
23
+ if {
24
+ [lindex [sc_cfg_tool_task_get {var} ant_repair] 0] == "true" &&
25
+ [llength [sc_cfg_get library $sc_mainlib asic cells antenna]] != 0
26
+ } {
27
+ set sc_antenna [lindex [sc_cfg_get library $sc_mainlib asic cells antenna] 0]
28
+
29
+ # Remove filler cells before attempting to repair antennas
30
+ remove_fillers
31
+
32
+ repair_antenna \
33
+ $sc_antenna \
34
+ -iterations [lindex [sc_cfg_tool_task_get {var} ant_iterations] 0] \
35
+ -ratio_margin [lindex [sc_cfg_tool_task_get {var} ant_margin] 0]
36
+
37
+ # Add filler cells back
38
+ sc_insert_fillers
39
+
40
+ # Check antennas again to get final report
41
+ check_antennas -report_file "reports/${sc_design}_antenna_post_repair.rpt"
42
+ }
43
+ }
44
+
45
+ estimate_parasitics -global_routing
46
+
47
+ ###############################
48
+ # Task Postamble
49
+ ###############################
50
+
51
+ source -echo "$sc_refdir/apr/postamble.tcl"