opencos-eda 0.3.12__py3-none-any.whl → 0.3.14__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 (36) hide show
  1. opencos/commands/flist.py +222 -39
  2. opencos/commands/multi.py +4 -2
  3. opencos/commands/sim.py +192 -8
  4. opencos/deps/deps_file.py +4 -1
  5. opencos/deps_schema.py +2 -2
  6. opencos/eda.py +12 -9
  7. opencos/eda_base.py +39 -8
  8. opencos/eda_config.py +37 -6
  9. opencos/eda_config_defaults.yml +30 -5
  10. opencos/eda_tool_helper.py +4 -4
  11. opencos/tools/cocotb.py +0 -11
  12. opencos/tools/invio.py +0 -6
  13. opencos/tools/iverilog.py +17 -16
  14. opencos/tools/modelsim_ase.py +0 -12
  15. opencos/tools/quartus.py +21 -1
  16. opencos/tools/questa.py +0 -14
  17. opencos/tools/questa_common.py +54 -25
  18. opencos/tools/questa_fe.py +0 -14
  19. opencos/tools/questa_fse.py +0 -14
  20. opencos/tools/riviera.py +104 -25
  21. opencos/tools/slang.py +12 -9
  22. opencos/tools/slang_yosys.py +0 -6
  23. opencos/tools/surelog.py +11 -8
  24. opencos/tools/tabbycad_yosys.py +1 -7
  25. opencos/tools/verilator.py +18 -11
  26. opencos/tools/vivado.py +92 -25
  27. opencos/tools/yosys.py +8 -5
  28. opencos/util.py +14 -5
  29. opencos/utils/str_helpers.py +4 -1
  30. {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/METADATA +1 -2
  31. {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/RECORD +36 -36
  32. {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/WHEEL +0 -0
  33. {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/entry_points.txt +0 -0
  34. {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/licenses/LICENSE +0 -0
  35. {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/licenses/LICENSE.spdx +0 -0
  36. {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/top_level.txt +0 -0
opencos/tools/vivado.py CHANGED
@@ -39,7 +39,10 @@ class ToolVivado(Tool):
39
39
  })
40
40
  self.args_help.update({
41
41
  'part': 'Device used for commands: synth, build.',
42
- 'add-glbl-v': '(for simulation) add glbl.v to filelist',
42
+ 'add-glbl-v': (
43
+ '(for simulation) add glbl.v to filelist, "glbl" to sim libraries, and "glbl"'
44
+ ' as an additional top level hier.'
45
+ ),
43
46
  })
44
47
 
45
48
 
@@ -124,6 +127,8 @@ class CommandSimVivado(CommandSim, ToolVivado):
124
127
  Note that we attempt to run a generated .tcl script within vivado, that will perform the
125
128
  3-step compile/elaborate/simulate steps'''
126
129
 
130
+ library_map_supported = True
131
+
127
132
  def __init__(self, config: dict):
128
133
  CommandSim.__init__(self, config)
129
134
  ToolVivado.__init__(self, config=self.config)
@@ -139,7 +144,16 @@ class CommandSimVivado(CommandSim, ToolVivado):
139
144
  'gui': 'Run Vivado XSim in GUI mode',
140
145
  'tcl-file': 'name of TCL file to be created for XSim',
141
146
  'fpga': 'FPGA device name, can be used for various Xilinx IP or XCIs',
142
- 'add-glbl-v': 'Use the glbl.v in xvlog for this version of Vivado',
147
+ 'add-glbl-v': (
148
+ 'Use the glbl.v in xvlog, xelab for this version of Vivado. Adds glbl.v to'
149
+ ' filelist(s), and add "glbl" as an additional top level hier to xelab.'
150
+ ),
151
+ 'library-map': (
152
+ 'list arg (can set multiple) with values LibName:Path, for example:'
153
+ ' --library-map=unisim:path/to/custom_lib_name.lib'
154
+ ' The Path search is relative to the tool exe, one level above the tool exe,'
155
+ ' or can be absolute path.'
156
+ )
143
157
  })
144
158
 
145
159
  self.sim_libraries = self.tool_config.get('sim-libraries', [])
@@ -165,6 +179,7 @@ class CommandSimVivado(CommandSim, ToolVivado):
165
179
 
166
180
  def prepare_compile(self):
167
181
  self.set_tool_defines()
182
+ self.update_library_map()
168
183
 
169
184
  # Don't use the return values, these will set values in self.vivado_tcl:
170
185
  self.get_compile_command_lists()
@@ -265,7 +280,9 @@ class CommandSimVivado(CommandSim, ToolVivado):
265
280
 
266
281
  return []
267
282
 
268
- def process_parameters_get_list(self, arg_prefix: str = '-G') -> list:
283
+ def process_parameters_get_list(
284
+ self, arg_prefix: str = '-G', **kwargs
285
+ ) -> list:
269
286
  '''Override from sim.CommandSim
270
287
 
271
288
  custom handler for parameters, instead of the one in sim.py
@@ -319,11 +336,13 @@ class CommandSimVivado(CommandSim, ToolVivado):
319
336
  command_list += ['-debug', 'wave']
320
337
  if util.args['verbose']:
321
338
  command_list += ['-v', '2']
322
- if self.args['sim-library'] or self.args['add-glbl-v']:
339
+ if self.args['sim-library']:
323
340
  self.sim_libraries += self.args['sim-library'] # Add any command line libraries
324
- for x in self.sim_libraries:
325
- command_list += ['-L', x]
326
- command_list += ['glbl']
341
+ for x in self.sim_libraries:
342
+ command_list += ['-L', x]
343
+ if self.args['add-top-library']:
344
+ command_list += self.args['add-top-library'] # list
345
+
327
346
  command_list += self.args['elab-args']
328
347
 
329
348
  # For Windows compatibility, we have some issues with command/Powershell passing args
@@ -445,20 +464,29 @@ class CommandSimVivado(CommandSim, ToolVivado):
445
464
  command_list += self.tool_config.get('compile-args', '').split()
446
465
  if util.args['verbose']:
447
466
  command_list += ['-v', '2']
467
+
468
+ # If there were any external .lib files from --library-map args, add those now:
469
+ command_list.extend(self._get_xvlog_library_map_list())
470
+
448
471
  for value in self.incdirs:
449
472
  command_list.append('-i')
450
473
  command_list.append(Path(value).as_posix())
451
- for key, value in self.defines.items():
452
- command_list.append('-d')
453
- if value is not None:
454
- # Because we're writing to a .tcl file, \" will become ", and \\\" will become \"
455
- # we want \" in the final file. Parameters need to act the same way as defines:
456
- value = f'{value}'.replace('"', '\\\"')
457
474
 
458
- if value is None:
459
- command_list.append(key)
460
- else:
461
- command_list.append(f"\"{key}={value}\"")
475
+ if self.args['ext-defines-sv-fname']:
476
+ self.create_ext_defines_sv()
477
+ else:
478
+ for key, value in self.defines.items():
479
+ command_list.append('-d')
480
+ if value is not None:
481
+ # Because we're writing to a .tcl file, \" will become ", and \\\" will become
482
+ # \". We want \" in the final file. Parameters need to act the same way as
483
+ # defines:
484
+ value = f'{value}'.replace('"', '\\\"')
485
+
486
+ if value is None:
487
+ command_list.append(key)
488
+ else:
489
+ command_list.append(f"\"{key}={value}\"")
462
490
 
463
491
  command_list += self.args['compile-args']
464
492
 
@@ -484,13 +512,28 @@ class CommandSimVivado(CommandSim, ToolVivado):
484
512
  glbl_v = self.vivado_base_path.replace(
485
513
  'bin', os.path.join('data', 'verilog', 'src', 'glbl.v')
486
514
  )
487
- if any(x.endswith('glbl.v') for x in self.files_v):
515
+ if any(x and os.path.split(x)[1] == 'glbl.v' for x in self.files_v):
488
516
  util.warning(f'--add-glbl-v: Not adding {glbl_v=} b/c glbl.v already in',
489
517
  f'{self.files_v=}')
490
518
  elif not os.path.exists(glbl_v):
491
519
  self.error(f"Could not find file {glbl_v=}")
492
520
  else:
493
521
  self.files_v.insert(0, glbl_v)
522
+ # add to self.args['add-top-library']
523
+ if 'glbl' not in self.args['add-top-library']:
524
+ self.args['add-top-library'].append('glbl')
525
+
526
+ def _get_xvlog_library_map_list(self) -> list:
527
+ '''Returns list of lines used in vlog step for --library-map args
528
+
529
+ Note that Vivado does not do library name re-mapping, the name comes
530
+ from the .lib file internals.
531
+ '''
532
+
533
+ lines = []
534
+ for _, lib_file_path in self.library_map.items():
535
+ lines.append(f'-libmap {lib_file_path}')
536
+ return lines
494
537
 
495
538
 
496
539
  def artifacts_add(self, name: str, typ: str, description: str) -> None:
@@ -502,7 +545,7 @@ class CommandSimVivado(CommandSim, ToolVivado):
502
545
  _, leafname = os.path.split(name)
503
546
  if leafname == 'vivado.log':
504
547
  description = 'Vivado XSim log from stdout/stderr'
505
- if leafname == 'xsim.log':
548
+ elif leafname == 'xsim.log':
506
549
  description = 'Vivado XSim simulation step (3/3) log from stdout/stderr'
507
550
  elif leafname == 'xelab.log':
508
551
  description = 'Vivado XSim elaboration step (2/3) log from stdout/stderr'
@@ -836,10 +879,7 @@ class CommandBuildVivado(CommandBuild, ToolVivado):
836
879
  '--tool=' + self.args['tool'],
837
880
  '--force',
838
881
  '--out=' + flist_file,
839
- #'--no-emit-incdir',
840
- #'--no-single-quote-define', # Needed to run in Command.exec( ... shell=False)
841
882
  '--no-quote-define',
842
- #'--bracket-quote-define',
843
883
  '--quote-define-value',
844
884
  '--escape-define-value',
845
885
  '--no-equal-define',
@@ -919,13 +959,40 @@ class CommandBuildVivado(CommandBuild, ToolVivado):
919
959
 
920
960
 
921
961
  class CommandFListVivado(CommandFList, ToolVivado):
922
- '''CommandFlistVivado is a command handler for: eda flist --tool=vivado'''
962
+ '''CommandFlistVivado is a command handler for: eda flist --tool=vivado
963
+
964
+ This is more synthesis and projects, not for Vivado XSim. We'll log
965
+ warnings if any plusargs or parameters were set, because they will
966
+ not be emitted.
967
+ '''
923
968
 
924
969
  def __init__(self, config: dict):
925
970
  CommandFList.__init__(self, config=config)
926
971
  ToolVivado.__init__(self, config=self.config)
927
- self.args['all-sv'] = False
928
- self.args['emit-parameter'] = False
972
+ self.args.update({
973
+ 'all-sv': False,
974
+ # synth/project style Flist, can't emit these:
975
+ 'emit-parameter': False,
976
+ 'emit-plusargs': False,
977
+ })
978
+
979
+ def get_flist_plusargs_list(self) -> list:
980
+ '''Overriden from CommandFList.'''
981
+ if self.args['unprocessed-plusargs']:
982
+ util.warning('Command "flist" for --tool=vivado is not intended for simulation',
983
+ 'and plusargs were present. They will NOT be included in the flist:',
984
+ f'{self.args["unprocessed-plusargs"]}')
985
+
986
+ return []
987
+
988
+ def get_flist_parameter_list(self) -> list:
989
+ '''Overriden from CommandFList.'''
990
+ if self.parameters:
991
+ util.warning('Command "flist" for --tool=vivado is not intended for simulation',
992
+ 'and parameters were present. They will NOT be included in the flist:',
993
+ f'{self.parameters}')
994
+
995
+ return []
929
996
 
930
997
 
931
998
  class CommandUploadVivado(CommandUpload, ToolVivado):
opencos/tools/yosys.py CHANGED
@@ -22,7 +22,7 @@ def get_commands_to_run_scriptfiles(
22
22
 
23
23
  list of yoysys script(s)'''
24
24
 
25
- if script_fnames_list:
25
+ if not script_fnames_list:
26
26
  return []
27
27
 
28
28
  yosys_cmdlists = []
@@ -88,9 +88,7 @@ class ToolYosys(Tool):
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,
@@ -144,7 +142,12 @@ class CommonSynthYosys(CommandSynth, ToolYosys):
144
142
  'yosys-scriptfile': (
145
143
  'Instead of using a built-in flow from eda, use your own scripts that are called'
146
144
  ' via: yosys --scriptfile <this-arg>. You can set multiple args for multiple'
147
- ' scriptfile (appends)'
145
+ ' scriptfile (appends). NOTE: the default for eda is to run in a work-dir such as'
146
+ ' ./eda.work/<target>.synth/, which means you may want to use absolute paths for'
147
+ ' source files (.sv, etc) in your custom scriptfile, or use ../.. to get back to '
148
+ ' the current directory. If you want to run in place and avoid'
149
+ ' ./eda.work/<target>.synth/ you can use arg --work-dir=. or to run in place from'
150
+ ' the DEPS target directory, use --work-dir-use-target-dir'
148
151
  ),
149
152
  'sta-scriptfile': (
150
153
  'Instead of using a built-in flow from eda, use your own script that is called'
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.3.12
3
+ Version: 0.3.14
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,36 +1,36 @@
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=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
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=0rq6DNw2U0OjuoZPmYVDgPwu_WoaGUQmaNE3l7sP4wA,21601
9
9
  opencos/eda_config_reduced.yml,sha256=BOKGfe-OmVIF0SKhTTglPIzfAoGuCZ8n-f2KpoLF8dk,883
10
10
  opencos/eda_deps_bash_completion.bash,sha256=o1yZvGUQSbN-AYq95sDTzMFw7gNHCUSlv9tASEHnACA,2763
11
11
  opencos/eda_deps_sanitize.py,sha256=SQjvrte9Hv9JesRY0wljvbdC6pAmLCikI-Wdzzy-D04,1939
12
12
  opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Zw,2851
13
- opencos/eda_tool_helper.py,sha256=woI9Lthe6Q1HYiE6hTmCdh9Ys3_h7FuiaszmYOBwAl8,8550
13
+ opencos/eda_tool_helper.py,sha256=NoVUvUeqvM18Svx1Oy4R8xM4Numq_YZneKyHSDnMMnY,8546
14
14
  opencos/export_helper.py,sha256=zDkvsUS6FVrpXl1UTy53QG3CuhYp5FFplI9rRzAE2g8,25395
15
15
  opencos/export_json_convert.py,sha256=tSIMbLFtc_Fo66EhFovMii1v_qJYyFZJrPNnoPdW7L0,4182
16
16
  opencos/files.py,sha256=-vHrddbFrwxEHU47VzeyLOU93q8XSXAmPiopClfV-bs,2296
17
17
  opencos/names.py,sha256=Y2aJ5wgpbNIJ-_P5xUXnHMv_h-zMOX2Rt6iLuduqC1Q,1213
18
18
  opencos/peakrdl_cleanup.py,sha256=vHNGtalTrIVP335PhRjPt9RhoccgpK1HJAi-E4M8Kc8,736
19
19
  opencos/seed.py,sha256=IL9Yg-r9SLSRseMVWaEHmuw2_DNi_eyut11EafoNTsU,942
20
- opencos/util.py,sha256=yrQl9lAKIBW-gkgPOtt_ihUwMDcac4M_IpJ5DIwLlGw,44567
20
+ opencos/util.py,sha256=LzMOY5ijcubq3OZSG5zVSALN7-IWuTkeNCvbY7whwq0,44854
21
21
  opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
22
22
  opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,1487
23
23
  opencos/commands/deps_help.py,sha256=rWRro9UZCy8FjNgjDdCt5MMrC5KV7Pj6KDsV2xa5fSI,8178
24
24
  opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
25
25
  opencos/commands/export.py,sha256=bV4JCuihccbbnE_3qWVvlGtrdKWNVjo1hwOq4ax2dxA,3773
26
- opencos/commands/flist.py,sha256=u66Xy5U5Xgk3LZ-GdCDUcwwA2U2LyZF3FpB9qWiIZMQ,9110
26
+ opencos/commands/flist.py,sha256=YlcQFuTo-jpmSfDYdVtNDqK_2VYMM_Ox1_5_0Os-I7o,16329
27
27
  opencos/commands/lec.py,sha256=7uziNSeGhZrDEbfS4dt3qVp-z2122hx2kqPH15PqIgQ,4091
28
28
  opencos/commands/lint.py,sha256=piPb0l0zE3sAtNJkFQ-oNpuHxnaV_RNXkXtEj_9mwGs,1594
29
- opencos/commands/multi.py,sha256=1wvasg1VSHUGBhlubZLqbwvxWuaG6uIF_6CkdHISFX0,27536
29
+ opencos/commands/multi.py,sha256=urm-IDllnMZWScH7e6Pg4ukHGHILBd4NbPlPmHU3vsw,27624
30
30
  opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
31
31
  opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
32
32
  opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
33
- opencos/commands/sim.py,sha256=nGeQOaKauWRz-uyLvjbSmP0nYRp56MSVgKATDRgURiI,24005
33
+ opencos/commands/sim.py,sha256=mpy1vOEeAfMfGmc_Q1ukWddgAmkXzShdVGKKdMLjvXs,31548
34
34
  opencos/commands/sweep.py,sha256=62XmDHT-prdxJNy-6MbK6wEGJm1YC9caOaJapoekQ8s,9325
35
35
  opencos/commands/synth.py,sha256=Qs6FP9Ge_gp9TH3EFzVXKFlrrqrMwIbr38VYVlZvmeA,4557
36
36
  opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
@@ -39,7 +39,7 @@ opencos/commands/waves.py,sha256=LYF1UcxkHFYYtYoebnh9iE_on80PbbmzIpaSk-XtZcI,923
39
39
  opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  opencos/deps/defaults.py,sha256=Z6mIVJEV0zQ9rC-HkQFMBFAkixjqKS1TATPSc27wOeA,1502
41
41
  opencos/deps/deps_commands.py,sha256=p6jgZXQFu8kJ5M3YqqKZwrdnRC0EAMm-8oqhKvm_gBE,16665
42
- opencos/deps/deps_file.py,sha256=Yw70fkRcpk16MJVG1jnAGPv4ATZG4aZYQz-nWuTO9CQ,17014
42
+ opencos/deps/deps_file.py,sha256=HNZXhg4cXEklTCATboAn1ZO6xfwibwYQBY17dvFJcAw,17078
43
43
  opencos/deps/deps_processor.py,sha256=fSzVonVuocJDinNGOgs4jizF9yjllSdc11QW7Aj8LzQ,46662
44
44
  opencos/docs/Architecture.md,sha256=8zLj19-gzwyHe2ahO7fw6It1pYkpnOtfSD8ciocN_hM,4072
45
45
  opencos/docs/ConnectingApps.md,sha256=xfAJoSa7rx6-aZ8edTugRxKLwZwapR36xjds9CZBYDw,2698
@@ -57,37 +57,37 @@ opencos/hw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  opencos/hw/oc_cli.py,sha256=U1JGlshLZhtd0LgndZFBZVltAj_HemdhbjO_Zo8ZuVM,132252
58
58
  opencos/hw/pcie.py,sha256=VUJljaZJYgScAAx5yn7F6GoA8K9eTcw24otYZbkMpYs,3035
59
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
60
+ opencos/tools/cocotb.py,sha256=mkhdbBbkOcPPct1TZcKH6wPPT7pjzRH_6wCNH2qgXOM,19660
61
+ opencos/tools/invio.py,sha256=pxrS5oaNTcEv-ToXdhFBJZF5XhTmZnJz9CQ8NnLoty8,3155
62
62
  opencos/tools/invio_helpers.py,sha256=86WOGmSf4m_lEqBtK3DLjWqI0jnqAWzBEBRYfBUGiSY,8804
63
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
64
+ opencos/tools/iverilog.py,sha256=aehXQV22U7MIaH8XuEI9ApWztsez0NaW960_Z01oZWc,6789
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=4K5OoFlCCZcPTQDW8pYvMDJm3WpIJ6yxLnx5akRtIuU,21897
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=kRBG1ypS7TH1bA0_Hw7-q5sH7xS7X__rizUgAJgCfgg,19269
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=uxJs5VpE6pHIR3c5bJbQbjSoymIqNOG861ix2IR_c3Y,25363
77
+ opencos/tools/vivado.py,sha256=BHnfJ-TqUYwdKFC1zHJ3x6xkLOgn2xdQbxySbBEWFYk,50149
78
+ opencos/tools/yosys.py,sha256=8r3pxNod-ntWAHrDDL0HCT9mCkZ6qcNnOtLnIpOTi9g,28807
79
79
  opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  opencos/utils/dict_helpers.py,sha256=xCdfE8SE-D6hNu5dG_d46A2g6au6h1h7SFpzYmeyRtA,810
81
81
  opencos/utils/markup_helpers.py,sha256=F_Emh2kT2gETYf7C-Jy5yJjsiHiPUtBpQzONsCka6Eo,4604
82
82
  opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
83
- opencos/utils/str_helpers.py,sha256=pgVkQqKEslg1I60nfrobCU2w9IWBrMneOIEVmE6ari4,8293
83
+ opencos/utils/str_helpers.py,sha256=ctl0Zh0h0JW7OlReeSdGxB9wODQYzmMO-9-h55rSRv0,8419
84
84
  opencos/utils/subprocess_helpers.py,sha256=Wqqs8FKm3XIjmD9GUYM-HWVJH7TxWJJA37A07J4fQ4w,6619
85
85
  opencos/utils/vscode_helper.py,sha256=8epyEeYfXONwiSoc5KZjUfKc8vgLryct8yckJYie88U,1398
86
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,,
87
+ opencos_eda-0.3.14.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
88
+ opencos_eda-0.3.14.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
89
+ opencos_eda-0.3.14.dist-info/METADATA,sha256=2oqD3XW6Dlmwk9LQhx_-F7Z20ZI7AlQ3GW7v3wWarjQ,1165
90
+ opencos_eda-0.3.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
91
+ opencos_eda-0.3.14.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
92
+ opencos_eda-0.3.14.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
93
+ opencos_eda-0.3.14.dist-info/RECORD,,