siliconcompiler 0.28.8__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 (122) 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/scheduler/send_messages.py +37 -33
  14. siliconcompiler/scheduler/validation/email_credentials.json +7 -0
  15. siliconcompiler/schema/schema_cfg.py +15 -3
  16. siliconcompiler/schema/schema_obj.py +16 -0
  17. siliconcompiler/sphinx_ext/dynamicgen.py +4 -3
  18. siliconcompiler/targets/fpgaflow_demo.py +6 -7
  19. siliconcompiler/targets/gf180_demo.py +3 -3
  20. siliconcompiler/templates/replay/requirements.txt +6 -0
  21. siliconcompiler/templates/replay/run.py.j2 +22 -0
  22. siliconcompiler/templates/replay/setup.sh +17 -0
  23. siliconcompiler/tools/_common/__init__.py +17 -3
  24. siliconcompiler/tools/_common/asic.py +10 -3
  25. siliconcompiler/tools/builtin/concatenate.py +1 -1
  26. siliconcompiler/tools/openroad/__init__.py +103 -0
  27. siliconcompiler/tools/openroad/{openroad.py → _apr.py} +413 -422
  28. siliconcompiler/tools/openroad/antenna_repair.py +78 -0
  29. siliconcompiler/tools/openroad/clock_tree_synthesis.py +64 -0
  30. siliconcompiler/tools/openroad/detailed_placement.py +59 -0
  31. siliconcompiler/tools/openroad/detailed_route.py +62 -0
  32. siliconcompiler/tools/openroad/endcap_tapcell_insertion.py +52 -0
  33. siliconcompiler/tools/openroad/fillercell_insertion.py +58 -0
  34. siliconcompiler/tools/openroad/{dfm.py → fillmetal_insertion.py} +35 -19
  35. siliconcompiler/tools/openroad/global_placement.py +58 -0
  36. siliconcompiler/tools/openroad/global_route.py +63 -0
  37. siliconcompiler/tools/openroad/init_floorplan.py +103 -0
  38. siliconcompiler/tools/openroad/macro_placement.py +65 -0
  39. siliconcompiler/tools/openroad/metrics.py +23 -8
  40. siliconcompiler/tools/openroad/pin_placement.py +56 -0
  41. siliconcompiler/tools/openroad/power_grid.py +65 -0
  42. siliconcompiler/tools/openroad/rcx_bench.py +7 -4
  43. siliconcompiler/tools/openroad/rcx_extract.py +2 -1
  44. siliconcompiler/tools/openroad/rdlroute.py +4 -4
  45. siliconcompiler/tools/openroad/repair_design.py +59 -0
  46. siliconcompiler/tools/openroad/repair_timing.py +63 -0
  47. siliconcompiler/tools/openroad/screenshot.py +9 -20
  48. siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +44 -0
  49. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +95 -0
  50. siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +51 -0
  51. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +62 -0
  52. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +41 -0
  53. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +71 -0
  54. siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +55 -0
  55. siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +27 -0
  56. siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +36 -0
  57. siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +26 -0
  58. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +61 -0
  59. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +333 -0
  60. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +123 -0
  61. siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +22 -0
  62. siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +41 -0
  63. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +60 -0
  64. siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +68 -0
  65. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +83 -0
  66. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +125 -0
  67. siliconcompiler/tools/openroad/scripts/common/debugging.tcl +28 -0
  68. siliconcompiler/tools/openroad/scripts/common/procs.tcl +675 -0
  69. siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl +59 -0
  70. siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl +20 -0
  71. siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl +16 -0
  72. siliconcompiler/tools/openroad/scripts/common/reports.tcl +180 -0
  73. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +18 -0
  74. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +395 -0
  75. siliconcompiler/tools/openroad/scripts/{sc_rcx_bench.tcl → rcx/sc_rcx_bench.tcl} +5 -5
  76. siliconcompiler/tools/openroad/scripts/{sc_rcx_extract.tcl → rcx/sc_rcx_extract.tcl} +0 -0
  77. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +5 -16
  78. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +51 -51
  79. siliconcompiler/tools/openroad/scripts/sc_show.tcl +105 -0
  80. siliconcompiler/tools/openroad/show.py +28 -23
  81. siliconcompiler/tools/openroad/{export.py → write_data.py} +31 -26
  82. siliconcompiler/tools/opensta/__init__.py +1 -1
  83. siliconcompiler/tools/vivado/bitstream.py +8 -2
  84. siliconcompiler/tools/vivado/place.py +6 -2
  85. siliconcompiler/tools/vivado/route.py +6 -2
  86. siliconcompiler/tools/vivado/scripts/sc_bitstream.tcl +1 -1
  87. siliconcompiler/tools/vivado/scripts/sc_place.tcl +1 -1
  88. siliconcompiler/tools/vivado/scripts/sc_route.tcl +1 -1
  89. siliconcompiler/tools/vivado/scripts/sc_run.tcl +4 -2
  90. siliconcompiler/tools/vivado/syn_fpga.py +5 -1
  91. siliconcompiler/tools/vivado/vivado.py +26 -10
  92. siliconcompiler/tools/vpr/vpr.py +5 -0
  93. siliconcompiler/tools/yosys/syn_asic.py +7 -0
  94. siliconcompiler/tools/yosys/syn_asic.tcl +27 -6
  95. siliconcompiler/tools/yosys/syn_fpga.tcl +26 -18
  96. siliconcompiler/toolscripts/_tools.json +5 -5
  97. {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/METADATA +50 -48
  98. {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/RECORD +103 -76
  99. {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/WHEEL +1 -1
  100. siliconcompiler/tools/openroad/cts.py +0 -45
  101. siliconcompiler/tools/openroad/floorplan.py +0 -75
  102. siliconcompiler/tools/openroad/physyn.py +0 -27
  103. siliconcompiler/tools/openroad/place.py +0 -41
  104. siliconcompiler/tools/openroad/route.py +0 -45
  105. siliconcompiler/tools/openroad/scripts/__init__.py +0 -0
  106. siliconcompiler/tools/openroad/scripts/sc_apr.tcl +0 -514
  107. siliconcompiler/tools/openroad/scripts/sc_cts.tcl +0 -68
  108. siliconcompiler/tools/openroad/scripts/sc_dfm.tcl +0 -22
  109. siliconcompiler/tools/openroad/scripts/sc_export.tcl +0 -100
  110. siliconcompiler/tools/openroad/scripts/sc_floorplan.tcl +0 -456
  111. siliconcompiler/tools/openroad/scripts/sc_metrics.tcl +0 -1
  112. siliconcompiler/tools/openroad/scripts/sc_physyn.tcl +0 -6
  113. siliconcompiler/tools/openroad/scripts/sc_place.tcl +0 -84
  114. siliconcompiler/tools/openroad/scripts/sc_procs.tcl +0 -494
  115. siliconcompiler/tools/openroad/scripts/sc_report.tcl +0 -189
  116. siliconcompiler/tools/openroad/scripts/sc_route.tcl +0 -143
  117. siliconcompiler/tools/openroad/scripts/sc_screenshot.tcl +0 -18
  118. siliconcompiler/tools/openroad/scripts/sc_write_images.tcl +0 -393
  119. /siliconcompiler/tools/openroad/scripts/{sc_write.tcl → common/write_data.tcl} +0 -0
  120. {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/LICENSE +0 -0
  121. {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/entry_points.txt +0 -0
  122. {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,78 @@
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_grt_params, define_dpl_params, define_ant_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
+ Perform antenna repair
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_antenna_repair.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_ant_params(chip)
39
+ define_grt_params(chip)
40
+ define_dpl_params(chip)
41
+
42
+ set_reports(chip, [
43
+ 'setup',
44
+ 'hold',
45
+ 'unconstrained',
46
+ 'clock_skew',
47
+ 'power',
48
+ 'drv_violations',
49
+ 'fmax',
50
+
51
+ # Images
52
+ 'placement_density',
53
+ 'routing_congestion',
54
+ 'power_density',
55
+ 'optimization_placement',
56
+ 'clock_placement',
57
+ 'clock_trees'
58
+ ])
59
+
60
+
61
+ def pre_process(chip):
62
+ step = chip.get('arg', 'step')
63
+ index = chip.get('arg', 'index')
64
+ tool, task = get_tool_task(chip, step, index)
65
+
66
+ if not has_pre_post_script(chip) and \
67
+ chip.get('tool', tool, 'task', task, 'var', 'ant_check',
68
+ step=step, index=index)[0] == 'false':
69
+ chip.set('record', 'status', NodeStatus.SKIPPED, step=step, index=index)
70
+ chip.logger.warning(f'{step}{index} will be skipped since antenna repair is disabled.')
71
+ return
72
+
73
+ define_ord_files(chip)
74
+ build_pex_corners(chip)
75
+
76
+
77
+ def post_process(chip):
78
+ extract_metrics(chip)
@@ -0,0 +1,64 @@
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_cts_params, define_dpl_params, define_rsz_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 clock tree synthesis
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_clock_tree_synthesis.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_cts_params(chip)
36
+ define_dpl_params(chip)
37
+ define_rsz_params(chip)
38
+
39
+ set_reports(chip, [
40
+ 'setup',
41
+ 'hold',
42
+ 'unconstrained',
43
+ 'clock_skew',
44
+ 'power',
45
+ 'drv_violations',
46
+ 'fmax',
47
+
48
+ # Images
49
+ 'placement_density',
50
+ 'routing_congestion',
51
+ 'power_density',
52
+ 'optimization_placement',
53
+ 'clock_placement',
54
+ 'clock_trees'
55
+ ])
56
+
57
+
58
+ def pre_process(chip):
59
+ define_ord_files(chip)
60
+ build_pex_corners(chip)
61
+
62
+
63
+ def post_process(chip):
64
+ 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_dpl_params, define_dpo_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 detailed placement
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_detailed_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_dpl_params(chip)
36
+ define_dpo_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,62 @@
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_drt_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 detailed routing
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_detailed_route.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_drt_params(chip)
36
+
37
+ set_reports(chip, [
38
+ 'setup',
39
+ 'hold',
40
+ 'unconstrained',
41
+ 'clock_skew',
42
+ 'power',
43
+ 'drv_violations',
44
+ 'fmax',
45
+
46
+ # Images
47
+ 'placement_density',
48
+ 'routing_congestion',
49
+ 'power_density',
50
+ 'optimization_placement',
51
+ 'clock_placement',
52
+ 'clock_trees'
53
+ ])
54
+
55
+
56
+ def pre_process(chip):
57
+ define_ord_files(chip)
58
+ build_pex_corners(chip)
59
+
60
+
61
+ def post_process(chip):
62
+ extract_metrics(chip)
@@ -0,0 +1,52 @@
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_tapcell_params, define_tiecell_params
7
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, \
8
+ define_ord_files, define_tapcell_files
9
+ from siliconcompiler.tools.openroad._apr import extract_metrics
10
+
11
+
12
+ def setup(chip):
13
+ '''
14
+ Perform endcap and tap cell insertion
15
+ '''
16
+
17
+ # Generic apr tool setup.
18
+ apr_setup(chip)
19
+
20
+ # Task setup
21
+ step = chip.get('arg', 'step')
22
+ index = chip.get('arg', 'index')
23
+ tool, task = get_tool_task(chip, step, index)
24
+
25
+ chip.set('tool', tool, 'task', task, 'script', 'apr/sc_endcap_tapcell_insertion.tcl',
26
+ step=step, index=index)
27
+
28
+ # Setup task IO
29
+ set_pnr_inputs(chip)
30
+ set_pnr_outputs(chip)
31
+
32
+ # set default values for openroad
33
+ define_ord_params(chip)
34
+ define_sta_params(chip)
35
+ define_sdc_params(chip)
36
+ define_tapcell_params(chip)
37
+ define_tiecell_params(chip)
38
+
39
+ set_reports(chip, [
40
+ # Images
41
+ 'placement_density'
42
+ ])
43
+
44
+
45
+ def pre_process(chip):
46
+ define_ord_files(chip)
47
+ define_tapcell_files(chip)
48
+ build_pex_corners(chip)
49
+
50
+
51
+ def post_process(chip):
52
+ extract_metrics(chip)
@@ -0,0 +1,58 @@
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_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 filler 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_fillercell_insertion.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_dpl_params(chip)
36
+
37
+ set_reports(chip, [
38
+ 'setup',
39
+ 'hold',
40
+ 'unconstrained',
41
+ 'power',
42
+ 'drv_violations',
43
+ 'fmax',
44
+
45
+ # Images
46
+ 'placement_density',
47
+ 'routing_congestion',
48
+ 'power_density'
49
+ ])
50
+
51
+
52
+ def pre_process(chip):
53
+ define_ord_files(chip)
54
+ build_pex_corners(chip)
55
+
56
+
57
+ def post_process(chip):
58
+ extract_metrics(chip)
@@ -1,26 +1,44 @@
1
+ from siliconcompiler import NodeStatus
1
2
 
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.openroad import post_process as or_post_process
5
- from siliconcompiler.tools.openroad.openroad import pre_process as or_pre_process
6
- from siliconcompiler.tools.openroad.openroad import _set_reports, set_pnr_inputs, set_pnr_outputs
7
- from siliconcompiler.tools._common import get_tool_task
3
+ from siliconcompiler.tools._common import get_tool_task, has_pre_post_script
8
4
  from siliconcompiler.tools._common.asic import get_mainlib
9
- from siliconcompiler import NodeStatus
5
+
6
+ from siliconcompiler.tools.openroad._apr import setup as apr_setup
7
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
8
+ from siliconcompiler.tools.openroad._apr import \
9
+ define_ord_params, define_sta_params, define_sdc_params, \
10
+ define_fin_params
11
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
12
+ from siliconcompiler.tools.openroad._apr import extract_metrics
10
13
 
11
14
 
12
15
  def setup(chip):
13
16
  '''
14
- Design for manufacturing step will insert fill if specified
17
+ Perform fill metal insertion
15
18
  '''
16
19
 
17
- # Generic tool setup.
18
- setup_tool(chip)
20
+ # Generic apr tool setup.
21
+ apr_setup(chip)
19
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_fillmetal_insertion.tcl',
29
+ step=step, index=index)
30
+
31
+ # Setup task IO
20
32
  set_pnr_inputs(chip)
21
33
  set_pnr_outputs(chip)
22
34
 
23
- _set_reports(chip, [
35
+ # set default values for openroad
36
+ define_ord_params(chip)
37
+ define_sta_params(chip)
38
+ define_sdc_params(chip)
39
+ define_fin_params(chip)
40
+
41
+ set_reports(chip, [
24
42
  'setup',
25
43
  'hold',
26
44
  'unconstrained',
@@ -33,9 +51,9 @@ def setup(chip):
33
51
  'placement_density',
34
52
  'routing_congestion',
35
53
  'power_density',
54
+ 'optimization_placement',
36
55
  'clock_placement',
37
- 'clock_trees',
38
- 'optimization_placement'
56
+ 'clock_trees'
39
57
  ])
40
58
 
41
59
 
@@ -43,10 +61,7 @@ def pre_process(chip):
43
61
  step = chip.get('arg', 'step')
44
62
  index = chip.get('arg', 'index')
45
63
  tool, task = get_tool_task(chip, step, index)
46
- if not chip.find_files('tool', tool, 'task', task, 'prescript',
47
- step=step, index=index) and \
48
- not chip.find_files('tool', tool, 'task', task, 'postscript',
49
- step=step, index=index) and \
64
+ if not has_pre_post_script(chip) and \
50
65
  chip.get('tool', tool, 'task', task, 'var', 'fin_add_fill',
51
66
  step=step, index=index) == ["true"]:
52
67
  pdk = chip.get('option', 'pdk')
@@ -57,10 +72,11 @@ def pre_process(chip):
57
72
  if not chip.find_files('pdk', pdk, 'aprtech', tool, stackup, libtype, 'fill'):
58
73
  chip.set('record', 'status', NodeStatus.SKIPPED, step=step, index=index)
59
74
  chip.logger.warning(f'{step}{index} will be skipped since there is nothing to do.')
75
+ return
60
76
 
61
- or_pre_process(chip)
77
+ define_ord_files(chip)
62
78
  build_pex_corners(chip)
63
79
 
64
80
 
65
81
  def post_process(chip):
66
- or_post_process(chip)
82
+ extract_metrics(chip)
@@ -0,0 +1,58 @@
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_grt_params, define_rsz_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 global placement
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_global_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_grt_params(chip)
37
+ define_rsz_params(chip)
38
+
39
+ set_reports(chip, [
40
+ 'setup',
41
+ 'unconstrained',
42
+ 'power',
43
+ 'fmax',
44
+
45
+ # Images
46
+ 'placement_density',
47
+ 'routing_congestion',
48
+ 'power_density'
49
+ ])
50
+
51
+
52
+ def pre_process(chip):
53
+ define_ord_files(chip)
54
+ build_pex_corners(chip)
55
+
56
+
57
+ def post_process(chip):
58
+ 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_grt_params, define_drt_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 global routing
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_global_route.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_grt_params(chip, load_all=True)
36
+ define_drt_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)
@@ -0,0 +1,103 @@
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
3
+
4
+ from siliconcompiler.tools.openroad._apr import setup as apr_setup
5
+ from siliconcompiler.tools.openroad._apr import set_reports, set_pnr_inputs, set_pnr_outputs
6
+ from siliconcompiler.tools.openroad._apr import \
7
+ define_ord_params, define_sta_params, define_sdc_params, \
8
+ define_tiecell_params, define_pad_params, define_ppl_params
9
+ from siliconcompiler.tools.openroad._apr import build_pex_corners, define_ord_files
10
+ from siliconcompiler.tools.openroad._apr import extract_metrics
11
+
12
+
13
+ def setup(chip):
14
+ '''
15
+ Perform floorplanning and initial pin placements
16
+ '''
17
+
18
+ # Generic apr tool setup.
19
+ apr_setup(chip)
20
+
21
+ # Task setup
22
+ design = chip.top()
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_init_floorplan.tcl',
28
+ step=step, index=index)
29
+
30
+ # Setup task IO
31
+ set_pnr_inputs(chip)
32
+ set_pnr_outputs(chip)
33
+ add_common_file(chip, 'sc_pin_constraint', 'tcl/sc_pin_constraints.tcl')
34
+
35
+ # set default values for task
36
+ define_ord_params(chip)
37
+ define_sta_params(chip)
38
+ define_sdc_params(chip)
39
+ define_pad_params(chip)
40
+ define_ppl_params(chip)
41
+ define_tiecell_params(chip)
42
+
43
+ set_tool_task_var(chip, param_key='ifp_snap_strategy',
44
+ default_value='site',
45
+ schelp='Snapping strategy to use when placing macros. '
46
+ 'Allowed values: none, site, manufacturing_grid')
47
+
48
+ set_tool_task_var(chip, param_key='remove_synth_buffers',
49
+ default_value=True,
50
+ schelp='remove buffers inserted by synthesis')
51
+
52
+ set_tool_task_var(chip, param_key='remove_dead_logic',
53
+ default_value=False,
54
+ schelp='remove logic which does not drive a primary output')
55
+
56
+ # Handle additional input files
57
+ if chip.valid('input', 'asic', 'floorplan') and \
58
+ chip.get('input', 'asic', 'floorplan', step=step, index=index):
59
+ chip.add('tool', tool, 'task', task, 'require',
60
+ ",".join(['input', 'asic', 'floorplan']),
61
+ step=step, index=index)
62
+
63
+ if f'{design}.vg' in input_provides(chip, step, index):
64
+ chip.add('tool', tool, 'task', task, 'input', f'{design}.vg',
65
+ step=step, index=index)
66
+ else:
67
+ chip.add('tool', tool, 'task', task, 'require', 'input,netlist,verilog',
68
+ step=step, index=index)
69
+
70
+ set_reports(chip, [
71
+ 'check_setup',
72
+ 'setup',
73
+ 'unconstrained',
74
+ 'power'
75
+ ])
76
+
77
+ # Setup required
78
+ for component in chip.getkeys('constraint', 'component'):
79
+ for key in chip.getkeys('constraint', 'component', component):
80
+ if chip.get('constraint', 'component', component, key, step=step, index=index):
81
+ chip.add('tool', tool, 'task', task, 'require',
82
+ ','.join(['constraint', 'component', component, key]),
83
+ step=step, index=index)
84
+ for pin in chip.getkeys('constraint', 'pin'):
85
+ for key in chip.getkeys('constraint', 'pin', pin):
86
+ if chip.get('constraint', 'pin', pin, key, step=step, index=index):
87
+ chip.add('tool', tool, 'task', task, 'require',
88
+ ','.join(['constraint', 'pin', pin, key]),
89
+ step=step, index=index)
90
+ for ifp in ('aspectratio', 'density', 'corearea', 'coremargin', 'outline'):
91
+ if chip.get('constraint', ifp, step=step, index=index):
92
+ chip.add('tool', tool, 'task', task, 'require',
93
+ ','.join(['constraint', ifp]),
94
+ step=step, index=index)
95
+
96
+
97
+ def pre_process(chip):
98
+ build_pex_corners(chip)
99
+ define_ord_files(chip)
100
+
101
+
102
+ def post_process(chip):
103
+ extract_metrics(chip)