opencos-eda 0.3.11__py3-none-any.whl → 0.3.13__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 (41) hide show
  1. opencos/commands/flist.py +222 -39
  2. opencos/commands/multi.py +5 -3
  3. opencos/commands/sim.py +121 -7
  4. opencos/commands/sweep.py +1 -1
  5. opencos/commands/upload.py +4 -4
  6. opencos/commands/waves.py +44 -0
  7. opencos/deps/deps_file.py +4 -1
  8. opencos/deps_schema.py +2 -2
  9. opencos/eda.py +284 -175
  10. opencos/eda_base.py +54 -22
  11. opencos/eda_config.py +51 -24
  12. opencos/eda_config_defaults.yml +326 -195
  13. opencos/eda_config_reduced.yml +19 -39
  14. opencos/eda_tool_helper.py +193 -24
  15. opencos/tools/cocotb.py +6 -29
  16. opencos/tools/invio.py +0 -6
  17. opencos/tools/iverilog.py +16 -16
  18. opencos/tools/modelsim_ase.py +1 -13
  19. opencos/tools/quartus.py +81 -24
  20. opencos/tools/questa.py +0 -14
  21. opencos/tools/questa_common.py +95 -30
  22. opencos/tools/questa_fe.py +0 -14
  23. opencos/tools/questa_fse.py +0 -14
  24. opencos/tools/riviera.py +56 -25
  25. opencos/tools/slang.py +15 -12
  26. opencos/tools/slang_yosys.py +0 -6
  27. opencos/tools/surelog.py +14 -11
  28. opencos/tools/tabbycad_yosys.py +1 -7
  29. opencos/tools/verilator.py +18 -14
  30. opencos/tools/vivado.py +57 -22
  31. opencos/tools/yosys.py +2 -4
  32. opencos/util.py +14 -5
  33. opencos/utils/str_helpers.py +42 -1
  34. {opencos_eda-0.3.11.dist-info → opencos_eda-0.3.13.dist-info}/METADATA +1 -2
  35. {opencos_eda-0.3.11.dist-info → opencos_eda-0.3.13.dist-info}/RECORD +40 -41
  36. opencos/eda_config_max_verilator_waivers.yml +0 -39
  37. {opencos_eda-0.3.11.dist-info → opencos_eda-0.3.13.dist-info}/WHEEL +0 -0
  38. {opencos_eda-0.3.11.dist-info → opencos_eda-0.3.13.dist-info}/entry_points.txt +0 -0
  39. {opencos_eda-0.3.11.dist-info → opencos_eda-0.3.13.dist-info}/licenses/LICENSE +0 -0
  40. {opencos_eda-0.3.11.dist-info → opencos_eda-0.3.13.dist-info}/licenses/LICENSE.spdx +0 -0
  41. {opencos_eda-0.3.11.dist-info → opencos_eda-0.3.13.dist-info}/top_level.txt +0 -0
opencos/tools/vivado.py CHANGED
@@ -56,10 +56,14 @@ class ToolVivado(Tool):
56
56
  self.vivado_base_path, _ = os.path.split(path)
57
57
 
58
58
  xilinx_vivado = os.environ.get('XILINX_VIVADO')
59
- if not xilinx_vivado or \
59
+
60
+ # Since get_versions() doesn't have a quiet mode, and it's called as part
61
+ # of opencos.eda.init_config(..), let's only show an information message
62
+ # if XILINX_VIVADO env is set and it doesn't match the Path/bin/vivado[.bat|.exe]
63
+ if xilinx_vivado and \
60
64
  os.path.abspath(os.path.join(xilinx_vivado, 'bin')) != \
61
65
  os.path.abspath(os.path.dirname(self.vivado_exe)):
62
- util.info("environment for XILINX_VIVADO is not set or doesn't match the vivado path:",
66
+ util.info("environment for XILINX_VIVADO is set, and doesn't match the vivado path:",
63
67
  f"XILINX_VIVADO={xilinx_vivado} EXE PATH={self.vivado_exe}")
64
68
 
65
69
  # Get version based on install path name. Calling vivado -verison is too slow.
@@ -69,7 +73,7 @@ class ToolVivado(Tool):
69
73
  version = m.group(1) + '.' + m.group(2)
70
74
  self._VERSION = version
71
75
  else:
72
- self.error("Vivado path doesn't specificy version, expecting (dddd.d)")
76
+ util.warning("Vivado path doesn't specificy version, expecting (dddd.d)")
73
77
 
74
78
  if version:
75
79
  numbers_list = version.split('.')
@@ -77,7 +81,7 @@ class ToolVivado(Tool):
77
81
  self.vivado_release = int(numbers_list[1])
78
82
  self.vivado_version = float(numbers_list[0] + '.' + numbers_list[1])
79
83
  else:
80
- self.error(f"Vivado version not found, vivado path = {self.vivado_exe}")
84
+ util.warning(f"Vivado version not found, vivado path = {self.vivado_exe}")
81
85
  return self._VERSION
82
86
 
83
87
 
@@ -261,7 +265,9 @@ class CommandSimVivado(CommandSim, ToolVivado):
261
265
 
262
266
  return []
263
267
 
264
- def process_parameters_get_list(self, arg_prefix: str = '-G') -> list:
268
+ def process_parameters_get_list(
269
+ self, arg_prefix: str = '-G', **kwargs
270
+ ) -> list:
265
271
  '''Override from sim.CommandSim
266
272
 
267
273
  custom handler for parameters, instead of the one in sim.py
@@ -444,17 +450,22 @@ class CommandSimVivado(CommandSim, ToolVivado):
444
450
  for value in self.incdirs:
445
451
  command_list.append('-i')
446
452
  command_list.append(Path(value).as_posix())
447
- for key, value in self.defines.items():
448
- command_list.append('-d')
449
- if value is not None:
450
- # Because we're writing to a .tcl file, \" will become ", and \\\" will become \"
451
- # we want \" in the final file. Parameters need to act the same way as defines:
452
- value = f'{value}'.replace('"', '\\\"')
453
453
 
454
- if value is None:
455
- command_list.append(key)
456
- else:
457
- command_list.append(f"\"{key}={value}\"")
454
+ if self.args['ext-defines-sv-fname']:
455
+ self.create_ext_defines_sv()
456
+ else:
457
+ for key, value in self.defines.items():
458
+ command_list.append('-d')
459
+ if value is not None:
460
+ # Because we're writing to a .tcl file, \" will become ", and \\\" will become
461
+ # \". We want \" in the final file. Parameters need to act the same way as
462
+ # defines:
463
+ value = f'{value}'.replace('"', '\\\"')
464
+
465
+ if value is None:
466
+ command_list.append(key)
467
+ else:
468
+ command_list.append(f"\"{key}={value}\"")
458
469
 
459
470
  command_list += self.args['compile-args']
460
471
 
@@ -498,7 +509,7 @@ class CommandSimVivado(CommandSim, ToolVivado):
498
509
  _, leafname = os.path.split(name)
499
510
  if leafname == 'vivado.log':
500
511
  description = 'Vivado XSim log from stdout/stderr'
501
- if leafname == 'xsim.log':
512
+ elif leafname == 'xsim.log':
502
513
  description = 'Vivado XSim simulation step (3/3) log from stdout/stderr'
503
514
  elif leafname == 'xelab.log':
504
515
  description = 'Vivado XSim elaboration step (2/3) log from stdout/stderr'
@@ -832,10 +843,7 @@ class CommandBuildVivado(CommandBuild, ToolVivado):
832
843
  '--tool=' + self.args['tool'],
833
844
  '--force',
834
845
  '--out=' + flist_file,
835
- #'--no-emit-incdir',
836
- #'--no-single-quote-define', # Needed to run in Command.exec( ... shell=False)
837
846
  '--no-quote-define',
838
- #'--bracket-quote-define',
839
847
  '--quote-define-value',
840
848
  '--escape-define-value',
841
849
  '--no-equal-define',
@@ -915,13 +923,40 @@ class CommandBuildVivado(CommandBuild, ToolVivado):
915
923
 
916
924
 
917
925
  class CommandFListVivado(CommandFList, ToolVivado):
918
- '''CommandFlistVivado is a command handler for: eda flist --tool=vivado'''
926
+ '''CommandFlistVivado is a command handler for: eda flist --tool=vivado
927
+
928
+ This is more synthesis and projects, not for Vivado XSim. We'll log
929
+ warnings if any plusargs or parameters were set, because they will
930
+ not be emitted.
931
+ '''
919
932
 
920
933
  def __init__(self, config: dict):
921
934
  CommandFList.__init__(self, config=config)
922
935
  ToolVivado.__init__(self, config=self.config)
923
- self.args['all-sv'] = False
924
- self.args['emit-parameter'] = False
936
+ self.args.update({
937
+ 'all-sv': False,
938
+ # synth/project style Flist, can't emit these:
939
+ 'emit-parameter': False,
940
+ 'emit-plusargs': False,
941
+ })
942
+
943
+ def get_flist_plusargs_list(self) -> list:
944
+ '''Overriden from CommandFList.'''
945
+ if self.args['unprocessed-plusargs']:
946
+ util.warning('Command "flist" for --tool=vivado is not intended for simulation',
947
+ 'and plusargs were present. They will NOT be included in the flist:',
948
+ f'{self.args["unprocessed-plusargs"]}')
949
+
950
+ return []
951
+
952
+ def get_flist_parameter_list(self) -> list:
953
+ '''Overriden from CommandFList.'''
954
+ if self.parameters:
955
+ util.warning('Command "flist" for --tool=vivado is not intended for simulation',
956
+ 'and parameters were present. They will NOT be included in the flist:',
957
+ f'{self.parameters}')
958
+
959
+ return []
925
960
 
926
961
 
927
962
  class CommandUploadVivado(CommandUpload, ToolVivado):
opencos/tools/yosys.py CHANGED
@@ -83,14 +83,12 @@ 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
 
90
90
  def set_tool_defines(self):
91
- self.defines.update({
92
- 'OC_TOOL_YOSYS': None
93
- })
91
+ super().set_tool_defines()
94
92
  if 'OC_LIBRARY' not in self.defines:
95
93
  self.defines.update({
96
94
  'OC_LIBRARY_BEHAVIORAL': None,
opencos/util.py CHANGED
@@ -24,12 +24,14 @@ from opencos.files import safe_shutil_which
24
24
  from opencos.utils import status_constants
25
25
  from opencos.utils.str_helpers import strip_ansi_color
26
26
 
27
+ INITIAL_CWD = os.getcwd()
28
+
27
29
  global_exit_allowed = False # pylint: disable=invalid-name
28
30
  progname = "UNKNOWN" # pylint: disable=invalid-name
29
31
  progname_in_message = True # pylint: disable=invalid-name
30
32
  debug_level = 0 # pylint: disable=invalid-name
31
- dot_f_files_expanded = set() # pylint: disable=invalid-name
32
- env_files_loaded = set() # pylint: disable=invalid-name
33
+ dot_f_files_expanded = [] # pylint: disable=invalid-name
34
+ env_files_loaded = [] # pylint: disable=invalid-name
33
35
 
34
36
  args = { # pylint: disable=invalid-name
35
37
  'color' : bool(supportsColor.stdout),
@@ -456,7 +458,8 @@ def load_env_file(env_file: str) -> None:
456
458
  '''Handles .env file (from util CLI args --env-file)'''
457
459
  if os.path.isfile(env_file):
458
460
  load_dotenv(env_file, override=True)
459
- env_files_loaded.add(os.path.abspath(env_file))
461
+ if os.path.abspath(env_file) not in env_files_loaded:
462
+ env_files_loaded.append(os.path.abspath(env_file))
460
463
  else:
461
464
  warning(f'--env-file {env_file} does not exist and is not loaded.')
462
465
 
@@ -510,7 +513,8 @@ def read_tokens_from_dot_f(filepath: str, caller_info: str = '', verbose: bool =
510
513
  if os.path.abspath(filepath) in dot_f_files_expanded:
511
514
  error(f'-f (or --input-file): {filepath} has already been expanded',
512
515
  f'cannot traverse again (duplicate arg or nested .f files) {caller_info}')
513
- dot_f_files_expanded.add(os.path.abspath(filepath))
516
+ else:
517
+ dot_f_files_expanded.append(os.path.abspath(filepath))
514
518
  tokens = []
515
519
  dotf_file_dir, _ = os.path.split(filepath)
516
520
  with open(filepath, encoding='utf-8') as f:
@@ -518,7 +522,12 @@ def read_tokens_from_dot_f(filepath: str, caller_info: str = '', verbose: bool =
518
522
  line = os.path.expandvars(line.strip())
519
523
  if not line or line.startswith('#') or line.startswith('//'):
520
524
  continue
521
- words = line.split()
525
+ words = []
526
+ if line.startswith("'") and line.endswith("'"):
527
+ # treat as single word:
528
+ words = [line]
529
+ else:
530
+ words = line.split()
522
531
  tokens.extend(patch_args_for_dir(
523
532
  tokens=words, patch_dir=dotf_file_dir, caller_info=f"(from dotf {filepath})"
524
533
  ))
@@ -6,11 +6,14 @@ import re
6
6
  import shlex
7
7
  import textwrap
8
8
 
9
- VALID_TARGET_INFO_STR = (
9
+ VALID_TARGET_INFO_STR: str = (
10
10
  "should start with a . or underscore/letter, rest should be"
11
11
  " ., alpha-numeric, dashes, or underscores."
12
12
  )
13
13
 
14
+ # Parameters, with hierarchy, can have a name like: /Path/to.label[6]/Name
15
+ PARAMETER_NAME_RSTR : str = r'[\w\.\/\[\]]+'
16
+
14
17
  def is_valid_target_name(s: str) -> bool:
15
18
  '''Returns True if str starts with . or underscore/letter, rest alphanum, dash, dot,
16
19
 
@@ -190,6 +193,44 @@ def pretty_list_columns_manual(data: list, num_columns: int = 4, auto_columns: b
190
193
 
191
194
  return ret_lines
192
195
 
196
+ def pretty_2dlist_columns(
197
+ data: list, padding: int = 2, return_as_2d_list: bool = False,
198
+ header_row_centered: bool = False
199
+ ) -> list:
200
+ '''Given a list of list-of-str, return a 1d list with values aligned in columns
201
+
202
+ If return_as_2d_list=True, does not join the padded row items.
203
+ '''
204
+
205
+ if not data:
206
+ return []
207
+
208
+ ret_lines = []
209
+ # include padding in the col widths:
210
+ col_widths = [max(len(str(value)) for value in col) + padding for col in zip(*data)]
211
+
212
+ if return_as_2d_list:
213
+ for rownum, row in enumerate(data):
214
+ if header_row_centered and rownum == 0:
215
+ ret_lines.append([
216
+ f'{item:^{col_widths[col_idx]}}' for col_idx,item in enumerate(row)
217
+ ])
218
+ else:
219
+ ret_lines.append([
220
+ f'{item:<{col_widths[col_idx]}}' for col_idx,item in enumerate(row)
221
+ ])
222
+ return ret_lines
223
+
224
+ # else return as 1D list with everything already formatted.
225
+ header_fmt = ''.join(f"{{:^{w}}}" for w in col_widths)
226
+ format_str = ''.join(f"{{:<{w}}}" for w in col_widths)
227
+ for rownum, row in enumerate(data):
228
+ if header_row_centered and rownum == 0:
229
+ ret_lines.append(header_fmt.format(*row))
230
+ else:
231
+ ret_lines.append(format_str.format(*row))
232
+
233
+ return ret_lines
193
234
 
194
235
  def print_columns_manual(data: list, num_columns: int = 4, auto_columns: bool = True) -> None:
195
236
  """Prints a list of strings in columns, manually aligning them."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.3.11
3
+ Version: 0.3.13
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
@@ -20,7 +20,6 @@ Requires-Dist: supports_color>=0.2.0
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: pylint>=3.0.0; extra == "dev"
22
22
  Requires-Dist: pytest>=8.3.5; extra == "dev"
23
- Requires-Dist: twine>=6.1.0; extra == "dev"
24
23
  Provides-Extra: cocotb
25
24
  Requires-Dist: cocotb>=2.0; extra == "cocotb"
26
25
  Requires-Dist: pytest>=8.3.5; extra == "cocotb"
@@ -1,46 +1,45 @@
1
1
  opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
2
2
  opencos/_version.py,sha256=KaWIjS0c08g-C0fgYY1kXwSPqhOFxaq5pYEeoZhOR_I,617
3
3
  opencos/_waves_pkg.sv,sha256=TL5YT9lT-fn2FD54MbVVZROmZ7vtW3ScA_rM2eRzKmU,2068
4
- opencos/deps_schema.py,sha256=fx1_IJhsDYkUciwwCPTXHP6ftFjTsPVjO4xg12twIjw,17384
5
- opencos/eda.py,sha256=_JjXPDSGrA0NuG6G5db_CaO6LW0FzDLkTYLKO6hxJG4,32890
6
- opencos/eda_base.py,sha256=EUFucwgTJoZQHSvaU_8TdUTkeKACjUGDa_E0jgX3V40,122953
7
- opencos/eda_config.py,sha256=7BffQwsOdexDvRs4cd8LuJe1A590oLkewWQlk4de37k,16176
8
- opencos/eda_config_defaults.yml,sha256=ZXGGl321eso14LezVYp5cDiAtY3GE6eRqzj6mGHJgUs,17713
9
- opencos/eda_config_max_verilator_waivers.yml,sha256=lTAU4IOEbUWVlPzuer1YYhIyxpPINeA4EJqcRIT-Ymk,840
10
- opencos/eda_config_reduced.yml,sha256=cQ9jY4J7EvAbeHTiP6bvpDSVJAYiitjLZPSxxLKIEbk,1440
4
+ opencos/deps_schema.py,sha256=wKRMuFzOIapwpCPFGvWGM8Mcwdh9yngHOiDRMmvUaIg,17394
5
+ opencos/eda.py,sha256=2vJLMYMW9muWieNaOJz-U5EIVchmVyhTfmEcnZwQtvg,37382
6
+ opencos/eda_base.py,sha256=-nguHrrYVb8a853HEMfFrOoXlsEEeRnDdFR66nTwX0s,124332
7
+ opencos/eda_config.py,sha256=EPW0rhnbrpfV9h0OtKrp7By19FcEyDXT2-ud7y4jbRU,17266
8
+ opencos/eda_config_defaults.yml,sha256=xRJWps4On748MAFIfOIvLNOv5cyON7xAeaW5XquJSp0,21534
9
+ opencos/eda_config_reduced.yml,sha256=BOKGfe-OmVIF0SKhTTglPIzfAoGuCZ8n-f2KpoLF8dk,883
11
10
  opencos/eda_deps_bash_completion.bash,sha256=o1yZvGUQSbN-AYq95sDTzMFw7gNHCUSlv9tASEHnACA,2763
12
11
  opencos/eda_deps_sanitize.py,sha256=SQjvrte9Hv9JesRY0wljvbdC6pAmLCikI-Wdzzy-D04,1939
13
12
  opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Zw,2851
14
- opencos/eda_tool_helper.py,sha256=Xm6nr9XweCjueWFLkrH5U3nK96JGeeh86f2GCPhwY-o,3108
13
+ opencos/eda_tool_helper.py,sha256=NoVUvUeqvM18Svx1Oy4R8xM4Numq_YZneKyHSDnMMnY,8546
15
14
  opencos/export_helper.py,sha256=zDkvsUS6FVrpXl1UTy53QG3CuhYp5FFplI9rRzAE2g8,25395
16
15
  opencos/export_json_convert.py,sha256=tSIMbLFtc_Fo66EhFovMii1v_qJYyFZJrPNnoPdW7L0,4182
17
16
  opencos/files.py,sha256=-vHrddbFrwxEHU47VzeyLOU93q8XSXAmPiopClfV-bs,2296
18
17
  opencos/names.py,sha256=Y2aJ5wgpbNIJ-_P5xUXnHMv_h-zMOX2Rt6iLuduqC1Q,1213
19
18
  opencos/peakrdl_cleanup.py,sha256=vHNGtalTrIVP335PhRjPt9RhoccgpK1HJAi-E4M8Kc8,736
20
19
  opencos/seed.py,sha256=IL9Yg-r9SLSRseMVWaEHmuw2_DNi_eyut11EafoNTsU,942
21
- opencos/util.py,sha256=yrQl9lAKIBW-gkgPOtt_ihUwMDcac4M_IpJ5DIwLlGw,44567
20
+ opencos/util.py,sha256=LzMOY5ijcubq3OZSG5zVSALN7-IWuTkeNCvbY7whwq0,44854
22
21
  opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
23
22
  opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,1487
24
23
  opencos/commands/deps_help.py,sha256=rWRro9UZCy8FjNgjDdCt5MMrC5KV7Pj6KDsV2xa5fSI,8178
25
24
  opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
26
25
  opencos/commands/export.py,sha256=bV4JCuihccbbnE_3qWVvlGtrdKWNVjo1hwOq4ax2dxA,3773
27
- opencos/commands/flist.py,sha256=u66Xy5U5Xgk3LZ-GdCDUcwwA2U2LyZF3FpB9qWiIZMQ,9110
26
+ opencos/commands/flist.py,sha256=YlcQFuTo-jpmSfDYdVtNDqK_2VYMM_Ox1_5_0Os-I7o,16329
28
27
  opencos/commands/lec.py,sha256=7uziNSeGhZrDEbfS4dt3qVp-z2122hx2kqPH15PqIgQ,4091
29
28
  opencos/commands/lint.py,sha256=piPb0l0zE3sAtNJkFQ-oNpuHxnaV_RNXkXtEj_9mwGs,1594
30
- opencos/commands/multi.py,sha256=Jewht_Q7ObpwRluxKITapMzd1Q8s5OB9DXobm47e70g,27554
29
+ opencos/commands/multi.py,sha256=urm-IDllnMZWScH7e6Pg4ukHGHILBd4NbPlPmHU3vsw,27624
31
30
  opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
32
31
  opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
33
32
  opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
34
- opencos/commands/sim.py,sha256=nGeQOaKauWRz-uyLvjbSmP0nYRp56MSVgKATDRgURiI,24005
35
- opencos/commands/sweep.py,sha256=ni4XFgnFF8HLXtwPhETyLWfvc2kgtm4bcxFcKzUhkf0,9343
33
+ opencos/commands/sim.py,sha256=ifdSpOVmxMWkQ65-9lhwMNZM4F3MXokjJJBm4puyVX4,28573
34
+ opencos/commands/sweep.py,sha256=62XmDHT-prdxJNy-6MbK6wEGJm1YC9caOaJapoekQ8s,9325
36
35
  opencos/commands/synth.py,sha256=Qs6FP9Ge_gp9TH3EFzVXKFlrrqrMwIbr38VYVlZvmeA,4557
37
36
  opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
38
- opencos/commands/upload.py,sha256=DuF360dWcagNEdvBC6649vn3gRWtUDVlqxjB-WMx6uk,7972
39
- opencos/commands/waves.py,sha256=JtSpZsqZN-p6_N_YVDi4wDXaXvUqqUtOKlKrEaPhQPU,7762
37
+ opencos/commands/upload.py,sha256=D5ln2gXsRHbPkOcy8S9jcwv-x6N4SK3m49urr1CLKo0,7915
38
+ opencos/commands/waves.py,sha256=LYF1UcxkHFYYtYoebnh9iE_on80PbbmzIpaSk-XtZcI,9232
40
39
  opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
40
  opencos/deps/defaults.py,sha256=Z6mIVJEV0zQ9rC-HkQFMBFAkixjqKS1TATPSc27wOeA,1502
42
41
  opencos/deps/deps_commands.py,sha256=p6jgZXQFu8kJ5M3YqqKZwrdnRC0EAMm-8oqhKvm_gBE,16665
43
- opencos/deps/deps_file.py,sha256=Yw70fkRcpk16MJVG1jnAGPv4ATZG4aZYQz-nWuTO9CQ,17014
42
+ opencos/deps/deps_file.py,sha256=HNZXhg4cXEklTCATboAn1ZO6xfwibwYQBY17dvFJcAw,17078
44
43
  opencos/deps/deps_processor.py,sha256=fSzVonVuocJDinNGOgs4jizF9yjllSdc11QW7Aj8LzQ,46662
45
44
  opencos/docs/Architecture.md,sha256=8zLj19-gzwyHe2ahO7fw6It1pYkpnOtfSD8ciocN_hM,4072
46
45
  opencos/docs/ConnectingApps.md,sha256=xfAJoSa7rx6-aZ8edTugRxKLwZwapR36xjds9CZBYDw,2698
@@ -58,37 +57,37 @@ opencos/hw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
57
  opencos/hw/oc_cli.py,sha256=U1JGlshLZhtd0LgndZFBZVltAj_HemdhbjO_Zo8ZuVM,132252
59
58
  opencos/hw/pcie.py,sha256=VUJljaZJYgScAAx5yn7F6GoA8K9eTcw24otYZbkMpYs,3035
60
59
  opencos/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- opencos/tools/cocotb.py,sha256=iJOloM7K2v-UihrQ5donx_QnTgeyGbHuq0XXHmPGH0o,20549
62
- opencos/tools/invio.py,sha256=o3kjHxz1Ufy2pkLqlXuPU2U2a4zh7ERK5ohODd9UoM0,3299
60
+ opencos/tools/cocotb.py,sha256=mkhdbBbkOcPPct1TZcKH6wPPT7pjzRH_6wCNH2qgXOM,19660
61
+ opencos/tools/invio.py,sha256=pxrS5oaNTcEv-ToXdhFBJZF5XhTmZnJz9CQ8NnLoty8,3155
63
62
  opencos/tools/invio_helpers.py,sha256=86WOGmSf4m_lEqBtK3DLjWqI0jnqAWzBEBRYfBUGiSY,8804
64
63
  opencos/tools/invio_yosys.py,sha256=zPVX5Bv-mR4zaUZiH0QqGF4Vbm_LXAf75mDW6ywse5c,6026
65
- opencos/tools/iverilog.py,sha256=eNJaftD0xSdkedDro0yj_yG2S930HT1BLyiJOj0X3Ew,6593
66
- opencos/tools/modelsim_ase.py,sha256=2QYxaHNsDghnimvIJmkpo_M6w2oZyiyvmak0a5jh4cM,2620
67
- opencos/tools/quartus.py,sha256=HZRQVzmMBndsB7e-6r-8sVtylHzQdHlabFhJMOxgrk4,29971
68
- opencos/tools/questa.py,sha256=oPZUM_OeDhIef0x1HicKUwLwxi0t31Jf1fekNh3IM9Y,2423
69
- opencos/tools/questa_common.py,sha256=rIWZctKS0MXfBAWvJhcETcpYU7ilh-EAGPXCCA63L30,18921
70
- opencos/tools/questa_fe.py,sha256=fRyi0-WFzp1RN7TGSZ7VTk4LFmxHkpy8BMKE3CxTmMg,2524
71
- opencos/tools/questa_fse.py,sha256=cH9vxpwa1pi0A9hVPWc_IqYMByaviYlccxQOTpZBC1A,2486
72
- opencos/tools/riviera.py,sha256=qx1-sRrme33VtEzzJNd_O_p6ju-p9twJ_TJLMlQCTHw,15719
73
- opencos/tools/slang.py,sha256=UUgfqSjgaVFetGDWHeccUhc8bJvn6GAE3XNhFBpX2R8,9566
74
- opencos/tools/slang_yosys.py,sha256=dgKw-v_KzvMK6bab8bkwcx5J8Azxb6P0RJ6CuvTQHUk,10298
75
- opencos/tools/surelog.py,sha256=dCHbYReuxptBDxdfecCLeUI6EZ7CLzLzLT4FB6yxONQ,6556
76
- opencos/tools/tabbycad_yosys.py,sha256=2LePPgYXBVdsy7YcffPIWN-I0B7queLQ_f_pme2SCGw,7803
77
- opencos/tools/verilator.py,sha256=OwrGL5WAAaqrAcDEKjWYA_tBXKTieLaDlmq1veEMRfc,25038
78
- opencos/tools/vivado.py,sha256=jTaevCgczmg-fDy5l_nEZDZsEZn9vUAF-zpEjEZ-sxQ,47344
79
- opencos/tools/yosys.py,sha256=_oo-I1DYoRwn8uQhf0QHMtPbMBu3xem4mxaG_CEHk5k,28330
64
+ opencos/tools/iverilog.py,sha256=7R4wL1udfn0WdckPDsYM75GgYW9DeCfPUQEOe-8SGVM,6755
65
+ opencos/tools/modelsim_ase.py,sha256=NEzAXJtiVWkKb3N-O3PYxSnnFmrq8LNrqjxFNBwzfKI,2254
66
+ opencos/tools/quartus.py,sha256=gtswIhpnHjUTmw5g1BRxhjB6tofXEsx-I6IySjwyF94,32303
67
+ opencos/tools/questa.py,sha256=QP0JCt8rWf0-snncNP0_Pi6oRY6_Z9Hwix1IYlRdGEc,2057
68
+ opencos/tools/questa_common.py,sha256=oVytNlwLK-W6yUYqOwlWjPrDd0kWJV4-FnWgppkSX8k,21647
69
+ opencos/tools/questa_fe.py,sha256=yYNlUnA2pQ8-gELLajnvJgqg6ZXb6F26YRmyvrlNFOA,2155
70
+ opencos/tools/questa_fse.py,sha256=CjOAn1Ik-3Hd-vyUH_WyTTJxH2yPfhNEfXbedCir7J4,2116
71
+ opencos/tools/riviera.py,sha256=LgLartBXWwJIoI4zRFL7X2wk6hu2wa0CIJCNBZOGxUc,17509
72
+ opencos/tools/slang.py,sha256=MxRwu4laSbv7oa3lO-BKg4McL7KAckSA003sL-9sY3U,9682
73
+ opencos/tools/slang_yosys.py,sha256=z8gUcNSGDl5S6Ufxdx54WWe5v73w0UydErBKFWBR6ZI,10154
74
+ opencos/tools/surelog.py,sha256=QaXS1EWI2b1TqBoekpXndoHxS6t2e8SD-I2Ryi-gHGs,6666
75
+ opencos/tools/tabbycad_yosys.py,sha256=J4RgfuzYLiBK1U8odXiovXZhgkcDFPlbxt73SppksVA,7657
76
+ opencos/tools/verilator.py,sha256=cx4q1WrterA5Kcn8bt8ukqthS0030swGOFOsoMRBYvw,25131
77
+ opencos/tools/vivado.py,sha256=c8iHVK76de_25iOqN-PJ7O6n1lRopvO_XCM0HZV3c04,48702
78
+ opencos/tools/yosys.py,sha256=DZyqAnrHT-6Wv6TlIwzuv4qw7HZs4vOXPpxZzErRsnY,28292
80
79
  opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
80
  opencos/utils/dict_helpers.py,sha256=xCdfE8SE-D6hNu5dG_d46A2g6au6h1h7SFpzYmeyRtA,810
82
81
  opencos/utils/markup_helpers.py,sha256=F_Emh2kT2gETYf7C-Jy5yJjsiHiPUtBpQzONsCka6Eo,4604
83
82
  opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
84
- opencos/utils/str_helpers.py,sha256=TsQxLpHyNCPAfy4nd7CX0e3Cch9yZgkOjR9KwMK5tCA,6931
83
+ opencos/utils/str_helpers.py,sha256=ctl0Zh0h0JW7OlReeSdGxB9wODQYzmMO-9-h55rSRv0,8419
85
84
  opencos/utils/subprocess_helpers.py,sha256=Wqqs8FKm3XIjmD9GUYM-HWVJH7TxWJJA37A07J4fQ4w,6619
86
85
  opencos/utils/vscode_helper.py,sha256=8epyEeYfXONwiSoc5KZjUfKc8vgLryct8yckJYie88U,1398
87
86
  opencos/utils/vsim_helper.py,sha256=-TJK4Dh8LZ4DCM8GrS9Wka4HE_WMGG_aKwTZtKBrEOE,2994
88
- opencos_eda-0.3.11.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
89
- opencos_eda-0.3.11.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
90
- opencos_eda-0.3.11.dist-info/METADATA,sha256=3XyFh33pZxt7MsVy_QuaUqNvMN8lPbYtc3oBdMYwfNw,1209
91
- opencos_eda-0.3.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
92
- opencos_eda-0.3.11.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
93
- opencos_eda-0.3.11.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
94
- opencos_eda-0.3.11.dist-info/RECORD,,
87
+ opencos_eda-0.3.13.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
88
+ opencos_eda-0.3.13.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
89
+ opencos_eda-0.3.13.dist-info/METADATA,sha256=ryUfx_mmUFaZcwGr8lXFXrkY2whYhLB-HcQCfKSMtn8,1165
90
+ opencos_eda-0.3.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
91
+ opencos_eda-0.3.13.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
92
+ opencos_eda-0.3.13.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
93
+ opencos_eda-0.3.13.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