siliconcompiler 0.26.2__cp38-cp38-win_amd64.whl → 0.26.3__cp38-cp38-win_amd64.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.
Files changed (32) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/apps/sc_issue.py +4 -11
  3. siliconcompiler/apps/smake.py +59 -19
  4. siliconcompiler/core.py +79 -29
  5. siliconcompiler/issue.py +3 -0
  6. siliconcompiler/scheduler/__init__.py +4 -1
  7. siliconcompiler/templates/tcl/manifest.tcl.j2 +52 -0
  8. siliconcompiler/tools/_common/__init__.py +10 -2
  9. siliconcompiler/tools/_common/asic.py +26 -6
  10. siliconcompiler/tools/klayout/export.py +3 -2
  11. siliconcompiler/tools/klayout/klayout_export.py +4 -4
  12. siliconcompiler/tools/klayout/klayout_utils.py +4 -4
  13. siliconcompiler/tools/magic/sc_drc.tcl +1 -1
  14. siliconcompiler/tools/magic/sc_extspice.tcl +3 -2
  15. siliconcompiler/tools/netgen/sc_lvs.tcl +1 -1
  16. siliconcompiler/tools/openroad/export.py +3 -3
  17. siliconcompiler/tools/openroad/openroad.py +5 -5
  18. siliconcompiler/tools/openroad/scripts/sc_apr.tcl +2 -2
  19. siliconcompiler/tools/opensta/__init__.py +3 -2
  20. siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +2 -2
  21. siliconcompiler/tools/opensta/scripts/sc_timing.tcl +2 -2
  22. siliconcompiler/tools/surelog/bin/surelog.exe +0 -0
  23. siliconcompiler/tools/yosys/sc_lec.tcl +1 -1
  24. siliconcompiler/tools/yosys/syn_asic.py +13 -15
  25. siliconcompiler/tools/yosys/syn_asic.tcl +3 -3
  26. siliconcompiler/use.py +12 -0
  27. {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/METADATA +2 -2
  28. {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/RECORD +32 -32
  29. {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/WHEEL +1 -1
  30. {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/LICENSE +0 -0
  31. {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/entry_points.txt +0 -0
  32. {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  # Version number following semver standard.
2
- version = '0.26.2'
2
+ version = '0.26.3'
3
3
 
4
4
  # Default server address for remote runs, if unspecified.
5
5
  default_server = 'https://server.siliconcompiler.com'
@@ -25,13 +25,13 @@ Restricted SC app that generates a sharable testcase from a
25
25
  failed flow or runs an issue generated with this program.
26
26
 
27
27
  To generate a testcase, use:
28
- sc-issue -generate -cfg <stepdir>/outputs/<design>.pkg.json
28
+ sc-issue -cfg <stepdir>/outputs/<design>.pkg.json
29
29
 
30
30
  or include a different step/index than what the cfg_file is pointing to:
31
- sc-issue -generate -cfg <otherdir>/outputs/<design>.pkg.json -arg_step <step> -arg_index <index>
31
+ sc-issue -cfg <otherdir>/outputs/<design>.pkg.json -arg_step <step> -arg_index <index>
32
32
 
33
33
  or include specific libraries while excluding others:
34
- sc-issue -generate -cfg <stepdir>/outputs/<design>.pkg.json -exclude_libraries -add_library sram -add_library gpio
34
+ sc-issue -cfg <stepdir>/outputs/<design>.pkg.json -exclude_libraries -add_library sram -add_library gpio
35
35
 
36
36
  To run a testcase, use:
37
37
  sc-issue -run -file sc_issue_<...>.tar.gz
@@ -39,10 +39,6 @@ To run a testcase, use:
39
39
  """ # noqa E501
40
40
 
41
41
  issue_arguments = {
42
- '-generate': {'action': 'store_true',
43
- 'help': 'generate a testcase',
44
- 'sc_print': False},
45
-
46
42
  '-exclude_libraries': {'action': 'store_true',
47
43
  'help': 'flag to ensure libraries are excluded in the testcase',
48
44
  'sc_print': False},
@@ -88,10 +84,7 @@ To run a testcase, use:
88
84
  chip.logger.error(e)
89
85
  return 1
90
86
 
91
- if switches['generate'] and switches['run']:
92
- raise ValueError('Only one of -generate or -run can be used')
93
-
94
- if switches['generate']:
87
+ if not switches['run']:
95
88
  step = chip.get('arg', 'step')
96
89
  index = chip.get('arg', 'index')
97
90
 
@@ -41,7 +41,20 @@ def __process_file(path):
41
41
  arg_type = str
42
42
  if arg in func_spec.annotations:
43
43
  arg_type = func_spec.annotations[arg]
44
- func_args[arg] = arg_type
44
+ func_args[arg] = {
45
+ "type": arg_type
46
+ }
47
+
48
+ if func_spec.defaults:
49
+ for arg, defval in zip(reversed(func_spec.args), reversed(func_spec.defaults)):
50
+ func_args[arg]["default"] = defval
51
+
52
+ if defval is None:
53
+ continue
54
+
55
+ if type(defval) is not func_args[arg]["type"]:
56
+ if isinstance(defval, (bool, str, float, int)):
57
+ func_args[arg]["type"] = type(defval)
45
58
 
46
59
  args[name] = {
47
60
  "function": func,
@@ -62,7 +75,7 @@ def __process_file(path):
62
75
  return args, default_arg, module_help
63
76
 
64
77
 
65
- def main():
78
+ def main(source_file=None):
66
79
  progname = "smake"
67
80
  description = f"""-----------------------------------------------------------
68
81
  SC app that provides an Makefile like interface to python
@@ -90,16 +103,18 @@ To run a target with supported arguments, use:
90
103
  -----------------------------------------------------------"""
91
104
 
92
105
  # handle source file identification before arg parse
93
- source_file = __default_source_file
94
- file_args = ('--file', '-f')
95
- for file_arg in file_args:
96
- if file_arg in sys.argv:
97
- source_file_idx = sys.argv.index(file_arg) + 1
98
- if source_file_idx < len(sys.argv):
99
- source_file = sys.argv[source_file_idx]
100
- else:
101
- source_file = None
102
- break
106
+ file_args = None
107
+ if not source_file:
108
+ source_file = __default_source_file
109
+ file_args = ('--file', '-f')
110
+ for file_arg in file_args:
111
+ if file_arg in sys.argv:
112
+ source_file_idx = sys.argv.index(file_arg) + 1
113
+ if source_file_idx < len(sys.argv):
114
+ source_file = sys.argv[source_file_idx]
115
+ else:
116
+ source_file = None
117
+ break
103
118
 
104
119
  # handle directory identification before arg parse
105
120
  source_dir = os.getcwd()
@@ -135,10 +150,11 @@ To run a target with supported arguments, use:
135
150
  description=description,
136
151
  formatter_class=argparse.RawDescriptionHelpFormatter)
137
152
 
138
- parser.add_argument(
139
- *file_args,
140
- metavar='<file>',
141
- help=f'Use file as makefile, default is {__default_source_file}')
153
+ if file_args:
154
+ parser.add_argument(
155
+ *file_args,
156
+ metavar='<file>',
157
+ help=f'Use file as makefile, default is {__default_source_file}')
142
158
 
143
159
  parser.add_argument(
144
160
  *dir_args,
@@ -159,14 +175,38 @@ To run a target with supported arguments, use:
159
175
  subparse = targetparsers.add_parser(
160
176
  arg,
161
177
  description=info['full_help'],
162
- help=info['help'])
178
+ help=info['help'],
179
+ formatter_class=argparse.RawDescriptionHelpFormatter)
180
+
181
+ for subarg, subarg_info in info['args'].items():
182
+ # print(subarg, subarg_info)
183
+ add_args = {}
184
+
185
+ if "default" not in subarg_info:
186
+ add_args["required"] = True
187
+ else:
188
+ if type(subarg_info["default"]) is subarg_info["type"]:
189
+ add_args["default"] = subarg_info["default"]
190
+
191
+ if subarg_info["type"] is bool:
192
+ def str2bool(v):
193
+ # modified from:
194
+ # https://github.com/pypa/distutils/blob/8993718731b951ee36d08cb784f02aa13542ce15/distutils/util.py
195
+ val = v.lower()
196
+ if val in ('y', 'yes', 't', 'true', 'on', '1'):
197
+ return True
198
+ elif val in ('n', 'no', 'f', 'false', 'off', '0'):
199
+ return False
200
+ else:
201
+ raise ValueError(f"invalid truth value {val!r}")
202
+ subarg_info["type"] = str2bool
163
203
 
164
- for subarg, subarg_type in info['args'].items():
165
204
  subparse.add_argument(
166
205
  f'--{subarg}',
167
206
  dest=f'sub_{subarg}',
168
207
  metavar=f'<{subarg}>',
169
- type=subarg_type)
208
+ type=subarg_info["type"],
209
+ **add_args)
170
210
 
171
211
  args = parser.parse_args()
172
212
  target = args.target
siliconcompiler/core.py CHANGED
@@ -1001,8 +1001,8 @@ class Chip:
1001
1001
  package (str): Name of package where this file can be found
1002
1002
  '''
1003
1003
 
1004
- self.__add_input_output('input', filename, fileset, filetype, iomap,
1005
- step=step, index=index, package=package)
1004
+ self._add_input_output('input', filename, fileset, filetype, iomap,
1005
+ step=step, index=index, package=package)
1006
1006
  # Replace {iotable} in __doc__ with actual table for fileset/filetype and extension mapping
1007
1007
  input.__doc__ = input.__doc__.replace("{iotable}",
1008
1008
  utils.format_fileset_type_table())
@@ -1012,14 +1012,14 @@ class Chip:
1012
1012
  step=None, index=None, package=None):
1013
1013
  '''Same as input'''
1014
1014
 
1015
- self.__add_input_output('output', filename, fileset, filetype, iomap,
1016
- step=step, index=index, package=package)
1015
+ self._add_input_output('output', filename, fileset, filetype, iomap,
1016
+ step=step, index=index, package=package)
1017
1017
  # Copy input functions __doc__ and replace 'input' with 'output' to make constant
1018
1018
  output.__doc__ = input.__doc__.replace("input", "output")
1019
1019
 
1020
1020
  ###########################################################################
1021
- def __add_input_output(self, category, filename, fileset, filetype, iomap,
1022
- step=None, index=None, package=None):
1021
+ def _add_input_output(self, category, filename, fileset, filetype, iomap,
1022
+ step=None, index=None, package=None, quiet=False):
1023
1023
  '''
1024
1024
  Adds file to input or output groups.
1025
1025
  Performs a lookup in the io map for the fileset and filetype
@@ -1051,12 +1051,13 @@ class Chip:
1051
1051
  if not use_fileset or not use_filetype:
1052
1052
  self.logger.error(f'Unable to infer {category} fileset and/or filetype for '
1053
1053
  f'{filename} based on file extension.')
1054
- elif not fileset and not filetype:
1055
- self.logger.info(f'{filename} inferred as {use_fileset}/{use_filetype}')
1056
- elif not filetype:
1057
- self.logger.info(f'{filename} inferred as filetype {use_filetype}')
1058
- elif not fileset:
1059
- self.logger.info(f'{filename} inferred as fileset {use_fileset}')
1054
+ elif not quiet:
1055
+ if not fileset and not filetype:
1056
+ self.logger.info(f'{filename} inferred as {use_fileset}/{use_filetype}')
1057
+ elif not filetype:
1058
+ self.logger.info(f'{filename} inferred as filetype {use_filetype}')
1059
+ elif not fileset:
1060
+ self.logger.info(f'{filename} inferred as fileset {use_fileset}')
1060
1061
 
1061
1062
  self.add(category, use_fileset, use_filetype, filename,
1062
1063
  step=step, index=index, package=package)
@@ -1946,7 +1947,7 @@ class Chip:
1946
1947
 
1947
1948
  ###########################################################################
1948
1949
  def write_dependencygraph(self, filename, flow=None,
1949
- fillcolor='#ffffff', fontcolor='#000000',
1950
+ fontcolor='#000000', color_scheme=None,
1950
1951
  background='transparent', fontsize='14',
1951
1952
  border=True, landscape=False):
1952
1953
  r'''
@@ -1964,8 +1965,9 @@ class Chip:
1964
1965
  Args:
1965
1966
  filename (filepath): Output filepath
1966
1967
  flow (str): Name of flowgraph to render
1967
- fillcolor(str): Node fill RGB color hex value
1968
1968
  fontcolor (str): Node font RGB color hex value
1969
+ color_scheme (str): Name of the color scheme to apply to the nodes.
1970
+ Valid choices are: "none", "simple", "detailed"
1969
1971
  background (str): Background color
1970
1972
  fontsize (str): Node text font size
1971
1973
  border (bool): Enables node border if True
@@ -1981,6 +1983,33 @@ class Chip:
1981
1983
  fileroot, ext = os.path.splitext(filepath)
1982
1984
  fileformat = ext.replace(".", "")
1983
1985
 
1986
+ color_schemes = {
1987
+ "none": {
1988
+ "design": "white",
1989
+ "library": "white",
1990
+ "logiclib": "white",
1991
+ "macrolib": "white"
1992
+ },
1993
+ "simple": {
1994
+ "design": "lightgreen",
1995
+ "library": "white",
1996
+ "logiclib": "lightgreen",
1997
+ "macrolib": "lightgreen"
1998
+ },
1999
+ "detailed": {
2000
+ "design": "lightgreen",
2001
+ "library": "white",
2002
+ "logiclib": "lightskyblue",
2003
+ "macrolib": "lightgoldenrod2"
2004
+ },
2005
+ }
2006
+
2007
+ if not color_scheme:
2008
+ color_scheme = "none"
2009
+
2010
+ if color_scheme not in color_schemes:
2011
+ raise ValueError(f'{color_scheme} is not a valid color scheme')
2012
+
1984
2013
  # controlling border width
1985
2014
  if border:
1986
2015
  penwidth = '1'
@@ -2006,7 +2035,7 @@ class Chip:
2006
2035
  nodes.add(node)
2007
2036
  dot.node(node, label=node, bordercolor=fontcolor, style='filled',
2008
2037
  fontcolor=fontcolor, fontsize=fontsize, ordering="in",
2009
- penwidth=penwidth, fillcolor=fillcolor)
2038
+ penwidth=penwidth, fillcolor="white")
2010
2039
  return node
2011
2040
 
2012
2041
  nodes = {}
@@ -2019,32 +2048,53 @@ class Chip:
2019
2048
  if root_label in nodes:
2020
2049
  return
2021
2050
 
2022
- in_libs = lib.get('option', 'library',
2023
- step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY) + \
2024
- lib.get('asic', 'logiclib',
2025
- step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY) + \
2026
- lib.get('asic', 'macrolib',
2027
- step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY)
2028
-
2029
2051
  in_labels = []
2030
- for in_lib in in_libs:
2052
+ for in_lib in lib.get('option', 'library',
2053
+ step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY):
2031
2054
  in_labels.append(f'library-{in_lib}')
2055
+ for in_lib in lib.get('asic', 'logiclib',
2056
+ step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY):
2057
+ in_labels.append(f'logiclib-{in_lib}')
2058
+ for in_lib in lib.get('asic', 'macrolib',
2059
+ step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY):
2060
+ in_labels.append(f'macrolib-{in_lib}')
2061
+
2062
+ shape = "oval"
2063
+ if root_type == "logiclib":
2064
+ shape = "box"
2065
+ elif root_type == "macrolib":
2066
+ shape = "box"
2067
+ elif root_type == "design":
2068
+ shape = "box"
2069
+
2070
+ color = color_schemes[color_scheme][root_type]
2032
2071
 
2033
2072
  nodes[root_label] = {
2034
2073
  "text": name,
2035
- "shape": "oval" if root_type == "library" else "box",
2074
+ "shape": shape,
2075
+ "color": color,
2036
2076
  "connects_to": set(in_labels)
2037
2077
  }
2038
2078
 
2039
- for in_lib in in_libs:
2040
- collect_library("library", Schema(cfg=self.getdict('library', in_lib)), name=in_lib)
2079
+ for in_lib in lib.get('option', 'library',
2080
+ step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY):
2081
+ collect_library("library", Schema(cfg=self.getdict('library', in_lib)),
2082
+ name=in_lib)
2083
+ for in_lib in lib.get('asic', 'logiclib',
2084
+ step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY):
2085
+ collect_library("logiclib", Schema(cfg=self.getdict('library', in_lib)),
2086
+ name=in_lib)
2087
+ for in_lib in lib.get('asic', 'macrolib',
2088
+ step=Schema.GLOBAL_KEY, index=Schema.GLOBAL_KEY):
2089
+ collect_library("macrolib", Schema(cfg=self.getdict('library', in_lib)),
2090
+ name=in_lib)
2041
2091
 
2042
2092
  collect_library("design", self)
2043
2093
 
2044
2094
  for label, info in nodes.items():
2045
2095
  dot.node(label, label=info['text'], bordercolor=fontcolor, style='filled',
2046
2096
  fontcolor=fontcolor, fontsize=fontsize, ordering="in",
2047
- penwidth=penwidth, fillcolor=fillcolor, shape=info['shape'])
2097
+ penwidth=penwidth, fillcolor=info["color"], shape=info['shape'])
2048
2098
 
2049
2099
  for conn in info['connects_to']:
2050
2100
  dot.edge(label, conn, dir='back')
@@ -2086,7 +2136,7 @@ class Chip:
2086
2136
  step=r_step, index=r_index)
2087
2137
  else:
2088
2138
  self.set(*key,
2089
- list(map(lambda x: x.replace(org_library, new_library), val)),
2139
+ list(map(lambda x: new_library if x == org_library else x, val)),
2090
2140
  step=r_step, index=r_index)
2091
2141
  else:
2092
2142
  for val, r_step, r_index in self.schema._getvals(*key):
@@ -2100,7 +2150,7 @@ class Chip:
2100
2150
  step=r_step, index=r_index)
2101
2151
  else:
2102
2152
  self.set(*key,
2103
- list(map(lambda x: x.replace(org_library, new_library), val)),
2153
+ list(map(lambda x: new_library if x == org_library else x, val)),
2104
2154
  step=r_step, index=r_index)
2105
2155
 
2106
2156
  swap('option', 'library')
siliconcompiler/issue.py CHANGED
@@ -153,6 +153,8 @@ def generate_testcase(chip,
153
153
  os.chdir(new_work_dir)
154
154
 
155
155
  # Rewrite replay.sh
156
+ prev_quiet = chip.get('option', 'quiet', step=step, index=index)
157
+ chip.set('option', 'quiet', True, step=step, index=index)
156
158
  from siliconcompiler import SiliconCompilerError
157
159
  try:
158
160
  # Rerun setup
@@ -167,6 +169,7 @@ def generate_testcase(chip,
167
169
  pass
168
170
  except SiliconCompilerError:
169
171
  pass
172
+ chip.set('option', 'quiet', prev_quiet, step=step, index=index)
170
173
 
171
174
  flow = chip.get('option', 'flow')
172
175
  is_python_tool = hasattr(chip._get_task_module(step, index, flow=flow), 'run')
@@ -201,7 +201,10 @@ def _local_process(chip, flow):
201
201
  f'{chip.design}.pkg.json')
202
202
  if os.path.exists(manifest):
203
203
  # ensure we setup these nodes again
204
- extra_setup_nodes[(step, index)] = Schema(manifest=manifest, logger=chip.logger)
204
+ try:
205
+ extra_setup_nodes[(step, index)] = Schema(manifest=manifest, logger=chip.logger)
206
+ except Exception:
207
+ pass
205
208
 
206
209
  # Setup tools for all nodes to run.
207
210
  nodes = nodes_to_execute(chip, flow)
@@ -83,3 +83,55 @@ proc sc_section_banner { text { method puts } } {
83
83
  $method "| $text"
84
84
  $method "============================================================"
85
85
  }
86
+
87
+ # Get list of soft libraries
88
+ proc sc_get_libraries { {library {}} {libraries {}} } {
89
+ set key []
90
+ if { [llength $library] != 0 } {
91
+ lappend key library $library
92
+ }
93
+ lappend key option library
94
+
95
+ set libs []
96
+ foreach lib [sc_cfg_get {*}$key] {
97
+ if { [lsearch -exact $libs $lib] != -1 || [lsearch -exact $libraries $lib] != -1 } {
98
+ continue
99
+ }
100
+
101
+ lappend libs $lib
102
+
103
+ foreach sublib [sc_get_libraries $lib $libs] {
104
+ lappend libs $sublib
105
+ }
106
+ }
107
+
108
+ return [lsort -unique $libs]
109
+ }
110
+
111
+ # Get list of asic libraries
112
+ proc sc_get_asic_libraries { type } {
113
+ set libs []
114
+
115
+ foreach lib [sc_cfg_get asic ${type}lib] {
116
+ if { [lsearch -exact $libs $lib] != -1 } {
117
+ continue
118
+ }
119
+ lappend libs $lib
120
+ }
121
+
122
+ foreach lib [sc_get_libraries] {
123
+ if { ![sc_cfg_exists library $lib asic ${type}lib] } {
124
+ continue
125
+ }
126
+
127
+ foreach sublib [sc_cfg_get library $lib asic ${type}lib] {
128
+ if { [lsearch -exact $libs $sublib] != -1 } {
129
+ continue
130
+ }
131
+
132
+ lappend libs $sublib
133
+ }
134
+ }
135
+
136
+ return $libs
137
+ }
@@ -1,7 +1,5 @@
1
1
  import os
2
2
  import pkgutil
3
- from siliconcompiler.utils import get_file_ext
4
- from siliconcompiler import units, SiliconCompilerError, NodeStatus
5
3
 
6
4
 
7
5
  def get_libraries(chip, include_asic=True, library=None, libraries=None):
@@ -159,6 +157,8 @@ def __get_keys(chip, *key, include_library_files=True):
159
157
 
160
158
 
161
159
  def __assert_support(chip, opt_keys, supports):
160
+ from siliconcompiler import SiliconCompilerError
161
+
162
162
  if not supports:
163
163
  supports = []
164
164
 
@@ -255,6 +255,8 @@ def get_frontend_options(chip, supports=None):
255
255
 
256
256
 
257
257
  def find_incoming_ext(chip, support_exts, default_ext):
258
+ from siliconcompiler.utils import get_file_ext
259
+
258
260
  step = chip.get('arg', 'step')
259
261
  index = chip.get('arg', 'index')
260
262
  flow = chip.get('option', 'flow')
@@ -302,6 +304,8 @@ def pick_key(chip, check_keys, step=None, index=None):
302
304
 
303
305
 
304
306
  def input_provides(chip, step, index, flow=None):
307
+ from siliconcompiler import NodeStatus
308
+
305
309
  if not flow:
306
310
  flow = chip.get('option', 'flow')
307
311
 
@@ -323,6 +327,8 @@ def input_provides(chip, step, index, flow=None):
323
327
 
324
328
 
325
329
  def input_file_node_name(filename, step, index):
330
+ from siliconcompiler.utils import get_file_ext
331
+
326
332
  file_type = get_file_ext(filename)
327
333
 
328
334
  base = filename
@@ -408,6 +414,8 @@ def record_metric(chip, step, index, metric, value, source, source_unit=None):
408
414
  Records the metric cell area under 'floorplan0' and notes the source as
409
415
  'reports/metrics.json'
410
416
  '''
417
+ from siliconcompiler import units
418
+
411
419
  metric_unit = None
412
420
  if chip.schema.has_field('metric', metric, 'unit'):
413
421
  metric_unit = chip.get('metric', metric, field='unit')
@@ -1,12 +1,32 @@
1
- from siliconcompiler.tools._common import pick_key
2
- from siliconcompiler.tools._common import get_tool_task
1
+ from .. import _common
3
2
 
4
3
 
5
4
  def get_mainlib(chip):
5
+ return get_libraries(chip, 'logic')[0]
6
+
7
+
8
+ def get_libraries(chip, type):
6
9
  step = chip.get('arg', 'step')
7
10
  index = chip.get('arg', 'index')
8
- logiclibs = chip.get('asic', 'logiclib', step=step, index=index)
9
- return logiclibs[0]
11
+
12
+ if type not in ('logic', 'macro'):
13
+ raise ValueError(f'Cannot collect {type} libraries')
14
+
15
+ libs = []
16
+ for lib in chip.get('asic', f'{type}lib', step=step, index=index):
17
+ if lib in libs:
18
+ continue
19
+ libs.append(lib)
20
+
21
+ for lib in _common.get_libraries(chip, include_asic=False):
22
+ if not chip.valid('library', lib, 'asic', f'{type}lib'):
23
+ continue
24
+ for sublib in chip.get('library', lib, 'asic', f'{type}lib', step=step, index=index):
25
+ if sublib in libs:
26
+ continue
27
+ libs.append(sublib)
28
+
29
+ return libs
10
30
 
11
31
 
12
32
  def get_timing_modes(chip):
@@ -33,7 +53,7 @@ def set_tool_task_var(chip,
33
53
  '''
34
54
  step = chip.get('arg', 'step')
35
55
  index = chip.get('arg', 'index')
36
- tool, task = get_tool_task(chip, step, index)
56
+ tool, task = _common.get_tool_task(chip, step, index)
37
57
  pdkname = chip.get('option', 'pdk')
38
58
  stackup = chip.get('option', 'stackup')
39
59
  mainlib = get_mainlib(chip)
@@ -72,7 +92,7 @@ def set_tool_task_var(chip,
72
92
  ','.join(check_keys[-1]),
73
93
  step=step, index=index)
74
94
 
75
- require_key, value = pick_key(chip, reversed(check_keys), step=step, index=index)
95
+ require_key, value = _common.pick_key(chip, reversed(check_keys), step=step, index=index)
76
96
  if not value:
77
97
  value = default_value
78
98
 
@@ -2,6 +2,7 @@
2
2
  from siliconcompiler.tools.klayout.klayout import setup as setup_tool
3
3
  from siliconcompiler.tools.klayout.screenshot import setup_gui_screenshot
4
4
  from siliconcompiler.tools._common import input_provides, get_tool_task
5
+ from siliconcompiler.tools._common.asic import get_libraries
5
6
 
6
7
 
7
8
  def setup(chip):
@@ -23,7 +24,7 @@ def setup(chip):
23
24
  chip.set('tool', tool, 'task', task, 'script', script, step=step, index=index, clobber=clobber)
24
25
  chip.set('tool', tool, 'task', task, 'option', option, step=step, index=index, clobber=clobber)
25
26
 
26
- targetlibs = chip.get('asic', 'logiclib', step=step, index=index)
27
+ targetlibs = get_libraries(chip, 'logic')
27
28
  stackup = chip.get('option', 'stackup')
28
29
  pdk = chip.get('option', 'pdk')
29
30
 
@@ -39,7 +40,7 @@ def setup(chip):
39
40
  sc_stream_order = [default_stream, *[s for s in streams if s != default_stream]]
40
41
 
41
42
  if stackup and targetlibs:
42
- macrolibs = chip.get('asic', 'macrolib', step=step, index=index)
43
+ macrolibs = get_libraries(chip, 'macro')
43
44
 
44
45
  chip.add('tool', tool, 'task', task, 'require', ",".join(['asic', 'logiclib']),
45
46
  step=step, index=index)
@@ -124,7 +124,8 @@ def main():
124
124
  save_technology,
125
125
  get_schema
126
126
  )
127
- from tools.klayout.klayout_show import show # noqa E402
127
+ from tools.klayout.klayout_show import show
128
+ from tools._common.asic import get_libraries
128
129
 
129
130
  schema = get_schema(manifest='sc_manifest.json')
130
131
 
@@ -158,9 +159,8 @@ def main():
158
159
 
159
160
  out_file = os.path.join('outputs', f'{design}.{sc_stream}')
160
161
 
161
- libs = schema.get('asic', 'logiclib', step=sc_step, index=sc_index)
162
- if 'macrolib' in schema.getkeys('asic'):
163
- libs += schema.get('asic', 'macrolib', step=sc_step, index=sc_index)
162
+ libs = get_libraries(schema, 'logic')
163
+ libs += get_libraries(schema, 'macro')
164
164
 
165
165
  in_files = []
166
166
  for lib in libs:
@@ -21,6 +21,8 @@ def get_streams(schema):
21
21
 
22
22
 
23
23
  def technology(design, schema):
24
+ from tools._common.asic import get_libraries
25
+
24
26
  sc_step = schema.get('arg', 'step')
25
27
  sc_index = schema.get('arg', 'index')
26
28
  sc_pdk = schema.get('option', 'pdk')
@@ -33,10 +35,8 @@ def technology(design, schema):
33
35
  sc_libtype = schema.get('library', sc_mainlib, 'asic', 'libarch', step=sc_step, index=sc_index)
34
36
 
35
37
  sc_libs = []
36
- if 'logiclib' in schema.getkeys('asic'):
37
- sc_libs.extend(schema.get('asic', 'logiclib', step=sc_step, index=sc_index))
38
- if 'macrolib' in schema.getkeys('asic'):
39
- sc_libs.extend(schema.get('asic', 'macrolib', step=sc_step, index=sc_index))
38
+ sc_libs += get_libraries(schema, 'logic')
39
+ sc_libs += get_libraries(schema, 'macro')
40
40
 
41
41
  local_files = {
42
42
  'lyt': f'inputs/{design}.lyt',
@@ -20,7 +20,7 @@ set sc_index [sc_cfg_get arg index]
20
20
  set sc_task $sc_step
21
21
 
22
22
  set sc_design [sc_top]
23
- set sc_macrolibs [sc_cfg_get asic macrolib]
23
+ set sc_macrolibs [sc_get_asic_libraries macro]
24
24
  set sc_stackup [sc_cfg_get option stackup]
25
25
 
26
26
  if { [sc_cfg_tool_task_exists var exclude] } {
@@ -5,13 +5,14 @@ set sc_index [sc_cfg_get arg index]
5
5
  set sc_task $sc_step
6
6
 
7
7
  set sc_design [sc_top]
8
- set sc_mainlib [sc_cfg_get asic logiclib]
8
+ set sc_logiclibs [sc_get_asic_libraries logic]
9
+ set sc_mainlib [lindex $sc_logiclibs 0]
9
10
  set sc_stackup [sc_cfg_get option stackup]
10
11
  set sc_pdk [sc_cfg_get option pdk]
11
12
  set sc_libtype [sc_cfg_get library $sc_mainlib asic libarch]
12
13
  set sc_techlef [sc_cfg_get pdk $sc_pdk aprtech magic $sc_stackup $sc_libtype lef]
13
14
  set sc_liblef [sc_cfg_get library $sc_mainlib output $sc_stackup lef]
14
- set sc_macrolibs [sc_cfg_get asic macrolib]
15
+ set sc_macrolibs [sc_get_asic_libraries macro]
15
16
 
16
17
  if { [sc_cfg_tool_task_exists var exclude] } {
17
18
  set sc_exclude [sc_cfg_tool_task_get var exclude]
@@ -5,7 +5,7 @@ set sc_index [sc_cfg_get arg index]
5
5
  set sc_task $sc_step
6
6
 
7
7
  set sc_design [sc_top]
8
- set sc_macrolibs [sc_cfg_get asic macrolib]
8
+ set sc_macrolibs [sc_get_asic_libraries macro]
9
9
  set sc_stackup [sc_cfg_get option stackup]
10
10
  set sc_pdk [sc_cfg_get option pdk]
11
11
  set sc_runset [sc_cfg_get pdk $sc_pdk lvs runset netgen $sc_stackup basic]
@@ -3,7 +3,7 @@ from siliconcompiler.tools.openroad.openroad import setup as setup_tool
3
3
  from siliconcompiler.tools.openroad.openroad import build_pex_corners
4
4
  from siliconcompiler.tools.openroad.openroad import post_process as or_post_process
5
5
  from siliconcompiler.tools.openroad.openroad import pre_process as or_pre_process
6
- from siliconcompiler.tools._common.asic import set_tool_task_var
6
+ from siliconcompiler.tools._common.asic import set_tool_task_var, get_libraries
7
7
  from siliconcompiler.tools.openroad.openroad import _set_reports, set_pnr_inputs, set_pnr_outputs
8
8
  from siliconcompiler.tools._common import get_tool_task
9
9
 
@@ -34,8 +34,8 @@ def setup(chip):
34
34
  stackup = chip.get('option', 'stackup')
35
35
  pdk = chip.get('option', 'pdk')
36
36
 
37
- targetlibs = chip.get('asic', 'logiclib', step=step, index=index)
38
- macrolibs = chip.get('asic', 'macrolib', step=step, index=index)
37
+ targetlibs = get_libraries(chip, 'logic')
38
+ macrolibs = get_libraries(chip, 'macro')
39
39
 
40
40
  # Determine if exporting the cdl
41
41
  set_tool_task_var(chip, param_key='write_cdl',
@@ -17,7 +17,7 @@ from siliconcompiler import sc_open
17
17
  from siliconcompiler import utils
18
18
  from siliconcompiler.tools._common import input_provides, add_common_file, \
19
19
  get_tool_task, record_metric
20
- from siliconcompiler.tools._common.asic import get_mainlib, set_tool_task_var
20
+ from siliconcompiler.tools._common.asic import get_mainlib, set_tool_task_var, get_libraries
21
21
 
22
22
 
23
23
  ####################################################################
@@ -61,9 +61,9 @@ def setup(chip):
61
61
  index = chip.get('arg', 'index')
62
62
  _, task = get_tool_task(chip, step, index)
63
63
  pdkname = chip.get('option', 'pdk')
64
- targetlibs = chip.get('asic', 'logiclib', step=step, index=index)
64
+ targetlibs = get_libraries(chip, 'logic')
65
65
  mainlib = get_mainlib(chip)
66
- macrolibs = chip.get('asic', 'macrolib', step=step, index=index)
66
+ macrolibs = get_libraries(chip, 'macro')
67
67
  stackup = chip.get('option', 'stackup')
68
68
  delaymodel = chip.get('asic', 'delaymodel', step=step, index=index)
69
69
  libtype = chip.get('library', mainlib, 'asic', 'libarch', step=step, index=index)
@@ -210,8 +210,8 @@ def pre_process(chip):
210
210
  index = chip.get('arg', 'index')
211
211
  tool, task = get_tool_task(chip, step, index)
212
212
  pdkname = chip.get('option', 'pdk')
213
- targetlibs = chip.get('asic', 'logiclib', step=step, index=index)
214
- macrolibs = chip.get('asic', 'macrolib', step=step, index=index)
213
+ targetlibs = get_libraries(chip, 'logic')
214
+ macrolibs = get_libraries(chip, 'macro')
215
215
  mainlib = get_mainlib(chip)
216
216
  stackup = chip.get('option', 'stackup')
217
217
  libtype = chip.get('library', mainlib, 'asic', 'libarch', step=step, index=index)
@@ -69,7 +69,7 @@ set sc_pdk [sc_cfg_get option pdk]
69
69
  set sc_stackup [sc_cfg_get option stackup]
70
70
 
71
71
  # APR Parameters
72
- set sc_targetlibs [sc_cfg_get asic logiclib]
72
+ set sc_targetlibs [sc_get_asic_libraries logic]
73
73
  set sc_mainlib [lindex $sc_targetlibs 0]
74
74
  set sc_delaymodel [sc_cfg_get asic delaymodel]
75
75
  set sc_pdk_vars [sc_cfg_get pdk $sc_pdk {var} $sc_tool]
@@ -117,7 +117,7 @@ if { [sc_cfg_tool_task_exists {var} dont_touch] } {
117
117
  ###############################
118
118
 
119
119
  # MACROS
120
- set sc_macrolibs [sc_cfg_get asic macrolib]
120
+ set sc_macrolibs [sc_get_asic_libraries macro]
121
121
 
122
122
  ###############################
123
123
  # Setup debugging if requested
@@ -11,6 +11,7 @@ Installation: https://github.com/The-OpenROAD-Project/OpenSTA (also installed wi
11
11
  import os
12
12
  from siliconcompiler.tools.openroad.openroad import get_library_timing_keypaths
13
13
  from siliconcompiler.tools._common import get_tool_task
14
+ from siliconcompiler.tools._common.asic import get_libraries
14
15
 
15
16
 
16
17
  ####################################################################
@@ -33,8 +34,8 @@ def setup(chip):
33
34
  chip.set('tool', tool, 'version', '>=v2.5.0', clobber=False)
34
35
  chip.set('tool', tool, 'format', 'tcl')
35
36
 
36
- targetlibs = chip.get('asic', 'logiclib', step=step, index=index)
37
- macrolibs = chip.get('asic', 'macrolib', step=step, index=index)
37
+ targetlibs = get_libraries(chip, 'logic')
38
+ macrolibs = get_libraries(chip, 'macro')
38
39
  delaymodel = chip.get('asic', 'delaymodel', step=step, index=index)
39
40
 
40
41
  # Input/Output requirements for default asicflow steps
@@ -20,7 +20,7 @@ set sc_refdir [sc_cfg_tool_task_get refdir]
20
20
  set sc_design [sc_top]
21
21
 
22
22
  # APR Parameters
23
- set sc_targetlibs [sc_cfg_get asic logiclib]
23
+ set sc_targetlibs [sc_get_asic_libraries logic]
24
24
  set sc_delaymodel [sc_cfg_get asic delaymodel]
25
25
  set sc_scenarios [dict keys [sc_cfg_get constraint timing]]
26
26
 
@@ -29,7 +29,7 @@ set sc_scenarios [dict keys [sc_cfg_get constraint timing]]
29
29
  ###############################
30
30
 
31
31
  # MACROS
32
- set sc_macrolibs [sc_cfg_get asic macrolib]
32
+ set sc_macrolibs [sc_get_asic_libraries macro]
33
33
 
34
34
  ###############################
35
35
  # Read Files
@@ -20,7 +20,7 @@ set sc_refdir [sc_cfg_tool_task_get refdir]
20
20
  set sc_design [sc_top]
21
21
 
22
22
  # APR Parameters
23
- set sc_targetlibs [sc_cfg_get asic logiclib]
23
+ set sc_targetlibs [sc_get_asic_libraries logic]
24
24
  set sc_mainlib [lindex $sc_targetlibs 0]
25
25
  set sc_delaymodel [sc_cfg_get asic delaymodel]
26
26
  set sc_timing_mode [lindex [sc_cfg_tool_task_get var timing_mode] 0]
@@ -36,7 +36,7 @@ foreach corner [dict keys [sc_cfg_get constraint timing]] {
36
36
  ###############################
37
37
 
38
38
  # MACROS
39
- set sc_macrolibs [sc_cfg_get asic macrolib]
39
+ set sc_macrolibs [sc_get_asic_libraries macro]
40
40
 
41
41
  ###############################
42
42
  # Read Files
@@ -13,7 +13,7 @@ set sc_task [sc_cfg_get flowgraph $sc_flow $sc_step $sc_index task]
13
13
  set sc_refdir [sc_cfg_tool_task_get refdir ]
14
14
 
15
15
  set sc_design [sc_top]
16
- set sc_targetlibs [sc_cfg_get asic logiclib]
16
+ set sc_targetlibs [sc_get_asic_libraries logic]
17
17
 
18
18
  # TODO: properly handle complexity here
19
19
  set lib [lindex $sc_targetlibs 0]
@@ -5,7 +5,7 @@ import re
5
5
  import siliconcompiler.tools.yosys.prepareLib as prepareLib
6
6
  from siliconcompiler import sc_open
7
7
  from siliconcompiler import utils
8
- from siliconcompiler.tools._common.asic import set_tool_task_var
8
+ from siliconcompiler.tools._common.asic import set_tool_task_var, get_libraries, get_mainlib
9
9
  from siliconcompiler.tools._common import get_tool_task
10
10
 
11
11
 
@@ -47,13 +47,13 @@ def setup_asic(chip):
47
47
 
48
48
  if syn_corners is not None:
49
49
  # add timing library requirements
50
- for lib in chip.get('asic', 'logiclib', step=step, index=index):
50
+ for lib in get_libraries(chip, 'logic'):
51
51
  # mandatory for logiclibs
52
52
  chip.add('tool', tool, 'task', task, 'require',
53
53
  ",".join(_get_synthesis_library_key(chip, lib, syn_corners)),
54
54
  step=step, index=index)
55
55
 
56
- for lib in chip.get('asic', 'macrolib', step=step, index=index):
56
+ for lib in get_libraries(chip, 'macro'):
57
57
  # optional for macrolibs
58
58
  if chip.valid(*_get_synthesis_library_key(chip, lib, syn_corners)):
59
59
  chip.add('tool', tool, 'task', task, 'require',
@@ -70,8 +70,7 @@ def setup_asic(chip):
70
70
  step=step, index=index)
71
71
 
72
72
  # set default control knobs
73
- logiclibs = chip.get('asic', 'logiclib', step=step, index=index)
74
- mainlib = logiclibs[0]
73
+ mainlib = get_mainlib(chip)
75
74
  for option, value in [
76
75
  ('flatten', "true"),
77
76
  ('hier_iterations', "10"),
@@ -233,8 +232,8 @@ def prepare_synthesis_libraries(chip):
233
232
  return chip.find_files(*keypath, step=step, index=index)
234
233
  return []
235
234
 
236
- for libtype in ('logiclib', 'macrolib'):
237
- for lib in chip.get('asic', libtype, step=step, index=index):
235
+ for libtype in ('logic', 'macro'):
236
+ for lib in get_libraries(chip, libtype):
238
237
  lib_content = {}
239
238
  # Mark dont use
240
239
  for lib_file in get_synthesis_libraries(lib):
@@ -260,7 +259,7 @@ def prepare_synthesis_libraries(chip):
260
259
  continue
261
260
 
262
261
  var_name = 'synthesis_libraries'
263
- if libtype == "macrolib":
262
+ if libtype == "macro":
264
263
  var_name = 'synthesis_libraries_macros'
265
264
 
266
265
  for file, content in lib_content.items():
@@ -380,7 +379,7 @@ def get_dff_liberty_file(chip):
380
379
  if dff_liberty:
381
380
  return dff_liberty[0]
382
381
 
383
- mainlib = chip.get('asic', 'logiclib', step=step, index=index)[0]
382
+ mainlib = get_mainlib(chip)
384
383
  if chip.valid('library', mainlib, 'option', 'file', 'yosys_dff_liberty'):
385
384
  dff_liberty = chip.find_files('library', mainlib, 'option', 'file', 'yosys_dff_liberty')
386
385
  if dff_liberty:
@@ -391,7 +390,7 @@ def get_dff_liberty_file(chip):
391
390
  return None
392
391
 
393
392
  # if dff liberty file is not set, use the first liberty file defined
394
- for lib in chip.get('asic', 'logiclib', step=step, index=index):
393
+ for lib in get_libraries(chip, 'logic'):
395
394
  if not chip.valid(*_get_synthesis_library_key(chip, lib, corners)):
396
395
  continue
397
396
 
@@ -410,8 +409,7 @@ def get_abc_period(chip):
410
409
  index = chip.get('arg', 'index')
411
410
  _, task = get_tool_task(chip, step, index)
412
411
 
413
- logiclibs = chip.get('asic', 'logiclib', step=step, index=index)
414
- mainlib = logiclibs[0]
412
+ mainlib = get_mainlib(chip)
415
413
 
416
414
  abc_clock_period = chip.get('tool', tool, 'task', task, 'var', 'abc_clock_period',
417
415
  step=step, index=index)
@@ -507,7 +505,7 @@ def get_abc_driver(chip):
507
505
 
508
506
  abc_driver = None
509
507
  # get the first driver defined in the logic lib
510
- for lib in chip.get('asic', 'logiclib', step=step, index=index):
508
+ for lib in get_libraries(chip, 'logic'):
511
509
  if chip.valid('library', lib, 'option', 'var', 'yosys_driver_cell') and not abc_driver:
512
510
  abc_driver = chip.get('library', lib, 'option', 'var', 'yosys_driver_cell')[0]
513
511
 
@@ -524,8 +522,8 @@ def pre_process(chip):
524
522
  tool, task = get_tool_task(chip, step, index)
525
523
 
526
524
  # copy techmapping from libraries
527
- logiclibs = chip.get('asic', 'logiclib', step=step, index=index)
528
- macrolibs = chip.get('asic', 'macrolib', step=step, index=index)
525
+ logiclibs = get_libraries(chip, 'logic')
526
+ macrolibs = get_libraries(chip, 'macro')
529
527
  for lib in logiclibs + macrolibs:
530
528
  if not chip.valid('library', lib, 'option', 'file', 'yosys_techmap'):
531
529
  continue
@@ -82,8 +82,8 @@ proc determine_keep_hierarchy { iter cell_limit } {
82
82
  # DESIGNER's CHOICE
83
83
  ####################
84
84
 
85
- set sc_logiclibs [sc_cfg_get asic logiclib]
86
- set sc_macrolibs [sc_cfg_get asic macrolib]
85
+ set sc_logiclibs [sc_get_asic_libraries logic]
86
+ set sc_macrolibs [sc_get_asic_libraries macro]
87
87
 
88
88
  set sc_libraries [sc_cfg_tool_task_get {file} synthesis_libraries]
89
89
  if { [sc_cfg_tool_task_exists {file} synthesis_libraries_macros] } {
@@ -100,7 +100,7 @@ set sc_abc_constraints \
100
100
  [lindex [sc_cfg_tool_task_get {file} abc_constraint_file] 0]
101
101
 
102
102
  set sc_blackboxes []
103
- foreach lib [sc_cfg_get asic macrolib] {
103
+ foreach lib $sc_macrolibs {
104
104
  if { [sc_cfg_exists library $lib output blackbox verilog] } {
105
105
  foreach lib_f [sc_cfg_get library $lib output blackbox verilog] {
106
106
  lappend sc_blackboxes $lib_f
siliconcompiler/use.py CHANGED
@@ -61,6 +61,18 @@ class PackageChip(Chip):
61
61
  super().set(*args, field=field, clobber=clobber, step=step,
62
62
  index=index, package=package)
63
63
 
64
+ def input(self, filename, fileset=None, filetype=None, iomap=None,
65
+ step=None, index=None, package=None):
66
+ self._add_input_output('input', filename, fileset, filetype, iomap,
67
+ step=step, index=index, package=package,
68
+ quiet=True)
69
+
70
+ def output(self, filename, fileset=None, filetype=None, iomap=None,
71
+ step=None, index=None, package=None):
72
+ self._add_input_output('output', filename, fileset, filetype, iomap,
73
+ step=step, index=index, package=package,
74
+ quiet=True)
75
+
64
76
 
65
77
  class PDK(PackageChip):
66
78
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siliconcompiler
3
- Version: 0.26.2
3
+ Version: 0.26.3
4
4
  Summary: A compiler framework that automates translation from source code to silicon.
5
5
  Home-page: https://siliconcompiler.com
6
6
  Author: Andreas Olofsson
@@ -13,7 +13,7 @@ Project-URL: Forum, https://github.com/siliconcompiler/siliconcompiler/discussio
13
13
  Requires-Python: >=3.8
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
- Requires-Dist: aiohttp==3.10.3
16
+ Requires-Dist: aiohttp==3.10.4
17
17
  Requires-Dist: requests==2.32.3
18
18
  Requires-Dist: PyYAML==6.0.2
19
19
  Requires-Dist: pandas>=1.1.5
@@ -1,22 +1,22 @@
1
1
  siliconcompiler/__init__.py,sha256=5T-mWDc05v0FEdwg2btphrAb_W7XaXUmKrRSxuSMNUQ,535
2
2
  siliconcompiler/__main__.py,sha256=x5bzv4spw66iQOldUM-iCWw2j5NxXkkkC_Wd2hGAAgo,182
3
3
  siliconcompiler/_common.py,sha256=27VU0PqZkD6-qz20brjzj-Z8cpDt0oyE6ZA6wARZvrk,1283
4
- siliconcompiler/_metadata.py,sha256=5iZ0pjqLzkXPlr1gUJdCplJcnKsEV2H2WFx6X6P9-e4,1300
5
- siliconcompiler/core.py,sha256=fnA9eJ7BAuPLuugRglbmjSM38OXIWzrYJDmaEeEjC8U,128904
4
+ siliconcompiler/_metadata.py,sha256=iO0XbuLpdQ8M_UIUfaYtJpaP2jX2xzy1DsX5ysoAZW0,1300
5
+ siliconcompiler/core.py,sha256=nEi-kSkVsI3LcaYHeKm7avXTUqQFvsBZlQ521ORVa1E,131000
6
6
  siliconcompiler/flowgraph.py,sha256=aQh0VO7LVwGNJbWZcBIgzGRv_pDH72_ilMQtK906Rqk,22502
7
- siliconcompiler/issue.py,sha256=jrQnDKY9G-k-KF61XkhPyLSDmOSBoWA2GHRxB4auKNA,11223
7
+ siliconcompiler/issue.py,sha256=wRRG3b5bz8IdcT__hJME1svZwbsh_fGQr4VR8sTnta8,11425
8
8
  siliconcompiler/package.py,sha256=Z2FqMRq8mtvmF6d_hyDOZN8DOZ8gu7zABDMWOfUGu-M,14463
9
9
  siliconcompiler/units.py,sha256=dYn185TzusMtBd69RFKhNlCky2td5jC__AJdPjqXELU,6069
10
- siliconcompiler/use.py,sha256=InIDvKtlr3iwo8w3hVxzATjTyN8JQGzelZbs5tioMqo,5630
10
+ siliconcompiler/use.py,sha256=U0-GMomi5y5uS6yYtAyZ7ZcpMElK61glyscXhrMq8nA,6275
11
11
  siliconcompiler/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  siliconcompiler/apps/_common.py,sha256=368PjPwz0yw4baJOXPOhkgVq0uP_G77j5C6ei_eIaPs,2565
13
13
  siliconcompiler/apps/sc.py,sha256=2LT0rvky_3SRpsvbmZ68asAvGdagIIEW7fwMoCqVpUE,2876
14
14
  siliconcompiler/apps/sc_dashboard.py,sha256=paGJ07MQBOzekEs1mZ2mMsl-snt5qaLwHQ36rNU5FRo,3269
15
- siliconcompiler/apps/sc_issue.py,sha256=BJSj9kgwvtJQCsudjiuHfPguLpZR1QAuQRTyxfEAKHE,7410
15
+ siliconcompiler/apps/sc_issue.py,sha256=9p4QW297Fmc9rY1wBahJbuLjks2IsMTEW0bhfRW6uww,7110
16
16
  siliconcompiler/apps/sc_remote.py,sha256=9m6g79STJG784NqzMHyxoPzexZ7ihZaYxxxLlg7cnQk,7522
17
17
  siliconcompiler/apps/sc_server.py,sha256=aeW9wldn_qO6yyv9j5drx2wv0KMk8f6s9XSZgPCerhY,933
18
18
  siliconcompiler/apps/sc_show.py,sha256=ykP-yUOViD64DRb2jR-E-v4cI6OOCw57XdWYLze-yBM,4702
19
- siliconcompiler/apps/smake.py,sha256=uN8COdCcvlpRp-TBA2oqC5t4-ISg7YB5XWOBXC_r6Vw,5663
19
+ siliconcompiler/apps/smake.py,sha256=ZXv3HoouVhYewkmZ4Zu0e-3zeSq7NBnPbbpbaFP1AGg,7356
20
20
  siliconcompiler/checklists/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  siliconcompiler/checklists/oh_tapeout.py,sha256=ZJsCktTZ9uX94IQEWwxt9gBKGeXXsWQKXg0rM9fpKc0,1492
22
22
  siliconcompiler/data/heartbeat.v,sha256=1hOB1OhZOEF7f8WKTzOYgYtkdVL6yNI4Ou4fmVuApPU,438
@@ -73,7 +73,7 @@ siliconcompiler/report/streamlit_viewer.py,sha256=WbwcEf2t1gQihUnxnefwlAXKThwcNd
73
73
  siliconcompiler/report/summary_image.py,sha256=r8GbFJgD0ZLfYFFl8nmUhsh87wWP7evCljWWHx7_L8U,3687
74
74
  siliconcompiler/report/summary_table.py,sha256=NfSB8yHFirSCxvBROXURLzZM4UrYN2M050CScjeuFYk,2997
75
75
  siliconcompiler/report/utils.py,sha256=Yr-vcCoylN3HvlqAK0l6LLgdHfauezCmAhCzVqiHHpU,6603
76
- siliconcompiler/scheduler/__init__.py,sha256=4ab-Wc4LSy8HTWAkxYn474pTudHyvZq8q2a_s42k7-Y,82167
76
+ siliconcompiler/scheduler/__init__.py,sha256=0vwjttIOHxMBJBtYKgP9i4JE9DqPjbJ5j-kvcTutx30,82254
77
77
  siliconcompiler/scheduler/docker_runner.py,sha256=ZboFmi9C_TPkgQlizU3nLmdDUip5EqvN-1JoJZMFFTs,8318
78
78
  siliconcompiler/scheduler/run_node.py,sha256=Mmj2epARKCuwN6oW-PyvExwY3OzRxUrG0mPLr3SwQ6M,5201
79
79
  siliconcompiler/scheduler/send_messages.py,sha256=ZVO6923-EJWUMlDOOpLEhaSrsKtP-d4J_UcfRp6kJDo,6387
@@ -103,10 +103,10 @@ siliconcompiler/templates/report/bootstrap.min.js,sha256=SUzPu-ewjZCj6CtwVs9sNh6
103
103
  siliconcompiler/templates/report/bootstrap_LICENSE.md,sha256=TJ-04Mng2-4AwtDgSPSE83IR6NWZ5M3I4IwvAsGM6Bg,1237
104
104
  siliconcompiler/templates/report/sc_report.j2,sha256=o6S1pwkPEYSIcw2fJaOVSflkGsFaX4uqr3A-paJeogw,17553
105
105
  siliconcompiler/templates/slurm/run.sh,sha256=Il7hoBLXXaCU6gSELRUkmFYh98CLUNt0-rw1e26CCOE,223
106
- siliconcompiler/templates/tcl/manifest.tcl.j2,sha256=EMTCgHgEje8r0G1ZuYrCtq0A7xgAQSwrvMvgcalXx7o,2376
106
+ siliconcompiler/templates/tcl/manifest.tcl.j2,sha256=z9ewphEvJmV4156-Kw17Ikl4EZQsV8Jopg7TCkALUHY,3601
107
107
  siliconcompiler/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
- siliconcompiler/tools/_common/__init__.py,sha256=l2LYD0tSOUY283Z5Ib3RXfKky9IgiP0KIsPrH2xI9aY,13839
109
- siliconcompiler/tools/_common/asic.py,sha256=2VqtNV-o0lmCNMT7wm-i_IbfbTA6Qxr3wXfopuGTNWQ,3163
108
+ siliconcompiler/tools/_common/__init__.py,sha256=uJ1Nlee8QK_X-MqbgBrkr-MvQZivydpK1ngnxfxjXGA,13973
109
+ siliconcompiler/tools/_common/asic.py,sha256=Cj8f88kLfMaHZhbbJHLGL1V9Tp1WCjpFr_1VrT2uNjE,3705
110
110
  siliconcompiler/tools/_common/sdc/sc_constraints.sdc,sha256=4Pmema9zkVpHHRGkLUZxnz9RIW4flfq2MfwEirBv-CY,2903
111
111
  siliconcompiler/tools/_common/tcl/sc_pin_constraints.tcl,sha256=nHzkcos2sjI-ENYmvB03lLsS9YHcfvC_Aute16vTJqg,2134
112
112
  siliconcompiler/tools/bambu/bambu.py,sha256=_rYmzIeQZKa_9inG5tNMotB8c6mngG7QKTxwTR7aLvI,1191
@@ -136,36 +136,36 @@ siliconcompiler/tools/icarus/compile.py,sha256=BWpGQeaTTlmuk28_oZa3IhTnlUanxglKX
136
136
  siliconcompiler/tools/icarus/icarus.py,sha256=d2yeS8Jww1iWa8xn2aQrkgDxzUwVLZiHw_q7mvk-TOY,947
137
137
  siliconcompiler/tools/icepack/bitstream.py,sha256=o61FD4wiz27yc-GkI50omeQ7mbvQoV6ZwZMQEJ03fTs,661
138
138
  siliconcompiler/tools/icepack/icepack.py,sha256=-ExNT8VEY8Qqe4XOvEa_L9POYCxlZz0kPm1e_fS3HJ8,1052
139
- siliconcompiler/tools/klayout/export.py,sha256=3qz8xVLBGhvWHk8F8C_Nw9p81UlC6hy4FL4gArX1Dxo,5325
139
+ siliconcompiler/tools/klayout/export.py,sha256=_oe4w5oMUaqzU5rr_0RSsfrZpK3ZNN18z00TCILoebI,5339
140
140
  siliconcompiler/tools/klayout/klayout.py,sha256=ybAoS172902Sg0hw_ltNxTPTrwMSkgPJae4-V4mVdlI,4630
141
- siliconcompiler/tools/klayout/klayout_export.py,sha256=frVYGhHNPhSkVxT63Ls6KnyQNYCNfKAZIBHaYBvWtUY,8204
141
+ siliconcompiler/tools/klayout/klayout_export.py,sha256=HqWakb2wUc5XNyidxCT9pTUrYspNNopUgs2coQyPjBE,8131
142
142
  siliconcompiler/tools/klayout/klayout_operations.py,sha256=hWBWuoNCIvadD1twAEF-N9E422cl3GYgARv_Id82Kl8,13417
143
143
  siliconcompiler/tools/klayout/klayout_show.py,sha256=Mvy1uQc57ul_OdGiBdquKWU7IYT6lrom7H51Wty8HmY,9369
144
- siliconcompiler/tools/klayout/klayout_utils.py,sha256=hCFzRZiXMlIQrKNvcns3U_F_rSvM5TcqgiOrsPuviRQ,6699
144
+ siliconcompiler/tools/klayout/klayout_utils.py,sha256=8-Go3yYlRD1MU5wfBXzeT27DiDwoEb13N_34MbCfuwM,6581
145
145
  siliconcompiler/tools/klayout/operations.py,sha256=QxvlqPfGNv0WZs-b4qycMkrb4y69ft4Bctcsi5sVRQk,7947
146
146
  siliconcompiler/tools/klayout/screenshot.py,sha256=SpesVl1jUXDHudIJ3tLMTVrka6aaln5JETW5EjUt1Oc,3891
147
147
  siliconcompiler/tools/klayout/show.py,sha256=PtiD8aXeU8t1xbSghwHK4F3slcH3ZFipeWbHQhrvbVQ,3938
148
148
  siliconcompiler/tools/magic/drc.py,sha256=BT9jbELdUJDW0-WrDsK_nX-jDkFv-MC738bG0BIYCU0,1300
149
149
  siliconcompiler/tools/magic/extspice.py,sha256=3043bLVCHYEed_Kj_CjpMEXgX9OyNJEQTni9GzkkrvI,543
150
150
  siliconcompiler/tools/magic/magic.py,sha256=MRdRO9bXRMPAOECuxquVQxuFnYckiWljwD-GE5PS_HI,2813
151
- siliconcompiler/tools/magic/sc_drc.tcl,sha256=ia-bl4QKK-_V7G_M0PYKVibdXKeoyBJagSWA7cf4W0g,3021
152
- siliconcompiler/tools/magic/sc_extspice.tcl,sha256=xj-qlcdcxBpLmycqsUPE6bKGr3xT5zm2GexwD3feFuI,1449
151
+ siliconcompiler/tools/magic/sc_drc.tcl,sha256=wcsOLdqeDtrSViXyUPVSftJ4YzweBGVW4xF6jHhyRgo,3024
152
+ siliconcompiler/tools/magic/sc_extspice.tcl,sha256=HeCMxnn7SnqdG05Qu2Hee9DhOVxK98SqhfEm_ftq1aU,1498
153
153
  siliconcompiler/tools/magic/sc_magic.tcl,sha256=10pU1o2bCsjoT8eAZsO0HmrSlVUViNpQeX1PrAAVyZ4,1184
154
154
  siliconcompiler/tools/montage/montage.py,sha256=tbezLe1PK9rdKnijBnBEjf0BhshgwGtpKG_SY-NLCuw,982
155
155
  siliconcompiler/tools/montage/tile.py,sha256=Sh8APUQMA-G2s8l54dTm5X1BaDPkOtSg1qzCtdXNOzE,2386
156
156
  siliconcompiler/tools/netgen/count_lvs.py,sha256=O-zMY4gxfnCH97UX0gOiZlIym87AN5dx8IrM54PkKTg,4787
157
157
  siliconcompiler/tools/netgen/lvs.py,sha256=W4OU16dcX6ZxWWtcEBrFJPvcgjsBxYcY58P_ku71CFk,3485
158
158
  siliconcompiler/tools/netgen/netgen.py,sha256=PTR5SLoB8n2r4ts4XVOGsTfL5bAeGqycXNW4kKqKhHQ,986
159
- siliconcompiler/tools/netgen/sc_lvs.tcl,sha256=nDvOM76PaLOhKqdF05W9edHPTbEOTFVsbh7V3UjLzY0,1430
159
+ siliconcompiler/tools/netgen/sc_lvs.tcl,sha256=4s8QujtdKQWZw-B-k9Y9S33PT3JQ2FCwCBfyod4r3OU,1433
160
160
  siliconcompiler/tools/nextpnr/apr.py,sha256=S51ubWAT7toR9TwIj9Eny-Z77tWe-qAVyh_GW-PSBzI,826
161
161
  siliconcompiler/tools/nextpnr/nextpnr.py,sha256=DgfIEUQ6KJtnSuFx-6rHYg9GXFHmixuNl3nlEzVK3yQ,1771
162
162
  siliconcompiler/tools/openfpgaloader/openfpgaloader.py,sha256=9t7N03lF8QEQ1UiWTQRWgTK8IfTwJOkvDh4ILTSK4s8,1248
163
163
  siliconcompiler/tools/openroad/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
164
  siliconcompiler/tools/openroad/cts.py,sha256=Xyw2Hc_FGllndTiCSuiNiaxWKGXM8tmjYxR7oNzU4vE,1125
165
165
  siliconcompiler/tools/openroad/dfm.py,sha256=9To-Rva-iFilMgpaki3yGOUd9KgZqJ7_PlLFc4WiP8E,2310
166
- siliconcompiler/tools/openroad/export.py,sha256=naKYFilx3F_oERZvtQdKmQ5RU3QWPECV2ktaJ--wmF0,5437
166
+ siliconcompiler/tools/openroad/export.py,sha256=0SlecZCUhBsAu5I4YoHS94c_rRNnwSx2y0yCLxzX4wY,5404
167
167
  siliconcompiler/tools/openroad/floorplan.py,sha256=r2-Qlob-51dgKHUP1Ya71HDz3PPRtF0bQSmlwqhdDxI,2635
168
- siliconcompiler/tools/openroad/openroad.py,sha256=cQkHLN8YTQ2TAOTW4biPsE0fErwTnaN4LnEn01UO9ZE,44372
168
+ siliconcompiler/tools/openroad/openroad.py,sha256=jPA2vxJyTsQUFEKVlGL24sL8sdXRQ5JCyZEHFTbcbB0,44291
169
169
  siliconcompiler/tools/openroad/physyn.py,sha256=GKSPV8Q8-dHC7_PsDIdGV-PXVvE8uiidY_q1uX8u718,709
170
170
  siliconcompiler/tools/openroad/place.py,sha256=amXbYqJ2EWxTVzSEBh2WJp9ULX80rW1SYGJZtMOpNDo,1059
171
171
  siliconcompiler/tools/openroad/rcx_bench.py,sha256=81Y1Nca4zr6mThMrr2rGLZcxSkoOq7ts4wK1OCXx9Bg,3753
@@ -173,7 +173,7 @@ siliconcompiler/tools/openroad/rcx_extract.py,sha256=ib-1B36fVJ7SqgHcoTeSOmlKbg9
173
173
  siliconcompiler/tools/openroad/route.py,sha256=BSTMJ3RuMNwoGtEag6JM1qhOXuJ_sufOqwu-RF2_gkk,1158
174
174
  siliconcompiler/tools/openroad/screenshot.py,sha256=2rq4geF4XHwNjqttw5_J6qnay0TvS6QtC5PQh2O4PMI,2030
175
175
  siliconcompiler/tools/openroad/show.py,sha256=8eeNT32oJl8uOo7NS8DaMH376inoPWkfIyRr1PE1ODk,3825
176
- siliconcompiler/tools/openroad/scripts/sc_apr.tcl,sha256=5EkGsBOId_oJxGh0lWmKwLo5zZPDaHpD32asf6OYsSI,19835
176
+ siliconcompiler/tools/openroad/scripts/sc_apr.tcl,sha256=6cfgQtGe2rbqw7BcOwFod0CBzobWi3cV4gIVT5_PicM,19841
177
177
  siliconcompiler/tools/openroad/scripts/sc_cts.tcl,sha256=e6zEyNQYmecrtmdcsfY4oVKcb_3faez5tWG-B7E_ZNk,1858
178
178
  siliconcompiler/tools/openroad/scripts/sc_dfm.tcl,sha256=kGYuqJ1XN1YVmrOcuZaBuRVbSradTzEEVG-uzaGomG4,610
179
179
  siliconcompiler/tools/openroad/scripts/sc_export.tcl,sha256=I76JByDu2O21SVDwyYEkF0T6beJ7927M6wAhHfGJZKg,2932
@@ -190,17 +190,17 @@ siliconcompiler/tools/openroad/scripts/sc_screenshot.tcl,sha256=Hti1kTDsPOSWvNbI
190
190
  siliconcompiler/tools/openroad/scripts/sc_write.tcl,sha256=1Ow-JEY1W4skHjYvH18fMHUZSyhHSa2N3lmbh0PKzGI,173
191
191
  siliconcompiler/tools/openroad/scripts/sc_write_images.tcl,sha256=qZOX1WFWNvTC5ruFIuditq-d8o-O51bXM78KCvsv2rM,9705
192
192
  siliconcompiler/tools/openroad/templates/pex.tcl,sha256=xPwuYLykhN55EQL2eem1QA3Hb4XteHOB5E4NEK137b8,307
193
- siliconcompiler/tools/opensta/__init__.py,sha256=OHTg1n_4l6LENkiWs7uB9xWZuw9J9LHEUUR1fa0M6XY,3729
193
+ siliconcompiler/tools/opensta/__init__.py,sha256=FbHa5ts2oIHymtEFOdO4IFEEvxLxqfoqS8KmeL3b8rw,3743
194
194
  siliconcompiler/tools/opensta/report_libraries.py,sha256=ukr50cwxg2MXUIbMUCzQ4TKmfPsIxaMcL5faLwb6DYo,856
195
195
  siliconcompiler/tools/opensta/timing.py,sha256=3fZ45sLe3tpmcLlSBePCPxBGyq6qO3SYCWSPfbQRv90,8956
196
196
  siliconcompiler/tools/opensta/scripts/sc_procs.tcl,sha256=8Jb5QLdhCtuIwXIFIdslgxnk28ML0Wd6DWMimR1c5jU,1166
197
- siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl,sha256=dI2VarFIKZdqXK8lhWqTAZpKhNvx8UUI9KNE7k_H7d4,2351
198
- siliconcompiler/tools/opensta/scripts/sc_timing.tcl,sha256=SxbXsMPySHRhIZ-DPYHPgav3jJ244Df-qmFr0HIJp-Q,8229
197
+ siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl,sha256=EFPxc0YByBYCuCoT68tpXEzMWTX4fIu8aAaQxufqc_o,2357
198
+ siliconcompiler/tools/opensta/scripts/sc_timing.tcl,sha256=X1Q9zS_KeSkdNDseTS6Fapf4ctFftNZm5aLi4PMLk0M,8235
199
199
  siliconcompiler/tools/slang/__init__.py,sha256=BMJjbTWCumTBbshaTc5Wgjcl3kxPiPjwc_vnvdFrRms,1656
200
200
  siliconcompiler/tools/slang/lint.py,sha256=eNe82gmZgCMvLEKQJHagyP1yNWRQ23agBE3n709-Lz4,3080
201
201
  siliconcompiler/tools/surelog/parse.py,sha256=i7mU6xIWrSfuTb9ov1ZSJKipyyhvlGFFmKf8y--Qrns,6208
202
202
  siliconcompiler/tools/surelog/surelog.py,sha256=PlkIjrFGq1t8U2gxFSKPouDmcnS6LE1oTZDrXtVJh7M,5034
203
- siliconcompiler/tools/surelog/bin/surelog.exe,sha256=E9dQKPPpKWlfUo1Z41k1DXf7rjQHo6NrVe6tPc1GtJQ,6422528
203
+ siliconcompiler/tools/surelog/bin/surelog.exe,sha256=ipLxuZRUeeUCfqcjOidbBfVN3mNJhuwmoXBqrmq9aqk,6422528
204
204
  siliconcompiler/tools/surelog/templates/output.v,sha256=NE9iQW-IEx0wanJSpbZQjRt-Qq2oIx78JOzlsBcd0Is,213
205
205
  siliconcompiler/tools/sv2v/convert.py,sha256=PG1cYSUil2sZDGh8Eb0dCvsTMnW7o2nUewv2LA23DCw,1837
206
206
  siliconcompiler/tools/sv2v/sv2v.py,sha256=AuMHqm109GJhz6oqvDyyrO9ICGI8FiDXKzBsdMFvDa0,1078
@@ -230,10 +230,10 @@ siliconcompiler/tools/vpr/vpr.py,sha256=6ZTmNo31CPkT_R_J1gy-qcBGi29ocibSDmNIH4uG
230
230
  siliconcompiler/tools/xyce/xyce.py,sha256=ggkAJe2Rs8q47yoOaQ2hGcmNa_GNglFFgm-A8lovRu8,1118
231
231
  siliconcompiler/tools/yosys/lec.py,sha256=7kUpdcNnl1_YVJzD6ZQY2RFHCaucxJHboPRkK1Pp5xs,1962
232
232
  siliconcompiler/tools/yosys/prepareLib.py,sha256=HdgZVK-zSuKdMIsGmpgmFjKpIE0PA6IVAF1YsGOAG7c,2326
233
- siliconcompiler/tools/yosys/sc_lec.tcl,sha256=CtS3CzrW8VKU4nx7v9lHn2kr9r8hWgBfFqwI4WD_ywY,2370
233
+ siliconcompiler/tools/yosys/sc_lec.tcl,sha256=ZmgCEA_cuwBk1E9d2PEOsdO1595VCEFy1d6J5_61Pfo,2373
234
234
  siliconcompiler/tools/yosys/sc_syn.tcl,sha256=dXghNwdrzh_ry_hfmgBMlnJATEPCvN2YfdtInJShEOk,2519
235
- siliconcompiler/tools/yosys/syn_asic.py,sha256=uY2BMRI1794mMXV0O7DIbxA0p7Q2sMUVRjg9zp6dsXs,24512
236
- siliconcompiler/tools/yosys/syn_asic.tcl,sha256=XLZilDnJUeJQl7i85aJxITg4C_F7DXrSR0uIBE_Onf0,12269
235
+ siliconcompiler/tools/yosys/syn_asic.py,sha256=OheWDbk6_ZJypSr-XecQWUdzd-jTWD0Mwb4xhIrw7F4,24198
236
+ siliconcompiler/tools/yosys/syn_asic.tcl,sha256=emAM1PS04Vw3dNK6M6D-pd7daOVKajxKHeey40AqYiQ,12262
237
237
  siliconcompiler/tools/yosys/syn_asic_fpga_shared.tcl,sha256=c9QcuhnYCkPWk-tO71TO3vrU1pDIx9jqomswpHAMKLY,746
238
238
  siliconcompiler/tools/yosys/syn_fpga.py,sha256=GZw4lI1veYn-LV8ELr9sPYpmENqPeMBRysqRD1o1poU,5533
239
239
  siliconcompiler/tools/yosys/syn_fpga.tcl,sha256=AcypYnOzLvGHdA1cR7cgRxc2aUgi9FPXfs59TNLQ-BY,8244
@@ -244,9 +244,9 @@ siliconcompiler/tools/yosys/templates/abc.const,sha256=2Ea7eZz2eHzar3RLf_l2Nb9dn
244
244
  siliconcompiler/utils/__init__.py,sha256=b3mhPeBb8HIqU-8w23h2IMLSxuDrXm53e5iSeqZrkDI,13168
245
245
  siliconcompiler/utils/asic.py,sha256=knq-raDWs1FKtfqkUbLOecdSwXezlmqb8gk9QPZWdqY,5144
246
246
  siliconcompiler/utils/showtools.py,sha256=kNaw97U6tV_MwLvWb1dme_k9E6dQVqnTT6y2zzMcXJk,1158
247
- siliconcompiler-0.26.2.dist-info/LICENSE,sha256=UJh7mqgsPZN3gg37jhwYnrtCUs1m19vkIA6Px7jAOPY,10956
248
- siliconcompiler-0.26.2.dist-info/METADATA,sha256=zoV0fR6QfnbD-XCUjw5X6Zh4NcDFihCz8wJtARm2Fpk,9612
249
- siliconcompiler-0.26.2.dist-info/WHEEL,sha256=6DUGimnTtl3rU6RGwkmZI1NHXBFbwPul6M-9UShD9rs,99
250
- siliconcompiler-0.26.2.dist-info/entry_points.txt,sha256=M3cpZxvqanXhVU9CuLTRDzBdDKmKz-t0p4DT57TyysU,451
251
- siliconcompiler-0.26.2.dist-info/top_level.txt,sha256=H8TOYhnEUZAV1RJTa8JRtjLIebwHzkQUhA2wkNU2O6M,16
252
- siliconcompiler-0.26.2.dist-info/RECORD,,
247
+ siliconcompiler-0.26.3.dist-info/LICENSE,sha256=UJh7mqgsPZN3gg37jhwYnrtCUs1m19vkIA6Px7jAOPY,10956
248
+ siliconcompiler-0.26.3.dist-info/METADATA,sha256=dfjuEAkNiUygxzFUch_VhbXAsBmumNqMEQzxZB_TdRQ,9612
249
+ siliconcompiler-0.26.3.dist-info/WHEEL,sha256=7gvl0dCbVTebghm43aP3y0WeizA_ShLQd9uyJMZ-IUI,99
250
+ siliconcompiler-0.26.3.dist-info/entry_points.txt,sha256=M3cpZxvqanXhVU9CuLTRDzBdDKmKz-t0p4DT57TyysU,451
251
+ siliconcompiler-0.26.3.dist-info/top_level.txt,sha256=H8TOYhnEUZAV1RJTa8JRtjLIebwHzkQUhA2wkNU2O6M,16
252
+ siliconcompiler-0.26.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.2.0)
2
+ Generator: setuptools (73.0.1)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp38-cp38-win_amd64
5
5