siliconcompiler 0.32.0__py3-none-any.whl → 0.32.1__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/_common.py +23 -6
- siliconcompiler/apps/sc_dashboard.py +7 -1
- siliconcompiler/apps/sc_show.py +6 -0
- siliconcompiler/core.py +4 -3
- siliconcompiler/fpgas/lattice_ice40.py +6 -16
- siliconcompiler/package/__init__.py +11 -55
- siliconcompiler/package/github.py +124 -0
- siliconcompiler/package/https.py +6 -0
- siliconcompiler/report/dashboard/components/__init__.py +2 -1
- siliconcompiler/report/dashboard/components/flowgraph.py +3 -0
- siliconcompiler/report/dashboard/utils/__init__.py +5 -2
- siliconcompiler/report/utils.py +3 -0
- siliconcompiler/schema/schema_obj.py +3 -2
- siliconcompiler/schema/utils.py +0 -3
- siliconcompiler/targets/fpgaflow_demo.py +0 -2
- siliconcompiler/toolscripts/_tools.json +2 -2
- siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +2 -1
- siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +1 -1
- siliconcompiler/utils/__init__.py +5 -14
- {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/METADATA +1 -1
- {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/RECORD +26 -30
- {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/entry_points.txt +1 -0
- siliconcompiler/fpgas/vpr_example.py +0 -116
- siliconcompiler/toolscripts/rhel8/install-ghdl.sh +0 -25
- siliconcompiler/toolscripts/rhel8/install-yosys-moosic.sh +0 -17
- siliconcompiler/toolscripts/rhel8/install-yosys-slang.sh +0 -22
- siliconcompiler/toolscripts/rhel8/install-yosys.sh +0 -23
- {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/LICENSE +0 -0
- {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/WHEEL +0 -0
- {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/top_level.txt +0 -0
siliconcompiler/_metadata.py
CHANGED
siliconcompiler/apps/_common.py
CHANGED
|
@@ -98,11 +98,28 @@ def pick_manifest(chip, src_file=None):
|
|
|
98
98
|
if chip.get('option', 'jobname') not in all_manifests[chip.design]:
|
|
99
99
|
jobname = list(all_manifests[chip.design].keys())[0]
|
|
100
100
|
|
|
101
|
+
step, index = chip.get('arg', 'step'), chip.get('arg', 'index')
|
|
102
|
+
if step and not index:
|
|
103
|
+
all_nodes = list(all_manifests[chip.design][jobname].keys())
|
|
104
|
+
try:
|
|
105
|
+
all_nodes.remove((None, None))
|
|
106
|
+
except ValueError:
|
|
107
|
+
pass
|
|
108
|
+
for found_step, found_index in sorted(all_nodes):
|
|
109
|
+
if found_step == step:
|
|
110
|
+
index = found_index
|
|
111
|
+
if index is None:
|
|
112
|
+
index = '0'
|
|
113
|
+
if step and index:
|
|
114
|
+
if (step, index) in all_manifests[chip.design][jobname]:
|
|
115
|
+
return all_manifests[chip.design][jobname][(step, index)]
|
|
116
|
+
else:
|
|
117
|
+
chip.logger.error(f'{step}{index} is not a valid node.')
|
|
118
|
+
return None
|
|
119
|
+
|
|
101
120
|
if (None, None) in all_manifests[chip.design][jobname]:
|
|
102
|
-
|
|
103
|
-
else:
|
|
104
|
-
# pick newest manifest
|
|
105
|
-
manifest = list(sorted(all_manifests[chip.design][jobname].values(),
|
|
106
|
-
key=lambda file: os.stat(file).st_ctime))[-1]
|
|
121
|
+
return all_manifests[chip.design][jobname][None, None]
|
|
107
122
|
|
|
108
|
-
|
|
123
|
+
# pick newest manifest
|
|
124
|
+
return list(sorted(all_manifests[chip.design][jobname].values(),
|
|
125
|
+
key=lambda file: os.stat(file).st_ctime))[-1]
|
|
@@ -63,6 +63,8 @@ To include another chip object to compare to:
|
|
|
63
63
|
if manifest:
|
|
64
64
|
chip.logger.info(f'Loading manifest: {manifest}')
|
|
65
65
|
chip.read_manifest(manifest)
|
|
66
|
+
else:
|
|
67
|
+
manifest = chip.get('option', 'cfg')
|
|
66
68
|
|
|
67
69
|
# Error checking
|
|
68
70
|
design = chip.get('design')
|
|
@@ -70,6 +72,10 @@ To include another chip object to compare to:
|
|
|
70
72
|
chip.logger.error('Design not loaded')
|
|
71
73
|
return 1
|
|
72
74
|
|
|
75
|
+
if not manifest:
|
|
76
|
+
chip.logger.error('Unable to determine job manifest')
|
|
77
|
+
return 2
|
|
78
|
+
|
|
73
79
|
graph_chips = []
|
|
74
80
|
if switches['graph_cfg']:
|
|
75
81
|
for i, name_and_file_path in enumerate(switches['graph_cfg']):
|
|
@@ -86,7 +92,7 @@ To include another chip object to compare to:
|
|
|
86
92
|
raise ValueError(('graph_cfg accepts a max of 2 values, you supplied'
|
|
87
93
|
f' {args} in "-graph_cfg {name_and_file_path}"'))
|
|
88
94
|
if not os.path.isfile(file_path):
|
|
89
|
-
raise ValueError(f'not a valid file path
|
|
95
|
+
raise ValueError(f'not a valid file path: {file_path}')
|
|
90
96
|
graph_chip = siliconcompiler.core.Chip(design='')
|
|
91
97
|
graph_chip.read_manifest(file_path)
|
|
92
98
|
graph_chips.append({
|
siliconcompiler/apps/sc_show.py
CHANGED
|
@@ -111,6 +111,8 @@ def main():
|
|
|
111
111
|
if manifest:
|
|
112
112
|
chip.logger.info(f'Loading manifest: {manifest}')
|
|
113
113
|
chip.read_manifest(manifest)
|
|
114
|
+
else:
|
|
115
|
+
manifest = chip.get('option', 'cfg')
|
|
114
116
|
|
|
115
117
|
# Error checking
|
|
116
118
|
design = chip.get('design')
|
|
@@ -120,6 +122,10 @@ def main():
|
|
|
120
122
|
'-cfg, -design, and/or inputs.')
|
|
121
123
|
return 1
|
|
122
124
|
|
|
125
|
+
if not manifest:
|
|
126
|
+
chip.logger.error('Unable to determine job manifest')
|
|
127
|
+
return 2
|
|
128
|
+
|
|
123
129
|
# Read in file
|
|
124
130
|
if filename:
|
|
125
131
|
chip.logger.info(f"Displaying {filename}")
|
siliconcompiler/core.py
CHANGED
|
@@ -3239,9 +3239,10 @@ class Chip:
|
|
|
3239
3239
|
if sc_step and sc_index:
|
|
3240
3240
|
search_nodes.append((sc_step, sc_index))
|
|
3241
3241
|
elif sc_step:
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3242
|
+
if flow is not None:
|
|
3243
|
+
for check_step, check_index in nodes_to_execute(self, flow):
|
|
3244
|
+
if sc_step == check_step:
|
|
3245
|
+
search_nodes.append((check_step, check_index))
|
|
3245
3246
|
else:
|
|
3246
3247
|
if flow is not None:
|
|
3247
3248
|
for nodes in _get_flowgraph_execution_order(self,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
from siliconcompiler.utils import register_sc_data_source
|
|
1
|
+
from siliconcompiler import Chip, FPGA
|
|
3
2
|
|
|
4
3
|
|
|
5
4
|
####################################################
|
|
@@ -13,22 +12,13 @@ def setup():
|
|
|
13
12
|
yosys + nextpnr
|
|
14
13
|
'''
|
|
15
14
|
|
|
16
|
-
vendor = 'lattice'
|
|
17
|
-
|
|
18
|
-
lut_size = '4'
|
|
19
|
-
|
|
20
15
|
all_fpgas = []
|
|
21
16
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
for part_name in all_part_names:
|
|
27
|
-
fpga = siliconcompiler.FPGA(part_name, package='siliconcompiler_data')
|
|
28
|
-
register_sc_data_source(fpga)
|
|
17
|
+
for part_name in ("ice40up5k-sg48",):
|
|
18
|
+
fpga = FPGA(part_name)
|
|
29
19
|
|
|
30
|
-
fpga.set('fpga', part_name, 'vendor',
|
|
31
|
-
fpga.set('fpga', part_name, 'lutsize',
|
|
20
|
+
fpga.set('fpga', part_name, 'vendor', 'lattice')
|
|
21
|
+
fpga.set('fpga', part_name, 'lutsize', 4)
|
|
32
22
|
|
|
33
23
|
all_fpgas.append(fpga)
|
|
34
24
|
|
|
@@ -37,5 +27,5 @@ def setup():
|
|
|
37
27
|
|
|
38
28
|
#########################
|
|
39
29
|
if __name__ == "__main__":
|
|
40
|
-
for fpga in setup(
|
|
30
|
+
for fpga in setup(Chip('<fpga>')):
|
|
41
31
|
fpga.write_manifest(f'{fpga.design}.json')
|
|
@@ -10,9 +10,6 @@ import functools
|
|
|
10
10
|
import time
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
|
|
13
|
-
from github import Github
|
|
14
|
-
import github.Auth
|
|
15
|
-
|
|
16
13
|
from siliconcompiler.utils import get_plugins
|
|
17
14
|
|
|
18
15
|
|
|
@@ -219,58 +216,6 @@ def register_python_data_source(chip,
|
|
|
219
216
|
ref=ref)
|
|
220
217
|
|
|
221
218
|
|
|
222
|
-
def register_private_github_data_source(chip,
|
|
223
|
-
package_name,
|
|
224
|
-
repository,
|
|
225
|
-
release,
|
|
226
|
-
artifact):
|
|
227
|
-
gh = Github(auth=github.Auth.Token(__get_github_auth_token(package_name)))
|
|
228
|
-
repo = gh.get_repo(repository)
|
|
229
|
-
|
|
230
|
-
if not release:
|
|
231
|
-
release = repo.get_latest_release().tag_name
|
|
232
|
-
|
|
233
|
-
url = None
|
|
234
|
-
for repo_release in repo.get_releases():
|
|
235
|
-
if repo_release.tag_name == release:
|
|
236
|
-
for asset in repo_release.assets:
|
|
237
|
-
if asset.name == artifact:
|
|
238
|
-
url = asset.url
|
|
239
|
-
|
|
240
|
-
if not url:
|
|
241
|
-
raise ValueError(f'Unable to find release asset: {repository}/{release}/{artifact}')
|
|
242
|
-
|
|
243
|
-
chip.register_source(
|
|
244
|
-
package_name,
|
|
245
|
-
path=url,
|
|
246
|
-
ref=release)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
def __get_github_auth_token(package_name):
|
|
250
|
-
token_name = package_name.upper()
|
|
251
|
-
for tok in ('#', '$', '&', '-', '=', '!', '/'):
|
|
252
|
-
token_name = token_name.replace(tok, '')
|
|
253
|
-
|
|
254
|
-
search_env = (
|
|
255
|
-
f'GITHUB_{token_name}_TOKEN',
|
|
256
|
-
'GITHUB_TOKEN',
|
|
257
|
-
'GIT_TOKEN'
|
|
258
|
-
)
|
|
259
|
-
|
|
260
|
-
token = None
|
|
261
|
-
for env in search_env:
|
|
262
|
-
token = os.environ.get(env, None)
|
|
263
|
-
|
|
264
|
-
if token:
|
|
265
|
-
break
|
|
266
|
-
|
|
267
|
-
if not token:
|
|
268
|
-
raise ValueError('Unable to determine authorization token for GitHub, '
|
|
269
|
-
f'please set one of the following environmental variables: {search_env}')
|
|
270
|
-
|
|
271
|
-
return token
|
|
272
|
-
|
|
273
|
-
|
|
274
219
|
@functools.lru_cache(maxsize=1)
|
|
275
220
|
def __get_python_module_mapping():
|
|
276
221
|
mapping = {}
|
|
@@ -298,3 +243,14 @@ def __get_python_module_mapping():
|
|
|
298
243
|
mapping.setdefault(module, []).append(dist_name)
|
|
299
244
|
|
|
300
245
|
return mapping
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def register_private_github_data_source(chip,
|
|
249
|
+
package_name,
|
|
250
|
+
repository,
|
|
251
|
+
release,
|
|
252
|
+
artifact):
|
|
253
|
+
chip.register_source(
|
|
254
|
+
package_name,
|
|
255
|
+
path=f"github+private://{repository}/{release}/{artifact}",
|
|
256
|
+
ref=release)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from fasteners import InterProcessLock
|
|
3
|
+
from github import Github, Auth
|
|
4
|
+
from github.GithubException import UnknownObjectException
|
|
5
|
+
from urllib.parse import urlparse
|
|
6
|
+
from siliconcompiler.package import get_download_cache_path
|
|
7
|
+
from siliconcompiler.package import aquire_data_lock, release_data_lock
|
|
8
|
+
from siliconcompiler.package.https import _http_resolver
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_resolver(url):
|
|
12
|
+
if url.scheme in ("github",):
|
|
13
|
+
return github_any_resolver
|
|
14
|
+
if url.scheme in ("github+private",):
|
|
15
|
+
return github_private_resolver
|
|
16
|
+
return None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def github_any_resolver(chip, package, path, ref, url, fetch):
|
|
20
|
+
data_path, data_path_lock = get_download_cache_path(chip, package, ref)
|
|
21
|
+
|
|
22
|
+
if not fetch:
|
|
23
|
+
return data_path, False
|
|
24
|
+
|
|
25
|
+
# Acquire lock
|
|
26
|
+
data_lock = InterProcessLock(data_path_lock)
|
|
27
|
+
aquire_data_lock(data_path, data_lock)
|
|
28
|
+
|
|
29
|
+
if os.path.exists(data_path):
|
|
30
|
+
release_data_lock(data_lock)
|
|
31
|
+
return data_path, False
|
|
32
|
+
|
|
33
|
+
try:
|
|
34
|
+
return _github_resolver(chip, package, path, ref, url, data_lock)
|
|
35
|
+
except UnknownObjectException:
|
|
36
|
+
return github_private_resolver(chip, package, path, ref, url, fetch, data_lock=data_lock)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def github_private_resolver(chip, package, path, ref, url, fetch, data_lock=None):
|
|
40
|
+
data_path, data_path_lock = get_download_cache_path(chip, package, ref)
|
|
41
|
+
|
|
42
|
+
if not fetch:
|
|
43
|
+
return data_path, False
|
|
44
|
+
|
|
45
|
+
if not data_lock:
|
|
46
|
+
# Acquire lock
|
|
47
|
+
data_lock = InterProcessLock(data_path_lock)
|
|
48
|
+
aquire_data_lock(data_path, data_lock)
|
|
49
|
+
|
|
50
|
+
if os.path.exists(data_path):
|
|
51
|
+
release_data_lock(data_lock)
|
|
52
|
+
return data_path, False
|
|
53
|
+
|
|
54
|
+
gh = Github(auth=Auth.Token(__get_github_auth_token(package)))
|
|
55
|
+
|
|
56
|
+
return _github_resolver(chip, package, path, ref, url, data_lock, gh=gh)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _github_resolver(chip, package, path, ref, url, data_lock, gh=None):
|
|
60
|
+
if not gh:
|
|
61
|
+
gh = Github()
|
|
62
|
+
|
|
63
|
+
url_parts = (url.netloc, *url.path.split("/")[1:])
|
|
64
|
+
|
|
65
|
+
if len(url_parts) != 4:
|
|
66
|
+
raise ValueError(
|
|
67
|
+
f"{path} is not in the proper form: <owner>/<repository>/<version>/<artifact>")
|
|
68
|
+
|
|
69
|
+
repository = "/".join(url_parts[0:2])
|
|
70
|
+
release = url_parts[2]
|
|
71
|
+
artifact = url_parts[3]
|
|
72
|
+
|
|
73
|
+
release_url = __get_release_url(gh, repository, release, artifact)
|
|
74
|
+
|
|
75
|
+
return _http_resolver(chip, package, release_url, ref, urlparse(release_url), data_lock)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def __get_release_url(gh, repository, release, artifact):
|
|
79
|
+
if artifact == f"{release}.zip":
|
|
80
|
+
return f"https://github.com/{repository}/archive/refs/tags/{release}.zip"
|
|
81
|
+
if artifact == f"{release}.tar.gz":
|
|
82
|
+
return f"https://github.com/{repository}/archive/refs/tags/{release}.tar.gz"
|
|
83
|
+
|
|
84
|
+
repo = gh.get_repo(repository)
|
|
85
|
+
|
|
86
|
+
if not release:
|
|
87
|
+
release = repo.get_latest_release().tag_name
|
|
88
|
+
|
|
89
|
+
url = None
|
|
90
|
+
for repo_release in repo.get_releases():
|
|
91
|
+
if repo_release.tag_name == release:
|
|
92
|
+
for asset in repo_release.assets:
|
|
93
|
+
if asset.name == artifact:
|
|
94
|
+
url = asset.url
|
|
95
|
+
|
|
96
|
+
if not url:
|
|
97
|
+
raise ValueError(f'Unable to find release asset: {repository}/{release}/{artifact}')
|
|
98
|
+
|
|
99
|
+
return url
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def __get_github_auth_token(package_name):
|
|
103
|
+
token_name = package_name.upper()
|
|
104
|
+
for tok in ('#', '$', '&', '-', '=', '!', '/'):
|
|
105
|
+
token_name = token_name.replace(tok, '')
|
|
106
|
+
|
|
107
|
+
search_env = (
|
|
108
|
+
f'GITHUB_{token_name}_TOKEN',
|
|
109
|
+
'GITHUB_TOKEN',
|
|
110
|
+
'GIT_TOKEN'
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
token = None
|
|
114
|
+
for env in search_env:
|
|
115
|
+
token = os.environ.get(env, None)
|
|
116
|
+
|
|
117
|
+
if token:
|
|
118
|
+
break
|
|
119
|
+
|
|
120
|
+
if not token:
|
|
121
|
+
raise ValueError('Unable to determine authorization token for GitHub, '
|
|
122
|
+
f'please set one of the following environmental variables: {search_env}')
|
|
123
|
+
|
|
124
|
+
return token
|
siliconcompiler/package/https.py
CHANGED
|
@@ -35,6 +35,12 @@ def http_resolver(chip, package, path, ref, url, fetch):
|
|
|
35
35
|
release_data_lock(data_lock)
|
|
36
36
|
return data_path, False
|
|
37
37
|
|
|
38
|
+
return _http_resolver(chip, package, path, ref, url, data_lock)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _http_resolver(chip, package, path, ref, url, data_lock):
|
|
42
|
+
data_path, _ = get_download_cache_path(chip, package, ref)
|
|
43
|
+
|
|
38
44
|
extract_from_url(chip, package, path, ref, url, data_path)
|
|
39
45
|
|
|
40
46
|
release_data_lock(data_lock)
|
|
@@ -9,6 +9,7 @@ import streamlit_antd_components as sac
|
|
|
9
9
|
|
|
10
10
|
from PIL import Image
|
|
11
11
|
|
|
12
|
+
import siliconcompiler
|
|
12
13
|
from siliconcompiler import __version__ as sc_version
|
|
13
14
|
from siliconcompiler import utils
|
|
14
15
|
from siliconcompiler.report import report
|
|
@@ -31,7 +32,7 @@ SC_MENU = {
|
|
|
31
32
|
"Report a Bug":
|
|
32
33
|
'''https://github.com/siliconcompiler/siliconcompiler/issues''',
|
|
33
34
|
"About": "\n\n".join(SC_ABOUT)}
|
|
34
|
-
SC_DATA_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '
|
|
35
|
+
SC_DATA_ROOT = os.path.abspath(os.path.join(os.path.dirname(siliconcompiler.__file__), 'data'))
|
|
35
36
|
SC_LOGO_PATH = os.path.join(SC_DATA_ROOT, 'logo.png')
|
|
36
37
|
SC_FONT_PATH = os.path.join(SC_DATA_ROOT, 'RobotoMono', 'RobotoMono-Regular.ttf')
|
|
37
38
|
|
|
@@ -24,8 +24,9 @@ def make_node_to_step_index_map(chip, metric_dataframe):
|
|
|
24
24
|
nodes of the selected chip
|
|
25
25
|
'''
|
|
26
26
|
node_to_step_index_map = {}
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
if chip.get('option', 'flow'):
|
|
28
|
+
for step, index in _get_flowgraph_nodes(chip, chip.get('option', 'flow')):
|
|
29
|
+
node_to_step_index_map[f'{step}{index}'] = (step, index)
|
|
29
30
|
|
|
30
31
|
# concatenate step and index
|
|
31
32
|
metric_dataframe.columns = metric_dataframe.columns.map(lambda x: f'{x[0]}{x[1]}')
|
|
@@ -54,6 +55,8 @@ def make_metric_to_metric_unit_map(metric_dataframe):
|
|
|
54
55
|
|
|
55
56
|
|
|
56
57
|
def is_running(chip):
|
|
58
|
+
if not chip.get('option', 'flow'):
|
|
59
|
+
return False
|
|
57
60
|
for step, index in _get_flowgraph_nodes(chip, chip.get('option', 'flow')):
|
|
58
61
|
state = chip.get('record', 'status', step=step, index=index)
|
|
59
62
|
if not NodeStatus.is_done(state):
|
siliconcompiler/report/utils.py
CHANGED
|
@@ -40,6 +40,9 @@ def _find_summary_metrics(chip, metrics_map):
|
|
|
40
40
|
def _collect_data(chip, flow=None, flowgraph_nodes=None, format_as_string=True):
|
|
41
41
|
if not flow:
|
|
42
42
|
flow = chip.get('option', 'flow')
|
|
43
|
+
if not flow:
|
|
44
|
+
return [], {}, {}, {}, [], {}
|
|
45
|
+
|
|
43
46
|
if not flowgraph_nodes:
|
|
44
47
|
flowgraph_nodes = nodes_to_execute(chip)
|
|
45
48
|
# only report tool based steps functions
|
|
@@ -39,7 +39,7 @@ except ImportError:
|
|
|
39
39
|
_has_yaml = False
|
|
40
40
|
|
|
41
41
|
from .schema_cfg import schema_cfg
|
|
42
|
-
from .utils import escape_val_tcl,
|
|
42
|
+
from .utils import escape_val_tcl, translate_loglevel, PerNode, Scope
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
class Schema:
|
|
@@ -1122,7 +1122,8 @@ class Schema:
|
|
|
1122
1122
|
|
|
1123
1123
|
if template:
|
|
1124
1124
|
fout.write(template.render(manifest_dict='\n'.join(tcl_set_cmds),
|
|
1125
|
-
scroot=os.path.abspath(
|
|
1125
|
+
scroot=os.path.abspath(
|
|
1126
|
+
os.path.join(os.path.dirname(__file__), '..')),
|
|
1126
1127
|
record_access=self._do_record_access(),
|
|
1127
1128
|
record_access_id=Schema._RECORD_ACCESS_IDENTIFIER))
|
|
1128
1129
|
else:
|
siliconcompiler/schema/utils.py
CHANGED
|
@@ -4,13 +4,10 @@
|
|
|
4
4
|
# SC dependencies outside of its directory, since it may be used by tool drivers
|
|
5
5
|
# that have isolated Python environments.
|
|
6
6
|
|
|
7
|
-
import os
|
|
8
7
|
import re
|
|
9
8
|
import sys
|
|
10
9
|
from enum import Enum
|
|
11
10
|
|
|
12
|
-
PACKAGE_ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
|
|
13
|
-
|
|
14
11
|
|
|
15
12
|
#############################################################################
|
|
16
13
|
# ENUM DEFINITIONs
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import siliconcompiler
|
|
2
2
|
from siliconcompiler import SiliconCompilerError
|
|
3
3
|
from siliconcompiler.fpgas import lattice_ice40
|
|
4
|
-
from siliconcompiler.fpgas import vpr_example
|
|
5
4
|
|
|
6
5
|
from siliconcompiler.flows import fpgaflow
|
|
7
6
|
|
|
@@ -30,7 +29,6 @@ def setup(chip, partname=None):
|
|
|
30
29
|
|
|
31
30
|
# 2. Load all available FPGAs
|
|
32
31
|
chip.use(lattice_ice40)
|
|
33
|
-
chip.use(vpr_example)
|
|
34
32
|
|
|
35
33
|
# 3. Load flow
|
|
36
34
|
chip.use(fpgaflow, partname=partname)
|
|
@@ -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": "c2eb4321bdfcbf353eaf72b7d37bb57071500a59",
|
|
5
5
|
"docker-cmds": [
|
|
6
6
|
"# Remove OR-Tools files",
|
|
7
7
|
"RUN rm -f $SC_PREFIX/Makefile $SC_PREFIX/README.md",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
},
|
|
92
92
|
"yosys": {
|
|
93
93
|
"git-url": "https://github.com/YosysHQ/yosys.git",
|
|
94
|
-
"git-commit": "v0.
|
|
94
|
+
"git-commit": "v0.51",
|
|
95
95
|
"version-prefix": "",
|
|
96
96
|
"auto-update": true
|
|
97
97
|
},
|
|
@@ -5,7 +5,8 @@ set -e
|
|
|
5
5
|
# Get directory of script
|
|
6
6
|
src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
|
|
7
7
|
|
|
8
|
-
sudo apt-get install -y build-essential bison flex gperf libreadline-dev libncurses-dev
|
|
8
|
+
sudo apt-get install -y build-essential bison flex gperf libreadline-dev libncurses-dev \
|
|
9
|
+
autotools-dev automake
|
|
9
10
|
|
|
10
11
|
mkdir -p deps
|
|
11
12
|
cd deps
|
|
@@ -5,7 +5,6 @@ import re
|
|
|
5
5
|
import psutil
|
|
6
6
|
import shutil
|
|
7
7
|
from pathlib import Path, PurePosixPath
|
|
8
|
-
from siliconcompiler._metadata import version as sc_version
|
|
9
8
|
from jinja2 import Environment, FileSystemLoader
|
|
10
9
|
|
|
11
10
|
import sys
|
|
@@ -15,11 +14,6 @@ else:
|
|
|
15
14
|
from importlib.metadata import entry_points
|
|
16
15
|
|
|
17
16
|
|
|
18
|
-
PACKAGE_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
19
|
-
|
|
20
|
-
_siliconcompiler_data_path = 'git+https://github.com/siliconcompiler/siliconcompiler'
|
|
21
|
-
|
|
22
|
-
|
|
23
17
|
def link_symlink_copy(srcfile, dstfile):
|
|
24
18
|
# first try hard linking, then symbolic linking,
|
|
25
19
|
# and finally just copy the file
|
|
@@ -223,12 +217,6 @@ def default_email_credentials_file():
|
|
|
223
217
|
return cfg_file
|
|
224
218
|
|
|
225
219
|
|
|
226
|
-
def register_sc_data_source(chip):
|
|
227
|
-
chip.register_source('siliconcompiler_data',
|
|
228
|
-
_siliconcompiler_data_path,
|
|
229
|
-
'v'+sc_version)
|
|
230
|
-
|
|
231
|
-
|
|
232
220
|
@contextlib.contextmanager
|
|
233
221
|
def sc_open(path, *args, **kwargs):
|
|
234
222
|
kwargs['errors'] = 'ignore_with_warning'
|
|
@@ -240,7 +228,10 @@ def sc_open(path, *args, **kwargs):
|
|
|
240
228
|
pass
|
|
241
229
|
|
|
242
230
|
|
|
243
|
-
def get_file_template(path,
|
|
231
|
+
def get_file_template(path,
|
|
232
|
+
root=os.path.join(
|
|
233
|
+
os.path.dirname(
|
|
234
|
+
os.path.dirname(os.path.abspath(__file__))), 'templates')):
|
|
244
235
|
if os.path.isabs(path):
|
|
245
236
|
root = os.path.dirname(path)
|
|
246
237
|
path = os.path.basename(path)
|
|
@@ -266,7 +257,7 @@ def safecompare(chip, value, op, goal):
|
|
|
266
257
|
elif op == "!=":
|
|
267
258
|
return bool(value != goal)
|
|
268
259
|
else:
|
|
269
|
-
|
|
260
|
+
raise ValueError(f"Illegal comparison operation {op}")
|
|
270
261
|
|
|
271
262
|
|
|
272
263
|
###########################################################################
|
|
@@ -1,21 +1,21 @@
|
|
|
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=lAUnYGIiSC2Gju4xfT-0tw5oPuAIZAJFq_4BI3zHSR0,1264
|
|
5
|
+
siliconcompiler/core.py,sha256=_VQxqJns00FhDkN0Q-FOAWfz6ezo0zFdZ4bdADOSxWs,138941
|
|
6
6
|
siliconcompiler/flowgraph.py,sha256=Z_c4DEh1JvHE_u0O2M2Y1_dn6aGOAECX-HzrIjn0ky4,22084
|
|
7
7
|
siliconcompiler/issue.py,sha256=9ZpdEBh8QB56-bZ1YXRnjqgg9hwnFty2u1o5oI66W7M,11125
|
|
8
8
|
siliconcompiler/units.py,sha256=M_ZxViSysymv8mFdCtbQwfccEwEsBeiCmc8TcnoXZbk,5845
|
|
9
9
|
siliconcompiler/use.py,sha256=zu17ogJv0x2t_6J9yb_5tH1DjridVQj0MrIRxJRJVGQ,6202
|
|
10
10
|
siliconcompiler/apps/__init__.py,sha256=6LuAljPtVB6g5yXl_58ODoB4Svb6UfKaDbX1e0aNZfE,668
|
|
11
|
-
siliconcompiler/apps/_common.py,sha256=
|
|
11
|
+
siliconcompiler/apps/_common.py,sha256=YK5zNHHnHeEWwcK27wXwsaApsrphUenh9uQzGf2zKvs,4425
|
|
12
12
|
siliconcompiler/apps/sc.py,sha256=qHrfzgt1y748jX0nLXn9Hx1WuwXXmHFGhF4LaQTCpeE,3259
|
|
13
|
-
siliconcompiler/apps/sc_dashboard.py,sha256=
|
|
13
|
+
siliconcompiler/apps/sc_dashboard.py,sha256=60ccCeC6RxPSt4uxej6bEJlpwViiEvRbZlqXtAItf98,3633
|
|
14
14
|
siliconcompiler/apps/sc_install.py,sha256=qz6Dni7HcYrl9V7mDk2hqMYY4BwqRceNb-Gd2UE5zzk,8569
|
|
15
15
|
siliconcompiler/apps/sc_issue.py,sha256=PUXFWne6MWY0Ntak3PnMZ84tpEZ5S1Pta5B3AkxMdoY,6404
|
|
16
16
|
siliconcompiler/apps/sc_remote.py,sha256=vMdh9LdFJ-0vFzYMFttcERXCFwzNMmAQyXPIxoNCmhg,7168
|
|
17
17
|
siliconcompiler/apps/sc_server.py,sha256=d3SCfKtNneIBiAk7Udc5SqXvSIoFSK40iHWcKuY7unk,894
|
|
18
|
-
siliconcompiler/apps/sc_show.py,sha256=
|
|
18
|
+
siliconcompiler/apps/sc_show.py,sha256=q3ccwnq3eLE0kC5PlL7n1tcvTzhRqj0q7u-4k_Cxu2Y,4809
|
|
19
19
|
siliconcompiler/apps/smake.py,sha256=jj69IuMLf4jblpVGeLT3GAvC-zDLHwPq16YPKtHosdA,7124
|
|
20
20
|
siliconcompiler/apps/utils/replay.py,sha256=iAsYFb2mVcXw3c9SYV1pFiiQLwZKiub9uQjsO5v-hlo,5901
|
|
21
21
|
siliconcompiler/apps/utils/summarize.py,sha256=CC6YwyEShiuZekU-D1Uk_m074aj8LviwotcgJMvZhuY,1250
|
|
@@ -42,14 +42,14 @@ siliconcompiler/flows/showflow.py,sha256=1pIeRo5IwPPrlm8luY4QGrFYmg66m13ImCAeoEr
|
|
|
42
42
|
siliconcompiler/flows/signoffflow.py,sha256=y3sM5M2HesrRYidKCZ6obDvYwzxAbD3qVEuHekAAaTI,1515
|
|
43
43
|
siliconcompiler/flows/synflow.py,sha256=Tydj7b_Aq610IOoo4CQ_FA4Nletvfn-l2XyZ0NHlJdc,3957
|
|
44
44
|
siliconcompiler/fpgas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
-
siliconcompiler/fpgas/lattice_ice40.py,sha256=
|
|
46
|
-
siliconcompiler/fpgas/vpr_example.py,sha256=xcTgCvxSadcBnYVrglAi5XM4nn_raXWFvr_oe62tCPI,4998
|
|
45
|
+
siliconcompiler/fpgas/lattice_ice40.py,sha256=NsFgGvTnBVXpJeg3IiKKufsUwV7TYl-XU6mE2jNjK60,791
|
|
47
46
|
siliconcompiler/libs/__init__.py,sha256=KXw1vU0KP83fg3rB8iKkpDhJZBLz_PWGZG65L3lAQ1Q,86
|
|
48
47
|
siliconcompiler/optimizer/__init__.py,sha256=wdSuv3U7hoSdZn-TkaQtYehVdhS5F35Mb1McgaUw3hc,6599
|
|
49
48
|
siliconcompiler/optimizer/vizier.py,sha256=-JF3E28SLhfkjluz2R5dFnjg5NjU1z7Okb-K_ZK9H3s,9035
|
|
50
|
-
siliconcompiler/package/__init__.py,sha256=
|
|
49
|
+
siliconcompiler/package/__init__.py,sha256=4Ps97LFRmBd7-grfB8h1tQsLFF4eZYiAAuSBReX8vpo,8014
|
|
51
50
|
siliconcompiler/package/git.py,sha256=c40uXesG1x-CgH7yat5Cq6iCjoUHp_jE_VXeHGtzeOk,3258
|
|
52
|
-
siliconcompiler/package/
|
|
51
|
+
siliconcompiler/package/github.py,sha256=NCTMkV3WKNwVasciC30qGglysRMgqEWzC-0TXSSwmbU,3768
|
|
52
|
+
siliconcompiler/package/https.py,sha256=_o0VpvImgBlW_egwgWXc0JC0T0ixFSV-Gu8dGGso4hM,3210
|
|
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
|
|
@@ -75,19 +75,19 @@ siliconcompiler/report/html_report.py,sha256=Wh5X7iQpfIEHcs-WrVE9dtDf-gkz3GhT_yf
|
|
|
75
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
|
-
siliconcompiler/report/utils.py,sha256=
|
|
78
|
+
siliconcompiler/report/utils.py,sha256=bjoVGGlVpqBWxzGj__1Qg2BJ5ok4IbHGr1fEvYg0SOg,6479
|
|
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=
|
|
83
|
-
siliconcompiler/report/dashboard/components/flowgraph.py,sha256=
|
|
82
|
+
siliconcompiler/report/dashboard/components/__init__.py,sha256=jEztqYs8s7W_eggXABaqDJ3zREdMsoLcdHCfr1Uj5LY,18538
|
|
83
|
+
siliconcompiler/report/dashboard/components/flowgraph.py,sha256=RkrSJJYyPBk03jCMuhkNhTV1JOlFvFILntwV8kBsN_I,3593
|
|
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
|
|
86
86
|
siliconcompiler/report/dashboard/layouts/_common.py,sha256=_Iz5IxftnNKYvhQNA-PWpyv8R1uejvrVUMGmUIEvPf0,1276
|
|
87
87
|
siliconcompiler/report/dashboard/layouts/vertical_flowgraph.py,sha256=ml8qPg2-g3n-HW9E4znwkaYBISyloUjD19_Ooy3iCn0,3425
|
|
88
88
|
siliconcompiler/report/dashboard/layouts/vertical_flowgraph_node_tab.py,sha256=09n3LqXedQOX8UizlTn9BHyepizmbwz9SIN0QB2PNkA,4229
|
|
89
89
|
siliconcompiler/report/dashboard/layouts/vertical_flowgraph_sac_tabs.py,sha256=g6lrnXJVEkTh7OQY1xCgl_q0So0XewItuY0sjnjaBCA,4086
|
|
90
|
-
siliconcompiler/report/dashboard/utils/__init__.py,sha256=
|
|
90
|
+
siliconcompiler/report/dashboard/utils/__init__.py,sha256=1ILJbIAx2QQ12enHflzaQmj0pk8UhkC5YdZO9EPAVCo,2643
|
|
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
|
|
@@ -98,8 +98,8 @@ siliconcompiler/scheduler/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
|
98
98
|
siliconcompiler/scheduler/validation/email_credentials.json,sha256=hkJs0U2h2Bgm1zxeXvanIJ-prPhpn_aU6e3qwIs7qA0,1997
|
|
99
99
|
siliconcompiler/schema/__init__.py,sha256=Gdny2AwDdg-X3RvghOHQYl3aG2alvMuK5CsSkFGKuYU,120
|
|
100
100
|
siliconcompiler/schema/schema_cfg.py,sha256=oHE1hEgLFgU2r4sValymY_-84SCchU_6j0BGkXFwdjw,188876
|
|
101
|
-
siliconcompiler/schema/schema_obj.py,sha256=
|
|
102
|
-
siliconcompiler/schema/utils.py,sha256=
|
|
101
|
+
siliconcompiler/schema/schema_obj.py,sha256=tb_iVnXzI6Sjos2BCNFKXFu4-Zm2lc4S3buTQVwdyoo,76221
|
|
102
|
+
siliconcompiler/schema/utils.py,sha256=R4YZ4-iMBb7wQCsFO3oJMijOhDKcyAzIBNPEtS9E2Fg,4415
|
|
103
103
|
siliconcompiler/sphinx_ext/__init__.py,sha256=nXMFqWewqjy8FZbExAp2wtVu8EmZ3cXKvomlpxnzKUE,1859
|
|
104
104
|
siliconcompiler/sphinx_ext/dynamicgen.py,sha256=QwrigvFqj900Sud4qICNlKYAxqLQOxSvzqRKwNAz02o,34575
|
|
105
105
|
siliconcompiler/sphinx_ext/schemagen.py,sha256=7m9mKhixVnNsrVcVzadNFsR_SB7BCFMNmOZWiGUtM20,7787
|
|
@@ -107,7 +107,7 @@ siliconcompiler/sphinx_ext/utils.py,sha256=JNktfS5nYZE_DnXRX_fwOBkc5kWgLkB0Urxbe
|
|
|
107
107
|
siliconcompiler/targets/__init__.py,sha256=PVbYMlHPHGnkmmokOBDk4zP5tRHF1pPdP-NKpJowmCQ,770
|
|
108
108
|
siliconcompiler/targets/asap7_demo.py,sha256=RBCjAx3laq2xUT7w--b9oIVx8r87QyKfBRX35JQICzw,2544
|
|
109
109
|
siliconcompiler/targets/asic_demo.py,sha256=jRvbDhMZDGf-8AQ241vu8qLgloxPUToAn01Ybaaj_wo,1094
|
|
110
|
-
siliconcompiler/targets/fpgaflow_demo.py,sha256=
|
|
110
|
+
siliconcompiler/targets/fpgaflow_demo.py,sha256=U88q6CuNH6Dy9nT3WNGkd_rOkGPohUM0eUB8zCERa9s,1216
|
|
111
111
|
siliconcompiler/targets/freepdk45_demo.py,sha256=O983Nwrs9h_HHlHtlUUrP0cPgdf3IlME1yWXCRgdL_A,1953
|
|
112
112
|
siliconcompiler/targets/gf180_demo.py,sha256=-GiyRNVnoouILXV7_mCANSsOT6gmlmFKqn0JOJ_vS9g,3062
|
|
113
113
|
siliconcompiler/targets/ihp130_demo.py,sha256=3nCxfM0-XpZWjhE1yQezZKBGJwtf6AjpeinPM4z6wv0,2688
|
|
@@ -340,10 +340,9 @@ 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=wySmyhpCEJPhBq-q0O85A0Jnzz8ygKlXT2sTudSV88g,4403
|
|
344
344
|
siliconcompiler/toolscripts/_tools.py,sha256=P30KY_xbbjl8eHGsPAxDcAzWvJJpiL07ZfGZZDQbdR8,7174
|
|
345
345
|
siliconcompiler/toolscripts/rhel8/install-chisel.sh,sha256=lPORZN7vlBX6sJSv01JOIiDE9-_7GcCZGA7EP5ri3MQ,525
|
|
346
|
-
siliconcompiler/toolscripts/rhel8/install-ghdl.sh,sha256=xCLeEUuJVI_6PVEvnTwBsTWoEHiQg0TY3x-tJXfg6Zk,459
|
|
347
346
|
siliconcompiler/toolscripts/rhel8/install-icarus.sh,sha256=4N2Y2H01impqJy0k5aUDFrF9Z2oonGqPGeHCXey-2VM,771
|
|
348
347
|
siliconcompiler/toolscripts/rhel8/install-klayout.sh,sha256=lUCSc0Yr0NBUMVragNyJsWoHfHfOceKRH9i9xsgICV0,393
|
|
349
348
|
siliconcompiler/toolscripts/rhel8/install-magic.sh,sha256=ugiH7ybdxQggs0ucUHiVtCOO142XOh5OhOmmt_aZXRs,609
|
|
@@ -355,9 +354,6 @@ siliconcompiler/toolscripts/rhel8/install-sv2v.sh,sha256=AsC_FC7rzj4M570c5eS4Iyh
|
|
|
355
354
|
siliconcompiler/toolscripts/rhel8/install-verible.sh,sha256=kg-pijYcNsU81Qegx5mhllGc4F0P_xiMXlRDUnczwlo,557
|
|
356
355
|
siliconcompiler/toolscripts/rhel8/install-verilator.sh,sha256=W2vf3_r41LrFkug_J7AgUxcHGZrqJLwagbWhjadASrw,692
|
|
357
356
|
siliconcompiler/toolscripts/rhel8/install-xyce.sh,sha256=rVAt5gIDJNW6gCtuyuRN0VCjEcp9n0S9vtvVJtJzZ_Y,1734
|
|
358
|
-
siliconcompiler/toolscripts/rhel8/install-yosys-moosic.sh,sha256=F6S160uSA0JJUtJe46G3kV8U5ZqTkCz6NX4zEI47Leo,381
|
|
359
|
-
siliconcompiler/toolscripts/rhel8/install-yosys-slang.sh,sha256=qBz2tciVxw5S7xD4ZxTuAeRUZkImKxIWJCU0Nu_RhVs,512
|
|
360
|
-
siliconcompiler/toolscripts/rhel8/install-yosys.sh,sha256=glhUBRePmFRIJ6tUCtlZoRMftnErspiqTp4ad5uQt0E,658
|
|
361
357
|
siliconcompiler/toolscripts/rhel9/install-chisel.sh,sha256=lPORZN7vlBX6sJSv01JOIiDE9-_7GcCZGA7EP5ri3MQ,525
|
|
362
358
|
siliconcompiler/toolscripts/rhel9/install-ghdl.sh,sha256=lVBBvBOu4WInmZ4asSGObggjlDRslSN0MiQs3qPOHtU,469
|
|
363
359
|
siliconcompiler/toolscripts/rhel9/install-gtkwave.sh,sha256=dQa8nY6c2okYOHCkxi5FMJciIjmO-NdjxWH8CUyqiOY,882
|
|
@@ -432,12 +428,12 @@ siliconcompiler/toolscripts/ubuntu24/install-bluespec.sh,sha256=MlylMZfFsZq74LnH
|
|
|
432
428
|
siliconcompiler/toolscripts/ubuntu24/install-chisel.sh,sha256=lPORZN7vlBX6sJSv01JOIiDE9-_7GcCZGA7EP5ri3MQ,525
|
|
433
429
|
siliconcompiler/toolscripts/ubuntu24/install-ghdl.sh,sha256=BrvE2Y3VvUIH4U4lScMb2aRKx0TMEscynHswYUslY6U,467
|
|
434
430
|
siliconcompiler/toolscripts/ubuntu24/install-gtkwave.sh,sha256=F_eeWegI7RHlEnzwyGEE6jdrpNccd-z666xf2ufuuuo,615
|
|
435
|
-
siliconcompiler/toolscripts/ubuntu24/install-icarus.sh,sha256=
|
|
431
|
+
siliconcompiler/toolscripts/ubuntu24/install-icarus.sh,sha256=e5aNPOsCnSrbMjbly0SaA-j8xTdqofOKDOV_yU0bHe4,554
|
|
436
432
|
siliconcompiler/toolscripts/ubuntu24/install-icepack.sh,sha256=PM7gT42Ew8mSE5G_AA_jl_9oL3M_qcvT92xDdFRJoZ0,661
|
|
437
433
|
siliconcompiler/toolscripts/ubuntu24/install-klayout.sh,sha256=f4l-Z86LAkjdo5NLq89ORfkjE0Mjygyp84VYi7gEWUU,906
|
|
438
434
|
siliconcompiler/toolscripts/ubuntu24/install-magic.sh,sha256=GpvT3DGk0IuJ60-dbANfdcZCsncNMe36yNk2bAMudPI,513
|
|
439
435
|
siliconcompiler/toolscripts/ubuntu24/install-montage.sh,sha256=uA57mEs9lb1Fcn7bf59w0tCKuIOeEcaijo2gip2En7Y,55
|
|
440
|
-
siliconcompiler/toolscripts/ubuntu24/install-netgen.sh,sha256=
|
|
436
|
+
siliconcompiler/toolscripts/ubuntu24/install-netgen.sh,sha256=wPlSqnsCIE9XNsT63dir-iBgpvSoDpqj-HHh48-LwVE,480
|
|
441
437
|
siliconcompiler/toolscripts/ubuntu24/install-nextpnr.sh,sha256=HDp6MFvliWywBmZYnkl3d69oxYy6ersjROfVQV2079E,770
|
|
442
438
|
siliconcompiler/toolscripts/ubuntu24/install-openroad.sh,sha256=Hwe7jGhSUf6nIhkeGGPsu62ObWECkha1ktL0owE5cy0,646
|
|
443
439
|
siliconcompiler/toolscripts/ubuntu24/install-slang.sh,sha256=PEjzoCr0l1C33RdF-C61yiQZOHcgtEyXED4lnFBk82Q,550
|
|
@@ -452,13 +448,13 @@ siliconcompiler/toolscripts/ubuntu24/install-xyce.sh,sha256=33Iq99sLdiVWFl4zpD2h
|
|
|
452
448
|
siliconcompiler/toolscripts/ubuntu24/install-yosys-moosic.sh,sha256=F6S160uSA0JJUtJe46G3kV8U5ZqTkCz6NX4zEI47Leo,381
|
|
453
449
|
siliconcompiler/toolscripts/ubuntu24/install-yosys-slang.sh,sha256=qBz2tciVxw5S7xD4ZxTuAeRUZkImKxIWJCU0Nu_RhVs,512
|
|
454
450
|
siliconcompiler/toolscripts/ubuntu24/install-yosys.sh,sha256=s9PU3DpkDoY0OoTQcDb00g-KAr1vqDFJRr1uaM2mJNw,730
|
|
455
|
-
siliconcompiler/utils/__init__.py,sha256=
|
|
451
|
+
siliconcompiler/utils/__init__.py,sha256=mxZB2mAgCtwfwITfZcrLWTDZxjeEWnAjHcmO-UE7Cbc,15891
|
|
456
452
|
siliconcompiler/utils/asic.py,sha256=cMLs7dneSmh5BlHS0-bZ1tLUpvghTw__gNaUCMpyBds,4986
|
|
457
453
|
siliconcompiler/utils/logging.py,sha256=5tabLIVEftStGDeDulhfBdw4SFp5nHa4J3ZTJKHny8Q,2325
|
|
458
454
|
siliconcompiler/utils/showtools.py,sha256=gaAvjMTFlx_0qLKOtpRJx8Bs51TEeQ-4Pjj8kHfFf3o,1871
|
|
459
|
-
siliconcompiler-0.32.
|
|
460
|
-
siliconcompiler-0.32.
|
|
461
|
-
siliconcompiler-0.32.
|
|
462
|
-
siliconcompiler-0.32.
|
|
463
|
-
siliconcompiler-0.32.
|
|
464
|
-
siliconcompiler-0.32.
|
|
455
|
+
siliconcompiler-0.32.1.dist-info/LICENSE,sha256=lbLR6sRo_CYJOf7SVgHi-U6CZdD8esESEZE5TZazOQE,10766
|
|
456
|
+
siliconcompiler-0.32.1.dist-info/METADATA,sha256=qEtLu-MCzDVeFZrNFAQO6Y3wDOVn6tN9KRQMKRHr2FQ,11331
|
|
457
|
+
siliconcompiler-0.32.1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
|
458
|
+
siliconcompiler-0.32.1.dist-info/entry_points.txt,sha256=wrM4IhEbFF8epxB8Uun6DZO51viXDqj-KWV0SjVDtN0,1131
|
|
459
|
+
siliconcompiler-0.32.1.dist-info/top_level.txt,sha256=H8TOYhnEUZAV1RJTa8JRtjLIebwHzkQUhA2wkNU2O6M,16
|
|
460
|
+
siliconcompiler-0.32.1.dist-info/RECORD,,
|
|
@@ -21,6 +21,7 @@ tools = siliconcompiler.sphinx_ext:tools
|
|
|
21
21
|
|
|
22
22
|
[siliconcompiler.path_resolver]
|
|
23
23
|
git = siliconcompiler.package.git:get_resolver
|
|
24
|
+
github = siliconcompiler.package.github:get_resolver
|
|
24
25
|
https = siliconcompiler.package.https:get_resolver
|
|
25
26
|
|
|
26
27
|
[siliconcompiler.show]
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import siliconcompiler
|
|
3
|
-
from siliconcompiler.utils import register_sc_data_source
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
####################################################
|
|
7
|
-
# Setup for vpr_example Family FPGAs
|
|
8
|
-
####################################################
|
|
9
|
-
def setup():
|
|
10
|
-
'''
|
|
11
|
-
The vpr_example FPGA family is a set of
|
|
12
|
-
open source architectures used as illustrative
|
|
13
|
-
examples for academic FPGA architectures. They
|
|
14
|
-
are based on numerous examples furnished over the
|
|
15
|
-
the years by the University of Toronto with different
|
|
16
|
-
distributions of VPR
|
|
17
|
-
|
|
18
|
-
For more information about VPR and its architecture models,
|
|
19
|
-
see Murray et. al, "VTR 8: High Performance CAD and Customizable
|
|
20
|
-
FPGA Architecture Modelling", ACM Trans. Reconfigurable Technol.
|
|
21
|
-
Syst., 2020, https://www.eecg.utoronto.ca/~kmurray/vtr/vtr8_trets.pdf
|
|
22
|
-
'''
|
|
23
|
-
|
|
24
|
-
vendor = 'N/A'
|
|
25
|
-
|
|
26
|
-
flow_root = os.path.join('examples', 'fpga_flow')
|
|
27
|
-
|
|
28
|
-
lut_size = '4'
|
|
29
|
-
|
|
30
|
-
all_fpgas = []
|
|
31
|
-
|
|
32
|
-
all_part_names = [
|
|
33
|
-
'example_arch_X005Y005',
|
|
34
|
-
'example_arch_X008Y008',
|
|
35
|
-
'example_arch_X014Y014',
|
|
36
|
-
'example_arch_X030Y030',
|
|
37
|
-
]
|
|
38
|
-
|
|
39
|
-
# Settings common to all parts in family
|
|
40
|
-
for part_name in all_part_names:
|
|
41
|
-
fpga = siliconcompiler.FPGA(part_name, package='siliconcompiler_data')
|
|
42
|
-
register_sc_data_source(fpga)
|
|
43
|
-
|
|
44
|
-
fpga.set('fpga', part_name, 'vendor', vendor)
|
|
45
|
-
|
|
46
|
-
# Part name is specified per architecture file. Device code specifies
|
|
47
|
-
# which <fixed_layout> name to use when running VPR. These examples
|
|
48
|
-
# use the following names:
|
|
49
|
-
if (part_name == 'example_arch_X005Y005'):
|
|
50
|
-
fpga.set('fpga', part_name, 'var', 'vpr_device_code', 'fpga_beta')
|
|
51
|
-
else:
|
|
52
|
-
fpga.set('fpga', part_name, 'var', 'vpr_device_code', part_name)
|
|
53
|
-
|
|
54
|
-
fpga.set('fpga', part_name, 'lutsize', lut_size)
|
|
55
|
-
|
|
56
|
-
arch_root = os.path.join(flow_root, 'arch', part_name)
|
|
57
|
-
fpga.set('fpga', part_name, 'file', 'archfile', os.path.join(arch_root, f'{part_name}.xml'))
|
|
58
|
-
|
|
59
|
-
fpga.set('fpga', part_name, 'var', 'vpr_clock_model', 'ideal')
|
|
60
|
-
|
|
61
|
-
if (part_name == 'example_arch_X005Y005'):
|
|
62
|
-
arch_root = os.path.join(flow_root, 'arch', part_name)
|
|
63
|
-
fpga.set('fpga', part_name, 'file', 'graphfile',
|
|
64
|
-
os.path.join(arch_root, 'example_arch_X005Y005_rr_graph.xml'))
|
|
65
|
-
fpga.set('fpga', part_name, 'var', 'channelwidth', '32')
|
|
66
|
-
|
|
67
|
-
if (part_name == 'example_arch_X008Y008'):
|
|
68
|
-
# No RR graph for this architecture to support testing
|
|
69
|
-
fpga.set('fpga', part_name, 'var', 'channelwidth', '32')
|
|
70
|
-
|
|
71
|
-
if ((part_name == 'example_arch_X014Y014') or (part_name == 'example_arch_X030Y030')):
|
|
72
|
-
|
|
73
|
-
techlib_root = os.path.join(flow_root, 'techlib')
|
|
74
|
-
|
|
75
|
-
if (part_name == 'example_arch_X014Y014'):
|
|
76
|
-
fpga.set('fpga', part_name, 'file', 'constraints_map',
|
|
77
|
-
os.path.join(arch_root, f'{part_name}_constraint_map.json'))
|
|
78
|
-
|
|
79
|
-
fpga.set('fpga', part_name, 'var', 'channelwidth', '80')
|
|
80
|
-
fpga.add('fpga', part_name, 'var', 'feature_set', 'async_set')
|
|
81
|
-
fpga.add('fpga', part_name, 'var', 'feature_set', 'async_reset')
|
|
82
|
-
fpga.add('fpga', part_name, 'var', 'feature_set', 'enable')
|
|
83
|
-
fpga.add('fpga', part_name, 'file', 'yosys_flop_techmap',
|
|
84
|
-
os.path.join(techlib_root, 'example_arch_techmap_flops.v'))
|
|
85
|
-
|
|
86
|
-
fpga.add('fpga', part_name, 'file', 'yosys_dsp_techmap',
|
|
87
|
-
os.path.join(techlib_root, 'example_arch_techmap_dsp.v'))
|
|
88
|
-
|
|
89
|
-
fpga.add('fpga', part_name, 'file', 'yosys_extractlib',
|
|
90
|
-
os.path.join(techlib_root, 'example_arch_techmap_dsp_extract.v'))
|
|
91
|
-
|
|
92
|
-
# The same library used for the extraction pass can also be used to
|
|
93
|
-
# define macros that can be passed through synthesis, specify that here
|
|
94
|
-
fpga.add('fpga', part_name, 'file', 'yosys_macrolib',
|
|
95
|
-
os.path.join(techlib_root, 'example_arch_techmap_dsp_extract.v'))
|
|
96
|
-
|
|
97
|
-
fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MAXWIDTH=18')
|
|
98
|
-
fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MAXWIDTH=18')
|
|
99
|
-
fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MINWIDTH=2')
|
|
100
|
-
fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MINWIDTH=2')
|
|
101
|
-
fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_NAME=_dsp_block_')
|
|
102
|
-
|
|
103
|
-
fpga.add('fpga', part_name, 'file', 'yosys_memory_techmap',
|
|
104
|
-
os.path.join(techlib_root, 'example_arch_techmap_bram.v'))
|
|
105
|
-
fpga.add('fpga', part_name, 'file', 'yosys_memory_libmap',
|
|
106
|
-
os.path.join(techlib_root, 'example_arch_bram_memory_map.txt'))
|
|
107
|
-
|
|
108
|
-
all_fpgas.append(fpga)
|
|
109
|
-
|
|
110
|
-
return all_fpgas
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
#########################
|
|
114
|
-
if __name__ == "__main__":
|
|
115
|
-
for fpga in setup(siliconcompiler.Chip('<fpga>')):
|
|
116
|
-
fpga.write_manifest(f'{fpga.design}.json')
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
# Get directory of script
|
|
6
|
-
src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
|
|
7
|
-
|
|
8
|
-
sudo yum install -y gcc-gnat zlib-devel
|
|
9
|
-
|
|
10
|
-
mkdir -p deps
|
|
11
|
-
cd deps
|
|
12
|
-
|
|
13
|
-
git clone $(python3 ${src_path}/_tools.py --tool ghdl --field git-url) ghdl
|
|
14
|
-
cd ghdl
|
|
15
|
-
git checkout $(python3 ${src_path}/_tools.py --tool ghdl --field git-commit)
|
|
16
|
-
|
|
17
|
-
args=
|
|
18
|
-
if [ ! -z ${PREFIX} ]; then
|
|
19
|
-
args=--prefix="$PREFIX"
|
|
20
|
-
fi
|
|
21
|
-
|
|
22
|
-
./configure $args
|
|
23
|
-
make -j$(nproc)
|
|
24
|
-
sudo make install
|
|
25
|
-
cd -
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
# Get directory of script
|
|
6
|
-
src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
|
|
7
|
-
|
|
8
|
-
mkdir -p deps
|
|
9
|
-
cd deps
|
|
10
|
-
|
|
11
|
-
git clone $(python3 ${src_path}/_tools.py --tool yosys-moosic --field git-url) yosys-moosic
|
|
12
|
-
cd yosys-moosic
|
|
13
|
-
git checkout $(python3 ${src_path}/_tools.py --tool yosys-moosic --field git-commit)
|
|
14
|
-
|
|
15
|
-
make -j$(nproc)
|
|
16
|
-
sudo PATH="$PATH" make install
|
|
17
|
-
cd -
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
# Get directory of script
|
|
6
|
-
src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
|
|
7
|
-
|
|
8
|
-
mkdir -p deps
|
|
9
|
-
cd deps
|
|
10
|
-
|
|
11
|
-
python3 -m venv .yosys-slang --clear
|
|
12
|
-
. .yosys-slang/bin/activate
|
|
13
|
-
python3 -m pip install cmake
|
|
14
|
-
|
|
15
|
-
git clone $(python3 ${src_path}/_tools.py --tool yosys-slang --field git-url) yosys-slang
|
|
16
|
-
cd yosys-slang
|
|
17
|
-
git checkout $(python3 ${src_path}/_tools.py --tool yosys-slang --field git-commit)
|
|
18
|
-
git submodule update --init --recursive
|
|
19
|
-
|
|
20
|
-
make -j$(nproc)
|
|
21
|
-
sudo PATH="$PATH" make install
|
|
22
|
-
cd -
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
# Get directory of script
|
|
6
|
-
src_path=$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)/..
|
|
7
|
-
|
|
8
|
-
# From: https://github.com/YosysHQ/yosys/blob/f2c689403ace0637b7455bac8f1e8d4bc312e74f/README.md
|
|
9
|
-
sudo yum group install -y "Development Tools"
|
|
10
|
-
sudo yum install -y bison flex readline-devel gawk \
|
|
11
|
-
tcl-devel libffi-devel zlib-devel boost-devel
|
|
12
|
-
|
|
13
|
-
mkdir -p deps
|
|
14
|
-
cd deps
|
|
15
|
-
|
|
16
|
-
git clone $(python3 ${src_path}/_tools.py --tool yosys --field git-url) yosys
|
|
17
|
-
cd yosys
|
|
18
|
-
git checkout $(python3 ${src_path}/_tools.py --tool yosys --field git-commit)
|
|
19
|
-
git submodule update --init --recursive
|
|
20
|
-
|
|
21
|
-
make -j$(nproc) PREFIX="$PREFIX"
|
|
22
|
-
sudo make install PREFIX="$PREFIX"
|
|
23
|
-
cd -
|
|
File without changes
|
|
File without changes
|
|
File without changes
|