siliconcompiler 0.32.3__py3-none-any.whl → 0.33.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/__init__.py +19 -2
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/sc.py +2 -2
- siliconcompiler/apps/sc_install.py +3 -3
- siliconcompiler/apps/sc_issue.py +1 -1
- siliconcompiler/apps/sc_remote.py +4 -4
- siliconcompiler/apps/sc_show.py +2 -2
- siliconcompiler/apps/utils/replay.py +5 -3
- siliconcompiler/asic.py +120 -0
- siliconcompiler/checklist.py +150 -0
- siliconcompiler/core.py +267 -289
- siliconcompiler/flowgraph.py +803 -515
- siliconcompiler/fpga.py +84 -0
- siliconcompiler/metric.py +420 -0
- siliconcompiler/optimizer/vizier.py +2 -3
- siliconcompiler/package/__init__.py +29 -6
- siliconcompiler/pdk.py +415 -0
- siliconcompiler/record.py +449 -0
- siliconcompiler/remote/client.py +6 -3
- siliconcompiler/remote/schema.py +116 -112
- siliconcompiler/remote/server.py +3 -5
- siliconcompiler/report/dashboard/cli/__init__.py +13 -722
- siliconcompiler/report/dashboard/cli/board.py +895 -0
- siliconcompiler/report/dashboard/web/__init__.py +10 -10
- siliconcompiler/report/dashboard/web/components/__init__.py +5 -4
- siliconcompiler/report/dashboard/web/components/flowgraph.py +3 -3
- siliconcompiler/report/dashboard/web/components/graph.py +6 -3
- siliconcompiler/report/dashboard/web/state.py +1 -1
- siliconcompiler/report/dashboard/web/utils/__init__.py +4 -3
- siliconcompiler/report/html_report.py +2 -3
- siliconcompiler/report/report.py +13 -7
- siliconcompiler/report/summary_image.py +1 -1
- siliconcompiler/report/summary_table.py +3 -3
- siliconcompiler/report/utils.py +11 -10
- siliconcompiler/scheduler/__init__.py +145 -280
- siliconcompiler/scheduler/run_node.py +2 -1
- siliconcompiler/scheduler/send_messages.py +4 -4
- siliconcompiler/scheduler/slurm.py +2 -2
- siliconcompiler/schema/__init__.py +19 -2
- siliconcompiler/schema/baseschema.py +493 -0
- siliconcompiler/schema/cmdlineschema.py +250 -0
- siliconcompiler/{sphinx_ext → schema/docs}/__init__.py +3 -1
- siliconcompiler/{sphinx_ext → schema/docs}/dynamicgen.py +63 -81
- siliconcompiler/{sphinx_ext → schema/docs}/schemagen.py +73 -85
- siliconcompiler/{sphinx_ext → schema/docs}/utils.py +12 -13
- siliconcompiler/schema/editableschema.py +136 -0
- siliconcompiler/schema/journalingschema.py +238 -0
- siliconcompiler/schema/namedschema.py +41 -0
- siliconcompiler/schema/packageschema.py +101 -0
- siliconcompiler/schema/parameter.py +791 -0
- siliconcompiler/schema/parametertype.py +323 -0
- siliconcompiler/schema/parametervalue.py +736 -0
- siliconcompiler/schema/safeschema.py +37 -0
- siliconcompiler/schema/schema_cfg.py +109 -1789
- siliconcompiler/schema/utils.py +5 -68
- siliconcompiler/schema_obj.py +119 -0
- siliconcompiler/tool.py +1308 -0
- siliconcompiler/tools/_common/__init__.py +6 -10
- siliconcompiler/tools/_common/sdc/sc_constraints.sdc +1 -1
- siliconcompiler/tools/bluespec/convert.py +7 -7
- siliconcompiler/tools/builtin/_common.py +1 -1
- siliconcompiler/tools/builtin/concatenate.py +2 -2
- siliconcompiler/tools/builtin/minimum.py +1 -1
- siliconcompiler/tools/builtin/mux.py +2 -1
- siliconcompiler/tools/builtin/nop.py +1 -1
- siliconcompiler/tools/builtin/verify.py +6 -4
- siliconcompiler/tools/chisel/convert.py +4 -4
- siliconcompiler/tools/genfasm/bitstream.py +3 -3
- siliconcompiler/tools/ghdl/convert.py +1 -1
- siliconcompiler/tools/icarus/compile.py +4 -4
- siliconcompiler/tools/icepack/bitstream.py +6 -1
- siliconcompiler/tools/klayout/convert_drc_db.py +5 -0
- siliconcompiler/tools/klayout/klayout_export.py +0 -1
- siliconcompiler/tools/klayout/klayout_utils.py +3 -10
- siliconcompiler/tools/nextpnr/apr.py +6 -1
- siliconcompiler/tools/nextpnr/nextpnr.py +4 -4
- siliconcompiler/tools/openroad/_apr.py +13 -0
- siliconcompiler/tools/openroad/rdlroute.py +3 -3
- siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +5 -5
- siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +57 -1
- siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +28 -3
- siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/sc_show.tcl +6 -6
- siliconcompiler/tools/slang/__init__.py +10 -10
- siliconcompiler/tools/surelog/parse.py +4 -4
- siliconcompiler/tools/sv2v/convert.py +20 -3
- siliconcompiler/tools/verilator/compile.py +2 -2
- siliconcompiler/tools/verilator/verilator.py +3 -3
- siliconcompiler/tools/vpr/place.py +1 -1
- siliconcompiler/tools/vpr/route.py +4 -4
- siliconcompiler/tools/vpr/screenshot.py +1 -1
- siliconcompiler/tools/vpr/show.py +5 -5
- siliconcompiler/tools/vpr/vpr.py +24 -24
- siliconcompiler/tools/xdm/convert.py +2 -2
- siliconcompiler/tools/xyce/simulate.py +1 -1
- siliconcompiler/tools/yosys/sc_synth_asic.tcl +74 -68
- siliconcompiler/tools/yosys/syn_asic.py +2 -2
- siliconcompiler/toolscripts/_tools.json +7 -7
- siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +0 -2
- siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +0 -2
- siliconcompiler/utils/__init__.py +8 -112
- siliconcompiler/utils/flowgraph.py +339 -0
- siliconcompiler/{issue.py → utils/issue.py} +4 -3
- siliconcompiler/utils/logging.py +1 -2
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/METADATA +9 -8
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/RECORD +151 -134
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/WHEEL +1 -1
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/entry_points.txt +8 -8
- siliconcompiler/schema/schema_obj.py +0 -1936
- siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -29
- siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +0 -61
- /siliconcompiler/{templates → data/templates}/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/email/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/email/general.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/email/summary.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/issue/README.txt +0 -0
- /siliconcompiler/{templates → data/templates}/issue/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/issue/run.sh +0 -0
- /siliconcompiler/{templates → data/templates}/replay/replay.py.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/replay/replay.sh.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/replay/requirements.txt +0 -0
- /siliconcompiler/{templates → data/templates}/replay/setup.sh +0 -0
- /siliconcompiler/{templates → data/templates}/report/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap.min.css +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap.min.js +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap_LICENSE.md +0 -0
- /siliconcompiler/{templates → data/templates}/report/sc_report.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/slurm/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/slurm/run.sh +0 -0
- /siliconcompiler/{templates → data/templates}/tcl/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/tcl/manifest.tcl.j2 +0 -0
- /siliconcompiler/{units.py → utils/units.py} +0 -0
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/top_level.txt +0 -0
|
@@ -465,16 +465,12 @@ def record_metric(chip, step, index, metric, value, source, source_unit=None):
|
|
|
465
465
|
Records the metric cell area under 'floorplan0' and notes the source as
|
|
466
466
|
'reports/metrics.json'
|
|
467
467
|
'''
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
if metric_unit:
|
|
475
|
-
value = units.convert(value, from_unit=source_unit, to_unit=metric_unit)
|
|
476
|
-
|
|
477
|
-
chip.set('metric', metric, value, step=step, index=index)
|
|
468
|
+
chip.get("metric", field="schema").record(
|
|
469
|
+
step, index,
|
|
470
|
+
metric,
|
|
471
|
+
value,
|
|
472
|
+
unit=source_unit
|
|
473
|
+
)
|
|
478
474
|
|
|
479
475
|
if source:
|
|
480
476
|
flow = chip.get('option', 'flow')
|
|
@@ -70,24 +70,24 @@ def runtime_options(chip):
|
|
|
70
70
|
opts = get_frontend_options(chip, ['idir', 'ydir', 'define'])
|
|
71
71
|
|
|
72
72
|
cmdlist.append('-verilog')
|
|
73
|
-
cmdlist.
|
|
74
|
-
cmdlist.
|
|
75
|
-
cmdlist.
|
|
73
|
+
cmdlist.extend(['-vdir', VLOG_DIR])
|
|
74
|
+
cmdlist.extend(['-bdir', BSC_DIR])
|
|
75
|
+
cmdlist.extend(['-info-dir', 'reports'])
|
|
76
76
|
cmdlist.append('-u')
|
|
77
77
|
cmdlist.append('-v')
|
|
78
78
|
|
|
79
79
|
cmdlist.append('-show-module-use')
|
|
80
80
|
cmdlist.append('-sched-dot')
|
|
81
81
|
|
|
82
|
-
cmdlist.
|
|
82
|
+
cmdlist.extend(['-g', chip.top(step, index)])
|
|
83
83
|
|
|
84
84
|
bsc_path = ':'.join(opts['ydir'] + ['%/Libraries'])
|
|
85
|
-
cmdlist.
|
|
85
|
+
cmdlist.extend(['-p', bsc_path])
|
|
86
86
|
|
|
87
87
|
for value in opts['idir']:
|
|
88
|
-
cmdlist.
|
|
88
|
+
cmdlist.extend(['-I', value])
|
|
89
89
|
for value in opts['define']:
|
|
90
|
-
cmdlist.
|
|
90
|
+
cmdlist.extend(['-D', value])
|
|
91
91
|
|
|
92
92
|
sources = get_input_files(chip, 'input', 'hll', 'bsv', add_library_files=False)
|
|
93
93
|
if len(sources) != 1:
|
|
@@ -3,7 +3,7 @@ from siliconcompiler import NodeStatus, SiliconCompilerError
|
|
|
3
3
|
from siliconcompiler import utils
|
|
4
4
|
import shutil
|
|
5
5
|
from siliconcompiler.tools._common import get_tool_task
|
|
6
|
-
from siliconcompiler.flowgraph import _get_pruned_node_inputs
|
|
6
|
+
from siliconcompiler.utils.flowgraph import _get_pruned_node_inputs
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
###########################################################################
|
|
@@ -3,7 +3,7 @@ import os
|
|
|
3
3
|
from siliconcompiler import sc_open, SiliconCompilerError
|
|
4
4
|
from siliconcompiler import utils
|
|
5
5
|
from siliconcompiler.tools._common import input_provides, input_file_node_name, get_tool_task
|
|
6
|
-
from siliconcompiler import flowgraph
|
|
6
|
+
from siliconcompiler.utils import flowgraph
|
|
7
7
|
from siliconcompiler import scheduler
|
|
8
8
|
|
|
9
9
|
|
|
@@ -12,7 +12,7 @@ def make_docs(chip):
|
|
|
12
12
|
_make_docs(chip)
|
|
13
13
|
chip.set('option', 'flow', 'asicflow')
|
|
14
14
|
|
|
15
|
-
for step, index in
|
|
15
|
+
for step, index in chip.schema.get("flowgraph", "asicflow", field="schema").get_entry_nodes():
|
|
16
16
|
scheduler._setup_node(chip, step, index)
|
|
17
17
|
|
|
18
18
|
chip.set('arg', 'step', 'import.combine')
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from siliconcompiler.tools.builtin import _common
|
|
2
2
|
import re
|
|
3
3
|
from siliconcompiler.tools.builtin.builtin import set_io_files
|
|
4
|
-
from siliconcompiler import
|
|
4
|
+
from siliconcompiler import SiliconCompilerError
|
|
5
|
+
from siliconcompiler.utils import flowgraph
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
def setup(chip):
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
from siliconcompiler.tools.builtin import _common
|
|
2
|
-
from siliconcompiler.schema import
|
|
2
|
+
from siliconcompiler.schema.parametertype import NodeType
|
|
3
3
|
from siliconcompiler.scheduler import _haltstep
|
|
4
4
|
from siliconcompiler.tools.builtin.builtin import set_io_files
|
|
5
|
-
from siliconcompiler import utils,
|
|
5
|
+
from siliconcompiler import utils, SiliconCompilerError
|
|
6
6
|
|
|
7
7
|
import re
|
|
8
8
|
|
|
9
|
+
from siliconcompiler.utils import flowgraph
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
def setup(chip):
|
|
11
13
|
'''
|
|
@@ -52,8 +54,8 @@ def _select_inputs(chip, step, index):
|
|
|
52
54
|
raise SiliconCompilerError(
|
|
53
55
|
f"Missing metric for {metric} in {inputs[0]}{inputs[1]}", chip=chip)
|
|
54
56
|
|
|
55
|
-
metric_type = chip.get('metric', metric, field=
|
|
56
|
-
goal =
|
|
57
|
+
metric_type = chip.get('metric', metric, field=None)
|
|
58
|
+
goal = NodeType.normalize(goal, metric_type.get(field='type'))
|
|
57
59
|
if not utils.safecompare(chip, value, op, goal):
|
|
58
60
|
chip.error(f"{step}{index} fails '{metric}' metric: {value}{op}{goal}")
|
|
59
61
|
|
|
@@ -120,15 +120,15 @@ def runtime_options(chip):
|
|
|
120
120
|
step=step, index=index))
|
|
121
121
|
runMain.append("--")
|
|
122
122
|
|
|
123
|
-
runMain.
|
|
123
|
+
runMain.extend(["--target-dir", "chisel-output"])
|
|
124
124
|
else:
|
|
125
125
|
# Use built in driver
|
|
126
126
|
runMain.append("SCDriver")
|
|
127
|
-
runMain.
|
|
127
|
+
runMain.extend(["--module", chip.top(step=step, index=index)])
|
|
128
128
|
|
|
129
|
-
runMain.
|
|
129
|
+
runMain.extend(["--output-file", f"../outputs/{design}.v"])
|
|
130
130
|
|
|
131
|
-
return [
|
|
131
|
+
return [" ".join(runMain)]
|
|
132
132
|
|
|
133
133
|
|
|
134
134
|
def post_process(chip):
|
|
@@ -41,9 +41,9 @@ def runtime_options(chip):
|
|
|
41
41
|
blif = f"inputs/{design}.blif"
|
|
42
42
|
options.append(blif)
|
|
43
43
|
|
|
44
|
-
options.
|
|
45
|
-
options.
|
|
46
|
-
options.
|
|
44
|
+
options.extend(['--net_file', f'inputs/{design}.net'])
|
|
45
|
+
options.extend(['--place_file', f'inputs/{design}.place'])
|
|
46
|
+
options.extend(['--route_file', f'inputs/{design}.route'])
|
|
47
47
|
|
|
48
48
|
return options
|
|
49
49
|
|
|
@@ -25,7 +25,7 @@ def setup(chip):
|
|
|
25
25
|
|
|
26
26
|
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
27
27
|
step=step, index=index, clobber=clobber)
|
|
28
|
-
chip.set('tool', tool, 'task', task, 'option',
|
|
28
|
+
chip.set('tool', tool, 'task', task, 'option', [],
|
|
29
29
|
step=step, index=index, clobber=clobber)
|
|
30
30
|
chip.set('tool', tool, 'task', task, 'stdout', 'destination', 'output',
|
|
31
31
|
step=step, index=index)
|
|
@@ -68,19 +68,19 @@ def runtime_options(chip):
|
|
|
68
68
|
|
|
69
69
|
# source files
|
|
70
70
|
for value in opts['ydir']:
|
|
71
|
-
cmdlist.
|
|
71
|
+
cmdlist.extend(['-y', value])
|
|
72
72
|
for value in opts['vlib']:
|
|
73
|
-
cmdlist.
|
|
73
|
+
cmdlist.extend(['-v', value])
|
|
74
74
|
for value in opts['idir']:
|
|
75
75
|
cmdlist.append('-I' + value)
|
|
76
76
|
for value in opts['define']:
|
|
77
77
|
cmdlist.append('-D' + value)
|
|
78
78
|
|
|
79
79
|
# add siliconcompiler specific defines
|
|
80
|
-
cmdlist.append(f"-DSILICONCOMPILER_TRACE_FILE
|
|
80
|
+
cmdlist.append(f"-DSILICONCOMPILER_TRACE_FILE=\"reports/{design}.vcd\"")
|
|
81
81
|
|
|
82
82
|
for value in get_input_files(chip, 'input', 'cmdfile', 'f'):
|
|
83
|
-
cmdlist.
|
|
83
|
+
cmdlist.extend(['-f', value])
|
|
84
84
|
for value in get_input_files(chip, 'input', 'rtl', 'netlist'):
|
|
85
85
|
cmdlist.append(value)
|
|
86
86
|
for value in get_input_files(chip, 'input', 'rtl', 'verilog'):
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from siliconcompiler.tools._common import get_tool_task
|
|
2
|
+
from siliconcompiler.tools.icepack.icepack import runtime_options as tool_runtime_options
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
def setup(chip):
|
|
@@ -15,6 +16,10 @@ def setup(chip):
|
|
|
15
16
|
|
|
16
17
|
chip.set('tool', tool, 'exe', tool)
|
|
17
18
|
|
|
18
|
-
chip.set('tool', tool, 'task', task, 'option',
|
|
19
|
+
chip.set('tool', tool, 'task', task, 'option', [], step=step, index=index, clobber=clobber)
|
|
19
20
|
chip.set('tool', tool, 'task', task, 'input', f'{design}.asc', step=step, index=index)
|
|
20
21
|
chip.set('tool', tool, 'task', task, 'output', f'{design}.bit', step=step, index=index)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def runtime_options(chip):
|
|
25
|
+
return tool_runtime_options(chip)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from siliconcompiler.tools._common import input_provides, input_file_node_name, get_tool_task
|
|
2
2
|
|
|
3
3
|
from siliconcompiler.tools.klayout.klayout import setup as setup_tool
|
|
4
|
+
from siliconcompiler.tools.klayout.klayout import runtime_options as tool_runtime_options
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
def make_docs(chip):
|
|
@@ -58,3 +59,7 @@ def setup(chip):
|
|
|
58
59
|
|
|
59
60
|
chip.set('tool', tool, 'task', task, 'output', f'{design}.json',
|
|
60
61
|
step=step, index=index)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def runtime_options(chip):
|
|
65
|
+
return tool_runtime_options(chip)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import pya
|
|
2
|
-
import importlib.util as importlib_util
|
|
3
2
|
import json
|
|
4
3
|
import os
|
|
5
4
|
import shutil
|
|
@@ -172,15 +171,9 @@ def get_write_options(filename, timestamps):
|
|
|
172
171
|
|
|
173
172
|
|
|
174
173
|
def get_schema(manifest):
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
spec = importlib_util.spec_from_file_location(module_name, schema_base)
|
|
179
|
-
module = importlib_util.module_from_spec(spec)
|
|
180
|
-
sys.modules[module_name] = module
|
|
181
|
-
spec.loader.exec_module(module)
|
|
182
|
-
# Return schema
|
|
183
|
-
return module.Schema(manifest=manifest)
|
|
174
|
+
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
|
|
175
|
+
from schema.safeschema import SafeSchema
|
|
176
|
+
return SafeSchema.from_manifest(filepath=manifest)
|
|
184
177
|
|
|
185
178
|
|
|
186
179
|
def generate_metrics():
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from siliconcompiler.tools._common import get_tool_task
|
|
2
|
+
from siliconcompiler.tools.nextpnr.nextpnr import runtime_options as tool_runtime_options
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
def setup(chip):
|
|
@@ -18,7 +19,11 @@ def setup(chip):
|
|
|
18
19
|
chip.set('tool', tool, 'vswitch', '--version')
|
|
19
20
|
chip.set('tool', tool, 'version', '>=0.2', clobber=clobber)
|
|
20
21
|
|
|
21
|
-
chip.set('tool', tool, 'task', task, 'option',
|
|
22
|
+
chip.set('tool', tool, 'task', task, 'option', [], step=step, index=index, clobber=clobber)
|
|
22
23
|
chip.set('tool', tool, 'task', task, 'input', f'{topmodule}.netlist.json',
|
|
23
24
|
step=step, index=index)
|
|
24
25
|
chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.asc', step=step, index=index)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def runtime_options(chip):
|
|
29
|
+
return tool_runtime_options(chip)
|
|
@@ -33,14 +33,14 @@ def runtime_options(chip):
|
|
|
33
33
|
|
|
34
34
|
options = []
|
|
35
35
|
|
|
36
|
-
options.
|
|
37
|
-
options.
|
|
36
|
+
options.extend(['--json', 'inputs/' + topmodule + '.netlist.json'])
|
|
37
|
+
options.extend(['--asc', 'outputs/' + topmodule + '.asc'])
|
|
38
38
|
|
|
39
39
|
if partname == 'ice40up5k-sg48':
|
|
40
|
-
options.
|
|
40
|
+
options.extend(['--up5k', '--package', 'sg48'])
|
|
41
41
|
|
|
42
42
|
for constraint_file in chip.find_files('input', 'constraint', 'pcf', step=step, index=index):
|
|
43
|
-
options.
|
|
43
|
+
options.extend(['--pcf', constraint_file])
|
|
44
44
|
|
|
45
45
|
return options
|
|
46
46
|
|
|
@@ -801,6 +801,14 @@ def define_sta_params(chip):
|
|
|
801
801
|
set_tool_task_var(chip, param_key='sta_top_n_paths',
|
|
802
802
|
default_value='10',
|
|
803
803
|
schelp='number of paths to report timing for')
|
|
804
|
+
set_tool_task_var(chip, param_key='sta_define_path_groups',
|
|
805
|
+
default_value=True,
|
|
806
|
+
skip=['pdk', 'lib'],
|
|
807
|
+
schelp='true/false, if true will generate path groups for timing reporting')
|
|
808
|
+
set_tool_task_var(chip, param_key='sta_unique_path_groups_per_clock',
|
|
809
|
+
default_value=False,
|
|
810
|
+
skip=['pdk', 'lib'],
|
|
811
|
+
schelp='true/false, if true will generate separate path groups per clock')
|
|
804
812
|
|
|
805
813
|
chip.set('tool', tool, 'task', task, 'var', 'power_corner', get_power_corner(chip),
|
|
806
814
|
step=step, index=index, clobber=False)
|
|
@@ -1044,6 +1052,8 @@ def set_pnr_inputs(chip):
|
|
|
1044
1052
|
|
|
1045
1053
|
design = chip.top()
|
|
1046
1054
|
|
|
1055
|
+
# clear
|
|
1056
|
+
chip.set('tool', tool, 'task', task, 'input', [], step=step, index=index)
|
|
1047
1057
|
if f'{design}.sdc' in input_provides(chip, step, index):
|
|
1048
1058
|
chip.add('tool', tool, 'task', task, 'input', design + '.sdc',
|
|
1049
1059
|
step=step, index=index)
|
|
@@ -1071,6 +1081,9 @@ def set_pnr_outputs(chip):
|
|
|
1071
1081
|
|
|
1072
1082
|
design = chip.top()
|
|
1073
1083
|
|
|
1084
|
+
# clear
|
|
1085
|
+
chip.set('tool', tool, 'task', task, 'output', [], step=step, index=index)
|
|
1086
|
+
|
|
1074
1087
|
chip.add('tool', tool, 'task', task, 'output', design + '.sdc', step=step, index=index)
|
|
1075
1088
|
chip.add('tool', tool, 'task', task, 'output', design + '.vg', step=step, index=index)
|
|
1076
1089
|
chip.add('tool', tool, 'task', task, 'output', design + '.def', step=step, index=index)
|
|
@@ -31,11 +31,11 @@ def setup(chip):
|
|
|
31
31
|
chip.set('tool', tool, 'format', 'tcl')
|
|
32
32
|
|
|
33
33
|
# exit automatically in batch mode and not breakpoint
|
|
34
|
-
option = ''
|
|
34
|
+
option = ['-no_init']
|
|
35
35
|
if exit and not chip.get('option', 'breakpoint', step=step, index=index):
|
|
36
|
-
option
|
|
36
|
+
option.append("-exit")
|
|
37
37
|
|
|
38
|
-
option
|
|
38
|
+
option.extend(["-metrics", "reports/metrics.json"])
|
|
39
39
|
chip.set('tool', tool, 'task', task, 'option', option, step=step, index=index)
|
|
40
40
|
|
|
41
41
|
# Input/Output requirements for default asicflow steps
|
|
@@ -8,7 +8,7 @@ utl::push_metrics_stage "sc__poststep__{}"
|
|
|
8
8
|
if { [sc_cfg_tool_task_exists postscript] } {
|
|
9
9
|
foreach sc_post_script [sc_cfg_tool_task_get postscript] {
|
|
10
10
|
puts "Sourcing post script: ${sc_post_script}"
|
|
11
|
-
source
|
|
11
|
+
source $sc_post_script
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
utl::pop_metrics_stage
|
|
@@ -14,7 +14,7 @@ set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
|
14
14
|
# Setup debugging
|
|
15
15
|
###############################
|
|
16
16
|
|
|
17
|
-
source
|
|
17
|
+
source "$sc_refdir/common/debugging.tcl"
|
|
18
18
|
|
|
19
19
|
###############################
|
|
20
20
|
# Setup helper functions
|
|
@@ -47,11 +47,11 @@ set_thread_count [sc_cfg_tool_task_get threads]
|
|
|
47
47
|
# Read Files
|
|
48
48
|
###############################
|
|
49
49
|
|
|
50
|
-
source
|
|
50
|
+
source "$sc_refdir/common/read_liberty.tcl"
|
|
51
51
|
|
|
52
|
-
source
|
|
52
|
+
source "$sc_refdir/common/read_input_files.tcl"
|
|
53
53
|
|
|
54
|
-
source
|
|
54
|
+
source "$sc_refdir/common/read_timing_constraints.tcl"
|
|
55
55
|
|
|
56
56
|
###############################
|
|
57
57
|
# Common Setup
|
|
@@ -81,7 +81,7 @@ utl::push_metrics_stage "sc__prestep__{}"
|
|
|
81
81
|
if { [sc_cfg_tool_task_exists prescript] } {
|
|
82
82
|
foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
|
|
83
83
|
puts "Sourcing pre script: ${sc_pre_script}"
|
|
84
|
-
source
|
|
84
|
+
source $sc_pre_script
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
utl::pop_metrics_stage
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Report and Repair Antennas
|
|
@@ -48,4 +48,4 @@ estimate_parasitics -global_routing
|
|
|
48
48
|
# Task Postamble
|
|
49
49
|
###############################
|
|
50
50
|
|
|
51
|
-
source
|
|
51
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Clock tree synthesis
|
|
@@ -66,4 +66,4 @@ estimate_parasitics -placement
|
|
|
66
66
|
# Task Postamble
|
|
67
67
|
###############################
|
|
68
68
|
|
|
69
|
-
source
|
|
69
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# DETAILED PLACEMENT
|
|
@@ -38,4 +38,4 @@ estimate_parasitics -placement
|
|
|
38
38
|
# Task Postamble
|
|
39
39
|
###############################
|
|
40
40
|
|
|
41
|
-
source
|
|
41
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Detailed Routing
|
|
@@ -78,4 +78,4 @@ estimate_parasitics -global_routing
|
|
|
78
78
|
# Task Postamble
|
|
79
79
|
###############################
|
|
80
80
|
|
|
81
|
-
source
|
|
81
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Error checking
|
|
@@ -52,4 +52,4 @@ if {
|
|
|
52
52
|
# Task Postamble
|
|
53
53
|
###############################
|
|
54
54
|
|
|
55
|
-
source
|
|
55
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Add fillers
|
|
@@ -24,4 +24,4 @@ estimate_parasitics -placement
|
|
|
24
24
|
# Task Postamble
|
|
25
25
|
###############################
|
|
26
26
|
|
|
27
|
-
source
|
|
27
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Do fill
|
|
@@ -33,4 +33,4 @@ estimate_parasitics -global_routing
|
|
|
33
33
|
# Task Postamble
|
|
34
34
|
###############################
|
|
35
35
|
|
|
36
|
-
source
|
|
36
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
set dont_use_args []
|
|
15
15
|
|
|
@@ -87,4 +87,4 @@ sc_set_dont_use
|
|
|
87
87
|
|
|
88
88
|
estimate_parasitics -placement
|
|
89
89
|
|
|
90
|
-
source
|
|
90
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Pin access
|
|
@@ -70,4 +70,4 @@ estimate_parasitics -global_routing
|
|
|
70
70
|
# Task Postamble
|
|
71
71
|
###############################
|
|
72
72
|
|
|
73
|
-
source
|
|
73
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# FLOORPLANNING
|
|
@@ -331,4 +331,4 @@ if { [lindex [sc_cfg_tool_task_get var remove_dead_logic] 0] == "true" } {
|
|
|
331
331
|
# Task Postamble
|
|
332
332
|
###############################
|
|
333
333
|
|
|
334
|
-
source
|
|
334
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,14 +9,14 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Macro placement constraints
|
|
16
16
|
###############################
|
|
17
17
|
foreach script [sc_cfg_tool_task_get file rtlmp_constraints] {
|
|
18
18
|
puts "Sourcing macro placement constraints: $script"
|
|
19
|
-
source
|
|
19
|
+
source $script
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
# Need to check if we have any macros before performing macro placement,
|
|
@@ -117,4 +117,4 @@ sc_print_macro_information
|
|
|
117
117
|
# Task Postamble
|
|
118
118
|
###############################
|
|
119
119
|
|
|
120
|
-
source
|
|
120
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
###############################
|
|
15
15
|
# Report Metrics
|
|
@@ -19,4 +19,4 @@ source -echo "$sc_refdir/apr/preamble.tcl"
|
|
|
19
19
|
# Task Postamble
|
|
20
20
|
###############################
|
|
21
21
|
|
|
22
|
-
source
|
|
22
|
+
source "$sc_refdir/apr/postamble.tcl"
|
|
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
|
|
|
9
9
|
###############################
|
|
10
10
|
|
|
11
11
|
set sc_refdir [sc_cfg_tool_task_get refdir]
|
|
12
|
-
source
|
|
12
|
+
source "$sc_refdir/apr/preamble.tcl"
|
|
13
13
|
|
|
14
14
|
if { [sc_design_has_placeable_ios] } {
|
|
15
15
|
###############################
|
|
@@ -38,4 +38,4 @@ if { [sc_design_has_placeable_ios] } {
|
|
|
38
38
|
# Task Postamble
|
|
39
39
|
###############################
|
|
40
40
|
|
|
41
|
-
source
|
|
41
|
+
source "$sc_refdir/apr/postamble.tcl"
|