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.
Files changed (31) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/apps/_common.py +23 -6
  3. siliconcompiler/apps/sc_dashboard.py +7 -1
  4. siliconcompiler/apps/sc_show.py +6 -0
  5. siliconcompiler/core.py +4 -3
  6. siliconcompiler/fpgas/lattice_ice40.py +6 -16
  7. siliconcompiler/package/__init__.py +11 -55
  8. siliconcompiler/package/github.py +124 -0
  9. siliconcompiler/package/https.py +6 -0
  10. siliconcompiler/report/dashboard/components/__init__.py +2 -1
  11. siliconcompiler/report/dashboard/components/flowgraph.py +3 -0
  12. siliconcompiler/report/dashboard/utils/__init__.py +5 -2
  13. siliconcompiler/report/utils.py +3 -0
  14. siliconcompiler/schema/schema_obj.py +3 -2
  15. siliconcompiler/schema/utils.py +0 -3
  16. siliconcompiler/targets/fpgaflow_demo.py +0 -2
  17. siliconcompiler/toolscripts/_tools.json +2 -2
  18. siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +2 -1
  19. siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +1 -1
  20. siliconcompiler/utils/__init__.py +5 -14
  21. {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/METADATA +1 -1
  22. {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/RECORD +26 -30
  23. {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/entry_points.txt +1 -0
  24. siliconcompiler/fpgas/vpr_example.py +0 -116
  25. siliconcompiler/toolscripts/rhel8/install-ghdl.sh +0 -25
  26. siliconcompiler/toolscripts/rhel8/install-yosys-moosic.sh +0 -17
  27. siliconcompiler/toolscripts/rhel8/install-yosys-slang.sh +0 -22
  28. siliconcompiler/toolscripts/rhel8/install-yosys.sh +0 -23
  29. {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/LICENSE +0 -0
  30. {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/WHEEL +0 -0
  31. {siliconcompiler-0.32.0.dist-info → siliconcompiler-0.32.1.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  # Version number following semver standard.
2
- version = '0.32.0'
2
+ version = '0.32.1'
3
3
 
4
4
  # Default server address for remote runs, if unspecified.
5
5
  default_server = 'https://server.siliconcompiler.com'
@@ -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
- manifest = all_manifests[chip.design][jobname][None, None]
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
- return manifest
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 : {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({
@@ -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
- for check_step, check_index in nodes_to_execute(self, flow):
3243
- if sc_step == check_step:
3244
- search_nodes.append((check_step, check_index))
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 siliconcompiler
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
- all_part_names = [
23
- "ice40up5k-sg48",
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', vendor)
31
- fpga.set('fpga', part_name, 'lutsize', lut_size)
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(siliconcompiler.Chip('<fpga>')):
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
@@ -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__), '..', '..', '..', 'data'))
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
 
@@ -34,6 +34,9 @@ def get_nodes_and_edges(chip):
34
34
  nodes = []
35
35
  edges = []
36
36
 
37
+ if not chip.get('option', 'flow'):
38
+ return nodes, edges
39
+
37
40
  default_node_border_width = 1
38
41
  successful_path_node_width = 3
39
42
  default_edge_width = 3
@@ -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
- for step, index in _get_flowgraph_nodes(chip, chip.get('option', 'flow')):
28
- node_to_step_index_map[f'{step}{index}'] = (step, index)
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):
@@ -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, PACKAGE_ROOT, translate_loglevel, PerNode, Scope
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(PACKAGE_ROOT),
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:
@@ -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": "0fbd4d94c81ef070249ad9d9037a740d0c6e58fa",
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.50",
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,7 @@ 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 tcl-dev tk-dev
8
+ sudo apt-get install -y build-essential tcl-dev tk-dev m4
9
9
 
10
10
  mkdir -p deps
11
11
  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, root=os.path.join(PACKAGE_ROOT, 'templates')):
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
- chip.error(f"Illegal comparison operation {op}")
260
+ raise ValueError(f"Illegal comparison operation {op}")
270
261
 
271
262
 
272
263
  ###########################################################################
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: siliconcompiler
3
- Version: 0.32.0
3
+ Version: 0.32.1
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
@@ -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=3djiiKr5bXhbjJlv9XuluEftoGgcRBwvLs9aEbYWD4s,1264
5
- siliconcompiler/core.py,sha256=yncn2IGU3qD6frmO2Fk6RXTIBMIdXU66nVW4S9NvQPQ,138892
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=Ph-cD-t9lCzavak3s4YCXXmA_ouf-jJ-7WIEGkSsjOg,3770
11
+ siliconcompiler/apps/_common.py,sha256=YK5zNHHnHeEWwcK27wXwsaApsrphUenh9uQzGf2zKvs,4425
12
12
  siliconcompiler/apps/sc.py,sha256=qHrfzgt1y748jX0nLXn9Hx1WuwXXmHFGhF4LaQTCpeE,3259
13
- siliconcompiler/apps/sc_dashboard.py,sha256=kGyMYbgKgZMBUrTyft6mEvRnmcrKA7JunrkWZ8VwSwM,3478
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=H0_evnBqr02FJVlIaFIva4RrYZ6M2otlWTaTCqFQPlg,4653
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=GU0NrhBZuvMv5sWBye9h_GodKOOXBRwDLVlEy3ANXlY,1034
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=BpOEkHppctqwh1FL9fLA3CtpTHJsNfk5eXywBNrCNPY,9172
49
+ siliconcompiler/package/__init__.py,sha256=4Ps97LFRmBd7-grfB8h1tQsLFF4eZYiAAuSBReX8vpo,8014
51
50
  siliconcompiler/package/git.py,sha256=c40uXesG1x-CgH7yat5Cq6iCjoUHp_jE_VXeHGtzeOk,3258
52
- siliconcompiler/package/https.py,sha256=f3VxIC3YdPgejuGDqp-amsHljtO43XOSS5UQv-k5ktQ,3014
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=70klZsAKwhW55kOxBBdV9zzOU-NorMk6y6riMyKXo7c,6423
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=4AteP9VxNisAGkv_Ib_7bV1ZyEmqH6TglY9d8Xh44KQ,18517
83
- siliconcompiler/report/dashboard/components/flowgraph.py,sha256=bjPuaWlEra4HbIUIbtCkYQMNTYueSGP0WO-r16MrBss,3525
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=mkcBAlfPovfgoRv9nPbtgQSeFglwlxlSIXsEQmdsDz8,2540
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=BHMr00Et57iukxTI9hiJUHkhAw1LRbsWJcDCejeCBDg,76158
102
- siliconcompiler/schema/utils.py,sha256=qeAICnQuuzrcJSyotFGWA6gmunpu63AOaEtuhIcBi5c,4504
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=0fqCaXa8_gicQCiz4m_mhI8_JY1qQlBO3mH45-YzMGA,1288
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=RWgVsyLPWBwui9J7ugmYUCn2qlv_jJ1Ton2DdxaBDkE,4403
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=KHIjKwwA2C9s5jkYzcWWifHpiSc-ewywjyqLk-giB0U,525
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=EEndaKckf3U7656hxPqmYPVlJz20LUMWfmpGIaGQvtw,477
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=y4S1sRW2C3oYXN6PMZOHFO8-ytQ8yJvUoQtqKlnF5dQ,16162
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.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,,
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 -