siliconcompiler 0.34.0__py3-none-any.whl → 0.34.2__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 +14 -2
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/_common.py +1 -1
- siliconcompiler/apps/sc.py +1 -1
- siliconcompiler/apps/sc_issue.py +1 -1
- siliconcompiler/apps/sc_remote.py +3 -3
- siliconcompiler/apps/sc_show.py +3 -3
- siliconcompiler/apps/utils/replay.py +4 -4
- siliconcompiler/checklist.py +203 -2
- siliconcompiler/constraints/__init__.py +17 -0
- siliconcompiler/constraints/asic_component.py +378 -0
- siliconcompiler/constraints/asic_floorplan.py +449 -0
- siliconcompiler/constraints/asic_pins.py +489 -0
- siliconcompiler/constraints/asic_timing.py +517 -0
- siliconcompiler/core.py +31 -249
- siliconcompiler/data/templates/email/general.j2 +3 -3
- siliconcompiler/data/templates/email/summary.j2 +1 -1
- siliconcompiler/data/templates/issue/README.txt +1 -1
- siliconcompiler/data/templates/report/sc_report.j2 +7 -7
- siliconcompiler/dependencyschema.py +10 -174
- siliconcompiler/design.py +325 -114
- siliconcompiler/flowgraph.py +63 -15
- siliconcompiler/library.py +133 -0
- siliconcompiler/metric.py +94 -72
- siliconcompiler/metrics/__init__.py +7 -0
- siliconcompiler/metrics/asic.py +245 -0
- siliconcompiler/metrics/fpga.py +220 -0
- siliconcompiler/optimizer/vizier.py +2 -2
- siliconcompiler/package/__init__.py +138 -35
- siliconcompiler/package/github.py +6 -10
- siliconcompiler/packageschema.py +256 -12
- siliconcompiler/pathschema.py +226 -0
- siliconcompiler/pdk.py +5 -5
- siliconcompiler/project.py +459 -0
- siliconcompiler/remote/client.py +18 -12
- siliconcompiler/remote/server.py +2 -2
- siliconcompiler/report/dashboard/cli/__init__.py +6 -6
- siliconcompiler/report/dashboard/cli/board.py +3 -3
- siliconcompiler/report/dashboard/web/components/__init__.py +5 -5
- siliconcompiler/report/dashboard/web/components/flowgraph.py +4 -4
- siliconcompiler/report/dashboard/web/components/graph.py +2 -2
- siliconcompiler/report/dashboard/web/state.py +1 -1
- siliconcompiler/report/dashboard/web/utils/__init__.py +5 -5
- siliconcompiler/report/html_report.py +1 -1
- siliconcompiler/report/report.py +4 -4
- siliconcompiler/report/summary_table.py +2 -2
- siliconcompiler/report/utils.py +5 -5
- siliconcompiler/scheduler/docker.py +4 -10
- siliconcompiler/scheduler/run_node.py +4 -8
- siliconcompiler/scheduler/scheduler.py +18 -24
- siliconcompiler/scheduler/schedulernode.py +161 -143
- siliconcompiler/scheduler/send_messages.py +3 -3
- siliconcompiler/scheduler/slurm.py +5 -3
- siliconcompiler/scheduler/taskscheduler.py +10 -8
- siliconcompiler/schema/__init__.py +0 -2
- siliconcompiler/schema/baseschema.py +148 -26
- siliconcompiler/schema/editableschema.py +14 -6
- siliconcompiler/schema/journal.py +23 -15
- siliconcompiler/schema/namedschema.py +30 -4
- siliconcompiler/schema/parameter.py +34 -19
- siliconcompiler/schema/parametertype.py +2 -0
- siliconcompiler/schema/parametervalue.py +198 -15
- siliconcompiler/schema/schema_cfg.py +18 -14
- siliconcompiler/schema_obj.py +5 -3
- siliconcompiler/tool.py +591 -179
- siliconcompiler/tools/__init__.py +2 -0
- siliconcompiler/tools/builtin/_common.py +5 -5
- siliconcompiler/tools/builtin/concatenate.py +5 -5
- siliconcompiler/tools/builtin/minimum.py +4 -4
- siliconcompiler/tools/builtin/mux.py +4 -4
- siliconcompiler/tools/builtin/nop.py +4 -4
- siliconcompiler/tools/builtin/verify.py +7 -7
- siliconcompiler/tools/execute/exec_input.py +1 -1
- siliconcompiler/tools/genfasm/genfasm.py +1 -6
- siliconcompiler/tools/openroad/_apr.py +5 -1
- siliconcompiler/tools/openroad/antenna_repair.py +1 -1
- siliconcompiler/tools/openroad/macro_placement.py +1 -1
- siliconcompiler/tools/openroad/power_grid.py +1 -1
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +5 -0
- siliconcompiler/tools/opensta/timing.py +26 -3
- siliconcompiler/tools/slang/__init__.py +2 -2
- siliconcompiler/tools/surfer/__init__.py +0 -0
- siliconcompiler/tools/surfer/show.py +53 -0
- siliconcompiler/tools/surfer/surfer.py +30 -0
- siliconcompiler/tools/vpr/route.py +27 -14
- siliconcompiler/tools/vpr/vpr.py +23 -6
- siliconcompiler/tools/yosys/__init__.py +1 -1
- siliconcompiler/tools/yosys/scripts/procs.tcl +143 -0
- siliconcompiler/tools/yosys/{sc_synth_asic.tcl → scripts/sc_synth_asic.tcl} +4 -0
- siliconcompiler/tools/yosys/{sc_synth_fpga.tcl → scripts/sc_synth_fpga.tcl} +24 -77
- siliconcompiler/tools/yosys/syn_fpga.py +14 -0
- siliconcompiler/toolscripts/_tools.json +9 -13
- siliconcompiler/toolscripts/rhel9/install-vpr.sh +0 -2
- siliconcompiler/toolscripts/ubuntu22/install-surfer.sh +33 -0
- siliconcompiler/toolscripts/ubuntu24/install-surfer.sh +33 -0
- siliconcompiler/utils/__init__.py +2 -1
- siliconcompiler/utils/flowgraph.py +24 -23
- siliconcompiler/utils/issue.py +23 -29
- siliconcompiler/utils/logging.py +35 -6
- siliconcompiler/utils/showtools.py +6 -1
- {siliconcompiler-0.34.0.dist-info → siliconcompiler-0.34.2.dist-info}/METADATA +15 -25
- {siliconcompiler-0.34.0.dist-info → siliconcompiler-0.34.2.dist-info}/RECORD +109 -97
- siliconcompiler/schema/packageschema.py +0 -101
- siliconcompiler/tools/yosys/procs.tcl +0 -71
- siliconcompiler/toolscripts/rhel9/install-yosys-parmys.sh +0 -68
- siliconcompiler/toolscripts/ubuntu22/install-yosys-parmys.sh +0 -68
- siliconcompiler/toolscripts/ubuntu24/install-yosys-parmys.sh +0 -68
- /siliconcompiler/tools/yosys/{sc_lec.tcl → scripts/sc_lec.tcl} +0 -0
- /siliconcompiler/tools/yosys/{sc_screenshot.tcl → scripts/sc_screenshot.tcl} +0 -0
- /siliconcompiler/tools/yosys/{syn_strategies.tcl → scripts/syn_strategies.tcl} +0 -0
- {siliconcompiler-0.34.0.dist-info → siliconcompiler-0.34.2.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.34.0.dist-info → siliconcompiler-0.34.2.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.34.0.dist-info → siliconcompiler-0.34.2.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.34.0.dist-info → siliconcompiler-0.34.2.dist-info}/top_level.txt +0 -0
|
@@ -4,9 +4,6 @@ from siliconcompiler.schema.baseschema import BaseSchema
|
|
|
4
4
|
from siliconcompiler.schema.editableschema import EditableSchema
|
|
5
5
|
from siliconcompiler.schema.parameter import Parameter, Scope
|
|
6
6
|
from siliconcompiler.schema.namedschema import NamedSchema
|
|
7
|
-
from siliconcompiler.schema.utils import trim
|
|
8
|
-
|
|
9
|
-
from siliconcompiler.package import Resolver
|
|
10
7
|
|
|
11
8
|
|
|
12
9
|
class DependencySchema(BaseSchema):
|
|
@@ -26,50 +23,9 @@ class DependencySchema(BaseSchema):
|
|
|
26
23
|
'[str]',
|
|
27
24
|
scope=Scope.GLOBAL,
|
|
28
25
|
lock=True,
|
|
29
|
-
shorthelp="List of dependencies",
|
|
26
|
+
shorthelp="List of object dependencies",
|
|
30
27
|
help="List of named object dependencies included via add_dep()."))
|
|
31
28
|
|
|
32
|
-
schema.insert(
|
|
33
|
-
'package', 'default', 'root',
|
|
34
|
-
Parameter(
|
|
35
|
-
'str',
|
|
36
|
-
scope=Scope.GLOBAL,
|
|
37
|
-
shorthelp="Package: package root",
|
|
38
|
-
example=[
|
|
39
|
-
"api: chip.set('source', "
|
|
40
|
-
"'freepdk45_data', 'path', 'ssh://git@github.com/siliconcompiler/freepdk45/')"],
|
|
41
|
-
help=trim("""
|
|
42
|
-
Package root path, this points the location where the package data can be
|
|
43
|
-
retrieved or accessed.
|
|
44
|
-
Allowed roots:
|
|
45
|
-
|
|
46
|
-
* /path/on/network/drive
|
|
47
|
-
* file:///path/on/network/drive
|
|
48
|
-
* git+https://github.com/xyz/xyz
|
|
49
|
-
* git://github.com/xyz/xyz
|
|
50
|
-
* git+ssh://github.com/xyz/xyz
|
|
51
|
-
* ssh://github.com/xyz/xyz
|
|
52
|
-
* https://github.com/xyz/xyz/archive
|
|
53
|
-
* https://zeroasic.com/xyz.tar.gz
|
|
54
|
-
* github://siliconcompiler/lambdapdk/v1.0/asap7.tar.gz
|
|
55
|
-
* python://siliconcompiler
|
|
56
|
-
""")))
|
|
57
|
-
|
|
58
|
-
schema.insert(
|
|
59
|
-
'package', 'default', 'tag',
|
|
60
|
-
Parameter(
|
|
61
|
-
'str',
|
|
62
|
-
scope=Scope.GLOBAL,
|
|
63
|
-
shorthelp="Package: package tag/version",
|
|
64
|
-
example=[
|
|
65
|
-
"api: chip.set('source', 'freepdk45_data', 'ref', '07ec4aa')"],
|
|
66
|
-
help=trim("""
|
|
67
|
-
Package reference tag. The meaning of the this tag depends on the context of
|
|
68
|
-
the root.
|
|
69
|
-
For git, this can be a tag, branch, or commit id. For https this is the version
|
|
70
|
-
of the file that will be downloaded.
|
|
71
|
-
""")))
|
|
72
|
-
|
|
73
29
|
def _from_dict(self, manifest, keypath, version=None):
|
|
74
30
|
self.set("deps", False, field="lock")
|
|
75
31
|
ret = super()._from_dict(manifest, keypath, version)
|
|
@@ -95,6 +51,9 @@ class DependencySchema(BaseSchema):
|
|
|
95
51
|
if not clobber and obj.name() in self.__deps:
|
|
96
52
|
return False
|
|
97
53
|
|
|
54
|
+
if obj.name() is None:
|
|
55
|
+
raise ValueError("Cannot add an unnamed dependency")
|
|
56
|
+
|
|
98
57
|
if obj.name() not in self.__deps:
|
|
99
58
|
self.set("deps", False, field="lock")
|
|
100
59
|
self.add("deps", obj.name())
|
|
@@ -217,6 +176,12 @@ class DependencySchema(BaseSchema):
|
|
|
217
176
|
|
|
218
177
|
if name:
|
|
219
178
|
if name not in self.__deps:
|
|
179
|
+
if "." in name:
|
|
180
|
+
name0, *name1 = name.split(".")
|
|
181
|
+
subdep = self.get_dep(name0)
|
|
182
|
+
if isinstance(subdep, DependencySchema):
|
|
183
|
+
return subdep.get_dep(".".join(name1))
|
|
184
|
+
raise KeyError(f"{name} does not contain dependency information")
|
|
220
185
|
raise KeyError(f"{name} is not an imported module")
|
|
221
186
|
|
|
222
187
|
return self.__deps[name]
|
|
@@ -261,132 +226,3 @@ class DependencySchema(BaseSchema):
|
|
|
261
226
|
|
|
262
227
|
if isinstance(self.__deps[module], DependencySchema):
|
|
263
228
|
self.__deps[module]._populate_deps(module_map)
|
|
264
|
-
|
|
265
|
-
def register_package(self, name: str, root: str, tag: str = None):
|
|
266
|
-
"""
|
|
267
|
-
Registers a package by its name with the root and associated tag.
|
|
268
|
-
|
|
269
|
-
Args:
|
|
270
|
-
name (str): Package name
|
|
271
|
-
root (str): Path to the root, can be directory, git url, or archive url
|
|
272
|
-
tag (str): Reference of the sources, can be commitid, branch name, tag
|
|
273
|
-
|
|
274
|
-
Examples:
|
|
275
|
-
>>> schema.register_package('siliconcompiler_data',
|
|
276
|
-
'git+https://github.com/siliconcompiler/siliconcompiler',
|
|
277
|
-
'v1.0.0')
|
|
278
|
-
"""
|
|
279
|
-
|
|
280
|
-
if os.path.isfile(root):
|
|
281
|
-
root = os.path.dirname(os.path.abspath(root))
|
|
282
|
-
|
|
283
|
-
self.set("package", name, "root", root)
|
|
284
|
-
if tag:
|
|
285
|
-
self.set("package", name, "tag", tag)
|
|
286
|
-
|
|
287
|
-
def find_package(self, name: str):
|
|
288
|
-
"""
|
|
289
|
-
Returns absolute path to the package root.
|
|
290
|
-
|
|
291
|
-
Raises:
|
|
292
|
-
ValueError: is package is not found
|
|
293
|
-
|
|
294
|
-
Args:
|
|
295
|
-
name (str): name of the package to find.
|
|
296
|
-
|
|
297
|
-
Returns:
|
|
298
|
-
Path to the package directory root.
|
|
299
|
-
|
|
300
|
-
Examples:
|
|
301
|
-
>>> schema.find_package('siliconcompiler')
|
|
302
|
-
Returns the path to the root of the siliconcompiler package.
|
|
303
|
-
"""
|
|
304
|
-
|
|
305
|
-
if not self.valid("package", name):
|
|
306
|
-
raise ValueError(f"{name} is not a recognized source")
|
|
307
|
-
|
|
308
|
-
root = self.get("package", name, "root")
|
|
309
|
-
tag = self.get("package", name, "tag")
|
|
310
|
-
|
|
311
|
-
resolver = Resolver.find_resolver(root)
|
|
312
|
-
return resolver(name, self._parent(root=True), root, tag).get_path()
|
|
313
|
-
|
|
314
|
-
def __get_resolver_map(self):
|
|
315
|
-
"""
|
|
316
|
-
Generate the resolver map got package handling for find_files and check_filepaths
|
|
317
|
-
"""
|
|
318
|
-
schema_root = self._parent(root=True)
|
|
319
|
-
resolver_map = {}
|
|
320
|
-
for package in self.getkeys("package"):
|
|
321
|
-
root = self.get("package", package, "root")
|
|
322
|
-
tag = self.get("package", package, "tag")
|
|
323
|
-
resolver = Resolver.find_resolver(root)
|
|
324
|
-
resolver_map[package] = resolver(package, schema_root, root, tag).get_path
|
|
325
|
-
return resolver_map
|
|
326
|
-
|
|
327
|
-
def find_files(self, *keypath,
|
|
328
|
-
missing_ok=False,
|
|
329
|
-
step=None, index=None):
|
|
330
|
-
"""
|
|
331
|
-
Returns absolute paths to files or directories based on the keypath
|
|
332
|
-
provided.
|
|
333
|
-
|
|
334
|
-
The keypath provided must point to a schema parameter of type file, dir,
|
|
335
|
-
or lists of either. Otherwise, it will trigger an error.
|
|
336
|
-
|
|
337
|
-
Args:
|
|
338
|
-
keypath (list of str): Variable length schema key list.
|
|
339
|
-
missing_ok (bool): If True, silently return None when files aren't
|
|
340
|
-
found. If False, print an error and set the error flag.
|
|
341
|
-
step (str): Step name to access for parameters that may be specified
|
|
342
|
-
on a per-node basis.
|
|
343
|
-
index (str): Index name to access for parameters that may be specified
|
|
344
|
-
on a per-node basis.
|
|
345
|
-
|
|
346
|
-
Returns:
|
|
347
|
-
If keys points to a scalar entry, returns an absolute path to that
|
|
348
|
-
file/directory, or None if not found. It keys points to a list
|
|
349
|
-
entry, returns a list of either the absolute paths or None for each
|
|
350
|
-
entry, depending on whether it is found.
|
|
351
|
-
|
|
352
|
-
Examples:
|
|
353
|
-
>>> schema.find_files('input', 'verilog')
|
|
354
|
-
Returns a list of absolute paths to source files, as specified in
|
|
355
|
-
the schema.
|
|
356
|
-
"""
|
|
357
|
-
schema_root = self._parent(root=True)
|
|
358
|
-
cwd = getattr(schema_root, "cwd", os.getcwd())
|
|
359
|
-
collection_dir = getattr(schema_root, "collection_dir", None)
|
|
360
|
-
if collection_dir:
|
|
361
|
-
collection_dir = collection_dir()
|
|
362
|
-
|
|
363
|
-
return super().find_files(*keypath,
|
|
364
|
-
missing_ok=missing_ok,
|
|
365
|
-
step=step, index=index,
|
|
366
|
-
packages=self.__get_resolver_map(),
|
|
367
|
-
collection_dir=collection_dir,
|
|
368
|
-
cwd=cwd)
|
|
369
|
-
|
|
370
|
-
def check_filepaths(self, ignore_keys=None):
|
|
371
|
-
'''
|
|
372
|
-
Verifies that paths to all files in manifest are valid.
|
|
373
|
-
|
|
374
|
-
Args:
|
|
375
|
-
ignore_keys (list of keypaths): list of keypaths to ignore while checking
|
|
376
|
-
|
|
377
|
-
Returns:
|
|
378
|
-
True if all file paths are valid, otherwise False.
|
|
379
|
-
'''
|
|
380
|
-
schema_root = self._parent(root=True)
|
|
381
|
-
cwd = getattr(schema_root, "cwd", os.getcwd())
|
|
382
|
-
logger = getattr(schema_root, "logger", None)
|
|
383
|
-
collection_dir = getattr(schema_root, "collection_dir", None)
|
|
384
|
-
if collection_dir:
|
|
385
|
-
collection_dir = collection_dir()
|
|
386
|
-
|
|
387
|
-
return super().check_filepaths(
|
|
388
|
-
ignore_keys=ignore_keys,
|
|
389
|
-
logger=logger,
|
|
390
|
-
packages=self.__get_resolver_map(),
|
|
391
|
-
collection_dir=collection_dir,
|
|
392
|
-
cwd=cwd)
|