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.
@@ -1,5 +1,5 @@
1
1
  # Version number following semver standard.
2
- version = '0.36.1'
2
+ version = '0.36.2'
3
3
 
4
4
  # Default server address for remote runs, if unspecified.
5
5
  default_server = 'https://server.siliconcompiler.com'
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.get("library", pdk, field="schema"), PDK):
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.get("library", self.get("asic", "mainlib"), field="schema")
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.get("library", mainlib, field="schema")
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.get("library", pdk, field="schema")
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
- dataroot = self._get_active_dataroot(dataroot)
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
- self.__logger = self.__root.logger.getChild(f"resolver-{self.name}")
75
+ rootlogger = self.__root.logger
76
76
  else:
77
- self.__logger = logging.getLogger(f"resolver-{self.name}")
77
+ rootlogger = MPManager.logger()
78
+ self.__logger = rootlogger.getChild(f"resolver-{self.name}")
78
79
 
79
80
  @staticmethod
80
81
  def populate_resolvers() -> None:
@@ -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 SCColorLoggerFormatter, SCLoggerFormatter
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 = logging.StreamHandler(stream=sys.stdout)
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.get("library", design_name, field="schema")
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.get("library", src_lib, field="schema").has_fileset(src_fileset):
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.get("library", dst_lib, field="schema").has_fileset(dst_fileset):
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.get("library", dst_lib, field="schema")
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.get("library", src_dep, field="schema")
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.get("library", alias_dep, field="schema")
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(self._get_active_dataroot(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=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
- logger.info(f"Computing hash value for [{','.join([*self._keypath, *keypath])}]")
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 = sys.stdout
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.get("library", asiclib, field="schema")
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.get("library", asiclib, field="schema")
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.get("library", lib, field="schema")
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.get("library", asiclib, field="schema")
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.get("library", lib, field="schema")
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
- self.set("var", "reports", set(task_reports).difference(self.get("var", "skip_reports")))
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 f"{self.design_topmodule}.sdc" in self.get_files_from_input_nodes():
1378
- self.add_input_file(ext="sdc")
1379
- else:
1380
- for lib, fileset in self.project.get_filesets():
1381
- if lib.has_file(fileset=fileset, filetype="sdc"):
1382
- self.add_required_key(lib, "fileset", fileset, "file", "sdc")
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.add_output_file(ext="sdc")
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.get("library", lib, field="schema")
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.get("library", lib, field="schema")
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 { [file exists "inputs/${sc_topmodule}.sdc"] } {
6
- set sdc "inputs/${sc_topmodule}.sdc"
7
- puts "Reading SDC: ${sdc}"
8
- read_sdc $sdc
9
- } else {
10
- set sdcs [sc_cfg_get_fileset $sc_designlib [sc_cfg_get option fileset] sdc]
11
- if { [llength $sdcs] > 0 } {
12
- foreach sdc $sdcs {
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
- read_sdc $sdc
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
  }
@@ -1 +1,3 @@
1
- write_sdc "outputs/${sc_topmodule}.sdc"
1
+ if { [sc_cfg_tool_task_get var load_sdcs] } {
2
+ write_sdc "outputs/${sc_topmodule}.sdc"
3
+ }
@@ -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.get("library", self.project.get("fpga", "device"), field="schema")
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.get("library", self.project.get("fpga", "device"), field="schema")
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 self.project.valid("library", fpga, "tool", "yosys", "registers"):
400
- dff_cells = self.project.get("library", fpga, "tool", "yosys", "registers")
399
+ if fpga.valid("tool", "yosys", "registers"):
400
+ dff_cells = fpga.get("tool", "yosys", "registers")
401
401
  brams_cells = []
402
- if self.project.valid("library", fpga, "tool", "yosys", "brams"):
403
- brams_cells = self.project.get("library", fpga, "tool", "yosys", "brams")
402
+ if fpga.valid("tool", "yosys", "brams"):
403
+ brams_cells = fpga.get("tool", "yosys", "brams")
404
404
  dsps_cells = []
405
- if self.project.valid("library", fpga, "tool", "yosys", "dsps"):
406
- dsps_cells = self.project.get("library", fpga, "tool", "yosys", "dsps")
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.get("library", self.project.get("fpga", "device"),
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.get("library", lib, field="schema")
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.get("library", lib, field="schema")
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.get("library", self.project.get("asic", "mainlib"), field="schema")
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.get("library", mainlib, field="schema").get(
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 self.project.valid("library", fpga, "tool", "yosys", "registers"):
117
- dff_cells = self.project.get("library", fpga, "tool", "yosys", "registers")
116
+ if fpga.valid("tool", "yosys", "registers"):
117
+ dff_cells = fpga.get("tool", "yosys", "registers")
118
118
  brams_cells = []
119
- if self.project.valid("library", fpga, "tool", "yosys", "brams"):
120
- brams_cells = self.project.get("library", fpga, "tool", "yosys", "brams")
119
+ if fpga.valid("tool", "yosys", "brams"):
120
+ brams_cells = fpga.get("tool", "yosys", "brams")
121
121
  dsps_cells = []
122
- if self.project.valid("library", fpga, "tool", "yosys", "dsps"):
123
- dsps_cells = self.project.get("library", fpga, "tool", "yosys", "dsps")
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": "0004adbadb9b28cbc00b87c0b2a089164e439441",
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": "128ea3cf283ba2ac0af699543c8e037cc9bfc0a5",
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.60",
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": "64b44616a3798f07453b14ea03e4ac8a16b77313",
148
+ "git-commit": "4e1ad7c11e23cffe131aa5c478083f1d99f0c0be",
149
149
  "docker-depends": "yosys",
150
150
  "auto-update": true
151
151
  },
@@ -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.1
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.6
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=-pxs4KeKbkUBRc5ueEJUJTf85aJaDo9JcbOMvtxp5mw,1286
4
- siliconcompiler/asic.py,sha256=KXs-mjFHjiCRlyUClNIb-Zvdkxa8dGafStHm-rX3vu8,28912
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=vFcenCV1Q3IVsdpeh4h9wCm4lyAfJMH5e-Oqg4Ji4sQ,34555
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=dyqKwlKnv23ccvWs-8jghmE8_16qcMGCfdz_azGLMCE,51820
11
+ siliconcompiler/project.py,sha256=tOQsb0WuWyCmGlIWICD0IOYxx7se-CMc94d_0hyj9yY,52191
12
12
  siliconcompiler/schematic.py,sha256=0PVFqZvJZW_e2NRGvv6DJPHGjwOlao1qHgZLhgCaEcQ,18385
13
- siliconcompiler/tool.py,sha256=U56aDkSm2kkn_BdmBgxV0id9CmgKLw6JSWUV5F_1Y58,111684
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=bXV3U6glsViFjDr1B1sKtNfymPEBhrQ1Sny5tkLha48,25479
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=CE_JpDJYWqQzGgImgwPWOS7z_ymk4hY3H5I0qVU33Qo,11513
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=Itr7HXf2xpGrZYzh4KIwBpuMqiD8KvWGyqHwkFyffVw,20876
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=6fJmWvXywRMBVKvDK-lm7ol19w1VqY53nwhttfWlyp0,4669
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=itIlyHayyihSvmXyZYi0XsspFpGMK5wXBhmLec6BhL8,5026
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=uYsFGVzHpSp8_hlTnlX4oF7z6XyHpVqF6c7aP30hOUY,81731
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=OZFHEXRy1vrJY_CCkZnHuUiWymeGnb1HO_wVeGGbSpA,4572
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=gUYXIH_cUXBU1WnJOd6_V2sVKkoDz_3TrTGSV7IC05Q,723
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=_Axy9V9r0xWU0xLVwMdgkPUF6-C3cVmtE8J-j0OIzII,40
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=n55Cghyzlw_gQ7gdSdAh1hHMXYqrbUcs-vfV_hKtl10,23014
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=2D_Uc_-rRLIBABDUobXTFLkAktjuchVpSLsC2hFtgxU,3175
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=2zB0qtEYMY3zjGw7TAR3xvPWnVoa9ElYGtBBcUPlWSE,35772
352
- siliconcompiler/tools/yosys/syn_fpga.py,sha256=pBdOetcFD3LcE8BEjiUFyM4cNdQ0haq8UgWEMC1ZiFI,5291
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=AOzILpXFIgUB26QpsCeuY2bh8pLFlQXpCot6zgEHqE4,5271
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=V3l07YocXPfD_0QbBDiW11bnnF4AWQMEmFvJfQscJnI,4667
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.1.dist-info/licenses/LICENSE,sha256=lbLR6sRo_CYJOf7SVgHi-U6CZdD8esESEZE5TZazOQE,10766
485
- siliconcompiler-0.36.1.dist-info/METADATA,sha256=2fmSrnW2HA3SVmyhfDhm6nH6EQdHZQGNpRcY9LMaHRY,11302
486
- siliconcompiler-0.36.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
487
- siliconcompiler-0.36.1.dist-info/entry_points.txt,sha256=5I-z7cmFNPRpD_x1dMQnm-oLwTPOMURxD5frvUM0GE8,832
488
- siliconcompiler-0.36.1.dist-info/top_level.txt,sha256=H8TOYhnEUZAV1RJTa8JRtjLIebwHzkQUhA2wkNU2O6M,16
489
- siliconcompiler-0.36.1.dist-info/RECORD,,
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,,