siliconcompiler 0.34.2__py3-none-any.whl → 0.34.3__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 +12 -5
- siliconcompiler/__main__.py +1 -7
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/_common.py +104 -23
- siliconcompiler/apps/sc.py +4 -8
- siliconcompiler/apps/sc_dashboard.py +6 -4
- siliconcompiler/apps/sc_install.py +10 -6
- siliconcompiler/apps/sc_issue.py +7 -5
- siliconcompiler/apps/sc_remote.py +1 -1
- siliconcompiler/apps/sc_server.py +9 -14
- siliconcompiler/apps/sc_show.py +6 -5
- siliconcompiler/apps/smake.py +130 -94
- siliconcompiler/apps/utils/replay.py +4 -7
- siliconcompiler/apps/utils/summarize.py +3 -5
- siliconcompiler/asic.py +420 -0
- siliconcompiler/checklist.py +25 -2
- siliconcompiler/cmdlineschema.py +534 -0
- siliconcompiler/constraints/asic_component.py +2 -2
- siliconcompiler/constraints/asic_pins.py +2 -2
- siliconcompiler/constraints/asic_timing.py +3 -3
- siliconcompiler/core.py +7 -32
- siliconcompiler/data/templates/tcl/manifest.tcl.j2 +8 -0
- siliconcompiler/dependencyschema.py +89 -31
- siliconcompiler/design.py +176 -207
- siliconcompiler/filesetschema.py +250 -0
- siliconcompiler/flowgraph.py +274 -95
- siliconcompiler/fpga.py +124 -1
- siliconcompiler/library.py +218 -20
- siliconcompiler/metric.py +233 -20
- siliconcompiler/package/__init__.py +271 -50
- siliconcompiler/package/git.py +92 -16
- siliconcompiler/package/github.py +108 -12
- siliconcompiler/package/https.py +79 -16
- siliconcompiler/packageschema.py +88 -7
- siliconcompiler/pathschema.py +31 -2
- siliconcompiler/pdk.py +566 -1
- siliconcompiler/project.py +1095 -94
- siliconcompiler/record.py +38 -1
- siliconcompiler/remote/__init__.py +5 -2
- siliconcompiler/remote/client.py +11 -6
- siliconcompiler/remote/schema.py +5 -23
- siliconcompiler/remote/server.py +41 -54
- siliconcompiler/report/__init__.py +3 -3
- siliconcompiler/report/dashboard/__init__.py +48 -14
- siliconcompiler/report/dashboard/cli/__init__.py +99 -21
- siliconcompiler/report/dashboard/cli/board.py +364 -179
- siliconcompiler/report/dashboard/web/__init__.py +90 -12
- siliconcompiler/report/dashboard/web/components/__init__.py +219 -240
- siliconcompiler/report/dashboard/web/components/flowgraph.py +49 -26
- siliconcompiler/report/dashboard/web/components/graph.py +139 -100
- siliconcompiler/report/dashboard/web/layouts/__init__.py +29 -1
- siliconcompiler/report/dashboard/web/layouts/_common.py +38 -2
- siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph.py +39 -26
- siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph_node_tab.py +50 -50
- siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph_sac_tabs.py +49 -46
- siliconcompiler/report/dashboard/web/state.py +141 -14
- siliconcompiler/report/dashboard/web/utils/__init__.py +79 -16
- siliconcompiler/report/dashboard/web/utils/file_utils.py +74 -11
- siliconcompiler/report/dashboard/web/viewer.py +25 -1
- siliconcompiler/report/report.py +5 -2
- siliconcompiler/report/summary_image.py +29 -11
- siliconcompiler/scheduler/__init__.py +9 -1
- siliconcompiler/scheduler/docker.py +79 -1
- siliconcompiler/scheduler/run_node.py +35 -19
- siliconcompiler/scheduler/scheduler.py +208 -24
- siliconcompiler/scheduler/schedulernode.py +372 -46
- siliconcompiler/scheduler/send_messages.py +77 -29
- siliconcompiler/scheduler/slurm.py +76 -12
- siliconcompiler/scheduler/taskscheduler.py +140 -20
- siliconcompiler/schema/__init__.py +0 -2
- siliconcompiler/schema/baseschema.py +194 -38
- siliconcompiler/schema/journal.py +7 -4
- siliconcompiler/schema/namedschema.py +16 -10
- siliconcompiler/schema/parameter.py +55 -9
- siliconcompiler/schema/parametervalue.py +60 -0
- siliconcompiler/schema/safeschema.py +25 -2
- siliconcompiler/schema/schema_cfg.py +5 -5
- siliconcompiler/schema/utils.py +2 -2
- siliconcompiler/schema_obj.py +20 -3
- siliconcompiler/tool.py +979 -302
- siliconcompiler/tools/bambu/__init__.py +41 -0
- siliconcompiler/tools/builtin/concatenate.py +2 -2
- siliconcompiler/tools/builtin/minimum.py +2 -1
- siliconcompiler/tools/builtin/mux.py +2 -1
- siliconcompiler/tools/builtin/nop.py +2 -1
- siliconcompiler/tools/builtin/verify.py +2 -1
- siliconcompiler/tools/klayout/__init__.py +95 -0
- siliconcompiler/tools/openroad/__init__.py +289 -0
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +3 -0
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +7 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +8 -4
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +9 -5
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +5 -1
- siliconcompiler/tools/slang/__init__.py +1 -1
- siliconcompiler/tools/slang/elaborate.py +2 -1
- siliconcompiler/tools/vivado/scripts/sc_run.tcl +1 -1
- siliconcompiler/tools/vivado/scripts/sc_syn_fpga.tcl +8 -1
- siliconcompiler/tools/vivado/syn_fpga.py +6 -0
- siliconcompiler/tools/vivado/vivado.py +35 -2
- siliconcompiler/tools/vpr/__init__.py +150 -0
- siliconcompiler/tools/yosys/__init__.py +369 -1
- siliconcompiler/tools/yosys/scripts/procs.tcl +0 -1
- siliconcompiler/toolscripts/_tools.json +5 -10
- siliconcompiler/utils/__init__.py +66 -0
- siliconcompiler/utils/flowgraph.py +2 -2
- siliconcompiler/utils/issue.py +2 -1
- siliconcompiler/utils/logging.py +14 -0
- siliconcompiler/utils/multiprocessing.py +256 -0
- siliconcompiler/utils/showtools.py +10 -0
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/METADATA +5 -5
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/RECORD +115 -118
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/entry_points.txt +3 -0
- siliconcompiler/schema/cmdlineschema.py +0 -250
- siliconcompiler/toolscripts/rhel8/install-slang.sh +0 -40
- siliconcompiler/toolscripts/rhel9/install-slang.sh +0 -40
- siliconcompiler/toolscripts/ubuntu20/install-slang.sh +0 -47
- siliconcompiler/toolscripts/ubuntu22/install-slang.sh +0 -37
- siliconcompiler/toolscripts/ubuntu24/install-slang.sh +0 -37
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/top_level.txt +0 -0
|
@@ -93,6 +93,15 @@ class NodeListValue:
|
|
|
93
93
|
|
|
94
94
|
return [self.__base.get(field=field)]
|
|
95
95
|
|
|
96
|
+
def gettcl(self):
|
|
97
|
+
"""
|
|
98
|
+
Returns the tcl representation for the value
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
field (str): name of schema field.
|
|
102
|
+
"""
|
|
103
|
+
return NodeType.to_tcl(self.get(), self.type)
|
|
104
|
+
|
|
96
105
|
def set(self, value, field='value'):
|
|
97
106
|
"""
|
|
98
107
|
Sets the value in a specific field and ensures it has been normalized.
|
|
@@ -154,6 +163,16 @@ class NodeListValue:
|
|
|
154
163
|
"""
|
|
155
164
|
return self.__base.fields
|
|
156
165
|
|
|
166
|
+
@property
|
|
167
|
+
def has_value(self):
|
|
168
|
+
"""
|
|
169
|
+
Returns true if this node has a value.
|
|
170
|
+
"""
|
|
171
|
+
if self.__values:
|
|
172
|
+
return True
|
|
173
|
+
else:
|
|
174
|
+
return False
|
|
175
|
+
|
|
157
176
|
@property
|
|
158
177
|
def values(self):
|
|
159
178
|
'''
|
|
@@ -265,6 +284,15 @@ class NodeSetValue:
|
|
|
265
284
|
return set(vals)
|
|
266
285
|
return vals
|
|
267
286
|
|
|
287
|
+
def gettcl(self):
|
|
288
|
+
"""
|
|
289
|
+
Returns the tcl representation for the value
|
|
290
|
+
|
|
291
|
+
Args:
|
|
292
|
+
field (str): name of schema field.
|
|
293
|
+
"""
|
|
294
|
+
return NodeType.to_tcl(self.get(ordered=True), [self.__base.type])
|
|
295
|
+
|
|
268
296
|
def set(self, value, field='value'):
|
|
269
297
|
value = NodeType.normalize(value, [self.__base.type])
|
|
270
298
|
|
|
@@ -326,6 +354,16 @@ class NodeSetValue:
|
|
|
326
354
|
modified.append(val)
|
|
327
355
|
return tuple(modified)
|
|
328
356
|
|
|
357
|
+
@property
|
|
358
|
+
def has_value(self):
|
|
359
|
+
"""
|
|
360
|
+
Returns true if this node has a value.
|
|
361
|
+
"""
|
|
362
|
+
if self.__values:
|
|
363
|
+
return True
|
|
364
|
+
else:
|
|
365
|
+
return False
|
|
366
|
+
|
|
329
367
|
@property
|
|
330
368
|
def fields(self):
|
|
331
369
|
"""
|
|
@@ -434,6 +472,15 @@ class NodeValue:
|
|
|
434
472
|
return self.__signature
|
|
435
473
|
raise ValueError(f"{field} is not a valid field")
|
|
436
474
|
|
|
475
|
+
def gettcl(self):
|
|
476
|
+
"""
|
|
477
|
+
Returns the tcl representation for the value
|
|
478
|
+
|
|
479
|
+
Args:
|
|
480
|
+
field (str): name of schema field.
|
|
481
|
+
"""
|
|
482
|
+
return NodeType.to_tcl(self.get(), self.__type)
|
|
483
|
+
|
|
437
484
|
def set(self, value, field='value'):
|
|
438
485
|
"""
|
|
439
486
|
Sets the value in a specific field and ensures it has been normalized.
|
|
@@ -459,6 +506,19 @@ class NodeValue:
|
|
|
459
506
|
"""
|
|
460
507
|
raise ValueError(f"cannot add to {field} field")
|
|
461
508
|
|
|
509
|
+
@property
|
|
510
|
+
def has_value(self):
|
|
511
|
+
"""
|
|
512
|
+
Returns true if this node has a value.
|
|
513
|
+
"""
|
|
514
|
+
if isinstance(self.__type, (set, tuple, list)):
|
|
515
|
+
return bool(self.__value)
|
|
516
|
+
|
|
517
|
+
if self.__value is not None:
|
|
518
|
+
return True
|
|
519
|
+
else:
|
|
520
|
+
return False
|
|
521
|
+
|
|
462
522
|
@property
|
|
463
523
|
def fields(self):
|
|
464
524
|
"""
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
# SC dependencies outside of its directory, since it may be used by tool drivers
|
|
5
5
|
# that have isolated Python environments.
|
|
6
6
|
|
|
7
|
+
from typing import Dict, Tuple
|
|
8
|
+
|
|
7
9
|
from .parameter import Parameter
|
|
8
10
|
from .baseschema import BaseSchema
|
|
9
11
|
|
|
@@ -15,16 +17,27 @@ class SafeSchema(BaseSchema):
|
|
|
15
17
|
'''
|
|
16
18
|
|
|
17
19
|
@staticmethod
|
|
18
|
-
def __is_dict_leaf(manifest, keypath, version):
|
|
20
|
+
def __is_dict_leaf(manifest: Dict, keypath: Tuple[str], version: str) -> Parameter:
|
|
19
21
|
try:
|
|
20
22
|
return Parameter.from_dict(manifest, keypath, version)
|
|
21
23
|
except: # noqa E722
|
|
22
24
|
return None
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
@classmethod
|
|
27
|
+
def _getdict_type(cls) -> str:
|
|
28
|
+
"""
|
|
29
|
+
Returns the meta data for getdict
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
return "SafeSchema"
|
|
33
|
+
|
|
34
|
+
def _from_dict(self, manifest: Dict, keypath: Tuple[str], version: str = None) -> None:
|
|
25
35
|
if not isinstance(manifest, dict):
|
|
26
36
|
return
|
|
27
37
|
|
|
38
|
+
if "__meta__" in manifest:
|
|
39
|
+
del manifest["__meta__"]
|
|
40
|
+
|
|
28
41
|
for key, data in manifest.items():
|
|
29
42
|
obj = SafeSchema.__is_dict_leaf(data, keypath + [key], version)
|
|
30
43
|
if not obj:
|
|
@@ -35,3 +48,13 @@ class SafeSchema(BaseSchema):
|
|
|
35
48
|
self._BaseSchema__default = obj
|
|
36
49
|
else:
|
|
37
50
|
self._BaseSchema__manifest[key] = obj
|
|
51
|
+
|
|
52
|
+
@classmethod
|
|
53
|
+
def from_manifest(cls, filepath: str = None, cfg: Dict = None) -> "SafeSchema":
|
|
54
|
+
if filepath:
|
|
55
|
+
cfg = BaseSchema._read_manifest(filepath)
|
|
56
|
+
|
|
57
|
+
if cfg and "__meta__" in cfg:
|
|
58
|
+
del cfg["__meta__"]
|
|
59
|
+
|
|
60
|
+
return super().from_manifest(filepath=None, cfg=cfg)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from . import EditableSchema, Parameter, Scope, PerNode
|
|
4
4
|
from .utils import trim
|
|
5
5
|
|
|
6
|
-
SCHEMA_VERSION = '0.51.
|
|
6
|
+
SCHEMA_VERSION = '0.51.5'
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
#############################################################################
|
|
@@ -208,8 +208,8 @@ def schema_schematic(cfg):
|
|
|
208
208
|
# FPGA
|
|
209
209
|
###############################################################################
|
|
210
210
|
def schema_fpga(cfg):
|
|
211
|
-
from siliconcompiler.fpga import
|
|
212
|
-
cfg.insert("fpga",
|
|
211
|
+
from siliconcompiler.fpga import FPGASchemaTmp
|
|
212
|
+
cfg.insert("fpga", FPGASchemaTmp())
|
|
213
213
|
return cfg
|
|
214
214
|
|
|
215
215
|
|
|
@@ -217,8 +217,8 @@ def schema_fpga(cfg):
|
|
|
217
217
|
# PDK
|
|
218
218
|
###############################################################################
|
|
219
219
|
def schema_pdk(cfg):
|
|
220
|
-
from siliconcompiler.pdk import
|
|
221
|
-
cfg.insert("pdk", "default",
|
|
220
|
+
from siliconcompiler.pdk import PDKSchemaTmp
|
|
221
|
+
cfg.insert("pdk", "default", PDKSchemaTmp())
|
|
222
222
|
return cfg
|
|
223
223
|
|
|
224
224
|
|
siliconcompiler/schema/utils.py
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import sys
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
def trim(docstring):
|
|
10
|
+
def trim(docstring: str) -> str:
|
|
11
11
|
'''
|
|
12
12
|
Helper function for cleaning up indentation of docstring.
|
|
13
13
|
|
|
@@ -42,7 +42,7 @@ def trim(docstring):
|
|
|
42
42
|
return '\n'.join(trimmed)
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
def translate_loglevel(level):
|
|
45
|
+
def translate_loglevel(level: str) -> str:
|
|
46
46
|
if level == "quiet":
|
|
47
47
|
level = "error"
|
|
48
48
|
return level.upper()
|
siliconcompiler/schema_obj.py
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
from siliconcompiler.schema import BaseSchema
|
|
8
8
|
from siliconcompiler.schema import SafeSchema
|
|
9
9
|
from siliconcompiler.schema import EditableSchema
|
|
10
|
-
from siliconcompiler.
|
|
10
|
+
from siliconcompiler.cmdlineschema import CommandLineSchemaTmp
|
|
11
11
|
from siliconcompiler.schema import Parameter
|
|
12
12
|
|
|
13
13
|
from siliconcompiler.schema.schema_cfg import schema_cfg
|
|
@@ -38,8 +38,16 @@ class Schema(BaseSchema):
|
|
|
38
38
|
|
|
39
39
|
return super()._from_dict(manifest, keypath, version=version)
|
|
40
40
|
|
|
41
|
+
@classmethod
|
|
42
|
+
def _getdict_type(cls) -> str:
|
|
43
|
+
"""
|
|
44
|
+
Returns the meta data for getdict
|
|
45
|
+
"""
|
|
41
46
|
|
|
42
|
-
|
|
47
|
+
return Schema.__name__
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class SchemaTmp(Schema, CommandLineSchemaTmp):
|
|
43
51
|
"""Object for storing and accessing configuration values corresponding to
|
|
44
52
|
the SiliconCompiler schema.
|
|
45
53
|
|
|
@@ -113,9 +121,18 @@ class SchemaTmp(Schema, CommandLineSchema):
|
|
|
113
121
|
EditableSchema(self).insert("history", job, blank)
|
|
114
122
|
return blank
|
|
115
123
|
|
|
124
|
+
@classmethod
|
|
125
|
+
def _getdict_type(cls) -> str:
|
|
126
|
+
"""
|
|
127
|
+
Returns the meta data for getdict
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
return SchemaTmp.__name__
|
|
131
|
+
|
|
116
132
|
|
|
117
133
|
##############################################################################
|
|
118
134
|
# Main routine
|
|
119
135
|
if __name__ == "__main__":
|
|
120
136
|
import json
|
|
121
|
-
|
|
137
|
+
from siliconcompiler import Schema
|
|
138
|
+
print(json.dumps(Schema().getdict(), indent=4, sort_keys=True))
|