opencos-eda 0.3.11__tar.gz → 0.3.12__tar.gz

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 (101) hide show
  1. {opencos_eda-0.3.11/opencos_eda.egg-info → opencos_eda-0.3.12}/PKG-INFO +1 -1
  2. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/multi.py +1 -1
  3. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/sweep.py +1 -1
  4. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/upload.py +4 -4
  5. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/waves.py +44 -0
  6. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/eda.py +276 -170
  7. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/eda_base.py +15 -14
  8. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/eda_config.py +14 -18
  9. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/eda_config_defaults.yml +301 -194
  10. opencos_eda-0.3.12/opencos/eda_config_reduced.yml +45 -0
  11. opencos_eda-0.3.12/opencos/eda_tool_helper.py +258 -0
  12. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/cocotb.py +6 -18
  13. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/modelsim_ase.py +1 -1
  14. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/quartus.py +60 -23
  15. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/questa_common.py +48 -7
  16. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/riviera.py +2 -1
  17. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/slang.py +3 -3
  18. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/surelog.py +3 -3
  19. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/verilator.py +5 -3
  20. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/vivado.py +8 -4
  21. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/yosys.py +1 -1
  22. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/utils/str_helpers.py +38 -0
  23. {opencos_eda-0.3.11 → opencos_eda-0.3.12/opencos_eda.egg-info}/PKG-INFO +1 -1
  24. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos_eda.egg-info/SOURCES.txt +0 -1
  25. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/pyproject.toml +1 -1
  26. opencos_eda-0.3.11/opencos/eda_config_max_verilator_waivers.yml +0 -39
  27. opencos_eda-0.3.11/opencos/eda_config_reduced.yml +0 -65
  28. opencos_eda-0.3.11/opencos/eda_tool_helper.py +0 -89
  29. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/LICENSE +0 -0
  30. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/LICENSE.spdx +0 -0
  31. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/README.md +0 -0
  32. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/Architecture.md +0 -0
  33. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/ConnectingApps.md +0 -0
  34. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/DEPS.md +0 -0
  35. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/Debug.md +0 -0
  36. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/DirectoryStructure.md +0 -0
  37. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/Installation.md +0 -0
  38. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/OcVivadoTcl.md +0 -0
  39. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/OpenQuestions.md +0 -0
  40. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/README.md +0 -0
  41. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/RtlCodingStyle.md +0 -0
  42. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/eda.md +0 -0
  43. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/docs/oc_cli.md +0 -0
  44. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/__init__.py +0 -0
  45. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/_version.py +0 -0
  46. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/_waves_pkg.sv +0 -0
  47. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/__init__.py +0 -0
  48. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/build.py +0 -0
  49. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/deps_help.py +0 -0
  50. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/elab.py +0 -0
  51. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/export.py +0 -0
  52. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/flist.py +0 -0
  53. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/lec.py +0 -0
  54. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/lint.py +0 -0
  55. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/open.py +0 -0
  56. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/proj.py +0 -0
  57. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/shell.py +0 -0
  58. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/sim.py +0 -0
  59. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/synth.py +0 -0
  60. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/commands/targets.py +0 -0
  61. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/deps/__init__.py +0 -0
  62. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/deps/defaults.py +0 -0
  63. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/deps/deps_commands.py +0 -0
  64. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/deps/deps_file.py +0 -0
  65. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/deps/deps_processor.py +0 -0
  66. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/deps_schema.py +0 -0
  67. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/eda_deps_bash_completion.bash +0 -0
  68. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/eda_deps_sanitize.py +0 -0
  69. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/eda_extract_targets.py +0 -0
  70. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/export_helper.py +0 -0
  71. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/export_json_convert.py +0 -0
  72. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/files.py +0 -0
  73. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/hw/__init__.py +0 -0
  74. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/hw/oc_cli.py +0 -0
  75. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/hw/pcie.py +0 -0
  76. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/names.py +0 -0
  77. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/peakrdl_cleanup.py +0 -0
  78. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/seed.py +0 -0
  79. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/__init__.py +0 -0
  80. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/invio.py +0 -0
  81. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/invio_helpers.py +0 -0
  82. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/invio_yosys.py +0 -0
  83. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/iverilog.py +0 -0
  84. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/questa.py +0 -0
  85. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/questa_fe.py +0 -0
  86. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/questa_fse.py +0 -0
  87. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/slang_yosys.py +0 -0
  88. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/tools/tabbycad_yosys.py +0 -0
  89. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/util.py +0 -0
  90. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/utils/__init__.py +0 -0
  91. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/utils/dict_helpers.py +0 -0
  92. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/utils/markup_helpers.py +0 -0
  93. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/utils/status_constants.py +0 -0
  94. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/utils/subprocess_helpers.py +0 -0
  95. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/utils/vscode_helper.py +0 -0
  96. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos/utils/vsim_helper.py +0 -0
  97. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos_eda.egg-info/dependency_links.txt +0 -0
  98. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos_eda.egg-info/entry_points.txt +0 -0
  99. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos_eda.egg-info/requires.txt +0 -0
  100. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/opencos_eda.egg-info/top_level.txt +0 -0
  101. {opencos_eda-0.3.11 → opencos_eda-0.3.12}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.3.11
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
@@ -281,7 +281,7 @@ class CommandMulti(CommandParallel):
281
281
  if parsed.parallel < 1 or parsed.parallel > 256:
282
282
  self.error("Arg 'parallel' must be between 1 and 256")
283
283
 
284
- command = self.get_command_from_unparsed_args(tokens=unparsed)
284
+ command = self.get_sub_command_from_config()
285
285
 
286
286
  # Need to know the tool for this command, either it was set correctly via --tool and/or
287
287
  # the command (class) will tell us.
@@ -72,7 +72,7 @@ class CommandSweep(CommandDesign, CommandParallel):
72
72
 
73
73
  self.check_args()
74
74
 
75
- self.single_command = self.get_command_from_unparsed_args(tokens=unparsed)
75
+ self.single_command = self.get_sub_command_from_config()
76
76
 
77
77
  self._append_sweep_args(arg_tokens=arg_tokens)
78
78
 
@@ -204,9 +204,9 @@ class CommandUpload(Command):
204
204
  tool = tools_found.pop() # only item in set
205
205
  # Do we have a handler for this in our config?
206
206
  if tool in self.config.get('tools_loaded', []):
207
- auto_tools_order = self.config.get('auto_tools_order', [{}])[0]
208
- if tool in auto_tools_order:
209
- cls_str = auto_tools_order[tool].get('handlers', {}).get(self.command_name, None)
207
+ tool_cfg = self.config.get('tools', {}).get(tool, {})
208
+ if tool_cfg:
209
+ cls_str = tool_cfg.get('handlers', {}).get(self.command_name, None)
210
210
  if cls_str:
211
211
  cls = import_class_from_string(cls_str)
212
212
  if issubclass(cls, Command):
@@ -217,5 +217,5 @@ class CommandUpload(Command):
217
217
 
218
218
  warning(f'No handler found for tool={tool} to process bitfiles: {self.bitfiles}')
219
219
  debug(f'config -- tools_loaded: {self.config["tools_loaded"]}')
220
- debug(f'config -- auto_tools_order for tool: {self.config["auto_tools_order"][0][tool]}')
220
+ debug(f'config -- tools for tool: {self.config["tools"].get(tool, "")}')
221
221
  return self
@@ -15,10 +15,12 @@ handler).
15
15
  # pylint: disable=R0801
16
16
 
17
17
  import os
18
+ import subprocess
18
19
 
19
20
  from opencos import util
20
21
  from opencos.eda_base import CommandDesign
21
22
  from opencos.files import safe_shutil_which
23
+ from opencos.utils import vscode_helper
22
24
 
23
25
 
24
26
  class CommandWaves(CommandDesign):
@@ -51,6 +53,48 @@ class CommandWaves(CommandDesign):
51
53
  + ' to stdout',
52
54
  })
53
55
 
56
+ def get_versions_of_tool(self, tool: str) -> str:
57
+ '''Similar to Tool.get_versions(), returns the version of 'tool' for tools like:
58
+
59
+ - vaporview
60
+ - gtkwave
61
+
62
+ This is called by eda_tool_helper.get_handler_tool_version(tool, cmd, config)
63
+ '''
64
+
65
+ entry = self.config.get('tools', {}).get(tool, {})
66
+
67
+ if entry and 'requires_vscode_extension' in entry:
68
+ # vaporview, surfer
69
+ vscode_ext_name = entry.get('requires_vscode_extension', [''])[0]
70
+ vscode_helper.init()
71
+ ver = vscode_helper.EXTENSIONS.get(vscode_ext_name)
72
+ return ver
73
+
74
+ if entry and tool == 'gtkwave':
75
+ # gtkwave --version is fast.
76
+ proc = None
77
+ try:
78
+ proc = subprocess.run(
79
+ [safe_shutil_which('gtkwave'), '--version'],
80
+ capture_output=True, check=False
81
+ )
82
+ except Exception as e:
83
+ util.debug(f'gtkwave --version: exception {e}')
84
+
85
+ if not proc or not proc.stdout:
86
+ return ''
87
+
88
+ for line in proc.stdout.decode('utf-8', errors='replace').split('\n'):
89
+ if line.lower().startswith('gtkwave analyzer v'):
90
+ parts = line.split(' ')
91
+ return parts[2][1:] # trim the leading 'v' in 'v1.2.3'
92
+ return ''
93
+
94
+ return ''
95
+
96
+
97
+
54
98
 
55
99
  def get_wave_files_in_dirs(self, wave_dirs: list, quiet: bool = False) -> list:
56
100
  '''Returns list of all wave files give wave_dirs (list)'''