opencos-eda 0.3.10__py3-none-any.whl → 0.3.12__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 (59) hide show
  1. opencos/commands/deps_help.py +63 -113
  2. opencos/commands/export.py +7 -2
  3. opencos/commands/multi.py +4 -4
  4. opencos/commands/sim.py +14 -15
  5. opencos/commands/sweep.py +1 -1
  6. opencos/commands/synth.py +1 -2
  7. opencos/commands/upload.py +192 -4
  8. opencos/commands/waves.py +52 -8
  9. opencos/deps/deps_commands.py +6 -6
  10. opencos/deps/deps_processor.py +129 -50
  11. opencos/docs/Architecture.md +45 -0
  12. opencos/docs/ConnectingApps.md +29 -0
  13. opencos/docs/DEPS.md +199 -0
  14. opencos/docs/Debug.md +77 -0
  15. opencos/docs/DirectoryStructure.md +22 -0
  16. opencos/docs/Installation.md +117 -0
  17. opencos/docs/OcVivadoTcl.md +63 -0
  18. opencos/docs/OpenQuestions.md +7 -0
  19. opencos/docs/README.md +13 -0
  20. opencos/docs/RtlCodingStyle.md +54 -0
  21. opencos/docs/eda.md +147 -0
  22. opencos/docs/oc_cli.md +135 -0
  23. opencos/eda.py +358 -155
  24. opencos/eda_base.py +187 -60
  25. opencos/eda_config.py +70 -35
  26. opencos/eda_config_defaults.yml +310 -186
  27. opencos/eda_config_reduced.yml +19 -39
  28. opencos/eda_tool_helper.py +190 -21
  29. opencos/files.py +26 -1
  30. opencos/tools/cocotb.py +11 -23
  31. opencos/tools/invio.py +2 -2
  32. opencos/tools/invio_yosys.py +2 -1
  33. opencos/tools/iverilog.py +3 -3
  34. opencos/tools/modelsim_ase.py +1 -1
  35. opencos/tools/quartus.py +172 -137
  36. opencos/tools/questa_common.py +50 -9
  37. opencos/tools/riviera.py +5 -4
  38. opencos/tools/slang.py +14 -10
  39. opencos/tools/slang_yosys.py +1 -0
  40. opencos/tools/surelog.py +7 -6
  41. opencos/tools/verilator.py +9 -7
  42. opencos/tools/vivado.py +315 -180
  43. opencos/tools/yosys.py +5 -5
  44. opencos/util.py +6 -3
  45. opencos/utils/dict_helpers.py +31 -0
  46. opencos/utils/markup_helpers.py +2 -2
  47. opencos/utils/str_helpers.py +38 -0
  48. opencos/utils/subprocess_helpers.py +3 -3
  49. opencos/utils/vscode_helper.py +2 -2
  50. opencos/utils/vsim_helper.py +16 -5
  51. {opencos_eda-0.3.10.dist-info → opencos_eda-0.3.12.dist-info}/METADATA +1 -1
  52. opencos_eda-0.3.12.dist-info/RECORD +93 -0
  53. opencos/eda_config_max_verilator_waivers.yml +0 -39
  54. opencos_eda-0.3.10.dist-info/RECORD +0 -81
  55. {opencos_eda-0.3.10.dist-info → opencos_eda-0.3.12.dist-info}/WHEEL +0 -0
  56. {opencos_eda-0.3.10.dist-info → opencos_eda-0.3.12.dist-info}/entry_points.txt +0 -0
  57. {opencos_eda-0.3.10.dist-info → opencos_eda-0.3.12.dist-info}/licenses/LICENSE +0 -0
  58. {opencos_eda-0.3.10.dist-info → opencos_eda-0.3.12.dist-info}/licenses/LICENSE.spdx +0 -0
  59. {opencos_eda-0.3.10.dist-info → opencos_eda-0.3.12.dist-info}/top_level.txt +0 -0
opencos/tools/yosys.py CHANGED
@@ -6,12 +6,12 @@ Contains classes for ToolYosys
6
6
  # pylint: disable=R0801 # (calling functions with same arguments)
7
7
 
8
8
  import os
9
- import shutil
10
9
  import subprocess
11
10
 
12
11
  from opencos import util, eda_config
13
- from opencos.eda_base import Tool, get_eda_exec
14
12
  from opencos.commands import CommandSynth, CommandLec
13
+ from opencos.eda_base import Tool, get_eda_exec
14
+ from opencos.files import safe_shutil_which
15
15
  from opencos.utils.markup_helpers import yaml_safe_load
16
16
 
17
17
 
@@ -52,7 +52,7 @@ class ToolYosys(Tool):
52
52
  if self._VERSION:
53
53
  return self._VERSION
54
54
 
55
- path = shutil.which(self._EXE)
55
+ path = safe_shutil_which(self._EXE)
56
56
  if not path:
57
57
  self.error(f'"{self._EXE}" not in path or not installed, see {self._URL}')
58
58
  else:
@@ -62,7 +62,7 @@ class ToolYosys(Tool):
62
62
  # where standalone 'sta' is. Even though Yosys has 'sta' internally, Yosys does
63
63
  # not fully support timing constraints or .sdc files, so we have to run 'sta'
64
64
  # standalone.
65
- sta_path = shutil.which('sta')
65
+ sta_path = safe_shutil_which('sta')
66
66
  if sta_path:
67
67
  util.debug(f'Also located "sta" via {sta_path}')
68
68
  self.sta_exe = sta_path
@@ -83,7 +83,7 @@ class ToolYosys(Tool):
83
83
  words = version_ret.stdout.decode('utf-8', errors='replace').split()
84
84
 
85
85
  if len(words) < 2:
86
- self.error(f'{self.yosys_exe} --version: returned unexpected str {version_ret=}')
86
+ util.warning(f'{self.yosys_exe} --version: returned unexpected str {version_ret=}')
87
87
  self._VERSION = words[1]
88
88
  return self._VERSION
89
89
 
opencos/util.py CHANGED
@@ -20,6 +20,7 @@ from importlib import import_module
20
20
  from dotenv import load_dotenv
21
21
  from supports_color import supportsColor
22
22
 
23
+ from opencos.files import safe_shutil_which
23
24
  from opencos.utils import status_constants
24
25
  from opencos.utils.str_helpers import strip_ansi_color
25
26
 
@@ -57,6 +58,8 @@ class Colors:
57
58
  cyan = "\x1b[36m"
58
59
  foreground = "\x1B[39m"
59
60
  bold = "\x1B[1m"
61
+ bred = "\x1B[1m\x1B[31m"
62
+ bgreen = "\x1B[1m\x1B[32m"
60
63
  byellow = "\x1B[1m\x1B[33m"
61
64
  bcyan = "\x1B[1m\x1b[36m"
62
65
  normal = "\x1B[0m"
@@ -1033,7 +1036,7 @@ def import_class_from_string(full_class_name: str) -> None:
1033
1036
  module = import_module(module_path)
1034
1037
  return getattr(module, class_name)
1035
1038
  except Exception as e:
1036
- print(f"Error importing class {full_class_name=}: {e}")
1039
+ error(f"Error importing class {full_class_name=}: {e}")
1037
1040
  return None
1038
1041
 
1039
1042
 
@@ -1073,7 +1076,7 @@ def write_shell_command_file(
1073
1076
  '''
1074
1077
 
1075
1078
  # command_lists should be a list-of-lists.
1076
- bash_path = shutil.which('bash')
1079
+ bash_path = safe_shutil_which('bash')
1077
1080
  assert isinstance(command_lists, list), f'{command_lists=}'
1078
1081
  fullpath = os.path.join(dirpath, filename)
1079
1082
  with open(fullpath, 'w', encoding='utf-8') as f:
@@ -1089,7 +1092,7 @@ def write_shell_command_file(
1089
1092
  # Note the | tee foo.log will ruin bash error codes, so if we're bash is
1090
1093
  # available, we'll check that ${PIPESTATUS} is 0 to percolate the
1091
1094
  # a non-zero on the first command (sim.exe).
1092
- if shutil.which('bash'):
1095
+ if safe_shutil_which('bash'):
1093
1096
  clist.append(f'2>&1 | tee {tee_fpath}' + ' && test ${PIPESTATUS} -eq 0')
1094
1097
  else:
1095
1098
  clist.append(f'2>&1 | tee {tee_fpath}')
@@ -0,0 +1,31 @@
1
+ '''opencos.utils.dict_helpers -- Various dict helpers functions'''
2
+
3
+ def dict_diff(d1: dict, d2: dict) -> dict:
4
+ '''Returns dict of added/removed/changed keys in d1 vs d2.
5
+
6
+ If an empty dict is returned then there were no differences'''
7
+
8
+ diff = {
9
+ 'added': {},
10
+ 'removed': {},
11
+ 'changed': {},
12
+ }
13
+
14
+ # Keys added to d2
15
+ for key in d2.keys() - d1.keys():
16
+ diff['added'][key] = d2[key]
17
+
18
+ # Keys removed from d1
19
+ for key in d1.keys() - d2.keys():
20
+ diff['removed'][key] = d1[key]
21
+
22
+ # Keys present in both
23
+ for key in d1.keys() & d2.keys():
24
+ if d1[key] != d2[key]:
25
+ diff['changed'][key] = f'{d1[key]} --> {d2[key]}'
26
+
27
+ for key in ('added', 'removed', 'changed'):
28
+ if not diff[key]:
29
+ del diff[key]
30
+
31
+ return diff
@@ -3,11 +3,11 @@
3
3
  import json
4
4
  import os
5
5
  import re
6
- import shutil
7
6
  import subprocess
8
7
 
9
8
  import yaml
10
9
 
10
+ from opencos.files import safe_shutil_which
11
11
  from opencos.util import debug, error, info, warning
12
12
 
13
13
 
@@ -67,7 +67,7 @@ def yaml_safe_load(filepath: str, only_root_line_numbers:bool = False) -> dict:
67
67
 
68
68
  # if yamllint is installed, then use it to get all errors in the .yml|.yaml
69
69
  # file, instead of the single exception.
70
- if shutil.which('yamllint'):
70
+ if safe_shutil_which('yamllint'):
71
71
  try:
72
72
  sp_out = subprocess.run(
73
73
  f'yamllint -d relaxed --no-warnings {filepath}'.split(),
@@ -190,6 +190,44 @@ def pretty_list_columns_manual(data: list, num_columns: int = 4, auto_columns: b
190
190
 
191
191
  return ret_lines
192
192
 
193
+ def pretty_2dlist_columns(
194
+ data: list, padding: int = 2, return_as_2d_list: bool = False,
195
+ header_row_centered: bool = False
196
+ ) -> list:
197
+ '''Given a list of list-of-str, return a 1d list with values aligned in columns
198
+
199
+ If return_as_2d_list=True, does not join the padded row items.
200
+ '''
201
+
202
+ if not data:
203
+ return []
204
+
205
+ ret_lines = []
206
+ # include padding in the col widths:
207
+ col_widths = [max(len(str(value)) for value in col) + padding for col in zip(*data)]
208
+
209
+ if return_as_2d_list:
210
+ for rownum, row in enumerate(data):
211
+ if header_row_centered and rownum == 0:
212
+ ret_lines.append([
213
+ f'{item:^{col_widths[col_idx]}}' for col_idx,item in enumerate(row)
214
+ ])
215
+ else:
216
+ ret_lines.append([
217
+ f'{item:<{col_widths[col_idx]}}' for col_idx,item in enumerate(row)
218
+ ])
219
+ return ret_lines
220
+
221
+ # else return as 1D list with everything already formatted.
222
+ header_fmt = ''.join(f"{{:^{w}}}" for w in col_widths)
223
+ format_str = ''.join(f"{{:<{w}}}" for w in col_widths)
224
+ for rownum, row in enumerate(data):
225
+ if header_row_centered and rownum == 0:
226
+ ret_lines.append(header_fmt.format(*row))
227
+ else:
228
+ ret_lines.append(format_str.format(*row))
229
+
230
+ return ret_lines
193
231
 
194
232
  def print_columns_manual(data: list, num_columns: int = 4, auto_columns: bool = True) -> None:
195
233
  """Prints a list of strings in columns, manually aligning them."""
@@ -1,12 +1,12 @@
1
1
  ''' opencos.utils.subprocess_helpers -- wrappers for subprocess to support background/tee'''
2
2
 
3
3
  import os
4
- import shutil
5
4
  import subprocess
6
5
  import sys
7
6
 
8
7
  import psutil
9
8
  from opencos import util
9
+ from opencos.files import safe_shutil_which
10
10
  from opencos.util import debug, error, info, warning, progname, global_log
11
11
  from opencos.utils.str_helpers import strip_ansi_color
12
12
 
@@ -30,7 +30,7 @@ def subprocess_run(
30
30
  if work_dir:
31
31
  proc_kwargs['cwd'] = work_dir
32
32
 
33
- bash_exec = shutil.which('bash')
33
+ bash_exec = safe_shutil_which('bash')
34
34
  if shell and bash_exec and not IS_WINDOWS:
35
35
  proc_kwargs.update({'executable': bash_exec})
36
36
 
@@ -75,7 +75,7 @@ def subprocess_run_background( # pylint: disable=too-many-branches
75
75
  if work_dir:
76
76
  proc_kwargs['cwd'] = work_dir
77
77
 
78
- bash_exec = shutil.which('bash')
78
+ bash_exec = safe_shutil_which('bash')
79
79
  if shell and bash_exec and not IS_WINDOWS:
80
80
  # Note - windows powershell will end up calling: /bin/bash /c, which won't work
81
81
  proc_kwargs.update({'executable': bash_exec})
@@ -7,12 +7,12 @@ Instead, eda.py can call this once, and then query if the VScode extension exist
7
7
  running opencos.eda.auto_tool_setup(..)
8
8
  '''
9
9
 
10
- import shutil
11
10
  import subprocess
12
11
 
12
+ from opencos.files import safe_shutil_which
13
13
  from opencos.util import debug
14
14
 
15
- vscode_path = shutil.which('code')
15
+ vscode_path = safe_shutil_which('code')
16
16
 
17
17
  INIT_HAS_RUN = False # pylint: disable=invalid-name
18
18
  EXTENSIONS = {} # dict of {name: version} for VScode extensions of name
@@ -6,9 +6,9 @@ opencos.eda.auto_tool_setup(..)
6
6
  '''
7
7
 
8
8
  import os
9
- import shutil
10
9
  import subprocess
11
10
 
11
+ from opencos.files import safe_shutil_which
12
12
  from opencos.util import debug
13
13
 
14
14
  INIT_HAS_RUN = False # pylint: disable=invalid-name
@@ -30,9 +30,13 @@ def found() -> str:
30
30
  def init_get_version(dirpath: str) -> None:
31
31
  '''Runs vsim -version using vsim_path, updates TOOL_PATH'''
32
32
 
33
- vsim_path = os.path.join(dirpath, 'vsim')
33
+ vsim_path = safe_shutil_which(os.path.join(dirpath, 'vsim'))
34
34
  if not os.access(vsim_path, os.X_OK):
35
- return
35
+ debug(f'{vsim_path} is not executable')
36
+ vsim_path = ''
37
+
38
+ if not vsim_path:
39
+ return # didn't find a valid vsim exe in dirpath (Windows names included)
36
40
 
37
41
  proc = None
38
42
  try:
@@ -41,6 +45,7 @@ def init_get_version(dirpath: str) -> None:
41
45
  debug(f'{vsim_path} -version: exception {e}')
42
46
 
43
47
  if proc is None or proc.returncode != 0:
48
+ debug(f'{vsim_path} returncode non-zero: {proc=}')
44
49
  return
45
50
 
46
51
  stdout_str_lower = proc.stdout.decode('utf-8', errors='replace').lower()
@@ -58,6 +63,8 @@ def init_get_version(dirpath: str) -> None:
58
63
  elif 'questa' in stdout_str_lower:
59
64
  settool = 'questa'
60
65
 
66
+ debug(f'{vsim_path=} {settool=} from version')
67
+
61
68
  if settool:
62
69
  TOOL_PATH[settool] = vsim_path
63
70
 
@@ -70,7 +77,8 @@ def init() -> None:
70
77
  return
71
78
 
72
79
  INIT_HAS_RUN = True
73
- vsim_path = shutil.which('vsim')
80
+ vsim_path = safe_shutil_which('vsim') # It might be vsim.EXE in Windows.
81
+ debug(f'vsim_helper: found vsim executable {vsim_path}')
74
82
 
75
83
  if not vsim_path:
76
84
  return
@@ -82,5 +90,8 @@ def init() -> None:
82
90
  if not os.path.isdir(path):
83
91
  continue
84
92
  files = os.listdir(path)
85
- if 'vsim' in files:
93
+ if any(x in files for x in ('vsim', 'vsim.exe', 'vsim.bat')):
94
+ debug(f'vsim_helper: found in PATH: vsim executable {vsim_path} in {path}')
86
95
  init_get_version(dirpath=path)
96
+
97
+ debug(f'vsim_helper: {TOOL_PATH=}')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.3.10
3
+ Version: 0.3.12
4
4
  Summary: A simple Python package for wrapping RTL simuliatons and synthesis
5
5
  Author-email: Simon Sabato <simon@cognichip.ai>, Drew Ranck <drew@cognichip.ai>
6
6
  Project-URL: Homepage, https://github.com/cognichip/opencos
@@ -0,0 +1,93 @@
1
+ opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
2
+ opencos/_version.py,sha256=KaWIjS0c08g-C0fgYY1kXwSPqhOFxaq5pYEeoZhOR_I,617
3
+ opencos/_waves_pkg.sv,sha256=TL5YT9lT-fn2FD54MbVVZROmZ7vtW3ScA_rM2eRzKmU,2068
4
+ opencos/deps_schema.py,sha256=fx1_IJhsDYkUciwwCPTXHP6ftFjTsPVjO4xg12twIjw,17384
5
+ opencos/eda.py,sha256=sAtsU7AcKNfAkfnHAk9lYIIBxN13AMMsmLRhcRa_LR0,37187
6
+ opencos/eda_base.py,sha256=gGWTgpTaZ_NZzJT7F8k2CtEQa3zIrKBsj4EeEfg2DG0,123090
7
+ opencos/eda_config.py,sha256=rKcEtnjGuU5vf-OdA-T0F7wQTTMdgoWWJtnPSSdiZSg,15831
8
+ opencos/eda_config_defaults.yml,sha256=36nAwaXsyWHei5v8NX_Yr_hi-nWtWJkxwL3FUSJNVc4,20843
9
+ opencos/eda_config_reduced.yml,sha256=BOKGfe-OmVIF0SKhTTglPIzfAoGuCZ8n-f2KpoLF8dk,883
10
+ opencos/eda_deps_bash_completion.bash,sha256=o1yZvGUQSbN-AYq95sDTzMFw7gNHCUSlv9tASEHnACA,2763
11
+ opencos/eda_deps_sanitize.py,sha256=SQjvrte9Hv9JesRY0wljvbdC6pAmLCikI-Wdzzy-D04,1939
12
+ opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Zw,2851
13
+ opencos/eda_tool_helper.py,sha256=woI9Lthe6Q1HYiE6hTmCdh9Ys3_h7FuiaszmYOBwAl8,8550
14
+ opencos/export_helper.py,sha256=zDkvsUS6FVrpXl1UTy53QG3CuhYp5FFplI9rRzAE2g8,25395
15
+ opencos/export_json_convert.py,sha256=tSIMbLFtc_Fo66EhFovMii1v_qJYyFZJrPNnoPdW7L0,4182
16
+ opencos/files.py,sha256=-vHrddbFrwxEHU47VzeyLOU93q8XSXAmPiopClfV-bs,2296
17
+ opencos/names.py,sha256=Y2aJ5wgpbNIJ-_P5xUXnHMv_h-zMOX2Rt6iLuduqC1Q,1213
18
+ opencos/peakrdl_cleanup.py,sha256=vHNGtalTrIVP335PhRjPt9RhoccgpK1HJAi-E4M8Kc8,736
19
+ opencos/seed.py,sha256=IL9Yg-r9SLSRseMVWaEHmuw2_DNi_eyut11EafoNTsU,942
20
+ opencos/util.py,sha256=yrQl9lAKIBW-gkgPOtt_ihUwMDcac4M_IpJ5DIwLlGw,44567
21
+ opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
22
+ opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,1487
23
+ opencos/commands/deps_help.py,sha256=rWRro9UZCy8FjNgjDdCt5MMrC5KV7Pj6KDsV2xa5fSI,8178
24
+ opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
25
+ opencos/commands/export.py,sha256=bV4JCuihccbbnE_3qWVvlGtrdKWNVjo1hwOq4ax2dxA,3773
26
+ opencos/commands/flist.py,sha256=u66Xy5U5Xgk3LZ-GdCDUcwwA2U2LyZF3FpB9qWiIZMQ,9110
27
+ opencos/commands/lec.py,sha256=7uziNSeGhZrDEbfS4dt3qVp-z2122hx2kqPH15PqIgQ,4091
28
+ opencos/commands/lint.py,sha256=piPb0l0zE3sAtNJkFQ-oNpuHxnaV_RNXkXtEj_9mwGs,1594
29
+ opencos/commands/multi.py,sha256=1wvasg1VSHUGBhlubZLqbwvxWuaG6uIF_6CkdHISFX0,27536
30
+ opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
31
+ opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
32
+ opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
33
+ opencos/commands/sim.py,sha256=nGeQOaKauWRz-uyLvjbSmP0nYRp56MSVgKATDRgURiI,24005
34
+ opencos/commands/sweep.py,sha256=62XmDHT-prdxJNy-6MbK6wEGJm1YC9caOaJapoekQ8s,9325
35
+ opencos/commands/synth.py,sha256=Qs6FP9Ge_gp9TH3EFzVXKFlrrqrMwIbr38VYVlZvmeA,4557
36
+ opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
37
+ opencos/commands/upload.py,sha256=D5ln2gXsRHbPkOcy8S9jcwv-x6N4SK3m49urr1CLKo0,7915
38
+ opencos/commands/waves.py,sha256=LYF1UcxkHFYYtYoebnh9iE_on80PbbmzIpaSk-XtZcI,9232
39
+ opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ opencos/deps/defaults.py,sha256=Z6mIVJEV0zQ9rC-HkQFMBFAkixjqKS1TATPSc27wOeA,1502
41
+ opencos/deps/deps_commands.py,sha256=p6jgZXQFu8kJ5M3YqqKZwrdnRC0EAMm-8oqhKvm_gBE,16665
42
+ opencos/deps/deps_file.py,sha256=Yw70fkRcpk16MJVG1jnAGPv4ATZG4aZYQz-nWuTO9CQ,17014
43
+ opencos/deps/deps_processor.py,sha256=fSzVonVuocJDinNGOgs4jizF9yjllSdc11QW7Aj8LzQ,46662
44
+ opencos/docs/Architecture.md,sha256=8zLj19-gzwyHe2ahO7fw6It1pYkpnOtfSD8ciocN_hM,4072
45
+ opencos/docs/ConnectingApps.md,sha256=xfAJoSa7rx6-aZ8edTugRxKLwZwapR36xjds9CZBYDw,2698
46
+ opencos/docs/DEPS.md,sha256=_krXM1seIXDEIDJtz9O9JMGYUvtadYTtjCxLaHCRmns,7803
47
+ opencos/docs/Debug.md,sha256=uknfajFhLTXJkkpKJDaxnminilxz1kv6mSYAmdks5B4,4300
48
+ opencos/docs/DirectoryStructure.md,sha256=HKzzaYwpmzXdHj09vhudiJpEBPM6OPujZrMASItVxVQ,499
49
+ opencos/docs/Installation.md,sha256=EPdtShrmkL9VzG_bTia7_rVUwD863--QQhgorfc-f28,3529
50
+ opencos/docs/OcVivadoTcl.md,sha256=1VMKoBG3pl_3cEGXFUJWHsAinUvFrPItevkgFF2IQvo,4330
51
+ opencos/docs/OpenQuestions.md,sha256=IFWQxnRVBctA69dgzSbUT9SrXnLYL0gV0Uq3WjI0ZA8,513
52
+ opencos/docs/README.md,sha256=uQjmlfjQV443XQnP2jRuh4hI8eDAK5w2SwnnOkzeQVg,354
53
+ opencos/docs/RtlCodingStyle.md,sha256=_p0WN5qA8sU22dlDVcPSMOhfY1kneHb84ogZiAfCW3Y,1549
54
+ opencos/docs/eda.md,sha256=oojlC9u81Aex_YR93GqzowwkrmLG1pRwvJzrrfgE0GA,5476
55
+ opencos/docs/oc_cli.md,sha256=KcJXAFqZLxPE40KzJT4Vu-XnqnVcUUmNYyIOfQqbifA,6446
56
+ opencos/hw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ opencos/hw/oc_cli.py,sha256=U1JGlshLZhtd0LgndZFBZVltAj_HemdhbjO_Zo8ZuVM,132252
58
+ opencos/hw/pcie.py,sha256=VUJljaZJYgScAAx5yn7F6GoA8K9eTcw24otYZbkMpYs,3035
59
+ opencos/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ opencos/tools/cocotb.py,sha256=4hV73d9nfaF6okqgu3W-qFw7mgwywzyt5p5zwwRi5rE,19934
61
+ opencos/tools/invio.py,sha256=o3kjHxz1Ufy2pkLqlXuPU2U2a4zh7ERK5ohODd9UoM0,3299
62
+ opencos/tools/invio_helpers.py,sha256=86WOGmSf4m_lEqBtK3DLjWqI0jnqAWzBEBRYfBUGiSY,8804
63
+ opencos/tools/invio_yosys.py,sha256=zPVX5Bv-mR4zaUZiH0QqGF4Vbm_LXAf75mDW6ywse5c,6026
64
+ opencos/tools/iverilog.py,sha256=eNJaftD0xSdkedDro0yj_yG2S930HT1BLyiJOj0X3Ew,6593
65
+ opencos/tools/modelsim_ase.py,sha256=lde4dBOH7FFPvYVJif45t9u_LOnpSuLjSJvMPx9kEqg,2603
66
+ opencos/tools/quartus.py,sha256=ATbKXJ5ejtKv6vBoxbNd5EkTswI4wzejg3tJgQKwac0,31420
67
+ opencos/tools/questa.py,sha256=oPZUM_OeDhIef0x1HicKUwLwxi0t31Jf1fekNh3IM9Y,2423
68
+ opencos/tools/questa_common.py,sha256=Qa6VFnNnds7i6BjK3aHMp52l_bWJo_vcuruwvYW80a8,20544
69
+ opencos/tools/questa_fe.py,sha256=fRyi0-WFzp1RN7TGSZ7VTk4LFmxHkpy8BMKE3CxTmMg,2524
70
+ opencos/tools/questa_fse.py,sha256=cH9vxpwa1pi0A9hVPWc_IqYMByaviYlccxQOTpZBC1A,2486
71
+ opencos/tools/riviera.py,sha256=dZO-Pxx4ktXYZ1xngYIAwFs_hQ-zCVrgq1J3z6cjYCI,15817
72
+ opencos/tools/slang.py,sha256=TiYHfscQih1YA9HYnbz3TEZxgWZDNMPrsocVxuKmphw,9572
73
+ opencos/tools/slang_yosys.py,sha256=dgKw-v_KzvMK6bab8bkwcx5J8Azxb6P0RJ6CuvTQHUk,10298
74
+ opencos/tools/surelog.py,sha256=dsDN9WAGhB_ZKc3KarTQkjqhdY80XrfOQAroCehJ7Fw,6562
75
+ opencos/tools/tabbycad_yosys.py,sha256=2LePPgYXBVdsy7YcffPIWN-I0B7queLQ_f_pme2SCGw,7803
76
+ opencos/tools/verilator.py,sha256=HIc31haI98NATM7H72T6VDJuLICbA87xOqVevDJ4cP8,25074
77
+ opencos/tools/vivado.py,sha256=j-WFPdGtvsuolvBKxtCXVFXKCbgeRyDAKVWEd84cT4k,47597
78
+ opencos/tools/yosys.py,sha256=lHklcojgTeQjZVQO0vx7tw1ciekOrePDZCoIc86I5zs,28332
79
+ opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
+ opencos/utils/dict_helpers.py,sha256=xCdfE8SE-D6hNu5dG_d46A2g6au6h1h7SFpzYmeyRtA,810
81
+ opencos/utils/markup_helpers.py,sha256=F_Emh2kT2gETYf7C-Jy5yJjsiHiPUtBpQzONsCka6Eo,4604
82
+ opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
83
+ opencos/utils/str_helpers.py,sha256=pgVkQqKEslg1I60nfrobCU2w9IWBrMneOIEVmE6ari4,8293
84
+ opencos/utils/subprocess_helpers.py,sha256=Wqqs8FKm3XIjmD9GUYM-HWVJH7TxWJJA37A07J4fQ4w,6619
85
+ opencos/utils/vscode_helper.py,sha256=8epyEeYfXONwiSoc5KZjUfKc8vgLryct8yckJYie88U,1398
86
+ opencos/utils/vsim_helper.py,sha256=-TJK4Dh8LZ4DCM8GrS9Wka4HE_WMGG_aKwTZtKBrEOE,2994
87
+ opencos_eda-0.3.12.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
88
+ opencos_eda-0.3.12.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
89
+ opencos_eda-0.3.12.dist-info/METADATA,sha256=G25_aR2X2pCMjkckw2v4Axqv7_1t3Ky6VLTgWiAVFp0,1209
90
+ opencos_eda-0.3.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
91
+ opencos_eda-0.3.12.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
92
+ opencos_eda-0.3.12.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
93
+ opencos_eda-0.3.12.dist-info/RECORD,,
@@ -1,39 +0,0 @@
1
-
2
- tools:
3
- verilator:
4
- compile-waivers:
5
- - CASEINCOMPLETE
6
- - REALCVT # Implicit conversion of real to integer
7
- - SELRANGE
8
- - TIMESCALEMOD # If one file has `timescale, then they all must
9
- - WIDTH
10
- # Other potential verilator compilers Warnings to waive:
11
- - ALWCOMBORDER
12
- - ASCRANGE
13
- - CASEOVERLAP
14
- - CASEX
15
- - CMPCONST
16
- - COMBDLY
17
- - CONSTRAINTIGN
18
- - IGNOREDRETURN
19
- - IMPLICIT
20
- - IMPLICITSTATIC
21
- - INITIALDLY
22
- - LATCH
23
- - MISINDENT
24
- - MODDUP
25
- - MULTIDRIVEN
26
- - NULLPORT
27
- - PINMISSING
28
- - RISEFALLDLY
29
- - SIDEEFFECT
30
- - SHORTREAL
31
- - UNOPTFLAT
32
- - UNSIGNED
33
- - WIDTHCONCAT
34
- # COVERIGN only supported in 5.033 or newer:
35
- - COVERIGN
36
- # Categories:
37
- - style
38
- - lint
39
- - fatal
@@ -1,81 +0,0 @@
1
- opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
2
- opencos/_version.py,sha256=KaWIjS0c08g-C0fgYY1kXwSPqhOFxaq5pYEeoZhOR_I,617
3
- opencos/_waves_pkg.sv,sha256=TL5YT9lT-fn2FD54MbVVZROmZ7vtW3ScA_rM2eRzKmU,2068
4
- opencos/deps_schema.py,sha256=fx1_IJhsDYkUciwwCPTXHP6ftFjTsPVjO4xg12twIjw,17384
5
- opencos/eda.py,sha256=DXMAxHbTvPlCblhBsTwL81FcNIsZSBCs9qjkP63AgSY,28180
6
- opencos/eda_base.py,sha256=4vKqOSJPdSCKT0nzg8jhFkSa06BXHp74SmU7nT2FHVw,118064
7
- opencos/eda_config.py,sha256=x0Pvl-a19G9AKbhv1LxG6atn40_yXQ_PG39g-TCLJQo,14677
8
- opencos/eda_config_defaults.yml,sha256=uLbCDG9m7zEg8DCCL2ZDFgiVO09K1ObQs02__Q4RDhk,17093
9
- opencos/eda_config_max_verilator_waivers.yml,sha256=lTAU4IOEbUWVlPzuer1YYhIyxpPINeA4EJqcRIT-Ymk,840
10
- opencos/eda_config_reduced.yml,sha256=cQ9jY4J7EvAbeHTiP6bvpDSVJAYiitjLZPSxxLKIEbk,1440
11
- opencos/eda_deps_bash_completion.bash,sha256=o1yZvGUQSbN-AYq95sDTzMFw7gNHCUSlv9tASEHnACA,2763
12
- opencos/eda_deps_sanitize.py,sha256=SQjvrte9Hv9JesRY0wljvbdC6pAmLCikI-Wdzzy-D04,1939
13
- opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Zw,2851
14
- opencos/eda_tool_helper.py,sha256=Xm6nr9XweCjueWFLkrH5U3nK96JGeeh86f2GCPhwY-o,3108
15
- opencos/export_helper.py,sha256=zDkvsUS6FVrpXl1UTy53QG3CuhYp5FFplI9rRzAE2g8,25395
16
- opencos/export_json_convert.py,sha256=tSIMbLFtc_Fo66EhFovMii1v_qJYyFZJrPNnoPdW7L0,4182
17
- opencos/files.py,sha256=4fomXM5vyA5FUAImSeAjrPchQPysPSD07c_TLYg5cd8,1617
18
- opencos/names.py,sha256=Y2aJ5wgpbNIJ-_P5xUXnHMv_h-zMOX2Rt6iLuduqC1Q,1213
19
- opencos/peakrdl_cleanup.py,sha256=vHNGtalTrIVP335PhRjPt9RhoccgpK1HJAi-E4M8Kc8,736
20
- opencos/seed.py,sha256=IL9Yg-r9SLSRseMVWaEHmuw2_DNi_eyut11EafoNTsU,942
21
- opencos/util.py,sha256=rJnXWOy_5vlb_qC1O5LmeOwJaJZrV46ZM9tYAcQKqAw,44453
22
- opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
23
- opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,1487
24
- opencos/commands/deps_help.py,sha256=A0KKYdZ7rHlX1zr_J8uGDCrOw8sWnVcw0AtdDzMWr38,12041
25
- opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
26
- opencos/commands/export.py,sha256=OhqVLVGN9Ch46NmBmZZo0CxIzhf3BsyX_8qA60SPNHw,3556
27
- opencos/commands/flist.py,sha256=u66Xy5U5Xgk3LZ-GdCDUcwwA2U2LyZF3FpB9qWiIZMQ,9110
28
- opencos/commands/lec.py,sha256=7uziNSeGhZrDEbfS4dt3qVp-z2122hx2kqPH15PqIgQ,4091
29
- opencos/commands/lint.py,sha256=piPb0l0zE3sAtNJkFQ-oNpuHxnaV_RNXkXtEj_9mwGs,1594
30
- opencos/commands/multi.py,sha256=kC21JYJU5E-rP0v690YsgR2rV9WikoeUTwGC4gzYK3M,27519
31
- opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
32
- opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
33
- opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
34
- opencos/commands/sim.py,sha256=et6nHpscvDQoU_0JCvZIp9goo_q3pZK2oP18YKaguAY,24074
35
- opencos/commands/sweep.py,sha256=ni4XFgnFF8HLXtwPhETyLWfvc2kgtm4bcxFcKzUhkf0,9343
36
- opencos/commands/synth.py,sha256=m4ZwqHgOF5We0XP94F7TQli11WCPlkzhamI4fDfFR1o,4573
37
- opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
38
- opencos/commands/upload.py,sha256=oyImgcEFGxDkdeY9EYyX2R6fTOmN-lTs-HYxAZqXUUo,871
39
- opencos/commands/waves.py,sha256=nrp3ALwfJujZns44tgCgia_dEedQyKe0T3fuws8h39U,7697
40
- opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- opencos/deps/defaults.py,sha256=Z6mIVJEV0zQ9rC-HkQFMBFAkixjqKS1TATPSc27wOeA,1502
42
- opencos/deps/deps_commands.py,sha256=q4JfSfzRO2nM2zdNT4enCy33FokEytZYQJn1HJ6osJk,16606
43
- opencos/deps/deps_file.py,sha256=Yw70fkRcpk16MJVG1jnAGPv4ATZG4aZYQz-nWuTO9CQ,17014
44
- opencos/deps/deps_processor.py,sha256=WvG7p4wo_gNjkS2pxySgDmkomioooctJTxMlmP42kfk,42827
45
- opencos/hw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- opencos/hw/oc_cli.py,sha256=U1JGlshLZhtd0LgndZFBZVltAj_HemdhbjO_Zo8ZuVM,132252
47
- opencos/hw/pcie.py,sha256=VUJljaZJYgScAAx5yn7F6GoA8K9eTcw24otYZbkMpYs,3035
48
- opencos/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- opencos/tools/cocotb.py,sha256=bR97Mb87D0HPdoV82rLT7oszPLmdIPzYU1IEBaGnuXg,20544
50
- opencos/tools/invio.py,sha256=S2ChWr8xMZHSOOhX2hGKQhMmtQY2potVQjc-lsMg73o,3299
51
- opencos/tools/invio_helpers.py,sha256=86WOGmSf4m_lEqBtK3DLjWqI0jnqAWzBEBRYfBUGiSY,8804
52
- opencos/tools/invio_yosys.py,sha256=CszGeTdE1ilnMmWPLW77BrtobbsGb1CKXqot0hGimFU,5996
53
- opencos/tools/iverilog.py,sha256=PH_mvFU3LbMAPNskxMi1tD4DsMWRcsy27V_M0La9TNY,6558
54
- opencos/tools/modelsim_ase.py,sha256=2QYxaHNsDghnimvIJmkpo_M6w2oZyiyvmak0a5jh4cM,2620
55
- opencos/tools/quartus.py,sha256=_TfmPSYpbhmDLw7Dur-rRP0iGwv9hhQ6E5G-XLiYPEM,30486
56
- opencos/tools/questa.py,sha256=oPZUM_OeDhIef0x1HicKUwLwxi0t31Jf1fekNh3IM9Y,2423
57
- opencos/tools/questa_common.py,sha256=-TJ5Q7q5HPMC0IpCG0T89jq1BBQOqY5uajeD_bPk5lI,18886
58
- opencos/tools/questa_fe.py,sha256=fRyi0-WFzp1RN7TGSZ7VTk4LFmxHkpy8BMKE3CxTmMg,2524
59
- opencos/tools/questa_fse.py,sha256=cH9vxpwa1pi0A9hVPWc_IqYMByaviYlccxQOTpZBC1A,2486
60
- opencos/tools/riviera.py,sha256=eidlIkggqOHGyrm4ldzfDCO6D-nVnEa6mT5en-rjSK0,15684
61
- opencos/tools/slang.py,sha256=nDB9eK_DNAgewsXP4Sc1wh_bQiOr5q3-3ccpTbdWr1Y,9423
62
- opencos/tools/slang_yosys.py,sha256=MKh13eAmLJDkynZiezyT8E2gI4CKnXipzgFCZppaMXo,10230
63
- opencos/tools/surelog.py,sha256=uqUOpDq9Vs8Inj4m3nlMbag47LrJB4QHUIRes7dFbQY,6520
64
- opencos/tools/tabbycad_yosys.py,sha256=2LePPgYXBVdsy7YcffPIWN-I0B7queLQ_f_pme2SCGw,7803
65
- opencos/tools/verilator.py,sha256=DPD3hJy-Q7cW5Bj3E1c4av1rdumswUNjRQK7yXLKb4g,24998
66
- opencos/tools/vivado.py,sha256=k_7sc9cv69BIkIxnbQKNFjLubS_O-p7HvTH_SkiZDMQ,41643
67
- opencos/tools/yosys.py,sha256=2h88u0NA_vqLgZG9I78gIy6nQuWxyT6mirDlyjTHn9w,28290
68
- opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- opencos/utils/markup_helpers.py,sha256=A8Ev5UJ4EVKjdcF2g85SQbjdPZR4jGpNqCLaBy_4v7Q,4569
70
- opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
71
- opencos/utils/str_helpers.py,sha256=TsQxLpHyNCPAfy4nd7CX0e3Cch9yZgkOjR9KwMK5tCA,6931
72
- opencos/utils/subprocess_helpers.py,sha256=nmRUe5sPyXomzKEvEQU5231U_vilj8TuXNXLipwqLTM,6579
73
- opencos/utils/vscode_helper.py,sha256=9nHyMUIL-gzfW-qLH06sgaCnVK-YTOtu6pusitNNhL8,1363
74
- opencos/utils/vsim_helper.py,sha256=hlFnK_YbFRmskV2QtYk9qjA1WUQBX3CVYrc23_GAQNw,2401
75
- opencos_eda-0.3.10.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
76
- opencos_eda-0.3.10.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
77
- opencos_eda-0.3.10.dist-info/METADATA,sha256=OU1rM9JSxRFTDG9aOfXy5ZShhSgWgn_06D2cekDCXEU,1209
78
- opencos_eda-0.3.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
79
- opencos_eda-0.3.10.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
80
- opencos_eda-0.3.10.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
81
- opencos_eda-0.3.10.dist-info/RECORD,,