siliconcompiler 0.31.1__py3-none-any.whl → 0.32.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/sc.py +1 -0
- siliconcompiler/apps/utils/summarize.py +1 -1
- siliconcompiler/core.py +33 -39
- siliconcompiler/flows/_common.py +10 -4
- siliconcompiler/package/__init__.py +7 -6
- siliconcompiler/package/git.py +4 -1
- siliconcompiler/package/https.py +6 -2
- siliconcompiler/report/dashboard/components/__init__.py +16 -6
- siliconcompiler/report/report.py +6 -6
- siliconcompiler/scheduler/run_node.py +4 -1
- siliconcompiler/tools/openroad/_apr.py +15 -5
- siliconcompiler/tools/openroad/scripts/common/reports.tcl +10 -0
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +27 -0
- siliconcompiler/tools/slang/__init__.py +123 -33
- siliconcompiler/tools/slang/elaborate.py +123 -18
- siliconcompiler/tools/slang/lint.py +20 -10
- siliconcompiler/tools/surelog/__init__.py +17 -4
- siliconcompiler/toolscripts/_tools.json +2 -2
- siliconcompiler/units.py +10 -7
- siliconcompiler/use.py +5 -2
- {siliconcompiler-0.31.1.dist-info → siliconcompiler-0.32.0.dist-info}/METADATA +3 -6
- {siliconcompiler-0.31.1.dist-info → siliconcompiler-0.32.0.dist-info}/RECORD +27 -27
- {siliconcompiler-0.31.1.dist-info → siliconcompiler-0.32.0.dist-info}/WHEEL +1 -1
- {siliconcompiler-0.31.1.dist-info → siliconcompiler-0.32.0.dist-info}/LICENSE +0 -0
- {siliconcompiler-0.31.1.dist-info → siliconcompiler-0.32.0.dist-info}/entry_points.txt +0 -0
- {siliconcompiler-0.31.1.dist-info → siliconcompiler-0.32.0.dist-info}/top_level.txt +0 -0
siliconcompiler/_metadata.py
CHANGED
siliconcompiler/apps/sc.py
CHANGED
siliconcompiler/core.py
CHANGED
|
@@ -26,7 +26,6 @@ from siliconcompiler import _metadata
|
|
|
26
26
|
from siliconcompiler import NodeStatus, SiliconCompilerError
|
|
27
27
|
from siliconcompiler.report import _show_summary_table
|
|
28
28
|
from siliconcompiler.report import _generate_summary_image, _open_summary_image
|
|
29
|
-
from siliconcompiler.report import _generate_html_report, _open_html_report
|
|
30
29
|
from siliconcompiler.report import Dashboard
|
|
31
30
|
from siliconcompiler import package as sc_package
|
|
32
31
|
import glob
|
|
@@ -211,6 +210,8 @@ class Chip:
|
|
|
211
210
|
|
|
212
211
|
self.logger.addHandler(file_handler)
|
|
213
212
|
|
|
213
|
+
return file_handler
|
|
214
|
+
|
|
214
215
|
###########################################################################
|
|
215
216
|
def _init_logger(self, step=None, index=None, in_run=False):
|
|
216
217
|
|
|
@@ -2889,7 +2890,7 @@ class Chip:
|
|
|
2889
2890
|
return self._dash
|
|
2890
2891
|
|
|
2891
2892
|
###########################################################################
|
|
2892
|
-
def summary(self, show_all_indices=False
|
|
2893
|
+
def summary(self, show_all_indices=False):
|
|
2893
2894
|
'''
|
|
2894
2895
|
Prints a summary of the compilation manifest.
|
|
2895
2896
|
|
|
@@ -2902,13 +2903,6 @@ class Chip:
|
|
|
2902
2903
|
show_all_indices (bool): If True, displays metrics for all indices
|
|
2903
2904
|
of each step. If False, displays metrics only for winning
|
|
2904
2905
|
indices.
|
|
2905
|
-
generate_image (bool): If True, generates a summary image featuring
|
|
2906
|
-
a layout screenshot and a subset of metrics. Requires that the
|
|
2907
|
-
current job has an ending node that generated a PNG file.
|
|
2908
|
-
generate_html (bool): If True, generates an HTML report featuring a
|
|
2909
|
-
metrics summary table and manifest tree view. The report will
|
|
2910
|
-
include a layout screenshot if the current job has an ending node
|
|
2911
|
-
that generated a PNG file.
|
|
2912
2906
|
|
|
2913
2907
|
Examples:
|
|
2914
2908
|
>>> chip.summary()
|
|
@@ -2921,36 +2915,36 @@ class Chip:
|
|
|
2921
2915
|
|
|
2922
2916
|
_show_summary_table(self, flow, nodes_to_execute, show_all_indices=show_all_indices)
|
|
2923
2917
|
|
|
2924
|
-
#
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2918
|
+
# dashboard does not generate any data
|
|
2919
|
+
self.logger.info('Dashboard at "sc-dashboard '
|
|
2920
|
+
f'-cfg {self.getworkdir()}/{self.design}.pkg.json"')
|
|
2921
|
+
|
|
2922
|
+
###########################################################################
|
|
2923
|
+
def snapshot(self, path=None, display=True):
|
|
2924
|
+
'''
|
|
2925
|
+
Creates a snapshot image of the job
|
|
2926
|
+
|
|
2927
|
+
Args:
|
|
2928
|
+
path (str): Path to generate the image at, if not provided will default to
|
|
2929
|
+
<job>/<design>.png
|
|
2930
|
+
display (bool): If True, will open the image for viewing. If :keypath:`option,nodisplay`
|
|
2931
|
+
is True, this argument will be ignored.
|
|
2932
|
+
|
|
2933
|
+
Examples:
|
|
2934
|
+
>>> chip.snapshot()
|
|
2935
|
+
Creates a snapshot image in the default location
|
|
2936
|
+
'''
|
|
2937
|
+
|
|
2938
|
+
if not path:
|
|
2939
|
+
path = os.path.join(self.getworkdir(), f'{self.design}.png')
|
|
2940
|
+
|
|
2941
|
+
if os.path.exists(path):
|
|
2942
|
+
os.remove(path)
|
|
2943
|
+
|
|
2944
|
+
_generate_summary_image(self, path)
|
|
2945
|
+
|
|
2946
|
+
if os.path.isfile(path) and not self.get('option', 'nodisplay') and display:
|
|
2947
|
+
_open_summary_image(path)
|
|
2954
2948
|
|
|
2955
2949
|
###########################################################################
|
|
2956
2950
|
def clock(self, pin, period, jitter=0, mode='global'):
|
siliconcompiler/flows/_common.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from siliconcompiler.tools.surelog import parse as surelog_parse
|
|
2
|
+
from siliconcompiler.tools.slang import elaborate as slang_preprocess
|
|
2
3
|
from siliconcompiler.tools.chisel import convert as chisel_convert
|
|
3
4
|
from siliconcompiler.tools.bambu import convert as bambu_convert
|
|
4
5
|
from siliconcompiler.tools.bluespec import convert as bluespec_convert
|
|
@@ -7,6 +8,8 @@ from siliconcompiler.tools.sv2v import convert as sv2v_convert
|
|
|
7
8
|
|
|
8
9
|
from siliconcompiler.tools.builtin import concatenate
|
|
9
10
|
|
|
11
|
+
from siliconcompiler.tools.slang import has_pyslang
|
|
12
|
+
|
|
10
13
|
|
|
11
14
|
def _make_docs(chip):
|
|
12
15
|
from siliconcompiler.targets import freepdk45_demo
|
|
@@ -20,9 +23,12 @@ def _make_docs(chip):
|
|
|
20
23
|
chip.use(freepdk45_demo)
|
|
21
24
|
|
|
22
25
|
|
|
23
|
-
def __get_frontends(allow_system_verilog):
|
|
26
|
+
def __get_frontends(allow_system_verilog, use_surelog=False):
|
|
27
|
+
parser = surelog_parse
|
|
28
|
+
if not use_surelog and has_pyslang():
|
|
29
|
+
parser = slang_preprocess
|
|
24
30
|
systemverilog_frontend = [
|
|
25
|
-
('import.verilog',
|
|
31
|
+
('import.verilog', parser)
|
|
26
32
|
]
|
|
27
33
|
if not allow_system_verilog:
|
|
28
34
|
systemverilog_frontend.append(('import.convert', sv2v_convert))
|
|
@@ -36,7 +42,7 @@ def __get_frontends(allow_system_verilog):
|
|
|
36
42
|
}
|
|
37
43
|
|
|
38
44
|
|
|
39
|
-
def setup_multiple_frontends(flow, allow_system_verilog=False):
|
|
45
|
+
def setup_multiple_frontends(flow, allow_system_verilog=False, use_surelog=False):
|
|
40
46
|
'''
|
|
41
47
|
Sets of multiple frontends if different frontends are required.
|
|
42
48
|
|
|
@@ -45,7 +51,7 @@ def setup_multiple_frontends(flow, allow_system_verilog=False):
|
|
|
45
51
|
|
|
46
52
|
concat_nodes = []
|
|
47
53
|
flowname = flow.design
|
|
48
|
-
for _, pipe in __get_frontends(allow_system_verilog).items():
|
|
54
|
+
for _, pipe in __get_frontends(allow_system_verilog, use_surelog=use_surelog).items():
|
|
49
55
|
prev_step = None
|
|
50
56
|
for step, task in pipe:
|
|
51
57
|
flow.node(flowname, step, task)
|
|
@@ -41,11 +41,11 @@ def get_download_cache_path(chip, package, ref):
|
|
|
41
41
|
os.path.join(cache_path, f'{package}-{ref}.lock')
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
def _file_path_resolver(chip, package, path, ref, url):
|
|
44
|
+
def _file_path_resolver(chip, package, path, ref, url, fetch):
|
|
45
45
|
return os.path.abspath(path.replace('file://', ''))
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
def _python_path_resolver(chip, package, path, ref, url):
|
|
48
|
+
def _python_path_resolver(chip, package, path, ref, url, fetch):
|
|
49
49
|
return path_from_python(chip, url.netloc)
|
|
50
50
|
|
|
51
51
|
|
|
@@ -66,7 +66,7 @@ def _get_path_resolver(path):
|
|
|
66
66
|
raise ValueError(f"{path} is not supported")
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
def _path(chip, package):
|
|
69
|
+
def _path(chip, package, fetch):
|
|
70
70
|
# Initially try retrieving data source from schema
|
|
71
71
|
data = {}
|
|
72
72
|
data['path'] = chip.get('package', 'source', package, 'path')
|
|
@@ -84,22 +84,23 @@ def _path(chip, package):
|
|
|
84
84
|
|
|
85
85
|
path_resolver, url = _get_path_resolver(data['path'])
|
|
86
86
|
|
|
87
|
-
return path_resolver(chip, package, data['path'], data['ref'], url)
|
|
87
|
+
return path_resolver(chip, package, data['path'], data['ref'], url, fetch)
|
|
88
88
|
|
|
89
89
|
|
|
90
|
-
def path(chip, package):
|
|
90
|
+
def path(chip, package, fetch=True):
|
|
91
91
|
"""
|
|
92
92
|
Compute data source data path
|
|
93
93
|
Additionally cache data source data if possible
|
|
94
94
|
Parameters:
|
|
95
95
|
package (str): Name of the data source
|
|
96
|
+
fetch (bool): Flag to indicate that the path should be fetched
|
|
96
97
|
Returns:
|
|
97
98
|
path: Location of data source on the local system
|
|
98
99
|
"""
|
|
99
100
|
|
|
100
101
|
if package not in chip._packages:
|
|
101
102
|
changed = False
|
|
102
|
-
data_path = _path(chip, package)
|
|
103
|
+
data_path = _path(chip, package, fetch)
|
|
103
104
|
|
|
104
105
|
if isinstance(data_path, tuple) and len(data_path) == 2:
|
|
105
106
|
data_path, changed = data_path
|
siliconcompiler/package/git.py
CHANGED
|
@@ -15,9 +15,12 @@ def get_resolver(url):
|
|
|
15
15
|
return None
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
def git_resolver(chip, package, path, ref, url):
|
|
18
|
+
def git_resolver(chip, package, path, ref, url, fetch):
|
|
19
19
|
data_path, data_path_lock = get_download_cache_path(chip, package, ref)
|
|
20
20
|
|
|
21
|
+
if not fetch:
|
|
22
|
+
return data_path, False
|
|
23
|
+
|
|
21
24
|
# Acquire lock
|
|
22
25
|
data_lock = InterProcessLock(data_path_lock)
|
|
23
26
|
aquire_data_lock(data_path, data_lock)
|
siliconcompiler/package/https.py
CHANGED
|
@@ -21,16 +21,20 @@ def get_resolver(url):
|
|
|
21
21
|
return None
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
def http_resolver(chip, package, path, ref, url):
|
|
24
|
+
def http_resolver(chip, package, path, ref, url, fetch):
|
|
25
25
|
data_path, data_path_lock = get_download_cache_path(chip, package, ref)
|
|
26
26
|
|
|
27
|
-
if
|
|
27
|
+
if not fetch:
|
|
28
28
|
return data_path, False
|
|
29
29
|
|
|
30
30
|
# Acquire lock
|
|
31
31
|
data_lock = InterProcessLock(data_path_lock)
|
|
32
32
|
aquire_data_lock(data_path, data_lock)
|
|
33
33
|
|
|
34
|
+
if os.path.exists(data_path):
|
|
35
|
+
release_data_lock(data_lock)
|
|
36
|
+
return data_path, False
|
|
37
|
+
|
|
34
38
|
extract_from_url(chip, package, path, ref, url, data_path)
|
|
35
39
|
|
|
36
40
|
release_data_lock(data_lock)
|
|
@@ -433,7 +433,7 @@ def node_file_tree_viewer(chip, step, index):
|
|
|
433
433
|
lookup = {}
|
|
434
434
|
tree_items = []
|
|
435
435
|
|
|
436
|
-
file_metrics = report.get_metrics_source(chip, step, index)
|
|
436
|
+
metrics_source, file_metrics = report.get_metrics_source(chip, step, index)
|
|
437
437
|
work_dir = chip.getworkdir(step=step, index=index)
|
|
438
438
|
|
|
439
439
|
def make_item(file):
|
|
@@ -446,12 +446,22 @@ def node_file_tree_viewer(chip, step, index):
|
|
|
446
446
|
|
|
447
447
|
check_file = os.path.relpath(file['value'], work_dir)
|
|
448
448
|
if check_file in file_metrics:
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
449
|
+
metrics = set(file_metrics[check_file])
|
|
450
|
+
primary_source = set()
|
|
451
|
+
if check_file in metrics_source:
|
|
452
|
+
primary_source = set(metrics_source[check_file])
|
|
453
|
+
metrics = metrics - primary_source
|
|
454
|
+
|
|
455
|
+
for color, metric_set in (('blue', primary_source), ('green', metrics)):
|
|
456
|
+
if len(item.tag) >= 5:
|
|
454
457
|
break
|
|
458
|
+
|
|
459
|
+
for metric in metric_set:
|
|
460
|
+
if len(item.tag) < 5:
|
|
461
|
+
item.tag.append(sac.Tag(metric, color=color))
|
|
462
|
+
else:
|
|
463
|
+
item.tag.append(sac.Tag('metrics...', color='geekblue'))
|
|
464
|
+
break
|
|
455
465
|
item.tooltip = "metrics: " + ", ".join(file_metrics[check_file])
|
|
456
466
|
|
|
457
467
|
if 'children' in file:
|
siliconcompiler/report/report.py
CHANGED
|
@@ -302,20 +302,20 @@ def get_metrics_source(chip, step, index):
|
|
|
302
302
|
index (string) : Index of node.
|
|
303
303
|
'''
|
|
304
304
|
file_to_metric = {}
|
|
305
|
+
metric_primary_source = {}
|
|
305
306
|
tool, task = get_tool_task(chip, step, index)
|
|
306
307
|
if not chip.valid('tool', tool, 'task', task, 'report'):
|
|
307
|
-
return file_to_metric
|
|
308
|
+
return metric_primary_source, file_to_metric
|
|
308
309
|
|
|
309
310
|
metrics = chip.getkeys('tool', tool, 'task', task, 'report')
|
|
310
311
|
|
|
311
312
|
for metric in metrics:
|
|
312
313
|
sources = chip.get('tool', tool, 'task', task, 'report', metric, step=step, index=index)
|
|
314
|
+
if sources:
|
|
315
|
+
metric_primary_source.setdefault(sources[0], []).append(metric)
|
|
313
316
|
for source in sources:
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
else:
|
|
317
|
-
file_to_metric[source] = [metric]
|
|
318
|
-
return file_to_metric
|
|
317
|
+
file_to_metric.setdefault(source, []).append(metric)
|
|
318
|
+
return metric_primary_source, file_to_metric
|
|
319
319
|
|
|
320
320
|
|
|
321
321
|
def get_files(chip, step, index):
|
|
@@ -45,6 +45,9 @@ def main():
|
|
|
45
45
|
metavar='<package>:<directory>',
|
|
46
46
|
nargs='+',
|
|
47
47
|
help='Map of caches to prepopulate runner with')
|
|
48
|
+
parser.add_argument('-fetch_cache',
|
|
49
|
+
action='store_true',
|
|
50
|
+
help='Allow for cache downloads')
|
|
48
51
|
parser.add_argument('-step',
|
|
49
52
|
required=True,
|
|
50
53
|
metavar='<step>',
|
|
@@ -105,7 +108,7 @@ def main():
|
|
|
105
108
|
|
|
106
109
|
# Populate cache
|
|
107
110
|
for package in chip.getkeys('package', 'source'):
|
|
108
|
-
sc_path(chip, package)
|
|
111
|
+
sc_path(chip, package, fetch=args.fetch_cache)
|
|
109
112
|
|
|
110
113
|
# Run the task.
|
|
111
114
|
error = True
|
|
@@ -84,12 +84,16 @@ def extract_metrics(chip):
|
|
|
84
84
|
metric_reports = {
|
|
85
85
|
"setuptns": [
|
|
86
86
|
"timing/total_negative_slack.rpt",
|
|
87
|
-
"timing/setup.rpt"
|
|
87
|
+
"timing/setup.rpt",
|
|
88
|
+
"timing/setup.histogram.rpt",
|
|
89
|
+
"images/timing/setup.histogram.png"
|
|
88
90
|
],
|
|
89
91
|
"setupslack": [
|
|
90
92
|
"timing/worst_slack.setup.rpt",
|
|
91
93
|
"timing/setup.rpt",
|
|
92
|
-
"timing/setup.topN.rpt"
|
|
94
|
+
"timing/setup.topN.rpt",
|
|
95
|
+
"timing/setup.histogram.rpt",
|
|
96
|
+
"images/timing/setup.histogram.png"
|
|
93
97
|
],
|
|
94
98
|
"setupskew": [
|
|
95
99
|
"timing/skew.setup.rpt",
|
|
@@ -99,12 +103,16 @@ def extract_metrics(chip):
|
|
|
99
103
|
],
|
|
100
104
|
"setuppaths": [
|
|
101
105
|
"timing/setup.rpt",
|
|
102
|
-
"timing/setup.topN.rpt"
|
|
106
|
+
"timing/setup.topN.rpt",
|
|
107
|
+
"timing/setup.histogram.rpt",
|
|
108
|
+
"images/timing/setup.histogram.png"
|
|
103
109
|
],
|
|
104
110
|
"holdslack": [
|
|
105
111
|
"timing/worst_slack.hold.rpt",
|
|
106
112
|
"timing/hold.rpt",
|
|
107
|
-
"timing/hold.topN.rpt"
|
|
113
|
+
"timing/hold.topN.rpt",
|
|
114
|
+
"timing/hold.histogram.rpt",
|
|
115
|
+
"images/timing/hold.histogram.png"
|
|
108
116
|
],
|
|
109
117
|
"holdskew": [
|
|
110
118
|
"timing/skew.hold.rpt",
|
|
@@ -114,7 +122,9 @@ def extract_metrics(chip):
|
|
|
114
122
|
],
|
|
115
123
|
"holdpaths": [
|
|
116
124
|
"timing/hold.rpt",
|
|
117
|
-
"timing/hold.topN.rpt"
|
|
125
|
+
"timing/hold.topN.rpt",
|
|
126
|
+
"timing/hold.histogram.rpt",
|
|
127
|
+
"images/timing/hold.histogram.png"
|
|
118
128
|
],
|
|
119
129
|
"unconstrained": [
|
|
120
130
|
"timing/unconstrained.rpt",
|
|
@@ -27,6 +27,11 @@ if { [sc_cfg_tool_task_check_in_list setup var reports] } {
|
|
|
27
27
|
tee -file reports/timing/total_negative_slack.rpt \
|
|
28
28
|
"report_tns"
|
|
29
29
|
report_tns_metric -setup
|
|
30
|
+
|
|
31
|
+
if { [sc_check_version 19519] } {
|
|
32
|
+
tee -quiet -file reports/timing/setup.histogram.rpt \
|
|
33
|
+
"report_timing_histogram -num_bins 20 -setup"
|
|
34
|
+
}
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
if { [sc_cfg_tool_task_check_in_list hold var reports] } {
|
|
@@ -42,6 +47,11 @@ if { [sc_cfg_tool_task_check_in_list hold var reports] } {
|
|
|
42
47
|
report_worst_slack_metric -hold
|
|
43
48
|
|
|
44
49
|
report_tns_metric -hold
|
|
50
|
+
|
|
51
|
+
if { [sc_check_version 19519] } {
|
|
52
|
+
tee -quiet -file reports/timing/hold.histogram.rpt \
|
|
53
|
+
"report_timing_histogram -num_bins 20 -hold"
|
|
54
|
+
}
|
|
45
55
|
}
|
|
46
56
|
|
|
47
57
|
if { [sc_cfg_tool_task_check_in_list unconstrained var reports] } {
|
|
@@ -304,6 +304,30 @@ proc sc_image_clocktree { } {
|
|
|
304
304
|
gui::hide_widget "Clock Tree Viewer"
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
+
proc sc_image_timing_histograms { } {
|
|
308
|
+
if { ![sc_check_version 19526] } {
|
|
309
|
+
return
|
|
310
|
+
}
|
|
311
|
+
file mkdir reports/images/timing
|
|
312
|
+
|
|
313
|
+
if { [sc_cfg_tool_task_check_in_list setup var reports] } {
|
|
314
|
+
set path reports/images/timing/setup.histogram.png
|
|
315
|
+
utl::info FLW 1 "Saving setup timing histogram to $path"
|
|
316
|
+
save_histogram_image $path \
|
|
317
|
+
-mode setup \
|
|
318
|
+
-width 500 \
|
|
319
|
+
-height 500
|
|
320
|
+
}
|
|
321
|
+
if { [sc_cfg_tool_task_check_in_list hold var reports] } {
|
|
322
|
+
set path reports/images/timing/hold.histogram.png
|
|
323
|
+
utl::info FLW 1 "Saving hold timing histogram to $path"
|
|
324
|
+
save_histogram_image $path \
|
|
325
|
+
-mode hold \
|
|
326
|
+
-width 500 \
|
|
327
|
+
-height 500
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
307
331
|
proc sc_image_optimizer { } {
|
|
308
332
|
global sc_design
|
|
309
333
|
sc_image_setup_default
|
|
@@ -390,6 +414,9 @@ if { [sc_cfg_tool_task_check_in_list module_view var reports] } {
|
|
|
390
414
|
# Markers
|
|
391
415
|
sc_image_markers
|
|
392
416
|
|
|
417
|
+
# Histograms
|
|
418
|
+
sc_image_timing_histograms
|
|
419
|
+
|
|
393
420
|
# Heatmaps
|
|
394
421
|
if { [sc_cfg_tool_task_check_in_list placement_density var reports] } {
|
|
395
422
|
sc_image_placement_density
|
|
@@ -10,55 +10,56 @@ Sources: https://github.com/MikePopoloski/slang
|
|
|
10
10
|
|
|
11
11
|
Installation: https://sv-lang.com/building.html
|
|
12
12
|
'''
|
|
13
|
-
import
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
import os
|
|
14
|
+
|
|
15
|
+
try:
|
|
16
|
+
import pyslang
|
|
17
|
+
except ModuleNotFoundError:
|
|
18
|
+
pyslang = None
|
|
19
|
+
|
|
16
20
|
from siliconcompiler.tools._common import \
|
|
17
|
-
get_frontend_options, get_input_files,
|
|
21
|
+
add_require_input, add_frontend_requires, get_frontend_options, get_input_files, \
|
|
22
|
+
get_tool_task, record_metric
|
|
18
23
|
|
|
19
24
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
################################
|
|
23
|
-
def setup(chip):
|
|
24
|
-
tool = 'slang'
|
|
25
|
+
def has_pyslang():
|
|
26
|
+
return pyslang is not None
|
|
25
27
|
|
|
26
|
-
# Standard Setup
|
|
27
|
-
chip.set('tool', tool, 'exe', 'slang')
|
|
28
|
-
chip.set('tool', tool, 'vswitch', '--version')
|
|
29
|
-
chip.set('tool', tool, 'version', '>=6.0', clobber=False)
|
|
30
28
|
|
|
29
|
+
def test_version():
|
|
30
|
+
if not has_pyslang():
|
|
31
|
+
return "pyslang is not installed"
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
version = pyslang.VersionInfo
|
|
34
|
+
if version.getMajor() >= 7 and version.getMinor() >= 0:
|
|
35
|
+
return None
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
return stdout.strip().split()[-1].split('+')[0]
|
|
37
|
+
ver = f"{version.getMajor()}.{version.getMinor()}.{version.getPatch()}"
|
|
38
38
|
|
|
39
|
+
return f"incorrect pyslang version: {ver}"
|
|
39
40
|
|
|
40
|
-
def post_process(chip):
|
|
41
|
-
step = chip.get('arg', 'step')
|
|
42
|
-
index = chip.get('arg', 'index')
|
|
43
41
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
################################
|
|
43
|
+
# Setup Tool (pre executable)
|
|
44
|
+
################################
|
|
45
|
+
def setup(chip):
|
|
46
|
+
add_require_input(chip, 'input', 'rtl', 'verilog')
|
|
47
|
+
add_require_input(chip, 'input', 'rtl', 'systemverilog')
|
|
48
|
+
add_require_input(chip, 'input', 'cmdfile', 'f')
|
|
49
|
+
add_frontend_requires(chip, ['ydir', 'idir', 'vlib', 'libext', 'define', 'param'])
|
|
51
50
|
|
|
52
51
|
|
|
53
52
|
def common_runtime_options(chip):
|
|
54
|
-
options = []
|
|
55
|
-
|
|
56
53
|
step = chip.get('arg', 'step')
|
|
57
54
|
index = chip.get('arg', 'index')
|
|
58
55
|
tool, task = get_tool_task(chip, step, index)
|
|
59
56
|
|
|
60
|
-
options
|
|
61
|
-
|
|
57
|
+
options = chip.get('tool', tool, 'task', task, 'option', step=step, index=index)
|
|
58
|
+
|
|
59
|
+
options.append('--single-unit')
|
|
60
|
+
|
|
61
|
+
options.extend(['--threads', str(chip.get('tool', tool, 'task', task, 'threads',
|
|
62
|
+
step=step, index=index))])
|
|
62
63
|
|
|
63
64
|
opts = get_frontend_options(chip,
|
|
64
65
|
['ydir',
|
|
@@ -113,7 +114,7 @@ def common_runtime_options(chip):
|
|
|
113
114
|
#######################
|
|
114
115
|
# Top Module
|
|
115
116
|
#######################
|
|
116
|
-
options.append('--top ' + chip.top())
|
|
117
|
+
options.append('--top ' + chip.top(step, index))
|
|
117
118
|
|
|
118
119
|
###############################
|
|
119
120
|
# Parameters (top module only)
|
|
@@ -124,3 +125,92 @@ def common_runtime_options(chip):
|
|
|
124
125
|
options.append(f'-G {param}={value}')
|
|
125
126
|
|
|
126
127
|
return options
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def _get_driver(chip, options_func, ignored_diagnotics=None):
|
|
131
|
+
driver = pyslang.Driver()
|
|
132
|
+
driver.addStandardArgs()
|
|
133
|
+
|
|
134
|
+
options = options_func(chip)
|
|
135
|
+
|
|
136
|
+
parseOpts = pyslang.CommandLineOptions()
|
|
137
|
+
parseOpts.ignoreProgramName = True
|
|
138
|
+
opts = " ".join(options)
|
|
139
|
+
code = 0
|
|
140
|
+
if not driver.parseCommandLine(opts, parseOpts):
|
|
141
|
+
code = 1
|
|
142
|
+
|
|
143
|
+
if code == 0 and not driver.processOptions():
|
|
144
|
+
code = 2
|
|
145
|
+
|
|
146
|
+
step = chip.get('arg', 'step')
|
|
147
|
+
index = chip.get('arg', 'index')
|
|
148
|
+
tool, task = get_tool_task(chip, step, index)
|
|
149
|
+
for warning in chip.get('tool', tool, 'task', task, 'warningoff', step=step, index=index):
|
|
150
|
+
if hasattr(pyslang.Diags, warning):
|
|
151
|
+
driver.diagEngine.setSeverity(
|
|
152
|
+
getattr(pyslang.Diags, warning),
|
|
153
|
+
pyslang.DiagnosticSeverity.Ignored)
|
|
154
|
+
elif not chip.get('option', 'quiet', step=step, index=index):
|
|
155
|
+
chip.logger.warning(f'{warning} is not a valid slang category')
|
|
156
|
+
|
|
157
|
+
if not ignored_diagnotics:
|
|
158
|
+
ignored_diagnotics = []
|
|
159
|
+
for ignore in ignored_diagnotics:
|
|
160
|
+
driver.diagEngine.setSeverity(
|
|
161
|
+
ignore,
|
|
162
|
+
pyslang.DiagnosticSeverity.Ignored)
|
|
163
|
+
|
|
164
|
+
return driver, code
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def _compile(chip, driver):
|
|
168
|
+
ok = driver.parseAllSources()
|
|
169
|
+
compilation = driver.createCompilation()
|
|
170
|
+
return compilation, ok
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def _diagnostics(chip, driver, compilation):
|
|
174
|
+
step = chip.get('arg', 'step')
|
|
175
|
+
index = chip.get('arg', 'index')
|
|
176
|
+
|
|
177
|
+
report = {
|
|
178
|
+
"error": [],
|
|
179
|
+
"warning": [],
|
|
180
|
+
}
|
|
181
|
+
diags = driver.diagEngine
|
|
182
|
+
for diag in compilation.getAllDiagnostics():
|
|
183
|
+
severity = diags.getSeverity(diag.code, diag.location)
|
|
184
|
+
report_level = None
|
|
185
|
+
if severity == pyslang.DiagnosticSeverity.Warning:
|
|
186
|
+
report_level = "warning"
|
|
187
|
+
elif severity == pyslang.DiagnosticSeverity.Error:
|
|
188
|
+
report_level = "error"
|
|
189
|
+
elif severity == pyslang.DiagnosticSeverity.Fatal:
|
|
190
|
+
report_level = "error"
|
|
191
|
+
|
|
192
|
+
if report_level:
|
|
193
|
+
for n, line in enumerate(diags.reportAll(driver.sourceManager, [diag]).splitlines()):
|
|
194
|
+
if line.strip():
|
|
195
|
+
if n == 0:
|
|
196
|
+
line_parts = line.split(":")
|
|
197
|
+
if os.path.exists(line_parts[0]):
|
|
198
|
+
line_parts[0] = os.path.abspath(line_parts[0])
|
|
199
|
+
line = ":".join(line_parts)
|
|
200
|
+
|
|
201
|
+
report[report_level].append(line)
|
|
202
|
+
|
|
203
|
+
if not chip.get('option', 'quiet', step=step, index=index):
|
|
204
|
+
if report["warning"]:
|
|
205
|
+
for line in report["warning"]:
|
|
206
|
+
chip.logger.warning(line)
|
|
207
|
+
if report["error"]:
|
|
208
|
+
for line in report["error"]:
|
|
209
|
+
chip.logger.error(line)
|
|
210
|
+
|
|
211
|
+
diags.clearCounts()
|
|
212
|
+
for diag in compilation.getAllDiagnostics():
|
|
213
|
+
diags.issue(diag)
|
|
214
|
+
|
|
215
|
+
record_metric(chip, step, index, 'errors', diags.numErrors, [])
|
|
216
|
+
record_metric(chip, step, index, 'warnings', diags.numWarnings, [])
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
from siliconcompiler import utils
|
|
2
2
|
from siliconcompiler.tools import slang
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import os
|
|
4
|
+
from siliconcompiler.tools._common import get_tool_task, has_input_files
|
|
5
|
+
from siliconcompiler.tools.slang import pyslang
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
def setup(chip):
|
|
8
9
|
'''
|
|
9
10
|
Elaborate verilog design files and generate a unified file.
|
|
10
11
|
'''
|
|
12
|
+
if slang.test_version():
|
|
13
|
+
return slang.test_version()
|
|
14
|
+
|
|
15
|
+
if not has_input_files(chip, 'input', 'rtl', 'verilog') and \
|
|
16
|
+
not has_input_files(chip, 'input', 'rtl', 'systemverilog'):
|
|
17
|
+
return "no files in [input,rtl,systemverilog] or [input,rtl,verilog]"
|
|
18
|
+
|
|
11
19
|
slang.setup(chip)
|
|
12
20
|
|
|
13
21
|
step = chip.get('arg', 'step')
|
|
@@ -17,30 +25,127 @@ def setup(chip):
|
|
|
17
25
|
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
18
26
|
clobber=False, step=step, index=index)
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
add_frontend_requires(chip, ['ydir', 'idir', 'vlib', 'libext', 'define', 'param'])
|
|
23
|
-
|
|
24
|
-
chip.set('tool', tool, 'task', task, 'stdout', 'destination', 'output', step=step, index=index)
|
|
25
|
-
chip.set('tool', tool, 'task', task, 'stdout', 'suffix', 'v', step=step, index=index)
|
|
28
|
+
chip.set('tool', tool, 'task', task, 'stdout', 'destination', 'log', step=step, index=index)
|
|
29
|
+
chip.set('tool', tool, 'task', task, 'stderr', 'destination', 'log', step=step, index=index)
|
|
26
30
|
|
|
27
31
|
chip.set('tool', tool, 'task', task, 'output', __outputfile(chip), step=step, index=index)
|
|
28
32
|
|
|
33
|
+
chip.set('tool', tool, 'task', task, 'var', 'include_source_paths', True,
|
|
34
|
+
step=step, index=index, clobber=False)
|
|
35
|
+
chip.set('tool', tool, 'task', task, 'var', 'include_source_paths',
|
|
36
|
+
"true/false, if true add the source file path information", field="help")
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def __outputfile(chip):
|
|
40
|
+
is_systemverilog = has_input_files(chip, 'input', 'rtl', 'systemverilog')
|
|
41
|
+
if is_systemverilog:
|
|
42
|
+
return f'{chip.top()}.sv'
|
|
43
|
+
return f'{chip.top()}.v'
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def __get_files(manager, tree):
|
|
47
|
+
files = set()
|
|
48
|
+
|
|
49
|
+
from queue import Queue
|
|
50
|
+
nodes = Queue(maxsize=0)
|
|
51
|
+
nodes.put(tree.root)
|
|
52
|
+
|
|
53
|
+
def procRange(range):
|
|
54
|
+
files.add(manager.getFileName(range.start))
|
|
55
|
+
files.add(manager.getFileName(range.end))
|
|
56
|
+
|
|
57
|
+
while not nodes.empty():
|
|
58
|
+
node = nodes.get()
|
|
59
|
+
procRange(node.sourceRange)
|
|
60
|
+
for token in node:
|
|
61
|
+
if isinstance(token, pyslang.Token):
|
|
62
|
+
procRange(token.range)
|
|
63
|
+
else:
|
|
64
|
+
nodes.put(token)
|
|
65
|
+
|
|
66
|
+
return sorted([os.path.abspath(f) for f in files if os.path.isfile(f)])
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def run(chip):
|
|
70
|
+
# Override default errors
|
|
71
|
+
ignored = [
|
|
72
|
+
pyslang.Diags.MissingTimeScale,
|
|
73
|
+
pyslang.Diags.UsedBeforeDeclared,
|
|
74
|
+
pyslang.Diags.UnusedParameter,
|
|
75
|
+
pyslang.Diags.UnusedDefinition,
|
|
76
|
+
pyslang.Diags.UnusedVariable,
|
|
77
|
+
pyslang.Diags.UnusedPort,
|
|
78
|
+
pyslang.Diags.UnusedButSetNet,
|
|
79
|
+
pyslang.Diags.UnusedImplicitNet,
|
|
80
|
+
pyslang.Diags.UnusedButSetVariable,
|
|
81
|
+
pyslang.Diags.UnusedButSetPort,
|
|
82
|
+
pyslang.Diags.UnusedTypedef,
|
|
83
|
+
pyslang.Diags.UnusedGenvar,
|
|
84
|
+
pyslang.Diags.UnusedAssertionDecl
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
driver, exitcode = slang._get_driver(
|
|
88
|
+
chip,
|
|
89
|
+
runtime_options,
|
|
90
|
+
ignored_diagnotics=ignored)
|
|
91
|
+
if exitcode:
|
|
92
|
+
return exitcode
|
|
93
|
+
|
|
94
|
+
compilation, ok = slang._compile(chip, driver)
|
|
95
|
+
|
|
96
|
+
slang._diagnostics(chip, driver, compilation)
|
|
97
|
+
|
|
98
|
+
manager = compilation.sourceManager
|
|
99
|
+
|
|
100
|
+
step = chip.get('arg', 'step')
|
|
101
|
+
index = chip.get('arg', 'index')
|
|
102
|
+
tool, task = get_tool_task(chip, step, index)
|
|
103
|
+
add_source = chip.get('tool', tool, 'task', task, 'var', 'include_source_paths',
|
|
104
|
+
step=step, index=index)[0] == 'true'
|
|
105
|
+
|
|
106
|
+
def printFiles(out, files):
|
|
107
|
+
for src_file in files:
|
|
108
|
+
out.write(f'// File: {src_file}\n')
|
|
109
|
+
|
|
110
|
+
with open(f'outputs/{__outputfile(chip)}', 'w') as out:
|
|
111
|
+
for tree in compilation.getSyntaxTrees():
|
|
112
|
+
files = []
|
|
113
|
+
if add_source:
|
|
114
|
+
files = __get_files(manager, tree)
|
|
115
|
+
|
|
116
|
+
writer = pyslang.SyntaxPrinter(manager)
|
|
117
|
+
|
|
118
|
+
writer.setIncludeMissing(False)
|
|
119
|
+
writer.setIncludeSkipped(False)
|
|
120
|
+
writer.setIncludeDirectives(False)
|
|
121
|
+
|
|
122
|
+
writer.setIncludePreprocessed(True)
|
|
123
|
+
writer.setIncludeTrivia(True)
|
|
124
|
+
writer.setIncludeComments(True)
|
|
125
|
+
writer.setSquashNewlines(True)
|
|
126
|
+
|
|
127
|
+
out.write("////////////////////////////////////////////////////////////////\n")
|
|
128
|
+
out.write("// Start:\n")
|
|
129
|
+
printFiles(out, files)
|
|
130
|
+
|
|
131
|
+
out.write(writer.print(tree).str() + '\n')
|
|
132
|
+
|
|
133
|
+
out.write("// End:\n")
|
|
134
|
+
printFiles(out, files)
|
|
135
|
+
out.write("////////////////////////////////////////////////////////////////\n")
|
|
136
|
+
|
|
137
|
+
if ok:
|
|
138
|
+
return 0
|
|
139
|
+
else:
|
|
140
|
+
return 1
|
|
141
|
+
|
|
29
142
|
|
|
30
143
|
def runtime_options(chip):
|
|
31
144
|
options = slang.common_runtime_options(chip)
|
|
32
145
|
options.extend([
|
|
33
|
-
"--
|
|
34
|
-
"--comments",
|
|
146
|
+
"--allow-use-before-declare",
|
|
35
147
|
"--ignore-unknown-modules",
|
|
36
|
-
"
|
|
148
|
+
"-Weverything"
|
|
37
149
|
])
|
|
38
150
|
|
|
39
151
|
return options
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def __outputfile(chip):
|
|
43
|
-
is_systemverilog = has_input_files(chip, 'input', 'rtl', 'systemverilog')
|
|
44
|
-
if is_systemverilog:
|
|
45
|
-
return f'{chip.top()}.sv'
|
|
46
|
-
return f'{chip.top()}.v'
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
from siliconcompiler import utils
|
|
2
2
|
from siliconcompiler.tools import slang
|
|
3
|
-
from siliconcompiler.tools._common import
|
|
4
|
-
add_require_input, add_frontend_requires, get_tool_task
|
|
3
|
+
from siliconcompiler.tools._common import get_tool_task
|
|
5
4
|
|
|
6
5
|
|
|
7
6
|
def setup(chip):
|
|
8
7
|
'''
|
|
9
8
|
Lint system verilog
|
|
10
9
|
'''
|
|
10
|
+
if slang.test_version():
|
|
11
|
+
return slang.test_version()
|
|
12
|
+
|
|
11
13
|
slang.setup(chip)
|
|
12
14
|
|
|
13
15
|
step = chip.get('arg', 'step')
|
|
@@ -17,19 +19,27 @@ def setup(chip):
|
|
|
17
19
|
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
18
20
|
clobber=False, step=step, index=index)
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
|
|
23
|
+
def run(chip):
|
|
24
|
+
driver, exitcode = slang._get_driver(chip, runtime_options)
|
|
25
|
+
if exitcode:
|
|
26
|
+
return exitcode
|
|
27
|
+
|
|
28
|
+
compilation, ok = slang._compile(chip, driver)
|
|
29
|
+
slang._diagnostics(chip, driver, compilation)
|
|
30
|
+
|
|
31
|
+
if ok:
|
|
32
|
+
return 0
|
|
33
|
+
else:
|
|
34
|
+
return 1
|
|
23
35
|
|
|
24
36
|
|
|
25
37
|
def runtime_options(chip):
|
|
26
38
|
options = slang.common_runtime_options(chip)
|
|
27
39
|
options.extend([
|
|
28
|
-
"--lint-only"
|
|
40
|
+
"--lint-only",
|
|
41
|
+
"-Weverything",
|
|
42
|
+
"-Werror"
|
|
29
43
|
])
|
|
30
44
|
|
|
31
45
|
return options
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def post_process(chip):
|
|
35
|
-
slang.post_process(chip)
|
|
@@ -10,7 +10,12 @@ Sources: https://github.com/chipsalliance/Surelog
|
|
|
10
10
|
Installation: https://github.com/chipsalliance/Surelog
|
|
11
11
|
'''
|
|
12
12
|
|
|
13
|
-
import
|
|
13
|
+
import sys
|
|
14
|
+
try:
|
|
15
|
+
import surelog
|
|
16
|
+
except ModuleNotFoundError:
|
|
17
|
+
surelog = None
|
|
18
|
+
|
|
14
19
|
from siliconcompiler.tools._common import get_tool_task
|
|
15
20
|
|
|
16
21
|
|
|
@@ -31,9 +36,17 @@ def setup(chip):
|
|
|
31
36
|
|
|
32
37
|
is_docker = chip.get('option', 'scheduler', 'name', step=step, index=index) == 'docker'
|
|
33
38
|
if not is_docker:
|
|
34
|
-
|
|
39
|
+
if surelog:
|
|
40
|
+
exe = surelog.get_bin()
|
|
41
|
+
else:
|
|
42
|
+
exe = 'surelog'
|
|
43
|
+
if sys.platform.startswith("win32"):
|
|
44
|
+
exe = f"{exe}.exe"
|
|
35
45
|
else:
|
|
36
|
-
|
|
46
|
+
if surelog:
|
|
47
|
+
exe = surelog.get_bin('linux')
|
|
48
|
+
else:
|
|
49
|
+
exe = 'surelog'
|
|
37
50
|
|
|
38
51
|
# Standard Setup
|
|
39
52
|
chip.set('tool', tool, 'exe', exe)
|
|
@@ -43,7 +56,7 @@ def setup(chip):
|
|
|
43
56
|
# We package SC wheels with a precompiled copy of Surelog installed to
|
|
44
57
|
# tools/surelog/bin. If the user doesn't have Surelog installed on their
|
|
45
58
|
# system path, set the path to the bundled copy in the schema.
|
|
46
|
-
if not surelog.has_system_surelog() and not is_docker:
|
|
59
|
+
if surelog and not surelog.has_system_surelog() and not is_docker:
|
|
47
60
|
chip.set('tool', tool, 'path', surelog.get_path(), clobber=False)
|
|
48
61
|
|
|
49
62
|
# Log file parsing
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"openroad": {
|
|
3
3
|
"git-url": "https://github.com/The-OpenROAD-Project/OpenROAD.git",
|
|
4
|
-
"git-commit": "
|
|
4
|
+
"git-commit": "0fbd4d94c81ef070249ad9d9037a740d0c6e58fa",
|
|
5
5
|
"docker-cmds": [
|
|
6
6
|
"# Remove OR-Tools files",
|
|
7
7
|
"RUN rm -f $SC_PREFIX/Makefile $SC_PREFIX/README.md",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"auto-update": false
|
|
37
37
|
},
|
|
38
38
|
"klayout": {
|
|
39
|
-
"version": "0.29.
|
|
39
|
+
"version": "0.29.12",
|
|
40
40
|
"git-url": "https://github.com/KLayout/klayout.git",
|
|
41
41
|
"docker-skip": true,
|
|
42
42
|
"auto-update": true,
|
siliconcompiler/units.py
CHANGED
|
@@ -41,7 +41,7 @@ SI_TYPES = (
|
|
|
41
41
|
'V',
|
|
42
42
|
'W',
|
|
43
43
|
'ohm',
|
|
44
|
-
'C'
|
|
44
|
+
'C'
|
|
45
45
|
)
|
|
46
46
|
|
|
47
47
|
|
|
@@ -107,8 +107,6 @@ def get_si_prefix(unit):
|
|
|
107
107
|
if matches:
|
|
108
108
|
return matches[0][0]
|
|
109
109
|
|
|
110
|
-
return ''
|
|
111
|
-
|
|
112
110
|
|
|
113
111
|
def get_si_power(unit):
|
|
114
112
|
'''
|
|
@@ -164,6 +162,11 @@ def format_si(value, unit, margin=3, digits=3):
|
|
|
164
162
|
digits (int): number of digits to print after .
|
|
165
163
|
'''
|
|
166
164
|
scaled_value, prefix = scale_si(value, unit, margin=margin, digits=digits)
|
|
165
|
+
|
|
166
|
+
if digits < 0:
|
|
167
|
+
# Default to 1
|
|
168
|
+
digits = 1
|
|
169
|
+
|
|
167
170
|
# need to do this in case float shortens scaled_value
|
|
168
171
|
return f'{scaled_value:.{digits}f}{prefix}'
|
|
169
172
|
|
|
@@ -179,14 +182,14 @@ def scale_si(value, unit, margin=3, digits=3):
|
|
|
179
182
|
when picking the right magnitude
|
|
180
183
|
digits (int): number of digits to print after .
|
|
181
184
|
'''
|
|
185
|
+
if digits < 0:
|
|
186
|
+
# Default to 1
|
|
187
|
+
digits = 1
|
|
188
|
+
|
|
182
189
|
if unit and is_base_si_unit(unit):
|
|
183
190
|
value = float(value)
|
|
184
191
|
log_value = math.log10(value) - margin
|
|
185
192
|
|
|
186
|
-
if digits < 0:
|
|
187
|
-
# Default to 0
|
|
188
|
-
digits = 0
|
|
189
|
-
|
|
190
193
|
for prefix, scale in SI_UNITS:
|
|
191
194
|
if log_value <= scale:
|
|
192
195
|
value /= 10**scale
|
siliconcompiler/use.py
CHANGED
|
@@ -12,6 +12,7 @@ class PackageChip(Chip):
|
|
|
12
12
|
super().__init__(name)
|
|
13
13
|
|
|
14
14
|
if len(args) == 2:
|
|
15
|
+
self.logger = args[0].logger
|
|
15
16
|
self.logger.warning(
|
|
16
17
|
f'passing Chip object to {name} ({type(self).__name__}) is deprecated')
|
|
17
18
|
|
|
@@ -155,7 +156,8 @@ class Flow(Chip):
|
|
|
155
156
|
def __init__(self, *args):
|
|
156
157
|
super().__init__(args[-1])
|
|
157
158
|
if len(args) == 2:
|
|
158
|
-
self.logger
|
|
159
|
+
self.logger = args[0].logger
|
|
160
|
+
self.logger.warning(f'passing Chip object to {self.design} (Flow) is deprecated')
|
|
159
161
|
|
|
160
162
|
|
|
161
163
|
class Checklist(Chip):
|
|
@@ -175,4 +177,5 @@ class Checklist(Chip):
|
|
|
175
177
|
def __init__(self, *args):
|
|
176
178
|
super().__init__(args[-1])
|
|
177
179
|
if len(args) == 2:
|
|
178
|
-
self.logger
|
|
180
|
+
self.logger = args[0].logger
|
|
181
|
+
self.logger.warning(f'passing Chip object to {self.design} (Checklist) is deprecated')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: siliconcompiler
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.32.0
|
|
4
4
|
Summary: A compiler framework that automates translation from source code to silicon.
|
|
5
5
|
Author-email: Andreas Olofsson <andreas.d.olofsson@gmail.com>
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -45,10 +45,10 @@ Requires-Dist: fasteners==0.19
|
|
|
45
45
|
Requires-Dist: fastjsonschema==2.21.1
|
|
46
46
|
Requires-Dist: docker==7.1.0
|
|
47
47
|
Requires-Dist: importlib_metadata; python_version < "3.10"
|
|
48
|
-
Requires-Dist: sc-surelog==1.84.1
|
|
49
48
|
Requires-Dist: orjson==3.10.15
|
|
49
|
+
Requires-Dist: pyslang==8.0.0
|
|
50
50
|
Requires-Dist: streamlit==1.40.1; python_version <= "3.8"
|
|
51
|
-
Requires-Dist: streamlit==1.
|
|
51
|
+
Requires-Dist: streamlit==1.43.1; python_version >= "3.9" and python_full_version != "3.9.7"
|
|
52
52
|
Requires-Dist: streamlit_agraph==0.0.45; python_full_version != "3.9.7"
|
|
53
53
|
Requires-Dist: streamlit-antd-components==0.3.2; python_full_version != "3.9.7"
|
|
54
54
|
Requires-Dist: streamlit_javascript==0.1.5; python_full_version != "3.9.7"
|
|
@@ -74,9 +74,6 @@ Requires-Dist: pydata-sphinx-theme==0.16.1; extra == "docs"
|
|
|
74
74
|
Requires-Dist: sc-leflib>=0.2.0; extra == "docs"
|
|
75
75
|
Provides-Extra: profile
|
|
76
76
|
Requires-Dist: gprof2dot==2024.6.6; extra == "profile"
|
|
77
|
-
Provides-Extra: examples
|
|
78
|
-
Requires-Dist: migen==0.9.2; extra == "examples"
|
|
79
|
-
Requires-Dist: lambdalib==0.3.3; extra == "examples"
|
|
80
77
|
Provides-Extra: optimizer
|
|
81
78
|
Requires-Dist: google-vizier[jax]==0.1.21; python_version >= "3.10" and extra == "optimizer"
|
|
82
79
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
siliconcompiler/__init__.py,sha256=Ke_Bcryj9N6MoUq_5z_IDW3qMrUzR-3-kJVsvUenYzY,511
|
|
2
2
|
siliconcompiler/__main__.py,sha256=JwWkcvaNngqgMWprEQ1cFy2Wdq9GMvk46UGTHyh_qvM,170
|
|
3
3
|
siliconcompiler/_common.py,sha256=c6r0SbI2xTpNOZayFsyCDo0riJGNJSPN-0zW8R7rDBI,1488
|
|
4
|
-
siliconcompiler/_metadata.py,sha256=
|
|
5
|
-
siliconcompiler/core.py,sha256=
|
|
4
|
+
siliconcompiler/_metadata.py,sha256=3djiiKr5bXhbjJlv9XuluEftoGgcRBwvLs9aEbYWD4s,1264
|
|
5
|
+
siliconcompiler/core.py,sha256=yncn2IGU3qD6frmO2Fk6RXTIBMIdXU66nVW4S9NvQPQ,138892
|
|
6
6
|
siliconcompiler/flowgraph.py,sha256=Z_c4DEh1JvHE_u0O2M2Y1_dn6aGOAECX-HzrIjn0ky4,22084
|
|
7
7
|
siliconcompiler/issue.py,sha256=9ZpdEBh8QB56-bZ1YXRnjqgg9hwnFty2u1o5oI66W7M,11125
|
|
8
|
-
siliconcompiler/units.py,sha256=
|
|
9
|
-
siliconcompiler/use.py,sha256=
|
|
8
|
+
siliconcompiler/units.py,sha256=M_ZxViSysymv8mFdCtbQwfccEwEsBeiCmc8TcnoXZbk,5845
|
|
9
|
+
siliconcompiler/use.py,sha256=zu17ogJv0x2t_6J9yb_5tH1DjridVQj0MrIRxJRJVGQ,6202
|
|
10
10
|
siliconcompiler/apps/__init__.py,sha256=6LuAljPtVB6g5yXl_58ODoB4Svb6UfKaDbX1e0aNZfE,668
|
|
11
11
|
siliconcompiler/apps/_common.py,sha256=Ph-cD-t9lCzavak3s4YCXXmA_ouf-jJ-7WIEGkSsjOg,3770
|
|
12
|
-
siliconcompiler/apps/sc.py,sha256=
|
|
12
|
+
siliconcompiler/apps/sc.py,sha256=qHrfzgt1y748jX0nLXn9Hx1WuwXXmHFGhF4LaQTCpeE,3259
|
|
13
13
|
siliconcompiler/apps/sc_dashboard.py,sha256=kGyMYbgKgZMBUrTyft6mEvRnmcrKA7JunrkWZ8VwSwM,3478
|
|
14
14
|
siliconcompiler/apps/sc_install.py,sha256=qz6Dni7HcYrl9V7mDk2hqMYY4BwqRceNb-Gd2UE5zzk,8569
|
|
15
15
|
siliconcompiler/apps/sc_issue.py,sha256=PUXFWne6MWY0Ntak3PnMZ84tpEZ5S1Pta5B3AkxMdoY,6404
|
|
@@ -18,7 +18,7 @@ siliconcompiler/apps/sc_server.py,sha256=d3SCfKtNneIBiAk7Udc5SqXvSIoFSK40iHWcKuY
|
|
|
18
18
|
siliconcompiler/apps/sc_show.py,sha256=H0_evnBqr02FJVlIaFIva4RrYZ6M2otlWTaTCqFQPlg,4653
|
|
19
19
|
siliconcompiler/apps/smake.py,sha256=jj69IuMLf4jblpVGeLT3GAvC-zDLHwPq16YPKtHosdA,7124
|
|
20
20
|
siliconcompiler/apps/utils/replay.py,sha256=iAsYFb2mVcXw3c9SYV1pFiiQLwZKiub9uQjsO5v-hlo,5901
|
|
21
|
-
siliconcompiler/apps/utils/summarize.py,sha256=
|
|
21
|
+
siliconcompiler/apps/utils/summarize.py,sha256=CC6YwyEShiuZekU-D1Uk_m074aj8LviwotcgJMvZhuY,1250
|
|
22
22
|
siliconcompiler/checklists/__init__.py,sha256=xnrgpMdgDLoYinDXVXRIAhX__BiBpBw16_gmg2dAwYo,247
|
|
23
23
|
siliconcompiler/checklists/oh_tapeout.py,sha256=xBXAHOVNslFUlOfVTLLoPEJazczP8MTsa5EGo5GYQk0,1441
|
|
24
24
|
siliconcompiler/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -28,7 +28,7 @@ siliconcompiler/data/RobotoMono/LICENSE.txt,sha256=Pd-b5cKP4n2tFDpdx27qJSIq0d1ok
|
|
|
28
28
|
siliconcompiler/data/RobotoMono/RobotoMono-Regular.ttf,sha256=w8iOaiprWYm5hBNPzFHOaddn_RgCWHLoz0FsBMTaryA,86908
|
|
29
29
|
siliconcompiler/data/RobotoMono/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
30
|
siliconcompiler/flows/__init__.py,sha256=NwHSILM3yG962UqpgCYyvh07IZ1oLtIh5L-ia_BHrXg,996
|
|
31
|
-
siliconcompiler/flows/_common.py,sha256=
|
|
31
|
+
siliconcompiler/flows/_common.py,sha256=jySYBv7xKMwQ0Uo2rUbvmaopVUMY_Xv_iIvFv_pcPqQ,2392
|
|
32
32
|
siliconcompiler/flows/asicflow.py,sha256=Hj0goWMxYGSqLmX_07z_uFePJvWcDGhY0afTeJblz7E,8113
|
|
33
33
|
siliconcompiler/flows/asictopflow.py,sha256=UosrdJhh_NVyjigzz2KGhqcy2UBotkwTUUnCdOVaZXg,1155
|
|
34
34
|
siliconcompiler/flows/drcflow.py,sha256=CinpSA2eHtqSlOIxTeXSoyV_TstFZ7uZ1VA9qAHihh8,230
|
|
@@ -47,9 +47,9 @@ siliconcompiler/fpgas/vpr_example.py,sha256=xcTgCvxSadcBnYVrglAi5XM4nn_raXWFvr_o
|
|
|
47
47
|
siliconcompiler/libs/__init__.py,sha256=KXw1vU0KP83fg3rB8iKkpDhJZBLz_PWGZG65L3lAQ1Q,86
|
|
48
48
|
siliconcompiler/optimizer/__init__.py,sha256=wdSuv3U7hoSdZn-TkaQtYehVdhS5F35Mb1McgaUw3hc,6599
|
|
49
49
|
siliconcompiler/optimizer/vizier.py,sha256=-JF3E28SLhfkjluz2R5dFnjg5NjU1z7Okb-K_ZK9H3s,9035
|
|
50
|
-
siliconcompiler/package/__init__.py,sha256=
|
|
51
|
-
siliconcompiler/package/git.py,sha256=
|
|
52
|
-
siliconcompiler/package/https.py,sha256=
|
|
50
|
+
siliconcompiler/package/__init__.py,sha256=BpOEkHppctqwh1FL9fLA3CtpTHJsNfk5eXywBNrCNPY,9172
|
|
51
|
+
siliconcompiler/package/git.py,sha256=c40uXesG1x-CgH7yat5Cq6iCjoUHp_jE_VXeHGtzeOk,3258
|
|
52
|
+
siliconcompiler/package/https.py,sha256=f3VxIC3YdPgejuGDqp-amsHljtO43XOSS5UQv-k5ktQ,3014
|
|
53
53
|
siliconcompiler/pdks/__init__.py,sha256=bWhtNR-Kq3fEyknon-x5vQX877b88g9EJXAHBMiDyGM,81
|
|
54
54
|
siliconcompiler/remote/__init__.py,sha256=MoYnC1lkgbT5hN5Qi-0gTItaTWI2U1E8OuleffdTDSQ,977
|
|
55
55
|
siliconcompiler/remote/client.py,sha256=qwZaKSt-ScYjfBFpL9Np9Z0nDytYRJHgvNJnrXHGhok,32848
|
|
@@ -72,14 +72,14 @@ siliconcompiler/remote/server_schema/responses/get_results.json,sha256=h4XraLW4h
|
|
|
72
72
|
siliconcompiler/remote/server_schema/responses/remote_run.json,sha256=FWW_0m46qwIJHiTriISzChKHJF6G9RIwP0rmp1OjIuA,475
|
|
73
73
|
siliconcompiler/report/__init__.py,sha256=ADa-8Jwy4fl2Wtg0ejy4Tvil805uwA4WWTdK125JKcs,388
|
|
74
74
|
siliconcompiler/report/html_report.py,sha256=Wh5X7iQpfIEHcs-WrVE9dtDf-gkz3GhT_yf8kVG0O3o,2597
|
|
75
|
-
siliconcompiler/report/report.py,sha256=
|
|
75
|
+
siliconcompiler/report/report.py,sha256=_V8Dpxly06wDAVUVuu7yyZ2fMGV5MHkJ_9DHoxGgt24,15158
|
|
76
76
|
siliconcompiler/report/summary_image.py,sha256=tKuoLiG6Whvnc8LHeSzU4FookpBkYYCMWUGb-ux2i8k,3570
|
|
77
77
|
siliconcompiler/report/summary_table.py,sha256=j7MrwGacCemAWNOtyHiYop9XRQPzIEWHyRl4dfS1yI8,3386
|
|
78
78
|
siliconcompiler/report/utils.py,sha256=70klZsAKwhW55kOxBBdV9zzOU-NorMk6y6riMyKXo7c,6423
|
|
79
79
|
siliconcompiler/report/dashboard/__init__.py,sha256=bvSfStUvkMa1zW1R5WtzzzKKAMm9FCNiPbIIFXOotJ0,5554
|
|
80
80
|
siliconcompiler/report/dashboard/state.py,sha256=qBAmLpKb0xXqf2vRbBBgYs8P71v3MGIL6z0WHoAED-Y,5924
|
|
81
81
|
siliconcompiler/report/dashboard/viewer.py,sha256=scF4MkbOdqM1pRCzGWnXeMrk4r2M4Y2cDyEIrAWCFiw,1095
|
|
82
|
-
siliconcompiler/report/dashboard/components/__init__.py,sha256=
|
|
82
|
+
siliconcompiler/report/dashboard/components/__init__.py,sha256=4AteP9VxNisAGkv_Ib_7bV1ZyEmqH6TglY9d8Xh44KQ,18517
|
|
83
83
|
siliconcompiler/report/dashboard/components/flowgraph.py,sha256=bjPuaWlEra4HbIUIbtCkYQMNTYueSGP0WO-r16MrBss,3525
|
|
84
84
|
siliconcompiler/report/dashboard/components/graph.py,sha256=m9y4lxKDgTJNp_eOdLohN1bn6uE3XEnE387xnb4HnUo,6776
|
|
85
85
|
siliconcompiler/report/dashboard/layouts/__init__.py,sha256=aYhWEoQg4CiwGMCcLH4Yj__d_5tD4vyb164dP2RpURY,638
|
|
@@ -91,7 +91,7 @@ siliconcompiler/report/dashboard/utils/__init__.py,sha256=mkcBAlfPovfgoRv9nPbtgQ
|
|
|
91
91
|
siliconcompiler/report/dashboard/utils/file_utils.py,sha256=5MKAyf7TGXQIc3yxwbP1H6xi0NGwUfzu2j3LOv1Yei0,3333
|
|
92
92
|
siliconcompiler/scheduler/__init__.py,sha256=goiNHGe41JjCKoMWIh6i3fcw9kuC7lXcAziA_bFeun4,87291
|
|
93
93
|
siliconcompiler/scheduler/docker_runner.py,sha256=zeAPHgthkoR8ATY6zmV2kCJWpD13fuq2DCzzG66Ubm8,8052
|
|
94
|
-
siliconcompiler/scheduler/run_node.py,sha256=
|
|
94
|
+
siliconcompiler/scheduler/run_node.py,sha256=4bIFcPnP8pq4-lDyXPAEu1fk2Q8qQlnlLKwl7CQDQZo,5203
|
|
95
95
|
siliconcompiler/scheduler/send_messages.py,sha256=mWmkfPVDEfzOawVq6At6fi0JgFkzyFNwAA29lYkN5Xw,6618
|
|
96
96
|
siliconcompiler/scheduler/slurm.py,sha256=CAuN5xmiWhk_k3CW6yMe5iukex4CWxp5Ox6_qAzgV5Q,7097
|
|
97
97
|
siliconcompiler/scheduler/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -213,7 +213,7 @@ siliconcompiler/tools/nextpnr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
213
213
|
siliconcompiler/tools/nextpnr/apr.py,sha256=dCMLDS4xnwqCoBtCKd3kwCxjIRqPn_zq3f7pkWPw5mw,802
|
|
214
214
|
siliconcompiler/tools/nextpnr/nextpnr.py,sha256=B5kr-ZLnt2vDFtS4veIdf0_Cm6yvfS1QVqWhxYa8R24,1712
|
|
215
215
|
siliconcompiler/tools/openroad/__init__.py,sha256=aJLiAfdleczGD9QXw7TYBGrWFiEJhaAWbQJcNlYCOts,3250
|
|
216
|
-
siliconcompiler/tools/openroad/_apr.py,sha256=
|
|
216
|
+
siliconcompiler/tools/openroad/_apr.py,sha256=gfVDBZdG9EFr-Z9LRgriDgRIDBUHCtqzSfghW3BUfF0,51247
|
|
217
217
|
siliconcompiler/tools/openroad/antenna_repair.py,sha256=UC4BjY_qJhYLdb_LFRUXomlmcu1mYnTJF9EAh7xYP_k,2248
|
|
218
218
|
siliconcompiler/tools/openroad/clock_tree_synthesis.py,sha256=ouS1qu6cztiW7KGnDzCSCmPMYHaKbq2i69tAA44ZQS0,1710
|
|
219
219
|
siliconcompiler/tools/openroad/detailed_placement.py,sha256=mvFw9E5x9AHx6h7dbwlUHwOqJFRAE4WFiWLDuM9Q-6I,1571
|
|
@@ -263,12 +263,12 @@ siliconcompiler/tools/openroad/scripts/common/procs.tcl,sha256=gcnX6ZBzTysO1YaK6
|
|
|
263
263
|
siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl,sha256=Jf1K9clDiC9N0LDwCguQMChWQTSfc7uY3Tht_C9wfAg,2089
|
|
264
264
|
siliconcompiler/tools/openroad/scripts/common/read_liberty.tcl,sha256=GeXZ8H3a8fg8o-4KyfZj2N4Db_P9XArZl2T4apfMSZI,778
|
|
265
265
|
siliconcompiler/tools/openroad/scripts/common/read_timing_constraints.tcl,sha256=fsHSSGXkrqOKXjwH7U8XMLMnEPoZpavBVkl4qzLugOU,515
|
|
266
|
-
siliconcompiler/tools/openroad/scripts/common/reports.tcl,sha256=
|
|
266
|
+
siliconcompiler/tools/openroad/scripts/common/reports.tcl,sha256=i6P282tAM9Yig2V1z1ShOrKLgYdysx96M4nrhl6kctc,6881
|
|
267
267
|
siliconcompiler/tools/openroad/scripts/common/screenshot.tcl,sha256=OEE4JpafdOK1cVJw3sie_Fvo03ZkheElhPpvKsgCV0E,447
|
|
268
268
|
siliconcompiler/tools/openroad/scripts/common/write_data.tcl,sha256=xFFgR6mCpQEy8ATfSz1kUFr2BBnaPsv4cSHnWh7JqC8,100
|
|
269
269
|
siliconcompiler/tools/openroad/scripts/common/write_data_physical.tcl,sha256=X0ZsHwfQPRokkCuYjtnw_OL98R9PLjZEMxgLClhsbUg,130
|
|
270
270
|
siliconcompiler/tools/openroad/scripts/common/write_data_timing.tcl,sha256=-clUY9N57lhN_sc0FpjfSj-75cMFdpPnMDiX7YFbp98,37
|
|
271
|
-
siliconcompiler/tools/openroad/scripts/common/write_images.tcl,sha256=
|
|
271
|
+
siliconcompiler/tools/openroad/scripts/common/write_images.tcl,sha256=xD8usvrk0NhvcJBKOMPsMtrLCfbT_vrOlh0Fc5SHC-M,12714
|
|
272
272
|
siliconcompiler/tools/openroad/scripts/rcx/sc_rcx_bench.tcl,sha256=95p_XiRPA1PnofMTMUTesI4JniHnvB8f9_oANGRuC8M,692
|
|
273
273
|
siliconcompiler/tools/openroad/scripts/rcx/sc_rcx_extract.tcl,sha256=Aj9J_8aiOR1WqcQvdx99WyUDcN8RafxXwtrexcS5UcU,489
|
|
274
274
|
siliconcompiler/tools/openroad/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -282,10 +282,10 @@ siliconcompiler/tools/opensta/scripts/sc_check_library.tcl,sha256=kpb1X4GPwNQqDo
|
|
|
282
282
|
siliconcompiler/tools/opensta/scripts/sc_procs.tcl,sha256=4XAgyGRmkk_J2OqxA1glO46BixSgGZFdEYHmezxwwGE,1122
|
|
283
283
|
siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl,sha256=LjVH3rwVXgGH4_1uXze8q390uIX62xeKu8WCsV5zj6I,2620
|
|
284
284
|
siliconcompiler/tools/opensta/scripts/sc_timing.tcl,sha256=gbLr5jmD2o5SwJr04kzpPH0NcvJF-1j5R_Y6ydZgWFc,7982
|
|
285
|
-
siliconcompiler/tools/slang/__init__.py,sha256=
|
|
286
|
-
siliconcompiler/tools/slang/elaborate.py,sha256=
|
|
287
|
-
siliconcompiler/tools/slang/lint.py,sha256=
|
|
288
|
-
siliconcompiler/tools/surelog/__init__.py,sha256=
|
|
285
|
+
siliconcompiler/tools/slang/__init__.py,sha256=ZPW82XeX6e7djO-Mbulixv3JkwAkmwwwDTWS8QKY-RU,6877
|
|
286
|
+
siliconcompiler/tools/slang/elaborate.py,sha256=EZmyljTqb0LRqAGCemcLN2eOUdDmQmBNLlL-TXyC_P4,4739
|
|
287
|
+
siliconcompiler/tools/slang/lint.py,sha256=_YdQHMEwNYuMr3rBr-fLhPWuuMI3gFxzya4MUcUXMdo,999
|
|
288
|
+
siliconcompiler/tools/surelog/__init__.py,sha256=vngLIj7mmcpJwRwYdm-EAsNNjkCWRuC8sm2pW77FCi8,5594
|
|
289
289
|
siliconcompiler/tools/surelog/parse.py,sha256=D2QOY0DN6-AMGX__QL83gTFNoz0nzc1uHMekObcml9s,6016
|
|
290
290
|
siliconcompiler/tools/surelog/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
291
291
|
siliconcompiler/tools/surelog/templates/output.v,sha256=i2dvcHzXxb5rl7tnryQUaWYeqS2q_T70aKoRw0k1DaY,206
|
|
@@ -340,7 +340,7 @@ siliconcompiler/tools/yosys/techmaps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
|
340
340
|
siliconcompiler/tools/yosys/techmaps/lcu_kogge_stone.v,sha256=M4T-ygiKmlsprl5eGGLaV5w6HVqlEepn0wlUDmOkapg,773
|
|
341
341
|
siliconcompiler/tools/yosys/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
342
342
|
siliconcompiler/tools/yosys/templates/abc.const,sha256=TAq9ThdLMYCJGrtToEU0gWcLuEtjE4Gk8huBbTm1v-I,116
|
|
343
|
-
siliconcompiler/toolscripts/_tools.json,sha256=
|
|
343
|
+
siliconcompiler/toolscripts/_tools.json,sha256=RWgVsyLPWBwui9J7ugmYUCn2qlv_jJ1Ton2DdxaBDkE,4403
|
|
344
344
|
siliconcompiler/toolscripts/_tools.py,sha256=P30KY_xbbjl8eHGsPAxDcAzWvJJpiL07ZfGZZDQbdR8,7174
|
|
345
345
|
siliconcompiler/toolscripts/rhel8/install-chisel.sh,sha256=lPORZN7vlBX6sJSv01JOIiDE9-_7GcCZGA7EP5ri3MQ,525
|
|
346
346
|
siliconcompiler/toolscripts/rhel8/install-ghdl.sh,sha256=xCLeEUuJVI_6PVEvnTwBsTWoEHiQg0TY3x-tJXfg6Zk,459
|
|
@@ -456,9 +456,9 @@ siliconcompiler/utils/__init__.py,sha256=y4S1sRW2C3oYXN6PMZOHFO8-ytQ8yJvUoQtqKln
|
|
|
456
456
|
siliconcompiler/utils/asic.py,sha256=cMLs7dneSmh5BlHS0-bZ1tLUpvghTw__gNaUCMpyBds,4986
|
|
457
457
|
siliconcompiler/utils/logging.py,sha256=5tabLIVEftStGDeDulhfBdw4SFp5nHa4J3ZTJKHny8Q,2325
|
|
458
458
|
siliconcompiler/utils/showtools.py,sha256=gaAvjMTFlx_0qLKOtpRJx8Bs51TEeQ-4Pjj8kHfFf3o,1871
|
|
459
|
-
siliconcompiler-0.
|
|
460
|
-
siliconcompiler-0.
|
|
461
|
-
siliconcompiler-0.
|
|
462
|
-
siliconcompiler-0.
|
|
463
|
-
siliconcompiler-0.
|
|
464
|
-
siliconcompiler-0.
|
|
459
|
+
siliconcompiler-0.32.0.dist-info/LICENSE,sha256=lbLR6sRo_CYJOf7SVgHi-U6CZdD8esESEZE5TZazOQE,10766
|
|
460
|
+
siliconcompiler-0.32.0.dist-info/METADATA,sha256=lJeiO2qnQWV9G523iaU4vKHydWLepMChWvkUskYzBDo,11331
|
|
461
|
+
siliconcompiler-0.32.0.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
|
462
|
+
siliconcompiler-0.32.0.dist-info/entry_points.txt,sha256=69hHdWZQBugdza9dYdxodDySxmq6TgwpRYMeH2KfD4Q,1078
|
|
463
|
+
siliconcompiler-0.32.0.dist-info/top_level.txt,sha256=H8TOYhnEUZAV1RJTa8JRtjLIebwHzkQUhA2wkNU2O6M,16
|
|
464
|
+
siliconcompiler-0.32.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|