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.
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/sc_issue.py +4 -11
- siliconcompiler/apps/smake.py +59 -19
- siliconcompiler/core.py +79 -29
- siliconcompiler/issue.py +3 -0
- siliconcompiler/scheduler/__init__.py +4 -1
- siliconcompiler/templates/tcl/manifest.tcl.j2 +52 -0
- siliconcompiler/tools/_common/__init__.py +10 -2
- siliconcompiler/tools/_common/asic.py +26 -6
- siliconcompiler/tools/klayout/export.py +3 -2
- siliconcompiler/tools/klayout/klayout_export.py +4 -4
- siliconcompiler/tools/klayout/klayout_utils.py +4 -4
- siliconcompiler/tools/magic/sc_drc.tcl +1 -1
- siliconcompiler/tools/magic/sc_extspice.tcl +3 -2
- siliconcompiler/tools/netgen/sc_lvs.tcl +1 -1
- siliconcompiler/tools/openroad/export.py +3 -3
- siliconcompiler/tools/openroad/openroad.py +5 -5
- siliconcompiler/tools/openroad/scripts/sc_apr.tcl +2 -2
- siliconcompiler/tools/opensta/__init__.py +3 -2
- siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +2 -2
- siliconcompiler/tools/opensta/scripts/sc_timing.tcl +2 -2
- siliconcompiler/tools/surelog/bin/surelog.exe +0 -0
- siliconcompiler/tools/yosys/sc_lec.tcl +1 -1
- siliconcompiler/tools/yosys/syn_asic.py +13 -15
- siliconcompiler/tools/yosys/syn_asic.tcl +3 -3
- siliconcompiler/use.py +12 -0
- {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/METADATA +2 -2
- {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/RECORD +32 -32
- {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/WHEEL +1 -1
- {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/LICENSE +0 -0
- {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.26.2.dist-info → siliconcompiler-0.26.3.dist-info}/top_level.txt +0 -0
siliconcompiler/_metadata.py
CHANGED
siliconcompiler/apps/sc_issue.py
CHANGED
|
@@ -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 -
|
|
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 -
|
|
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 -
|
|
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
|
|
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
|
|
siliconcompiler/apps/smake.py
CHANGED
|
@@ -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] =
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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=
|
|
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.
|
|
1005
|
-
|
|
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.
|
|
1016
|
-
|
|
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
|
|
1022
|
-
|
|
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
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
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
|
-
|
|
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=
|
|
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
|
|
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":
|
|
2074
|
+
"shape": shape,
|
|
2075
|
+
"color": color,
|
|
2036
2076
|
"connects_to": set(in_labels)
|
|
2037
2077
|
}
|
|
2038
2078
|
|
|
2039
|
-
for in_lib in
|
|
2040
|
-
|
|
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=
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
9
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
162
|
-
|
|
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
|
-
|
|
37
|
-
|
|
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 [
|
|
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
|
|
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 [
|
|
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 [
|
|
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
|
|
38
|
-
macrolibs = chip
|
|
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
|
|
64
|
+
targetlibs = get_libraries(chip, 'logic')
|
|
65
65
|
mainlib = get_mainlib(chip)
|
|
66
|
-
macrolibs = chip
|
|
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
|
|
214
|
-
macrolibs = chip
|
|
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 [
|
|
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 [
|
|
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
|
|
37
|
-
macrolibs = chip
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
39
|
+
set sc_macrolibs [sc_get_asic_libraries macro]
|
|
40
40
|
|
|
41
41
|
###############################
|
|
42
42
|
# Read Files
|
|
Binary file
|
|
@@ -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 [
|
|
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
|
|
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
|
|
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
|
-
|
|
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 ('
|
|
237
|
-
for lib in chip
|
|
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 == "
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
528
|
-
macrolibs = chip
|
|
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 [
|
|
86
|
-
set sc_macrolibs [
|
|
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
|
|
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.
|
|
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.
|
|
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=
|
|
5
|
-
siliconcompiler/core.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
109
|
-
siliconcompiler/tools/_common/asic.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
152
|
-
siliconcompiler/tools/magic/sc_extspice.tcl,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
198
|
-
siliconcompiler/tools/opensta/scripts/sc_timing.tcl,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
236
|
-
siliconcompiler/tools/yosys/syn_asic.tcl,sha256=
|
|
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.
|
|
248
|
-
siliconcompiler-0.26.
|
|
249
|
-
siliconcompiler-0.26.
|
|
250
|
-
siliconcompiler-0.26.
|
|
251
|
-
siliconcompiler-0.26.
|
|
252
|
-
siliconcompiler-0.26.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|