siliconcompiler 0.36.1__py3-none-any.whl → 0.36.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/_metadata.py +1 -1
- siliconcompiler/asic.py +4 -4
- siliconcompiler/design.py +6 -1
- siliconcompiler/package/__init__.py +3 -2
- siliconcompiler/project.py +30 -14
- siliconcompiler/schema_support/filesetschema.py +9 -1
- siliconcompiler/schema_support/pathschema.py +16 -10
- siliconcompiler/tool.py +3 -1
- siliconcompiler/tools/keplerformal/lec.py +2 -2
- siliconcompiler/tools/klayout/export.py +1 -1
- siliconcompiler/tools/openroad/_apr.py +69 -11
- siliconcompiler/tools/openroad/power_grid.py +1 -1
- siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl +17 -15
- siliconcompiler/tools/openroad/scripts/common/write_data_timing.tcl +3 -1
- siliconcompiler/tools/vpr/__init__.py +9 -9
- siliconcompiler/tools/vpr/place.py +1 -2
- siliconcompiler/tools/yosys/syn_asic.py +4 -4
- siliconcompiler/tools/yosys/syn_fpga.py +7 -8
- siliconcompiler/toolscripts/_tools.json +4 -4
- siliconcompiler/utils/logging.py +6 -0
- {siliconcompiler-0.36.1.dist-info → siliconcompiler-0.36.2.dist-info}/METADATA +2 -2
- {siliconcompiler-0.36.1.dist-info → siliconcompiler-0.36.2.dist-info}/RECORD +26 -26
- {siliconcompiler-0.36.1.dist-info → siliconcompiler-0.36.2.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.36.1.dist-info → siliconcompiler-0.36.2.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.36.1.dist-info → siliconcompiler-0.36.2.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.36.1.dist-info → siliconcompiler-0.36.2.dist-info}/top_level.txt +0 -0
siliconcompiler/_metadata.py
CHANGED
siliconcompiler/asic.py
CHANGED
|
@@ -244,7 +244,7 @@ class ASIC(Project):
|
|
|
244
244
|
if pdk not in self.getkeys("library"):
|
|
245
245
|
error = True
|
|
246
246
|
self.logger.error(f"{pdk} library has not been loaded")
|
|
247
|
-
elif not isinstance(self.
|
|
247
|
+
elif not isinstance(self.get_library(pdk), PDK):
|
|
248
248
|
error = True
|
|
249
249
|
self.logger.error(f"{pdk} must be a PDK")
|
|
250
250
|
|
|
@@ -432,7 +432,7 @@ class ASIC(Project):
|
|
|
432
432
|
if not self.get("asic", "pdk") and self.get("asic", "mainlib"):
|
|
433
433
|
mainlib = None
|
|
434
434
|
if self._has_library(self.get("asic", "mainlib")):
|
|
435
|
-
mainlib = self.
|
|
435
|
+
mainlib = self.get_library(self.get("asic", "mainlib"))
|
|
436
436
|
if mainlib:
|
|
437
437
|
mainlib_pdk = mainlib.get("asic", "pdk")
|
|
438
438
|
if mainlib_pdk:
|
|
@@ -530,7 +530,7 @@ class ASICTask(Task):
|
|
|
530
530
|
raise ValueError("mainlib has not been defined in [asic,mainlib]")
|
|
531
531
|
if mainlib not in self.project.getkeys("library"):
|
|
532
532
|
raise LookupError(f"{mainlib} has not been loaded")
|
|
533
|
-
return self.project.
|
|
533
|
+
return self.project.get_library(mainlib)
|
|
534
534
|
|
|
535
535
|
@property
|
|
536
536
|
def pdk(self) -> PDK:
|
|
@@ -540,7 +540,7 @@ class ASICTask(Task):
|
|
|
540
540
|
raise ValueError("pdk has not been defined in [asic,pdk]")
|
|
541
541
|
if pdk not in self.project.getkeys("library"):
|
|
542
542
|
raise LookupError(f"{pdk} has not been loaded")
|
|
543
|
-
return self.project.
|
|
543
|
+
return self.project.get_library(pdk)
|
|
544
544
|
|
|
545
545
|
def set_asic_var(self,
|
|
546
546
|
key: str,
|
siliconcompiler/design.py
CHANGED
|
@@ -694,7 +694,12 @@ class Design(DependencySchema, LibrarySchema):
|
|
|
694
694
|
if dataroot is ...:
|
|
695
695
|
dataroot = None
|
|
696
696
|
else:
|
|
697
|
-
|
|
697
|
+
if option in ['idir', 'libdir']:
|
|
698
|
+
try:
|
|
699
|
+
dataroot = self._get_active_dataroot(dataroot)
|
|
700
|
+
except ValueError as e:
|
|
701
|
+
if any(not os.path.isabs(v) for v in value):
|
|
702
|
+
raise e
|
|
698
703
|
|
|
699
704
|
with self.active_dataroot(dataroot):
|
|
700
705
|
if list in typelist and not clobber:
|
|
@@ -72,9 +72,10 @@ class Resolver:
|
|
|
72
72
|
self.__cacheid = None
|
|
73
73
|
|
|
74
74
|
if self.__root and hasattr(self.__root, "logger"):
|
|
75
|
-
|
|
75
|
+
rootlogger = self.__root.logger
|
|
76
76
|
else:
|
|
77
|
-
|
|
77
|
+
rootlogger = MPManager.logger()
|
|
78
|
+
self.__logger = rootlogger.getChild(f"resolver-{self.name}")
|
|
78
79
|
|
|
79
80
|
@staticmethod
|
|
80
81
|
def populate_resolvers() -> None:
|
siliconcompiler/project.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
|
-
import sys
|
|
4
3
|
import uuid
|
|
5
4
|
|
|
6
5
|
import os.path
|
|
@@ -28,7 +27,7 @@ from siliconcompiler.schema_support.pathschema import PathSchemaBase
|
|
|
28
27
|
|
|
29
28
|
from siliconcompiler.report.dashboard.cli import CliDashboard
|
|
30
29
|
from siliconcompiler.scheduler import Scheduler, SCRuntimeError
|
|
31
|
-
from siliconcompiler.utils.logging import
|
|
30
|
+
from siliconcompiler.utils.logging import get_stream_handler
|
|
32
31
|
from siliconcompiler.utils import get_file_ext
|
|
33
32
|
from siliconcompiler.utils.multiprocessing import MPManager
|
|
34
33
|
from siliconcompiler.utils.paths import jobdir, workdir
|
|
@@ -143,12 +142,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
|
|
|
143
142
|
self.__logger = MPManager.logger().getChild(f"project_{uuid.uuid4().hex}")
|
|
144
143
|
self.__logger.setLevel(logging.INFO)
|
|
145
144
|
|
|
146
|
-
self._logger_console =
|
|
147
|
-
if SCColorLoggerFormatter.supports_color(sys.stdout):
|
|
148
|
-
self._logger_console.setFormatter(SCColorLoggerFormatter(SCLoggerFormatter()))
|
|
149
|
-
else:
|
|
150
|
-
self._logger_console.setFormatter(SCLoggerFormatter())
|
|
151
|
-
|
|
145
|
+
self._logger_console = get_stream_handler(self, in_run=False, step=None, index=None)
|
|
152
146
|
self.__logger.addHandler(self._logger_console)
|
|
153
147
|
|
|
154
148
|
def __init_dashboard(self):
|
|
@@ -225,7 +219,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
|
|
|
225
219
|
if not self.valid("library", design_name):
|
|
226
220
|
raise KeyError(f"{design_name} design has not been loaded")
|
|
227
221
|
|
|
228
|
-
return self.
|
|
222
|
+
return self.get_library(design_name)
|
|
229
223
|
|
|
230
224
|
@property
|
|
231
225
|
def option(self) -> OptionSchema:
|
|
@@ -482,7 +476,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
|
|
|
482
476
|
if not self._has_library(src_lib):
|
|
483
477
|
continue
|
|
484
478
|
|
|
485
|
-
if not self.
|
|
479
|
+
if not self.get_library(src_lib).has_fileset(src_fileset):
|
|
486
480
|
self.logger.error(f"{src_fileset} is not a valid fileset in {src_lib}")
|
|
487
481
|
error = True
|
|
488
482
|
continue
|
|
@@ -496,7 +490,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
|
|
|
496
490
|
continue
|
|
497
491
|
|
|
498
492
|
if dst_fileset and \
|
|
499
|
-
not self.
|
|
493
|
+
not self.get_library(dst_lib).has_fileset(dst_fileset):
|
|
500
494
|
self.logger.error(f"{dst_fileset} is not a valid fileset in {dst_lib}")
|
|
501
495
|
error = True
|
|
502
496
|
continue
|
|
@@ -715,7 +709,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
|
|
|
715
709
|
if dst_lib:
|
|
716
710
|
if not self._has_library(dst_lib):
|
|
717
711
|
raise KeyError(f"{dst_lib} is not a loaded library")
|
|
718
|
-
dst_obj = self.
|
|
712
|
+
dst_obj = self.get_library(dst_lib)
|
|
719
713
|
else:
|
|
720
714
|
dst_obj = None
|
|
721
715
|
if not dst_fileset:
|
|
@@ -844,7 +838,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
|
|
|
844
838
|
|
|
845
839
|
if isinstance(src_dep, str):
|
|
846
840
|
if self._has_library(src_dep):
|
|
847
|
-
src_dep = self.
|
|
841
|
+
src_dep = self.get_library(src_dep)
|
|
848
842
|
else:
|
|
849
843
|
src_dep_name = src_dep
|
|
850
844
|
src_dep = None
|
|
@@ -875,7 +869,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
|
|
|
875
869
|
if not self._has_library(alias_dep):
|
|
876
870
|
raise KeyError(f"{alias_dep} has not been loaded")
|
|
877
871
|
|
|
878
|
-
alias_dep = self.
|
|
872
|
+
alias_dep = self.get_library(alias_dep)
|
|
879
873
|
|
|
880
874
|
if alias_dep is not None:
|
|
881
875
|
if isinstance(alias_dep, Design):
|
|
@@ -894,6 +888,28 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
|
|
|
894
888
|
else:
|
|
895
889
|
return self.add("option", "alias", alias)
|
|
896
890
|
|
|
891
|
+
def get_library(self, library: str) -> NamedSchema:
|
|
892
|
+
"""
|
|
893
|
+
Retrieves a library by name from the project.
|
|
894
|
+
|
|
895
|
+
Args:
|
|
896
|
+
library (str): The name of the library to retrieve.
|
|
897
|
+
|
|
898
|
+
Returns:
|
|
899
|
+
NamedSchema: The `NamedSchema` object representing the library.
|
|
900
|
+
|
|
901
|
+
Raises:
|
|
902
|
+
KeyError: If the specified library is not found in the project.
|
|
903
|
+
TypeError: If the provided `library` is not a string.
|
|
904
|
+
"""
|
|
905
|
+
if not isinstance(library, str):
|
|
906
|
+
raise TypeError("library must be a string")
|
|
907
|
+
|
|
908
|
+
if not self._has_library(library):
|
|
909
|
+
raise KeyError(f"{library} is not a valid library")
|
|
910
|
+
|
|
911
|
+
return self.get("library", library, field="schema")
|
|
912
|
+
|
|
897
913
|
def _has_library(self, library: Union[str, NamedSchema]) -> bool:
|
|
898
914
|
"""
|
|
899
915
|
Checks if a library with the given name exists and is loaded in the project.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import contextlib
|
|
2
2
|
|
|
3
|
+
import os.path
|
|
4
|
+
|
|
3
5
|
from pathlib import Path
|
|
4
6
|
|
|
5
7
|
from typing import List, Tuple, Optional, Union, Iterable, Set
|
|
@@ -118,8 +120,14 @@ class FileSetSchema(PathSchema):
|
|
|
118
120
|
ext = utils.get_file_ext(filename)
|
|
119
121
|
filetype = utils.get_default_iomap().get(ext, ext)
|
|
120
122
|
|
|
123
|
+
try:
|
|
124
|
+
dataroot = self._get_active_dataroot(dataroot)
|
|
125
|
+
except ValueError as e:
|
|
126
|
+
if not os.path.isabs(filename):
|
|
127
|
+
raise e
|
|
128
|
+
|
|
121
129
|
# adding files to dictionary
|
|
122
|
-
with self.active_dataroot(
|
|
130
|
+
with self.active_dataroot(dataroot):
|
|
123
131
|
if clobber:
|
|
124
132
|
return self.set('fileset', fileset, 'file', filetype, filename)
|
|
125
133
|
else:
|
|
@@ -11,7 +11,9 @@ from siliconcompiler.schema.parameter import Parameter, Scope
|
|
|
11
11
|
from siliconcompiler.schema.utils import trim
|
|
12
12
|
|
|
13
13
|
from siliconcompiler.package import Resolver
|
|
14
|
+
from siliconcompiler.utils.logging import get_stream_handler
|
|
14
15
|
from siliconcompiler.utils.paths import collectiondir, cwdirsafe
|
|
16
|
+
from siliconcompiler.utils.multiprocessing import MPManager
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
class PathSchemaBase(BaseSchema):
|
|
@@ -19,6 +21,15 @@ class PathSchemaBase(BaseSchema):
|
|
|
19
21
|
Schema extension to add simpler find_files and check_filepaths
|
|
20
22
|
'''
|
|
21
23
|
|
|
24
|
+
def __getlogger(self, logger_name: str) -> logging.Logger:
|
|
25
|
+
schema_root = self._parent(root=True)
|
|
26
|
+
root_logger = getattr(schema_root, "logger", MPManager.logger())
|
|
27
|
+
logger = root_logger.getChild(logger_name)
|
|
28
|
+
if not logger.handlers:
|
|
29
|
+
logger.addHandler(get_stream_handler(schema_root, in_run=False, step=None, index=None))
|
|
30
|
+
logger.setLevel(logging.INFO)
|
|
31
|
+
return logger
|
|
32
|
+
|
|
22
33
|
def find_files(self, *keypath: str,
|
|
23
34
|
missing_ok: bool = False,
|
|
24
35
|
step: Optional[str] = None, index: Optional[Union[int, str]] = None) \
|
|
@@ -69,13 +80,10 @@ class PathSchemaBase(BaseSchema):
|
|
|
69
80
|
True if all file paths are valid, otherwise False.
|
|
70
81
|
'''
|
|
71
82
|
schema_root = self._parent(root=True)
|
|
72
|
-
logger = getattr(schema_root,
|
|
73
|
-
"logger",
|
|
74
|
-
logging.getLogger("siliconcompiler.check_filepaths"))
|
|
75
83
|
|
|
76
84
|
return super()._check_filepaths(
|
|
77
85
|
ignore_keys=ignore_keys,
|
|
78
|
-
logger=
|
|
86
|
+
logger=self.__getlogger("check_filepaths"),
|
|
79
87
|
collection_dir=collectiondir(schema_root),
|
|
80
88
|
cwd=cwdirsafe(schema_root))
|
|
81
89
|
|
|
@@ -121,13 +129,11 @@ class PathSchemaBase(BaseSchema):
|
|
|
121
129
|
>>> hashlist = hash_files('input', 'rtl', 'verilog')
|
|
122
130
|
Computes, stores, and returns hashes of files in :keypath:`input, rtl, verilog`.
|
|
123
131
|
'''
|
|
124
|
-
schema_root = self._parent(root=True)
|
|
125
|
-
logger = getattr(schema_root,
|
|
126
|
-
"logger",
|
|
127
|
-
logging.getLogger("siliconcompiler.hash_files"))
|
|
128
|
-
|
|
129
132
|
if verbose:
|
|
130
|
-
|
|
133
|
+
self.__getlogger("hash_files").info(
|
|
134
|
+
f"Computing hash value for [{','.join([*self._keypath, *keypath])}]")
|
|
135
|
+
|
|
136
|
+
schema_root = self._parent(root=True)
|
|
131
137
|
|
|
132
138
|
hashes = super()._hash_files(*keypath,
|
|
133
139
|
missing_ok=missing_ok,
|
siliconcompiler/tool.py
CHANGED
|
@@ -997,7 +997,7 @@ class Task(NamedSchema, PathSchema, DocsSchema):
|
|
|
997
997
|
open(stderr_file, 'w') as stderr_writer:
|
|
998
998
|
if stderr_file == stdout_file:
|
|
999
999
|
stderr_writer.close()
|
|
1000
|
-
stderr_writer =
|
|
1000
|
+
stderr_writer = stdout_writer
|
|
1001
1001
|
|
|
1002
1002
|
with contextlib.redirect_stderr(stderr_writer), \
|
|
1003
1003
|
contextlib.redirect_stdout(stdout_writer):
|
|
@@ -1009,6 +1009,8 @@ class Task(NamedSchema, PathSchema, DocsSchema):
|
|
|
1009
1009
|
finally:
|
|
1010
1010
|
with sc_open(stdout_file) as stdout_reader, \
|
|
1011
1011
|
sc_open(stderr_file) as stderr_reader:
|
|
1012
|
+
if stdout_file == stderr_file:
|
|
1013
|
+
stderr_reader = None
|
|
1012
1014
|
read_stdio(stdout_reader, stderr_reader)
|
|
1013
1015
|
|
|
1014
1016
|
if resource:
|
|
@@ -37,7 +37,7 @@ class LECTask(Task):
|
|
|
37
37
|
libcorners = scenario.get_libcorner(self.step, self.index)
|
|
38
38
|
delay_model = self.project.get("asic", "delaymodel")
|
|
39
39
|
for asiclib in self.project.get("asic", "asiclib"):
|
|
40
|
-
lib = self.project.
|
|
40
|
+
lib = self.project.get_library(asiclib)
|
|
41
41
|
for corner in libcorners:
|
|
42
42
|
if not lib.valid("asic", "libcornerfileset", corner, delay_model):
|
|
43
43
|
continue
|
|
@@ -64,7 +64,7 @@ class LECTask(Task):
|
|
|
64
64
|
libcorners = scenario.get_libcorner(self.step, self.index)
|
|
65
65
|
delay_model = self.project.get("asic", "delaymodel")
|
|
66
66
|
for asiclib in self.project.get("asic", "asiclib"):
|
|
67
|
-
lib = self.project.
|
|
67
|
+
lib = self.project.get_library(asiclib)
|
|
68
68
|
for corner in libcorners:
|
|
69
69
|
if not lib.valid("asic", "libcornerfileset", corner, delay_model):
|
|
70
70
|
continue
|
|
@@ -98,7 +98,7 @@ class ExportTask(KLayoutTask, ScreenshotParams):
|
|
|
98
98
|
lib_requires_stream = False
|
|
99
99
|
|
|
100
100
|
req_set = False
|
|
101
|
-
libobj = self.project.
|
|
101
|
+
libobj = self.project.get_library(lib)
|
|
102
102
|
for s in sc_stream_order:
|
|
103
103
|
for fileset in libobj.get("asic", "aprfileset"):
|
|
104
104
|
if libobj.valid("fileset", fileset, "file", s):
|
|
@@ -1218,6 +1218,10 @@ class APRTask(OpenROADTask):
|
|
|
1218
1218
|
"used to indicate if global routing information should be loaded",
|
|
1219
1219
|
defvalue=False)
|
|
1220
1220
|
|
|
1221
|
+
self.add_parameter("load_sdcs", "bool",
|
|
1222
|
+
"used to indicate if SDC files should be loaded before APR",
|
|
1223
|
+
defvalue=True)
|
|
1224
|
+
|
|
1221
1225
|
self.add_parameter("global_connect_fileset", "[(str,str)]",
|
|
1222
1226
|
"list of libraries and filesets to generate connects from")
|
|
1223
1227
|
|
|
@@ -1264,6 +1268,18 @@ class APRTask(OpenROADTask):
|
|
|
1264
1268
|
"""
|
|
1265
1269
|
self.set("var", "ord_heatmap_bins", (x, y), step=step, index=index)
|
|
1266
1270
|
|
|
1271
|
+
def set_openroad_loadsdcs(self, enable: bool,
|
|
1272
|
+
step: Optional[str] = None, index: Optional[str] = None) -> None:
|
|
1273
|
+
"""
|
|
1274
|
+
Enables or disables loading SDC files before APR.
|
|
1275
|
+
|
|
1276
|
+
Args:
|
|
1277
|
+
enable: True to load SDC files, False to disable.
|
|
1278
|
+
step: The specific step to apply this configuration to.
|
|
1279
|
+
index: The specific index to apply this configuration to.
|
|
1280
|
+
"""
|
|
1281
|
+
self.set("var", "load_sdcs", enable, step=step, index=index)
|
|
1282
|
+
|
|
1267
1283
|
def set_openroad_powercorner(self, corner: str,
|
|
1268
1284
|
step: Optional[str] = None, index: Optional[str] = None) -> None:
|
|
1269
1285
|
"""
|
|
@@ -1334,6 +1350,7 @@ class APRTask(OpenROADTask):
|
|
|
1334
1350
|
self.add_required_key("var", "ord_enable_images")
|
|
1335
1351
|
self.add_required_key("var", "ord_heatmap_bins")
|
|
1336
1352
|
self.add_required_key("var", "load_grt_setup")
|
|
1353
|
+
self.add_required_key("var", "load_sdcs")
|
|
1337
1354
|
|
|
1338
1355
|
if not self.get("var", "global_connect_fileset"):
|
|
1339
1356
|
self.__import_globalconnect_filesets()
|
|
@@ -1346,9 +1363,20 @@ class APRTask(OpenROADTask):
|
|
|
1346
1363
|
libcorners = set()
|
|
1347
1364
|
for scenario in self.project.constraint.timing.get_scenario().values():
|
|
1348
1365
|
libcorners.update(scenario.get_libcorner(self.step, self.index))
|
|
1366
|
+
self.add_required_key(scenario, "pexcorner")
|
|
1367
|
+
self.add_required_key(scenario, "libcorner")
|
|
1368
|
+
if scenario.get_check(self.step, self.index):
|
|
1369
|
+
self.add_required_key(scenario, "check")
|
|
1370
|
+
mode = scenario.get_mode(self.step, self.index)
|
|
1371
|
+
if mode:
|
|
1372
|
+
self.add_required_key(scenario, "mode")
|
|
1373
|
+
if self.get("var", "load_sdcs"):
|
|
1374
|
+
mode_obj = self.project.constraint.timing.get_mode(mode)
|
|
1375
|
+
self.add_required_key(mode_obj, "sdcfileset")
|
|
1376
|
+
|
|
1349
1377
|
delay_model = self.project.get("asic", "delaymodel")
|
|
1350
1378
|
for asiclib in self.project.get("asic", "asiclib"):
|
|
1351
|
-
lib = self.project.
|
|
1379
|
+
lib = self.project.get_library(asiclib)
|
|
1352
1380
|
for corner in libcorners:
|
|
1353
1381
|
if not lib.valid("asic", "libcornerfileset", corner, delay_model):
|
|
1354
1382
|
continue
|
|
@@ -1362,24 +1390,53 @@ class APRTask(OpenROADTask):
|
|
|
1362
1390
|
|
|
1363
1391
|
def __import_globalconnect_filesets(self):
|
|
1364
1392
|
for lib in self.project.get("asic", "asiclib"):
|
|
1365
|
-
libobj = self.project.
|
|
1393
|
+
libobj = self.project.get_library(lib)
|
|
1366
1394
|
if libobj.valid("tool", "openroad", "global_connect_fileset"):
|
|
1367
1395
|
for fileset in libobj.get("tool", "openroad", "global_connect_fileset"):
|
|
1368
1396
|
self.add_openroad_globalconnectfileset(lib, fileset)
|
|
1369
1397
|
|
|
1370
1398
|
def _set_reports(self, task_reports: List[str]):
|
|
1371
|
-
|
|
1399
|
+
skip_reports = set(self.get("var", "skip_reports"))
|
|
1400
|
+
|
|
1401
|
+
if not self.get("var", "load_sdcs"):
|
|
1402
|
+
skip_reports.update((
|
|
1403
|
+
"setup",
|
|
1404
|
+
"hold",
|
|
1405
|
+
"unconstrained",
|
|
1406
|
+
"clock_skew",
|
|
1407
|
+
"fmax",
|
|
1408
|
+
"check_setup",
|
|
1409
|
+
"clock_placement",
|
|
1410
|
+
"clock_trees"))
|
|
1411
|
+
|
|
1412
|
+
self.set("var", "reports", set(task_reports).difference(skip_reports))
|
|
1372
1413
|
|
|
1373
1414
|
if "power" in self.get("var", "reports"):
|
|
1374
1415
|
self.add_required_key("var", "power_corner")
|
|
1375
1416
|
|
|
1376
1417
|
def _add_pnr_inputs(self):
|
|
1377
|
-
if
|
|
1378
|
-
self.
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1418
|
+
if self.get("var", "load_sdcs"):
|
|
1419
|
+
if f"{self.design_topmodule}.sdc" in self.get_files_from_input_nodes():
|
|
1420
|
+
self.add_input_file(ext="sdc")
|
|
1421
|
+
else:
|
|
1422
|
+
for lib, fileset in self.project.get_filesets():
|
|
1423
|
+
if lib.has_file(fileset=fileset, filetype="sdc"):
|
|
1424
|
+
self.add_required_key(lib, "fileset", fileset, "file", "sdc")
|
|
1425
|
+
|
|
1426
|
+
modes = set()
|
|
1427
|
+
for scenario in self.project.constraint.timing.get_scenario().values():
|
|
1428
|
+
mode = scenario.get_mode(self.step, self.index)
|
|
1429
|
+
if mode:
|
|
1430
|
+
modes.add(mode)
|
|
1431
|
+
self.add_required_key(scenario, "mode")
|
|
1432
|
+
mode_obj = self.project.constraint.timing.get_mode(mode)
|
|
1433
|
+
self.add_required_key(mode_obj, "sdcfileset")
|
|
1434
|
+
|
|
1435
|
+
for mode in modes:
|
|
1436
|
+
mode_obj = self.project.constraint.timing.get_mode(mode)
|
|
1437
|
+
for lib, fileset in mode_obj.get_sdcfileset():
|
|
1438
|
+
libobj = self.project.get_library(lib)
|
|
1439
|
+
self.add_required_key(libobj, "fileset", fileset, "file", "sdc")
|
|
1383
1440
|
|
|
1384
1441
|
if f"{self.design_topmodule}.odb" in self.get_files_from_input_nodes():
|
|
1385
1442
|
self.add_input_file(ext="odb")
|
|
@@ -1389,14 +1446,15 @@ class APRTask(OpenROADTask):
|
|
|
1389
1446
|
pass
|
|
1390
1447
|
|
|
1391
1448
|
def _add_pnr_outputs(self):
|
|
1392
|
-
self.
|
|
1449
|
+
if self.get("var", "load_sdcs"):
|
|
1450
|
+
self.add_output_file(ext="sdc")
|
|
1393
1451
|
self.add_output_file(ext="vg")
|
|
1394
1452
|
self.add_output_file(ext="lec.vg")
|
|
1395
1453
|
self.add_output_file(ext="def")
|
|
1396
1454
|
self.add_output_file(ext="odb")
|
|
1397
1455
|
|
|
1398
1456
|
for lib in self.project.get("asic", "asiclib"):
|
|
1399
|
-
libobj = self.project.
|
|
1457
|
+
libobj = self.project.get_library(lib)
|
|
1400
1458
|
for celltype in ["decap", "tie", "filler", "tap", "endcap", "antenna", "physicalonly"]:
|
|
1401
1459
|
if libobj.valid("asic", "cells", celltype) and \
|
|
1402
1460
|
libobj.get("asic", "cells", celltype):
|
|
@@ -94,7 +94,7 @@ class PowerGridTask(APRTask, OpenROADSTAParameter, OpenROADPSMParameter):
|
|
|
94
94
|
|
|
95
95
|
def __import_pdn_filesets(self):
|
|
96
96
|
for lib in self.project.get("asic", "asiclib"):
|
|
97
|
-
libobj = self.project.
|
|
97
|
+
libobj = self.project.get_library(lib)
|
|
98
98
|
if libobj.valid("tool", "openroad", "power_grid_fileset"):
|
|
99
99
|
for fileset in libobj.get("tool", "openroad", "power_grid_fileset"):
|
|
100
100
|
self.add_openroad_powergridfileset(lib, fileset)
|
|
@@ -2,22 +2,24 @@
|
|
|
2
2
|
# Read timing constraints
|
|
3
3
|
###############################
|
|
4
4
|
|
|
5
|
-
if { [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
if { [sc_cfg_tool_task_get var load_sdcs] } {
|
|
6
|
+
if { [file exists "inputs/${sc_topmodule}.sdc"] } {
|
|
7
|
+
set sdc "inputs/${sc_topmodule}.sdc"
|
|
8
|
+
puts "Reading SDC: ${sdc}"
|
|
9
|
+
read_sdc $sdc
|
|
10
|
+
} else {
|
|
11
|
+
set sdcs [sc_cfg_get_fileset $sc_designlib [sc_cfg_get option fileset] sdc]
|
|
12
|
+
if { [llength $sdcs] > 0 } {
|
|
13
|
+
foreach sdc $sdcs {
|
|
14
|
+
puts "Reading SDC: ${sdc}"
|
|
15
|
+
read_sdc $sdc
|
|
16
|
+
}
|
|
17
|
+
} else {
|
|
18
|
+
# fall back on default auto generated constraints file
|
|
19
|
+
set sdc [sc_cfg_tool_task_get var opensta_generic_sdc]
|
|
13
20
|
puts "Reading SDC: ${sdc}"
|
|
14
|
-
|
|
21
|
+
utl::warn FLW 1 "Defaulting back to default SDC"
|
|
22
|
+
read_sdc "${sdc}"
|
|
15
23
|
}
|
|
16
|
-
} else {
|
|
17
|
-
# fall back on default auto generated constraints file
|
|
18
|
-
set sdc [sc_cfg_tool_task_get var opensta_generic_sdc]
|
|
19
|
-
puts "Reading SDC: ${sdc}"
|
|
20
|
-
utl::warn FLW 1 "Defaulting back to default SDC"
|
|
21
|
-
read_sdc "${sdc}"
|
|
22
24
|
}
|
|
23
25
|
}
|
|
@@ -273,7 +273,7 @@ class VPRTask(Task):
|
|
|
273
273
|
self.add_required_key(lib, "fileset", fileset, "file", "sdc")
|
|
274
274
|
self.set("var", "enable_timing_analysis", True)
|
|
275
275
|
|
|
276
|
-
fpga = self.project.
|
|
276
|
+
fpga = self.project.get_library(self.project.get("fpga", "device"))
|
|
277
277
|
self.add_required_key(fpga, "tool", "vpr", "devicecode")
|
|
278
278
|
self.add_required_key(fpga, "tool", "vpr", "clock_model")
|
|
279
279
|
self.add_required_key(fpga, "tool", "vpr", "archfile")
|
|
@@ -287,7 +287,7 @@ class VPRTask(Task):
|
|
|
287
287
|
def runtime_options(self):
|
|
288
288
|
options = super().runtime_options()
|
|
289
289
|
|
|
290
|
-
fpga = self.project.
|
|
290
|
+
fpga = self.project.get_library(self.project.get("fpga", "device"))
|
|
291
291
|
|
|
292
292
|
options.extend(["--device", fpga.get("tool", "vpr", "devicecode")])
|
|
293
293
|
|
|
@@ -393,17 +393,17 @@ class VPRTask(Task):
|
|
|
393
393
|
for report in glob.glob("*.rpt"):
|
|
394
394
|
shutil.move(report, 'reports')
|
|
395
395
|
|
|
396
|
-
fpga = self.project.get("fpga", "device")
|
|
396
|
+
fpga = self.project.get_library(self.project.get("fpga", "device"))
|
|
397
397
|
|
|
398
398
|
dff_cells = []
|
|
399
|
-
if
|
|
400
|
-
dff_cells =
|
|
399
|
+
if fpga.valid("tool", "yosys", "registers"):
|
|
400
|
+
dff_cells = fpga.get("tool", "yosys", "registers")
|
|
401
401
|
brams_cells = []
|
|
402
|
-
if
|
|
403
|
-
brams_cells =
|
|
402
|
+
if fpga.valid("tool", "yosys", "brams"):
|
|
403
|
+
brams_cells = fpga.get("tool", "yosys", "brams")
|
|
404
404
|
dsps_cells = []
|
|
405
|
-
if
|
|
406
|
-
dsps_cells =
|
|
405
|
+
if fpga.valid("tool", "yosys", "dsps"):
|
|
406
|
+
dsps_cells = fpga.get("tool", "yosys", "dsps")
|
|
407
407
|
|
|
408
408
|
stat_extract = re.compile(r' \s*(.*)\s*:\s*([0-9]+)')
|
|
409
409
|
lut_match = re.compile(r'([0-9]+)-LUT')
|
|
@@ -48,8 +48,7 @@ class PlaceTask(VPRTask):
|
|
|
48
48
|
if files:
|
|
49
49
|
pcf_file = files[0]
|
|
50
50
|
|
|
51
|
-
fpga = self.project.
|
|
52
|
-
field="schema")
|
|
51
|
+
fpga = self.project.get_library(self.project.get("fpga", "device"))
|
|
53
52
|
map_file = fpga.find_files("tool", "vpr", "constraintsmap")
|
|
54
53
|
|
|
55
54
|
constraints_map = load_constraints_map(map_file)
|
|
@@ -39,7 +39,7 @@ class _ASICTask(ASICTask, YosysTask):
|
|
|
39
39
|
|
|
40
40
|
delaymodel = self.project.get("asic", "delaymodel")
|
|
41
41
|
for lib in self.project.get("asic", "asiclib"):
|
|
42
|
-
lib_obj = self.project.
|
|
42
|
+
lib_obj = self.project.get_library(lib)
|
|
43
43
|
for corner in self.get("var", "synthesis_corner"):
|
|
44
44
|
if lib_obj.get("asic", "libcornerfileset", corner, delaymodel):
|
|
45
45
|
self.add_required_key(lib_obj, "asic", "libcornerfileset", corner, delaymodel)
|
|
@@ -81,7 +81,7 @@ class _ASICTask(ASICTask, YosysTask):
|
|
|
81
81
|
# Generate synthesis_libraries for Yosys use
|
|
82
82
|
fileset_map = []
|
|
83
83
|
for lib in self.project.get("asic", "asiclib"):
|
|
84
|
-
lib_obj = self.project.
|
|
84
|
+
lib_obj = self.project.get_library(lib)
|
|
85
85
|
for corner in self.get("var", "synthesis_corner"):
|
|
86
86
|
for fileset in lib_obj.get("asic", "libcornerfileset", corner, delaymodel):
|
|
87
87
|
fileset_map.append((lib_obj, fileset))
|
|
@@ -696,7 +696,7 @@ class ASICSynthesis(_ASICTask, YosysTask):
|
|
|
696
696
|
self.add_output_file(ext="vg", clobber=True)
|
|
697
697
|
self.add_output_file(ext="netlist.json")
|
|
698
698
|
|
|
699
|
-
mainlib = self.project.
|
|
699
|
+
mainlib = self.project.get_library(self.project.get("asic", "mainlib"))
|
|
700
700
|
|
|
701
701
|
if self.get('var', 'abc_constraint_driver') is not None:
|
|
702
702
|
self.add_required_key("var", "abc_constraint_driver")
|
|
@@ -799,7 +799,7 @@ class ASICSynthesis(_ASICTask, YosysTask):
|
|
|
799
799
|
|
|
800
800
|
def _get_clock_period(self):
|
|
801
801
|
mainlib = self.project.get("asic", "mainlib")
|
|
802
|
-
clock_units_multiplier = self.project.
|
|
802
|
+
clock_units_multiplier = self.project.get_library(mainlib).get(
|
|
803
803
|
"tool", "yosys", "abc_clock_multiplier") / 1000
|
|
804
804
|
|
|
805
805
|
_, period = self.get_clock()
|
|
@@ -98,7 +98,7 @@ class FPGASynthesis(YosysTask):
|
|
|
98
98
|
|
|
99
99
|
self._synthesis_post_process()
|
|
100
100
|
|
|
101
|
-
fpga = self.project.get("fpga", "device")
|
|
101
|
+
fpga = self.project.get_library(self.project.get("fpga", "device"))
|
|
102
102
|
|
|
103
103
|
with sc_open("reports/stat.json") as f:
|
|
104
104
|
metrics = json.load(f)
|
|
@@ -113,15 +113,14 @@ class FPGASynthesis(YosysTask):
|
|
|
113
113
|
return
|
|
114
114
|
|
|
115
115
|
dff_cells = []
|
|
116
|
-
if
|
|
117
|
-
dff_cells =
|
|
116
|
+
if fpga.valid("tool", "yosys", "registers"):
|
|
117
|
+
dff_cells = fpga.get("tool", "yosys", "registers")
|
|
118
118
|
brams_cells = []
|
|
119
|
-
if
|
|
120
|
-
brams_cells =
|
|
119
|
+
if fpga.valid("tool", "yosys", "brams"):
|
|
120
|
+
brams_cells = fpga.get("tool", "yosys", "brams")
|
|
121
121
|
dsps_cells = []
|
|
122
|
-
if
|
|
123
|
-
dsps_cells =
|
|
124
|
-
|
|
122
|
+
if fpga.valid("tool", "yosys", "dsps"):
|
|
123
|
+
dsps_cells = fpga.get("tool", "yosys", "dsps")
|
|
125
124
|
data = {
|
|
126
125
|
"registers": 0,
|
|
127
126
|
"luts": 0,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"openroad": {
|
|
3
3
|
"git-url": "https://github.com/The-OpenROAD-Project/OpenROAD.git",
|
|
4
|
-
"git-commit": "
|
|
4
|
+
"git-commit": "e7da048335b841ec917d0c421200f2b0eda54f2c",
|
|
5
5
|
"docker-cmds": [
|
|
6
6
|
"# Remove OR-Tools files",
|
|
7
7
|
"RUN rm -f $SC_PREFIX/Makefile $SC_PREFIX/README.md",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"opensta": {
|
|
19
19
|
"git-url": "https://github.com/parallaxsw/OpenSTA.git",
|
|
20
|
-
"git-commit": "
|
|
20
|
+
"git-commit": "0429ac324b2cd4a12783e053b9c85f5d40f4cde8",
|
|
21
21
|
"auto-update": true
|
|
22
22
|
},
|
|
23
23
|
"netgen": {
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
},
|
|
102
102
|
"yosys": {
|
|
103
103
|
"git-url": "https://github.com/YosysHQ/yosys.git",
|
|
104
|
-
"git-commit": "v0.
|
|
104
|
+
"git-commit": "v0.61",
|
|
105
105
|
"version-prefix": "",
|
|
106
106
|
"auto-update": true
|
|
107
107
|
},
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
},
|
|
146
146
|
"yosys-slang": {
|
|
147
147
|
"git-url": "https://github.com/povik/yosys-slang.git",
|
|
148
|
-
"git-commit": "
|
|
148
|
+
"git-commit": "4e1ad7c11e23cffe131aa5c478083f1d99f0c0be",
|
|
149
149
|
"docker-depends": "yosys",
|
|
150
150
|
"auto-update": true
|
|
151
151
|
},
|
siliconcompiler/utils/logging.py
CHANGED
|
@@ -145,3 +145,9 @@ def get_console_formatter(project, in_run, step, index):
|
|
|
145
145
|
if support_color:
|
|
146
146
|
return SCColorLoggerFormatter(base_format)
|
|
147
147
|
return base_format
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def get_stream_handler(project, in_run, step, index):
|
|
151
|
+
handler = logging.StreamHandler(stream=sys.stdout)
|
|
152
|
+
handler.setFormatter(get_console_formatter(project, in_run, step, index))
|
|
153
|
+
return handler
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: siliconcompiler
|
|
3
|
-
Version: 0.36.
|
|
3
|
+
Version: 0.36.2
|
|
4
4
|
Summary: A compiler framework that automates translation from source code to silicon.
|
|
5
5
|
Author: Zero ASIC
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -38,7 +38,7 @@ Requires-Dist: PyYAML<7.0.0,>=6.0.0
|
|
|
38
38
|
Requires-Dist: GitPython<3.2,>=3.1.44
|
|
39
39
|
Requires-Dist: PyGithub<2.9.0,>=2.8.0
|
|
40
40
|
Requires-Dist: urllib3>=1.26.0
|
|
41
|
-
Requires-Dist: lambdapdk>=0.2.
|
|
41
|
+
Requires-Dist: lambdapdk>=0.2.7
|
|
42
42
|
Requires-Dist: fasteners>=0.20
|
|
43
43
|
Requires-Dist: pandas>=1.1.5
|
|
44
44
|
Requires-Dist: psutil>=5.8.0
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
siliconcompiler/__init__.py,sha256=I1RN8BMRpuAx9tdx5CLNlpIqT-xg2EwvOB8TcqHQSN0,1114
|
|
2
2
|
siliconcompiler/_common.py,sha256=1bY1qdFxnstAyhJrkJCBhSlZ614dlmcwL0Bf7NOneyY,1047
|
|
3
|
-
siliconcompiler/_metadata.py,sha256
|
|
4
|
-
siliconcompiler/asic.py,sha256=
|
|
3
|
+
siliconcompiler/_metadata.py,sha256=Wbvn4WiI5YksrKzN6imES3t0IdAE2duTyS4WDyLixpg,1286
|
|
4
|
+
siliconcompiler/asic.py,sha256=IFKPCZrhXHtyp9qieRqVA1jhKPPmVmYBnC1DvCXpPTo,28836
|
|
5
5
|
siliconcompiler/checklist.py,sha256=MD0cVYm5RrxSDCBVO1nakGC6LH5hWnzisaF4e0V6eV8,24909
|
|
6
|
-
siliconcompiler/design.py,sha256=
|
|
6
|
+
siliconcompiler/design.py,sha256=dUQolB1fzQX20WWGxxl8LMaDma0DITv_OY6_qIgPk5M,34766
|
|
7
7
|
siliconcompiler/flowgraph.py,sha256=oGWC84amHIcx2gUO7QMkJ7vphfaOzrkp0LXHPsIZVpU,65557
|
|
8
8
|
siliconcompiler/fpga.py,sha256=8uvmIyvWOWx5X1JP3xaSpkA9hVyox4l-hK63aYzN8-w,9075
|
|
9
9
|
siliconcompiler/library.py,sha256=pPzUaVZXizS6eRLsnSrILwCgBtHfOzWk9CwC5COoHOk,16065
|
|
10
10
|
siliconcompiler/pdk.py,sha256=rENDQve5edt7EkdgnNfW-mfgJVklShLbvYddaEA1-_k,31581
|
|
11
|
-
siliconcompiler/project.py,sha256=
|
|
11
|
+
siliconcompiler/project.py,sha256=tOQsb0WuWyCmGlIWICD0IOYxx7se-CMc94d_0hyj9yY,52191
|
|
12
12
|
siliconcompiler/schematic.py,sha256=0PVFqZvJZW_e2NRGvv6DJPHGjwOlao1qHgZLhgCaEcQ,18385
|
|
13
|
-
siliconcompiler/tool.py,sha256=
|
|
13
|
+
siliconcompiler/tool.py,sha256=BpwmHLpvepyPoKxEfSspbXtBR0PUf4rjHQ0uzqaRGG8,111783
|
|
14
14
|
siliconcompiler/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
15
|
siliconcompiler/apps/_common.py,sha256=uldDgTeAEfo1Y0X_hxpr0yjSW0W0c5UaiuSpgk7aUuk,8605
|
|
16
16
|
siliconcompiler/apps/sc_dashboard.py,sha256=BU3hPC7OzfUpkKEVsBD_46zd4OzHO86eJMB5CaWpVf0,3496
|
|
@@ -84,7 +84,7 @@ siliconcompiler/metrics/asic.py,sha256=SwhBh2xSni4yYcV-PMfW4V3UhBptLtHhKlv-sv7CJ
|
|
|
84
84
|
siliconcompiler/metrics/fpga.py,sha256=UgAi0O67aIc2evdBvSsy226UcHlxqYOZqPv8NfEfys8,10057
|
|
85
85
|
siliconcompiler/optimizer/__init__.py,sha256=wdSuv3U7hoSdZn-TkaQtYehVdhS5F35Mb1McgaUw3hc,6599
|
|
86
86
|
siliconcompiler/optimizer/vizier.py,sha256=JtoPktsa-qHN0i4PsfRnxvQAT0yVvQVRfdyYNOCYgU4,9011
|
|
87
|
-
siliconcompiler/package/__init__.py,sha256=
|
|
87
|
+
siliconcompiler/package/__init__.py,sha256=kWzaJBioKcJBlbmKJKcopp0BjKULyNeFNdYJKdIIs1g,25484
|
|
88
88
|
siliconcompiler/package/git.py,sha256=xq8_qi-2pmhswJ9ssUtRgSUNxpMGKZLDmnkdFYeq9iA,5950
|
|
89
89
|
siliconcompiler/package/github.py,sha256=bzV-XrcmFMloa7_yhdxFjfe4r9OH36xHGY6ZCgHv0mA,6785
|
|
90
90
|
siliconcompiler/package/https.py,sha256=OJL1PxOf6FbuGUrEx3gWpLEocd7p9gf9uvKh6a-7OQc,5753
|
|
@@ -156,11 +156,11 @@ siliconcompiler/schema/docs/utils.py,sha256=SCR9hYlQHUWbC6fT7LttKIfktzhMfrCL0BVx
|
|
|
156
156
|
siliconcompiler/schema_support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
157
157
|
siliconcompiler/schema_support/cmdlineschema.py,sha256=r-v1lOMOx0wehG3-hgy6JuJVuzivhxt5t83KwxS8pfs,10691
|
|
158
158
|
siliconcompiler/schema_support/dependencyschema.py,sha256=LY6RhtxLOxjOBj7FBw88i0TlLd7WZlNh5omHBtU5VO8,9895
|
|
159
|
-
siliconcompiler/schema_support/filesetschema.py,sha256=
|
|
159
|
+
siliconcompiler/schema_support/filesetschema.py,sha256=ouKKUSNCry7ggzya8wGFvbEf2u3GwyERMhyYxUf3fmM,11675
|
|
160
160
|
siliconcompiler/schema_support/metric.py,sha256=mLzdtpM76l2cPINGWONrAjBMU28ZnQR_yLOGMYBLBV4,16158
|
|
161
161
|
siliconcompiler/schema_support/option.py,sha256=URcEzo4qL34BU5j55hw0hnGy1Q-cVaHefTVmuYzYnOE,56105
|
|
162
162
|
siliconcompiler/schema_support/packageschema.py,sha256=tB6wYEhZliaUVZDq40DlEfoo8ken6-Xh6zIafBRrxr4,10508
|
|
163
|
-
siliconcompiler/schema_support/pathschema.py,sha256=
|
|
163
|
+
siliconcompiler/schema_support/pathschema.py,sha256=EJ1n7wrUVKKhe46M9Ip6PNJU1WvOzWU1Ol5F0jduuqY,21198
|
|
164
164
|
siliconcompiler/schema_support/record.py,sha256=LjosKbOerR3-j5e2rAOQTDm932caeiiiTXKBW2mh_uE,19653
|
|
165
165
|
siliconcompiler/targets/__init__.py,sha256=eWgvV4DeombChYqLxs5z_rOZ7Mt1q7N0WEetuBcNjZ4,1678
|
|
166
166
|
siliconcompiler/targets/asap7_demo.py,sha256=sG3GdqkqGjhco43JHVV6-ys734fYTksx68VIJpZ4_IU,4760
|
|
@@ -210,11 +210,11 @@ siliconcompiler/tools/icarus/compile.py,sha256=dsbPgns_5VVclpQHTZZxAG9A2UUMYjpXY
|
|
|
210
210
|
siliconcompiler/tools/icepack/__init__.py,sha256=FJnRz9I3Y5c2stJJXHSSBySTkpwJsYJ_HP1IuTPNZTo,226
|
|
211
211
|
siliconcompiler/tools/icepack/bitstream.py,sha256=3tkwpZ84kQT7Rk0BlWdNEcx1KginTqNkKfyXIrcYKlY,598
|
|
212
212
|
siliconcompiler/tools/keplerformal/__init__.py,sha256=ENX6RIvg1q0byEyiIN5WDo-igP6wNYviZc4-N0FvQMg,275
|
|
213
|
-
siliconcompiler/tools/keplerformal/lec.py,sha256=
|
|
213
|
+
siliconcompiler/tools/keplerformal/lec.py,sha256=SePSOeQm-VbpnblcZXU7KyfK8MWzk4MHevMtx3PEBM0,4631
|
|
214
214
|
siliconcompiler/tools/klayout/__init__.py,sha256=t2WHhiUAltGLFkw0N7wzs0m9Hx1xZo2tGx4d3uKSusY,8670
|
|
215
215
|
siliconcompiler/tools/klayout/convert_drc_db.py,sha256=ekzfQJ5Gef0Xo9KzrbXgCC4P5KpGKS4ZSfWHrM9Gmic,812
|
|
216
216
|
siliconcompiler/tools/klayout/drc.py,sha256=DgdUMVmNEQ56Imd2Z5LYkuBr7yUAK-wy6_cBGAUGc9E,3530
|
|
217
|
-
siliconcompiler/tools/klayout/export.py,sha256=
|
|
217
|
+
siliconcompiler/tools/klayout/export.py,sha256=42fviCWLIyMsXvSygGUErq1oypKqZNh2X1qlOFRFuqc,5007
|
|
218
218
|
siliconcompiler/tools/klayout/operations.py,sha256=sUSHDPsgDm6PnehgANQIlDP6K2rnNLgMpQEXVakBQ3c,8681
|
|
219
219
|
siliconcompiler/tools/klayout/screenshot.py,sha256=hpUfZJ6dcgYypyLtcgfWByJOCPh4r16UvmoX_DgbOgg,4979
|
|
220
220
|
siliconcompiler/tools/klayout/show.py,sha256=Lkmf90qOomLvrYELRhSSzH9F2i7cgsAfETHU2lVRxDs,1494
|
|
@@ -238,7 +238,7 @@ siliconcompiler/tools/netgen/scripts/sc_lvs.tcl,sha256=8zZGe5WS6LNnvNiw7zouCvOyc
|
|
|
238
238
|
siliconcompiler/tools/nextpnr/__init__.py,sha256=IbOR4eOErXQ2fETrFZTW1LYECkp-umXad2iNBGnp7rk,274
|
|
239
239
|
siliconcompiler/tools/nextpnr/apr.py,sha256=pWkV3gnz4m8Nap7HvMSJNCfYBnhEE6EtfU4fzADGMzs,2540
|
|
240
240
|
siliconcompiler/tools/openroad/__init__.py,sha256=clCBUnzpaLWA0wga6rx-N7bJMiSaM8ERnSqNZnWtDWw,19637
|
|
241
|
-
siliconcompiler/tools/openroad/_apr.py,sha256
|
|
241
|
+
siliconcompiler/tools/openroad/_apr.py,sha256=-4fbiyH9M7h5wYNBS9dcuHrf63Eg3WyExsV7Gx3FDe0,84244
|
|
242
242
|
siliconcompiler/tools/openroad/antenna_repair.py,sha256=L4F5dprHfUz641t-XlvPi1Kkgl1P-mdXUqP3wUeV9yE,2858
|
|
243
243
|
siliconcompiler/tools/openroad/clock_tree_synthesis.py,sha256=w6xXtx3y1hXnjIYk3qX46JyghGne2yCTfgRz97sACIU,1009
|
|
244
244
|
siliconcompiler/tools/openroad/detailed_placement.py,sha256=dZDRwjkExZjPRRJjgxQLX3khpOR3mJe5mnJ7rc_32Os,911
|
|
@@ -252,7 +252,7 @@ siliconcompiler/tools/openroad/init_floorplan.py,sha256=ro-HNuf-MIDlNHdMrHaYCW0d
|
|
|
252
252
|
siliconcompiler/tools/openroad/macro_placement.py,sha256=M-BwOeKsoJAqpsDhRz2of_5fsrmterwkzfpS6mqvemo,18870
|
|
253
253
|
siliconcompiler/tools/openroad/metrics.py,sha256=rJc3Ea9PS6C6Qp1dOJqcIFRF3sX-FnyvYIKNRQm1I1s,771
|
|
254
254
|
siliconcompiler/tools/openroad/pin_placement.py,sha256=utwYKDk0SlZVoBkPCp_40qzjHRN_7P8lVasT47T8WEw,768
|
|
255
|
-
siliconcompiler/tools/openroad/power_grid.py,sha256=
|
|
255
|
+
siliconcompiler/tools/openroad/power_grid.py,sha256=Zs8glIIfzSeN5RqVIjVi0iE7Q1H8UDVslZED__kwlIs,4553
|
|
256
256
|
siliconcompiler/tools/openroad/power_grid_analysis.py,sha256=KeOjbUuOW4Hp7u3jVaNmGcZgnRasmFnprbPNWUQioZk,7233
|
|
257
257
|
siliconcompiler/tools/openroad/rcx_bench.py,sha256=PxBM3fx-x1ZY5RGg5JhG05LVL2oQW0Lfv4QUEhvONlk,1949
|
|
258
258
|
siliconcompiler/tools/openroad/rcx_extract.py,sha256=-rUKqhPSvDw0-p5CLq6SG1QZ6C1YUxmt-PAh1o3Y3q0,1267
|
|
@@ -289,12 +289,12 @@ siliconcompiler/tools/openroad/scripts/common/debugging.tcl,sha256=i4oNtC0rQq3Ja
|
|
|
289
289
|
siliconcompiler/tools/openroad/scripts/common/procs.tcl,sha256=kOS5ZJ-DEZxpr4Xy90ftSm68Y1TJujRoAA5YtrXDUA4,26474
|
|
290
290
|
siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl,sha256=ghCw5V7GzM6sNUrNVh31rHd36re-ueZWtWaqesFcQmc,1888
|
|
291
291
|
siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl,sha256=xdNEJEKqQyVPiZ6xSHJv0lg8sFMPXoQ9q9OQ0F_4boA,880
|
|
292
|
-
siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl,sha256=
|
|
292
|
+
siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl,sha256=LX0MEK0KNUGmDR3R9f7A4B1gEOYf-zqNYZQxurr-6wE,847
|
|
293
293
|
siliconcompiler/tools/openroad/scripts/common/reports.tcl,sha256=9gdzKYiacv35R9XlGtL-cw4IXstyPZF6GbPxDTWAAtU,7474
|
|
294
294
|
siliconcompiler/tools/openroad/scripts/common/screenshot.tcl,sha256=1pZNbKsxo6x0sprTbv1MrbmSScM8g71XdDt3RiZizTo,330
|
|
295
295
|
siliconcompiler/tools/openroad/scripts/common/write_data.tcl,sha256=xFFgR6mCpQEy8ATfSz1kUFr2BBnaPsv4cSHnWh7JqC8,100
|
|
296
296
|
siliconcompiler/tools/openroad/scripts/common/write_data_physical.tcl,sha256=V-Ul99R2j8xuCQEfySuUKGXu5YonIoa4ByBjY2odR7E,436
|
|
297
|
-
siliconcompiler/tools/openroad/scripts/common/write_data_timing.tcl,sha256=
|
|
297
|
+
siliconcompiler/tools/openroad/scripts/common/write_data_timing.tcl,sha256=gzKYlbvRCKOaUaXmv3ZkPiLHwFjCA5hKJkA2ayCjZhM,92
|
|
298
298
|
siliconcompiler/tools/openroad/scripts/common/write_images.tcl,sha256=uvCmhhN9cY9TC_I99Nbv6TP7vepNqdwZYzC_Fce0ezo,13778
|
|
299
299
|
siliconcompiler/tools/openroad/scripts/rcx/sc_rcx_bench.tcl,sha256=eEYI8U26LYGR-zIaYPKCxg1IzohudquhpmuWYkTA4-Q,664
|
|
300
300
|
siliconcompiler/tools/openroad/scripts/rcx/sc_rcx_extract.tcl,sha256=1mPpVpBAX7uiBESb1rVBrYk-IzCkd-GaH2ghFSuguMo,487
|
|
@@ -334,10 +334,10 @@ siliconcompiler/tools/vivado/scripts/sc_place.tcl,sha256=QwxhxL69lCrReqwx_lnHMqf
|
|
|
334
334
|
siliconcompiler/tools/vivado/scripts/sc_route.tcl,sha256=rdKwlSkpTEh_c95GnSaywfeh14sddBKjXaKZ3l-rqLA,367
|
|
335
335
|
siliconcompiler/tools/vivado/scripts/sc_run.tcl,sha256=FwW6-_EdryI3eZ7lFKSRK3oVIk5Y51B9tRVSSlDEPrY,1052
|
|
336
336
|
siliconcompiler/tools/vivado/scripts/sc_syn_fpga.tcl,sha256=Eyc1zxdmm0K0g8efee3qbWhhXs61XwIHcg6-0l28V4Q,1259
|
|
337
|
-
siliconcompiler/tools/vpr/__init__.py,sha256=
|
|
337
|
+
siliconcompiler/tools/vpr/__init__.py,sha256=P5ndAbUO9pDPGHLhV1K52J2QcdGjy4adIkvcRust_L4,22852
|
|
338
338
|
siliconcompiler/tools/vpr/_json_constraint.py,sha256=KcNcOQq7LZDiOXmQTwcGKczljs-7ugr-b8CNGHilnRc,2251
|
|
339
339
|
siliconcompiler/tools/vpr/_xml_constraint.py,sha256=f7AeAtu4gDV08hPuorjRcniCyM5CLxJ6e8NgTbE79tw,2995
|
|
340
|
-
siliconcompiler/tools/vpr/place.py,sha256=
|
|
340
|
+
siliconcompiler/tools/vpr/place.py,sha256=qZyEukI8kJ6-a0wrkdnmzVB-cvHddR5k71MwXFKXosY,3116
|
|
341
341
|
siliconcompiler/tools/vpr/route.py,sha256=ImuAvlXEnsw93CMg33zt8-MY6Nh4lC2FqCOFrRTLmzw,7438
|
|
342
342
|
siliconcompiler/tools/vpr/screenshot.py,sha256=JIiyvDrySNCfa0TOfrLoMJ63VcalDZASXRJUFns0Tho,1316
|
|
343
343
|
siliconcompiler/tools/vpr/show.py,sha256=-DFoCRg9XqPwpb4_Frb39Qm6c_dPpzEsr9TqKSmrEaU,2344
|
|
@@ -348,8 +348,8 @@ siliconcompiler/tools/xyce/simulate.py,sha256=CQoDy0aOj9nbJkGFgHZnvKKIcimbz2abx3
|
|
|
348
348
|
siliconcompiler/tools/yosys/__init__.py,sha256=prf36_x6A61lMnLXM3FRzlRZrJqEEMv-C7hyEi1b2Oo,18451
|
|
349
349
|
siliconcompiler/tools/yosys/lec_asic.py,sha256=uOku8yyfVzlb9D_rEAIztDeKtz3DPE6peoz71nj3gvE,2168
|
|
350
350
|
siliconcompiler/tools/yosys/prepareLib.py,sha256=8ppIR-o_EJiNZrpGg_sewJ4qyjtFXre9-iwo-a5Ev_g,2438
|
|
351
|
-
siliconcompiler/tools/yosys/syn_asic.py,sha256=
|
|
352
|
-
siliconcompiler/tools/yosys/syn_fpga.py,sha256=
|
|
351
|
+
siliconcompiler/tools/yosys/syn_asic.py,sha256=tJiIoIuWnzIOG42kgoHC5Ge4sXqiVH1mcY0oa2jIYFc,35696
|
|
352
|
+
siliconcompiler/tools/yosys/syn_fpga.py,sha256=NgiO6z9PJ1SxJHNkko1GD1CkdOj_UN18dmDSmFNOYzg,5166
|
|
353
353
|
siliconcompiler/tools/yosys/scripts/procs.tcl,sha256=oJZJrcMHUyBLEKlUEd3PwwNBIDSCUIZlpfjsAuM2WUQ,4607
|
|
354
354
|
siliconcompiler/tools/yosys/scripts/sc_lec.tcl,sha256=K2gsSg2cs1Dx3g4MP1EbkSv-ZkYDnU4iSHepj20TXSE,2996
|
|
355
355
|
siliconcompiler/tools/yosys/scripts/sc_screenshot.tcl,sha256=Ss1c4ebLHy7QU1qX5Dn3OsDUOUVXmW9kvkMbr5TcMMw,2842
|
|
@@ -360,7 +360,7 @@ siliconcompiler/tools/yosys/techmaps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
|
360
360
|
siliconcompiler/tools/yosys/techmaps/lcu_kogge_stone.v,sha256=M4T-ygiKmlsprl5eGGLaV5w6HVqlEepn0wlUDmOkapg,773
|
|
361
361
|
siliconcompiler/tools/yosys/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
362
362
|
siliconcompiler/tools/yosys/templates/abc.const,sha256=TAq9ThdLMYCJGrtToEU0gWcLuEtjE4Gk8huBbTm1v-I,116
|
|
363
|
-
siliconcompiler/toolscripts/_tools.json,sha256=
|
|
363
|
+
siliconcompiler/toolscripts/_tools.json,sha256=I4DJo2XABBfkduAkOF4nMBO68X2WpACH8KhU6hWO0Jc,5271
|
|
364
364
|
siliconcompiler/toolscripts/_tools.py,sha256=P30KY_xbbjl8eHGsPAxDcAzWvJJpiL07ZfGZZDQbdR8,7174
|
|
365
365
|
siliconcompiler/toolscripts/rhel8/install-chisel.sh,sha256=RJ7BiZhsXBLTgQhHUcRZmHqhKB6syVaC2nvVoGrIXOI,709
|
|
366
366
|
siliconcompiler/toolscripts/rhel8/install-icarus.sh,sha256=EW7308IUGYOx7A22s7s0tNq90nHhrpHHUMrx3cd9lMM,962
|
|
@@ -475,15 +475,15 @@ siliconcompiler/toolscripts/ubuntu24/install-yosys.sh,sha256=0ZKbB8f7MrNd_u8IVav
|
|
|
475
475
|
siliconcompiler/utils/__init__.py,sha256=bGyb85ncMnc4NpKR4y3g4I6WX9mQPhFw6l_AlSpYCg4,19444
|
|
476
476
|
siliconcompiler/utils/curation.py,sha256=xVozvS1w77hLUomeVyWKUWxD5LJ7BZPjpd35D7zoY50,9228
|
|
477
477
|
siliconcompiler/utils/issue.py,sha256=R6_HvVgp5uPQ72QKwAM8CQfDfKs3IKutykisq8Ht5vs,11029
|
|
478
|
-
siliconcompiler/utils/logging.py,sha256=
|
|
478
|
+
siliconcompiler/utils/logging.py,sha256=PAQp1skaxCKzhW5DnRdR7FB1-QCwqXCsurS13dDwkhE,4875
|
|
479
479
|
siliconcompiler/utils/multiprocessing.py,sha256=zmSzHRThGYSioIcTbD_mtz84jjjlsAfZE97lK3RkffE,11624
|
|
480
480
|
siliconcompiler/utils/paths.py,sha256=322TbbEaU5wM-06Xo-E8IlzMNV3DRi4GKDwg2EgTry4,4813
|
|
481
481
|
siliconcompiler/utils/settings.py,sha256=8Zj5LDP32RAg8xisMJFgTxaoY7NWT90nAxaggk7K0sA,5819
|
|
482
482
|
siliconcompiler/utils/showtools.py,sha256=ZWD2frgt0t2Eh8S9Hl3CwGEa1cnNiQx-06pWtyDTiic,1375
|
|
483
483
|
siliconcompiler/utils/units.py,sha256=mppo7T5xI2P2S7SweE_qsOuoTc7RezVX61G2whCzpV4,6261
|
|
484
|
-
siliconcompiler-0.36.
|
|
485
|
-
siliconcompiler-0.36.
|
|
486
|
-
siliconcompiler-0.36.
|
|
487
|
-
siliconcompiler-0.36.
|
|
488
|
-
siliconcompiler-0.36.
|
|
489
|
-
siliconcompiler-0.36.
|
|
484
|
+
siliconcompiler-0.36.2.dist-info/licenses/LICENSE,sha256=lbLR6sRo_CYJOf7SVgHi-U6CZdD8esESEZE5TZazOQE,10766
|
|
485
|
+
siliconcompiler-0.36.2.dist-info/METADATA,sha256=uhE-GmBSSTs8tLWD93WzQJdPJJftu_YLi6ntMJEZ2Lw,11302
|
|
486
|
+
siliconcompiler-0.36.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
487
|
+
siliconcompiler-0.36.2.dist-info/entry_points.txt,sha256=5I-z7cmFNPRpD_x1dMQnm-oLwTPOMURxD5frvUM0GE8,832
|
|
488
|
+
siliconcompiler-0.36.2.dist-info/top_level.txt,sha256=H8TOYhnEUZAV1RJTa8JRtjLIebwHzkQUhA2wkNU2O6M,16
|
|
489
|
+
siliconcompiler-0.36.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|