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.
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/sc_remote.py +15 -14
- siliconcompiler/apps/sc_show.py +5 -5
- siliconcompiler/apps/utils/replay.py +136 -0
- siliconcompiler/core.py +14 -12
- siliconcompiler/flows/_common.py +11 -13
- siliconcompiler/flows/asicflow.py +83 -42
- siliconcompiler/remote/__init__.py +11 -0
- siliconcompiler/remote/client.py +753 -815
- siliconcompiler/report/report.py +2 -0
- siliconcompiler/report/summary_table.py +1 -1
- siliconcompiler/scheduler/__init__.py +51 -9
- siliconcompiler/scheduler/send_messages.py +37 -33
- siliconcompiler/scheduler/validation/email_credentials.json +7 -0
- siliconcompiler/schema/schema_cfg.py +15 -3
- siliconcompiler/schema/schema_obj.py +16 -0
- siliconcompiler/sphinx_ext/dynamicgen.py +4 -3
- siliconcompiler/targets/fpgaflow_demo.py +6 -7
- siliconcompiler/targets/gf180_demo.py +3 -3
- siliconcompiler/templates/replay/requirements.txt +6 -0
- siliconcompiler/templates/replay/run.py.j2 +22 -0
- siliconcompiler/templates/replay/setup.sh +17 -0
- siliconcompiler/tools/_common/__init__.py +17 -3
- siliconcompiler/tools/_common/asic.py +10 -3
- siliconcompiler/tools/builtin/concatenate.py +1 -1
- siliconcompiler/tools/openroad/__init__.py +103 -0
- siliconcompiler/tools/openroad/{openroad.py → _apr.py} +413 -422
- siliconcompiler/tools/openroad/antenna_repair.py +78 -0
- siliconcompiler/tools/openroad/clock_tree_synthesis.py +64 -0
- siliconcompiler/tools/openroad/detailed_placement.py +59 -0
- siliconcompiler/tools/openroad/detailed_route.py +62 -0
- siliconcompiler/tools/openroad/endcap_tapcell_insertion.py +52 -0
- siliconcompiler/tools/openroad/fillercell_insertion.py +58 -0
- siliconcompiler/tools/openroad/{dfm.py → fillmetal_insertion.py} +35 -19
- siliconcompiler/tools/openroad/global_placement.py +58 -0
- siliconcompiler/tools/openroad/global_route.py +63 -0
- siliconcompiler/tools/openroad/init_floorplan.py +103 -0
- siliconcompiler/tools/openroad/macro_placement.py +65 -0
- siliconcompiler/tools/openroad/metrics.py +23 -8
- siliconcompiler/tools/openroad/pin_placement.py +56 -0
- siliconcompiler/tools/openroad/power_grid.py +65 -0
- siliconcompiler/tools/openroad/rcx_bench.py +7 -4
- siliconcompiler/tools/openroad/rcx_extract.py +2 -1
- siliconcompiler/tools/openroad/rdlroute.py +4 -4
- siliconcompiler/tools/openroad/repair_design.py +59 -0
- siliconcompiler/tools/openroad/repair_timing.py +63 -0
- siliconcompiler/tools/openroad/screenshot.py +9 -20
- siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +44 -0
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +95 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +51 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +62 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +41 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +71 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +55 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +27 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +36 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +26 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +61 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +333 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +123 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +22 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +41 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +60 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +68 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +83 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +125 -0
- siliconcompiler/tools/openroad/scripts/common/debugging.tcl +28 -0
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +675 -0
- siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl +59 -0
- siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl +20 -0
- siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl +16 -0
- siliconcompiler/tools/openroad/scripts/common/reports.tcl +180 -0
- siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +18 -0
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +395 -0
- siliconcompiler/tools/openroad/scripts/{sc_rcx_bench.tcl → rcx/sc_rcx_bench.tcl} +5 -5
- siliconcompiler/tools/openroad/scripts/{sc_rcx_extract.tcl → rcx/sc_rcx_extract.tcl} +0 -0
- siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +5 -16
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +51 -51
- siliconcompiler/tools/openroad/scripts/sc_show.tcl +105 -0
- siliconcompiler/tools/openroad/show.py +28 -23
- siliconcompiler/tools/openroad/{export.py → write_data.py} +31 -26
- siliconcompiler/tools/opensta/__init__.py +1 -1
- siliconcompiler/tools/vivado/bitstream.py +8 -2
- siliconcompiler/tools/vivado/place.py +6 -2
- siliconcompiler/tools/vivado/route.py +6 -2
- siliconcompiler/tools/vivado/scripts/sc_bitstream.tcl +1 -1
- siliconcompiler/tools/vivado/scripts/sc_place.tcl +1 -1
- siliconcompiler/tools/vivado/scripts/sc_route.tcl +1 -1
- siliconcompiler/tools/vivado/scripts/sc_run.tcl +4 -2
- siliconcompiler/tools/vivado/syn_fpga.py +5 -1
- siliconcompiler/tools/vivado/vivado.py +26 -10
- siliconcompiler/tools/vpr/vpr.py +5 -0
- siliconcompiler/tools/yosys/syn_asic.py +7 -0
- siliconcompiler/tools/yosys/syn_asic.tcl +27 -6
- siliconcompiler/tools/yosys/syn_fpga.tcl +26 -18
- siliconcompiler/toolscripts/_tools.json +5 -5
- {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/METADATA +50 -48
- {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/RECORD +103 -76
- {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/WHEEL +1 -1
- siliconcompiler/tools/openroad/cts.py +0 -45
- siliconcompiler/tools/openroad/floorplan.py +0 -75
- siliconcompiler/tools/openroad/physyn.py +0 -27
- siliconcompiler/tools/openroad/place.py +0 -41
- siliconcompiler/tools/openroad/route.py +0 -45
- siliconcompiler/tools/openroad/scripts/__init__.py +0 -0
- siliconcompiler/tools/openroad/scripts/sc_apr.tcl +0 -514
- siliconcompiler/tools/openroad/scripts/sc_cts.tcl +0 -68
- siliconcompiler/tools/openroad/scripts/sc_dfm.tcl +0 -22
- siliconcompiler/tools/openroad/scripts/sc_export.tcl +0 -100
- siliconcompiler/tools/openroad/scripts/sc_floorplan.tcl +0 -456
- siliconcompiler/tools/openroad/scripts/sc_metrics.tcl +0 -1
- siliconcompiler/tools/openroad/scripts/sc_physyn.tcl +0 -6
- siliconcompiler/tools/openroad/scripts/sc_place.tcl +0 -84
- siliconcompiler/tools/openroad/scripts/sc_procs.tcl +0 -494
- siliconcompiler/tools/openroad/scripts/sc_report.tcl +0 -189
- siliconcompiler/tools/openroad/scripts/sc_route.tcl +0 -143
- siliconcompiler/tools/openroad/scripts/sc_screenshot.tcl +0 -18
- siliconcompiler/tools/openroad/scripts/sc_write_images.tcl +0 -393
- /siliconcompiler/tools/openroad/scripts/{sc_write.tcl → common/write_data.tcl} +0 -0
- {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/LICENSE +0 -0
- {siliconcompiler-0.28.8.dist-info → siliconcompiler-0.29.0.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.28.8.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.
|
|
2
|
-
from siliconcompiler.tools.openroad.
|
|
3
|
-
from siliconcompiler.tools.openroad.
|
|
4
|
-
from siliconcompiler.tools.openroad.
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
54
|
+
define_ord_files(chip)
|
|
40
55
|
build_pex_corners(chip)
|
|
41
56
|
|
|
42
57
|
|
|
43
58
|
def post_process(chip):
|
|
44
|
-
|
|
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
|
|
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',
|
|
16
|
-
|
|
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
|
-
'''
|
|
54
|
+
'''
|
|
55
|
+
Builds the RCX extraction bench
|
|
53
56
|
'''
|
|
54
57
|
|
|
55
58
|
# 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.
|
|
6
|
-
from siliconcompiler.tools.openroad.
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
23
|
+
tool, task = get_tool_task(chip, step, index)
|
|
28
24
|
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"
|