opencos-eda 0.2.56__py3-none-any.whl → 0.3.0__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 (39) hide show
  1. opencos/_version.py +6 -3
  2. opencos/_waves_pkg.sv +34 -2
  3. opencos/commands/build.py +1 -0
  4. opencos/commands/export.py +1 -0
  5. opencos/commands/flist.py +1 -0
  6. opencos/commands/lec.py +5 -0
  7. opencos/commands/multi.py +4 -0
  8. opencos/commands/proj.py +1 -0
  9. opencos/commands/shell.py +4 -0
  10. opencos/commands/sim.py +47 -1
  11. opencos/commands/synth.py +4 -0
  12. opencos/deps/defaults.py +15 -7
  13. opencos/deps/deps_commands.py +84 -74
  14. opencos/deps_schema.py +3 -0
  15. opencos/eda.py +15 -2
  16. opencos/eda_base.py +61 -16
  17. opencos/eda_config.py +35 -1
  18. opencos/eda_config_defaults.yml +3 -1
  19. opencos/export_helper.py +5 -1
  20. opencos/tests/deps_files/command_order/DEPS.yml +11 -0
  21. opencos/tests/helpers.py +57 -19
  22. opencos/tests/test_deps_helpers.py +37 -25
  23. opencos/tests/test_eda.py +26 -60
  24. opencos/tools/cocotb.py +25 -0
  25. opencos/tools/modelsim_ase.py +65 -16
  26. opencos/tools/riviera.py +31 -6
  27. opencos/tools/slang_yosys.py +4 -1
  28. opencos/tools/verilator.py +28 -38
  29. opencos/tools/yosys.py +50 -20
  30. opencos/util.py +63 -12
  31. opencos/utils/vscode_helper.py +1 -1
  32. opencos/utils/vsim_helper.py +2 -3
  33. {opencos_eda-0.2.56.dist-info → opencos_eda-0.3.0.dist-info}/METADATA +2 -1
  34. {opencos_eda-0.2.56.dist-info → opencos_eda-0.3.0.dist-info}/RECORD +39 -39
  35. {opencos_eda-0.2.56.dist-info → opencos_eda-0.3.0.dist-info}/WHEEL +0 -0
  36. {opencos_eda-0.2.56.dist-info → opencos_eda-0.3.0.dist-info}/entry_points.txt +0 -0
  37. {opencos_eda-0.2.56.dist-info → opencos_eda-0.3.0.dist-info}/licenses/LICENSE +0 -0
  38. {opencos_eda-0.2.56.dist-info → opencos_eda-0.3.0.dist-info}/licenses/LICENSE.spdx +0 -0
  39. {opencos_eda-0.2.56.dist-info → opencos_eda-0.3.0.dist-info}/top_level.txt +0 -0
opencos/util.py CHANGED
@@ -17,6 +17,7 @@ import traceback
17
17
  from enum import Enum
18
18
  from pathlib import Path
19
19
  from importlib import import_module
20
+ from dotenv import load_dotenv
20
21
 
21
22
  from opencos.utils import status_constants
22
23
 
@@ -24,6 +25,8 @@ global_exit_allowed = False # pylint: disable=invalid-name
24
25
  progname = "UNKNOWN" # pylint: disable=invalid-name
25
26
  progname_in_message = True # pylint: disable=invalid-name
26
27
  debug_level = 0 # pylint: disable=invalid-name
28
+ dot_f_files_expanded = set() # pylint: disable=invalid-name
29
+ env_files_loaded = set() # pylint: disable=invalid-name
27
30
 
28
31
  args = { # pylint: disable=invalid-name
29
32
  'color' : False,
@@ -213,6 +216,7 @@ class Artifacts:
213
216
  for key in remove_keys:
214
217
  del self.data[key]
215
218
 
219
+ safe_mkdir_for_file(self.artifacts_json_filepath)
216
220
  with open(self.artifacts_json_filepath, 'w', encoding='utf-8') as f:
217
221
  json.dump(self.data, f, indent=4)
218
222
  info(f'Wrote artifacts JSON: {self.artifacts_json_filepath}')
@@ -376,6 +380,9 @@ def get_argparser() -> argparse.ArgumentParser:
376
380
  help=(
377
381
  'Input .f file to be expanded as eda'
378
382
  ' args/defines/incdirs/files/targets'))
383
+ parser.add_argument('--env-file', default=[], action='append',
384
+ help='dotenv file(s) to pass ENV vars, (default: .env, loaded last)'
385
+ )
379
386
  return parser
380
387
 
381
388
 
@@ -420,19 +427,36 @@ def process_token(arg: list) -> bool:
420
427
  return False
421
428
 
422
429
 
430
+ def load_env_file(env_file: str) -> None:
431
+ '''Handles .env file (from util CLI args --env-file)'''
432
+ if os.path.isfile(env_file):
433
+ load_dotenv(env_file)
434
+ env_files_loaded.add(os.path.abspath(env_file))
435
+ else:
436
+ warning(f'--env-file {env_file} does not exist and is not loaded.')
437
+
423
438
  def read_tokens_from_dot_f(filepath: str) -> list:
424
- '''Returns list of tokens from a .f file'''
439
+ '''Returns list of tokens from a .f file, with ENV vars expanded'''
440
+
441
+ # Let's defer 'info' printing out what input files were opened until after
442
+ # args['quiet'] and debug is resolved (which may be in these .f files)
425
443
  debug(f"Opening -f / --input-file '{filepath}' for contents")
426
444
  if not os.path.isfile(filepath):
427
445
  error(f'-f (or --input-file): {filepath} does not exist',
428
446
  error_code=status_constants.EDA_GENERAL_FILE_NOT_FOUND)
429
447
  return []
448
+ if os.path.abspath(filepath) in dot_f_files_expanded:
449
+ error(f'-f (or --input-file): {filepath} has already been expanded',
450
+ 'cannot traverse again (duplicate arg or nested .f files)')
451
+ dot_f_files_expanded.add(os.path.abspath(filepath))
430
452
  tokens = []
431
453
  with open(filepath, encoding='utf-8') as f:
432
454
  for line in f:
455
+ line = os.path.expandvars(line.strip())
433
456
  tokens.extend(line.split())
434
457
  return tokens
435
458
 
459
+
436
460
  def process_debug_args(parsed: argparse.Namespace) -> None:
437
461
  '''Sets global debug_level based on parsed args'''
438
462
  global debug_level # pylint: disable=global-statement
@@ -446,7 +470,9 @@ def process_debug_args(parsed: argparse.Namespace) -> None:
446
470
  debug_level = 0
447
471
 
448
472
 
449
- def process_tokens(tokens: list) -> (argparse.Namespace, list):
473
+ def process_tokens( # pylint: disable=too-many-branches
474
+ tokens: list
475
+ ) -> (argparse.Namespace, list):
450
476
  '''Processes tokens (unparsed args list) on util's ArgumentParser
451
477
 
452
478
  Returns tuple of (parsed Namespace, unparsed args list)
@@ -454,9 +480,9 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
454
480
  global debug_level # pylint: disable=global-statement
455
481
  debug_level = 0
456
482
 
457
- # Deal with --debug, --debug-level, and expand all parsed.input_file (list) tokens first,
458
- # for now put dot-f file contents in front of of tokens, do this in a separate custom
459
- # argparser.
483
+ # Deal with --debug, --debug-level, --env-file, -f/--input-file(s) tokens first,
484
+ # for now put dot-f file contents in front of of tokens, do this first in a
485
+ # separate custom argparser:
460
486
  bool_action_kwargs = get_argparse_bool_action_kwargs()
461
487
  parser = argparse.ArgumentParser(
462
488
  prog='opencos -f/--input-file', add_help=False, allow_abbrev=False
@@ -465,10 +491,14 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
465
491
  help='Display additional debug messaging level 1 or higher')
466
492
  parser.add_argument('--debug-level', type=int, default=0,
467
493
  help='Set debug level messaging (default: 0)')
494
+ parser.add_argument('--env-file', default=[], action='append',
495
+ help='dotenv file(s) to pass ENV vars, (default: .env, loaded last)'
496
+ )
468
497
  parser.add_argument('-f', '--input-file', default=[], action='append',
469
498
  help=(
470
- 'Input .f file to be expanded as eda'
471
- ' args/defines/incdirs/files/targets'))
499
+ 'Input .f file to be expanded as eda args, defines, incdirs,'
500
+ ' files, or targets.'
501
+ ))
472
502
  try:
473
503
  parsed, unparsed = parser.parse_known_args(tokens + [''])
474
504
  tokens2 = list(filter(None, unparsed))
@@ -478,8 +508,23 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
478
508
  process_debug_args(parsed=parsed)
479
509
  debug(f'util.process_tokens: {parsed=} {unparsed=} from: {tokens}')
480
510
 
481
- for filepath in parsed.input_file:
482
- tokens2[0:0] = read_tokens_from_dot_f(filepath)
511
+ if os.path.isfile(str(Path('.env'))):
512
+ parsed.env_file.append('.env')
513
+ if parsed.env_file:
514
+ for env_file in parsed.env_file:
515
+ load_env_file(env_file)
516
+
517
+ if parsed.input_file:
518
+ dotf_tokens = []
519
+ for filepath in parsed.input_file:
520
+ dotf_tokens.extend(read_tokens_from_dot_f(filepath))
521
+
522
+ # put the .f files before the unparsed args.
523
+ tokens2 = dotf_tokens + tokens2
524
+
525
+ # recurse until we've resolved nested .f files.
526
+ return process_tokens(tokens=tokens2)
527
+
483
528
 
484
529
  # Continue with all normal parsing beyond --debug and -f/--input-file,
485
530
  # Note that we re-parse everything in case there was --debug or --debug-level in
@@ -494,7 +539,8 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
494
539
  process_debug_args(parsed=parsed)
495
540
 
496
541
  if parsed.input_file:
497
- warning(f'Skipping nested -f/--input-file(s) {parsed.input_file}')
542
+ warning(f'python error, nested -f/--input-file(s) {parsed.input_file} should',
543
+ 'have already been resolved')
498
544
 
499
545
  # clear existing artifacts dicts (mostly for pytests repeatedly calling eda.main),
500
546
  # set artifacts.enabled based on args['artifacts-json']
@@ -519,6 +565,11 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
519
565
  if key in args and value is not None:
520
566
  args[key] = value # only update with non-None values to our global 'args' dict
521
567
 
568
+ for filepath in env_files_loaded:
569
+ info(f"Loaded --env-file '{os.path.relpath(filepath)}'")
570
+ for filepath in dot_f_files_expanded:
571
+ info(f"Processed -f / --input-file '{os.path.relpath(filepath)}' for contents")
572
+
522
573
  return parsed, unparsed
523
574
 
524
575
  # ********************
@@ -776,8 +827,8 @@ def getcwd():
776
827
  error(f"Unable to getcwd(), did it get deleted from under us? Exception: {e}")
777
828
  return None
778
829
 
779
- _OC_ROOT = None
780
- _OC_ROOT_SET = False
830
+ _OC_ROOT = None # pylint: disable=invalid-name
831
+ _OC_ROOT_SET = False # pylint: disable=invalid-name
781
832
 
782
833
  def get_oc_root(error_on_fail: bool = False) -> None:
783
834
  '''Returns a str or False for the root directory of *this* repo.
@@ -14,7 +14,7 @@ from opencos.util import debug
14
14
 
15
15
  vscode_path = shutil.which('code')
16
16
 
17
- INIT_HAS_RUN = False
17
+ INIT_HAS_RUN = False # pylint: disable=invalid-name
18
18
  EXTENSIONS = {} # dict of {name: version} for VScode extensions of name
19
19
 
20
20
 
@@ -10,9 +10,7 @@ import subprocess
10
10
 
11
11
  from opencos.util import debug
12
12
 
13
- vsim_path = shutil.which('vsim')
14
-
15
- INIT_HAS_RUN = False
13
+ INIT_HAS_RUN = False # pylint: disable=invalid-name
16
14
  TOOL_IS = {
17
15
  'riviera': False,
18
16
  'modelsim_ase': False,
@@ -29,6 +27,7 @@ def init() -> None:
29
27
  return
30
28
 
31
29
  INIT_HAS_RUN = True
30
+ vsim_path = shutil.which('vsim')
32
31
 
33
32
  if not vsim_path:
34
33
  return
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.2.56
3
+ Version: 0.3.0
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
@@ -11,6 +11,7 @@ Requires-Dist: mergedeep>=1.3.4
11
11
  Requires-Dist: peakrdl>=1.1.0
12
12
  Requires-Dist: pyyaml>=6.0.2
13
13
  Requires-Dist: pytest>=8.3.5
14
+ Requires-Dist: python-dotenv>=1.0.1
14
15
  Requires-Dist: schema>=0.7.7
15
16
  Requires-Dist: toml>=0.10.2
16
17
  Requires-Dist: yamllint>=1.35.1
@@ -1,45 +1,45 @@
1
1
  opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
2
- opencos/_version.py,sha256=XiHFZjCofkkZvI9befTFKsRt5zLouUo1CIwhW4srWU0,582
3
- opencos/_waves_pkg.sv,sha256=1lbhQOVGc3t_R8czYjP40hssP0I3FlZOpHTkI7yKFbI,1251
4
- opencos/deps_schema.py,sha256=02pSLBEvWK147lUwE8DRojYgE6HReZBBKP_pzVRow1c,16533
5
- opencos/eda.py,sha256=otdIufWO8C4YoEmwcaQGMwH06xe-IjyyExYWhw3Xz-8,22765
6
- opencos/eda_base.py,sha256=mCkSCGO__Jfjf27-TSOo7IRppL66-aY3kJVK3RBFjXw,105899
7
- opencos/eda_config.py,sha256=PEVb6yGyEAJpWBsgbcOnEhRWk4G8iryAdvkUfMiosWE,11467
8
- opencos/eda_config_defaults.yml,sha256=_YwY2OufgfV8GXhQd6Gs7sE-I1z2GkGsCowxipNJZaw,15938
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=VUdXuq43mKfM-U4x7DSA28-MH1Xqxre6V7Ttw2DeOqI,16762
5
+ opencos/eda.py,sha256=91E-EsyZS-uRadApP-h2onW6rpvLBnrpJoT_9tRtsS8,23322
6
+ opencos/eda_base.py,sha256=oJ8ISAN6IykQfun8eVNuzjggQ5RvIKeWwQ85Wv4ww_4,107887
7
+ opencos/eda_config.py,sha256=z3yQOPGBX7-yKp6BdQYfJ9eOJf-Jctl-mwCDj3vj2BI,12712
8
+ opencos/eda_config_defaults.yml,sha256=u1kzmclo5nElsn2BHOIYHk9_djbL0rUts4CLWYJbuc8,16036
9
9
  opencos/eda_config_max_verilator_waivers.yml,sha256=lTAU4IOEbUWVlPzuer1YYhIyxpPINeA4EJqcRIT-Ymk,840
10
10
  opencos/eda_config_reduced.yml,sha256=cQ9jY4J7EvAbeHTiP6bvpDSVJAYiitjLZPSxxLKIEbk,1440
11
11
  opencos/eda_deps_bash_completion.bash,sha256=jMkQKY82HBgOnQeMdA1hMrXguRFtB52SMBxUemKovL4,1958
12
12
  opencos/eda_deps_sanitize.py,sha256=SQjvrte9Hv9JesRY0wljvbdC6pAmLCikI-Wdzzy-D04,1939
13
13
  opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Zw,2851
14
14
  opencos/eda_tool_helper.py,sha256=_YgobDLEWW6Fzdr976LxaCDZ4DKRyuMs5CrYQHaTPrU,2558
15
- opencos/export_helper.py,sha256=bUXRnCRXPRV9DlBhiw45YUfNe-Psb2JAEssRUKp6iNI,22497
15
+ opencos/export_helper.py,sha256=5BnrkhiieJBgYKAryhXD7HSGtrgvXQpZ8B5ltdrhbRY,22649
16
16
  opencos/export_json_convert.py,sha256=tSIMbLFtc_Fo66EhFovMii1v_qJYyFZJrPNnoPdW7L0,4182
17
17
  opencos/files.py,sha256=aoq0O2KfISzZb-Vi_q_0TTGBER9xJc--FkVZf0ga7pA,1549
18
18
  opencos/names.py,sha256=Y2aJ5wgpbNIJ-_P5xUXnHMv_h-zMOX2Rt6iLuduqC1Q,1213
19
19
  opencos/peakrdl_cleanup.py,sha256=vHNGtalTrIVP335PhRjPt9RhoccgpK1HJAi-E4M8Kc8,736
20
20
  opencos/seed.py,sha256=IL9Yg-r9SLSRseMVWaEHmuw2_DNi_eyut11EafoNTsU,942
21
- opencos/util.py,sha256=9VGc54Rm-snEwbKEbToQRGoeGg8wqBeWpTJBagEbjw0,37770
21
+ opencos/util.py,sha256=KK5_lSKSf8O6Wp-CtQ9bTg-izBEPkuxGh_N64DJhE-0,40038
22
22
  opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
23
- opencos/commands/build.py,sha256=hvjrvg7AbEotuQze6-yz3DOYRMtagkvJ-6TFNJQTwrs,1441
23
+ opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,1487
24
24
  opencos/commands/deps_help.py,sha256=WDrU7H9sypzDAxe_CHqhW5B_scbQMzBEdf-v-Jcfd5Q,10682
25
25
  opencos/commands/elab.py,sha256=m6Gk03wSzX8UkcmReooK7turF7LpqO0IcdOZwJ8XiyI,1596
26
- opencos/commands/export.py,sha256=dpTcrtPjIt6TOw-i8LUWhb4ismFAE1QK-dNAHC1jxME,3510
27
- opencos/commands/flist.py,sha256=uFjNxrXvigQKzG2v8sooz_3iVaTHBKkm-NDYXo9ktAE,9068
28
- opencos/commands/lec.py,sha256=bshOs_GkuB1nCGd_SntT43_XpSYQYJqNCjVZp6Q1Chc,3879
26
+ opencos/commands/export.py,sha256=OhqVLVGN9Ch46NmBmZZo0CxIzhf3BsyX_8qA60SPNHw,3556
27
+ opencos/commands/flist.py,sha256=B2c9RS1LrMHLaY-NySB2W0oHkjd4wGS5rQJTYULGNk0,9110
28
+ opencos/commands/lec.py,sha256=7uziNSeGhZrDEbfS4dt3qVp-z2122hx2kqPH15PqIgQ,4091
29
29
  opencos/commands/lint.py,sha256=piPb0l0zE3sAtNJkFQ-oNpuHxnaV_RNXkXtEj_9mwGs,1594
30
- opencos/commands/multi.py,sha256=dCo4rMIkGT3BtlBhUIAd7r31w8qxeJvybpl4H7DR77o,27225
30
+ opencos/commands/multi.py,sha256=ZkG1b_qhhxXw-Lm2S4J-i576Ai5iJA09UEIDj94FOVM,27430
31
31
  opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
32
- opencos/commands/proj.py,sha256=vCsZle3oUJ8xmIFuepgAD6G-YGl35xtTIcTeiVDshNo,1112
33
- opencos/commands/shell.py,sha256=dFXXtvsDs3Khme41du8LhKdV3qRosxjTfju6SJbOSKM,7599
34
- opencos/commands/sim.py,sha256=HIyKT3avB844Z5RWidvck1ZhVa5MfS7PTjCactZO3o4,19226
32
+ opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
33
+ opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
34
+ opencos/commands/sim.py,sha256=NQJbjfGEgt4zHtOQn5HnaCiBnaDyEkpoDJvnAR4TOxE,21166
35
35
  opencos/commands/sweep.py,sha256=ni4XFgnFF8HLXtwPhETyLWfvc2kgtm4bcxFcKzUhkf0,9343
36
- opencos/commands/synth.py,sha256=tuxWmxMNmE9hveWXGNfKDelzxi_wK7ZL7V2LiZV6Ypg,4371
36
+ opencos/commands/synth.py,sha256=m4ZwqHgOF5We0XP94F7TQli11WCPlkzhamI4fDfFR1o,4573
37
37
  opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
38
38
  opencos/commands/upload.py,sha256=oyImgcEFGxDkdeY9EYyX2R6fTOmN-lTs-HYxAZqXUUo,871
39
39
  opencos/commands/waves.py,sha256=nrp3ALwfJujZns44tgCgia_dEedQyKe0T3fuws8h39U,7697
40
40
  opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- opencos/deps/defaults.py,sha256=7ETOnG08HERKcJUjynnrKZV1sQQVUsW-zKlwoCN1VkI,1298
42
- opencos/deps/deps_commands.py,sha256=OlqueYFK8U83loasok3xJGzUDpNcj2DPk37332DfmRo,17039
41
+ opencos/deps/defaults.py,sha256=NXh3V4oInrBVlDw64B2OCI77wzdn1NtaD64srhBnmZU,1486
42
+ opencos/deps/deps_commands.py,sha256=q4JfSfzRO2nM2zdNT4enCy33FokEytZYQJn1HJ6osJk,16606
43
43
  opencos/deps/deps_file.py,sha256=nVZWrq6PVhWig1yMNpy8w_7LQJ1rgb7Js0N1ngoqLio,16306
44
44
  opencos/deps/deps_processor.py,sha256=i8R6lNSVc_ybTnC16qmGevB3Y-pkcbxkZaT04HTLE8Y,37890
45
45
  opencos/hw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -47,16 +47,16 @@ opencos/hw/oc_cli.py,sha256=U1JGlshLZhtd0LgndZFBZVltAj_HemdhbjO_Zo8ZuVM,132252
47
47
  opencos/hw/pcie.py,sha256=VUJljaZJYgScAAx5yn7F6GoA8K9eTcw24otYZbkMpYs,3035
48
48
  opencos/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
49
  opencos/tests/custom_config.yml,sha256=TRoVM9ZFKPOA_8JmlpzaMhnGO1txmaD14N_8P1oqzew,257
50
- opencos/tests/helpers.py,sha256=QjebK-tjGoKZq-RSgQ7EqMjJ4ArXQogLLtJBuK56OMw,9695
50
+ opencos/tests/helpers.py,sha256=9KHSZ1JMmo2nUbJYiRehmNqd1mNQ29XbzReu_tHkxjk,11234
51
51
  opencos/tests/test_build.py,sha256=FQAxOpLVQShAHD_L5rqJctPeSAoqoOCNFI0RXflLuY0,387
52
- opencos/tests/test_deps_helpers.py,sha256=f9GJXvzcdE3SGkKJ7q-YBTgRagZcIzeRa6nMVCCiEvI,7848
52
+ opencos/tests/test_deps_helpers.py,sha256=uQZxleh6aKO-mZQhagHh5xLIBbpQ8dav7-5D0eemq_g,8164
53
53
  opencos/tests/test_deps_schema.py,sha256=T3P9KjaMyKsk8b7snNVvNSsom2hIJcg6Z9apYiXoH9Y,941
54
- opencos/tests/test_eda.py,sha256=cdxfLCUZq0nNelCQiplZXkeF4eyzmyJlZJFDSo77qeI,39464
54
+ opencos/tests/test_eda.py,sha256=fkJvBiwPczs3Yl3zwl_1Upx-siJsGDrjEVipzpiw8vc,37880
55
55
  opencos/tests/test_eda_elab.py,sha256=AjU4WMYtFoHpNe1Z4yWWpxDKy4V_hAjL5rl3jqphZrk,3179
56
56
  opencos/tests/test_eda_synth.py,sha256=BtBrNVJ9C-LJt3K0wNNS5ukEVrET16AbRXl2IzxudJ8,5744
57
57
  opencos/tests/test_oc_cli.py,sha256=w-F-LjSSWVql3D2WG8tcV4_C52i-hL_2WT3oDpKQn9s,734
58
58
  opencos/tests/test_tools.py,sha256=-WMpDZexAgko0FAcfiuASqSKNNL0Mr1ztag05808Upc,13735
59
- opencos/tests/deps_files/command_order/DEPS.yml,sha256=vloOzWZ5qU3yGNFaDlrAJdEzYxK6qf8gfac3zqF-0FI,438
59
+ opencos/tests/deps_files/command_order/DEPS.yml,sha256=PSzBBJDSU8ccCy3Ls5j_ws_vepmUkTIgWjaMjBhNbSg,806
60
60
  opencos/tests/deps_files/error_msgs/DEPS.yml,sha256=fYvHouIscOlr8V28bqx9SoxRBpDBLX4AG-AkVXh8qbo,717
61
61
  opencos/tests/deps_files/iverilog_test/DEPS.yml,sha256=vDylEuLt642lhRSvOr3F5ziB5lhPSwkaUGN4_mWJw-c,40
62
62
  opencos/tests/deps_files/no_deps_here/DEPS.yml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -64,34 +64,34 @@ opencos/tests/deps_files/non_sv_reqs/DEPS.yml,sha256=VZkahO1AKhD9GUV5lK8VwUONEi5
64
64
  opencos/tests/deps_files/tags_with_tools/DEPS.yml,sha256=-5U1qfJElgpVhmkLEu3lYuvDYva8kDlt6JOdB9jidmc,1377
65
65
  opencos/tests/deps_files/test_err_fatal/DEPS.yml,sha256=GnXIUJvshQWR9PlYxX67T53ejf5KhDbtD8sUJB4Rwd0,95
66
66
  opencos/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- opencos/tools/cocotb.py,sha256=vcp9wLlmgr6dLBnxEuJJyMjJIorIo96J0Z63tJwP-eE,16759
67
+ opencos/tools/cocotb.py,sha256=hlBR6M4k_amOOWa7cZDuw9fTGJtJha1jSpGgyJN8Iis,17734
68
68
  opencos/tools/invio.py,sha256=S2ChWr8xMZHSOOhX2hGKQhMmtQY2potVQjc-lsMg73o,3299
69
69
  opencos/tools/invio_helpers.py,sha256=86WOGmSf4m_lEqBtK3DLjWqI0jnqAWzBEBRYfBUGiSY,8804
70
70
  opencos/tools/invio_yosys.py,sha256=CszGeTdE1ilnMmWPLW77BrtobbsGb1CKXqot0hGimFU,5996
71
71
  opencos/tools/iverilog.py,sha256=8dK4z8ktbNYS9cW5QQPm586WoE-pSmOAVJfXajw-Sbg,6420
72
- opencos/tools/modelsim_ase.py,sha256=reeJhWlHxYyheoziMOXj0gzQRjmUmBexawRuq_bda_A,15486
72
+ opencos/tools/modelsim_ase.py,sha256=Jt-6N3BZZyu25fT1ehFQLRUTVvrcCo4e2Gl7UtsQcuk,17834
73
73
  opencos/tools/quartus.py,sha256=_TfmPSYpbhmDLw7Dur-rRP0iGwv9hhQ6E5G-XLiYPEM,30486
74
74
  opencos/tools/questa.py,sha256=nHImM0Wydcf4YHGibHmQAwmqKHmMxKZUqY-E-vz1o8M,9827
75
75
  opencos/tools/questa_fse.py,sha256=hytkeuGg4qImj7rStV1i2kxkz9B0KFheGtcadxmpYAo,2550
76
- opencos/tools/riviera.py,sha256=qhDiXnXeglqcZTN244fVcuC5r-Q9wMo0jAtJF5_Ndro,11820
76
+ opencos/tools/riviera.py,sha256=FAumXIt9u4JXwR5BHe-0APX3K0Lg3RT2lWQ-GNGL3vA,13016
77
77
  opencos/tools/slang.py,sha256=UpsFeExup2awARxxxADD9f923Hw6ubiSEq2tKtJbS1c,8305
78
- opencos/tools/slang_yosys.py,sha256=L5vm2TzkmaREaBAy1vNT61FbwiAXt0c_aLPWOT18sHY,10121
78
+ opencos/tools/slang_yosys.py,sha256=MKh13eAmLJDkynZiezyT8E2gI4CKnXipzgFCZppaMXo,10230
79
79
  opencos/tools/surelog.py,sha256=S2RAZJyjdISm_tRvAhXbla7_z_tJfotZih5f9Y3m7DQ,5648
80
80
  opencos/tools/tabbycad_yosys.py,sha256=2LePPgYXBVdsy7YcffPIWN-I0B7queLQ_f_pme2SCGw,7803
81
- opencos/tools/verilator.py,sha256=ZrmcJ-lt3wXdHRfLMangU0CepGf-GFsp5w0NmdF8Be8,21361
81
+ opencos/tools/verilator.py,sha256=nVYF9F-VAHmT0uqmHpYZIvvZ2GjFIVW5zKpYBAWW8rI,20810
82
82
  opencos/tools/vivado.py,sha256=GQdPd1mp02it_uyhMqpFfJgh0AKIMn-20BhHNEDp5HY,41398
83
- opencos/tools/yosys.py,sha256=7o7uUbqjwuYUC7joGk2GCE1YsmnQN_W-yCZP49yl0X4,26926
83
+ opencos/tools/yosys.py,sha256=t3Au8gdwTepIKCPCXHpRXEdtmORQK8xqNvF6baIa7DM,28260
84
84
  opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
85
  opencos/utils/markup_helpers.py,sha256=A8Ev5UJ4EVKjdcF2g85SQbjdPZR4jGpNqCLaBy_4v7Q,4569
86
86
  opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
87
87
  opencos/utils/str_helpers.py,sha256=726ScK5-v7QkBi-zqESKZLsOl2_ya4vVJ5ZhxJqmBFo,6440
88
88
  opencos/utils/subprocess_helpers.py,sha256=xemAGPey6M0sWY_FElvr-Z0phCfdjaC-znP8FKihPaE,3535
89
- opencos/utils/vscode_helper.py,sha256=2YPjcDH_vTlwJvcITyMfvx8dLzPSRKzAvFRJz7BaJk8,1332
90
- opencos/utils/vsim_helper.py,sha256=2voGRZI2iAQ2Pv2ZI5g2why6xpgig-To8im-LVXtuDU,1517
91
- opencos_eda-0.2.56.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
92
- opencos_eda-0.2.56.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
93
- opencos_eda-0.2.56.dist-info/METADATA,sha256=D2wAzdJIPCFvz0x18DXza-oWoI1AWir2-J4JpZ7rR88,631
94
- opencos_eda-0.2.56.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
95
- opencos_eda-0.2.56.dist-info/entry_points.txt,sha256=6n1T5NwVYDhN5l1h5zmyT197G4pE0SySDreB0QJzJR0,218
96
- opencos_eda-0.2.56.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
97
- opencos_eda-0.2.56.dist-info/RECORD,,
89
+ opencos/utils/vscode_helper.py,sha256=9nHyMUIL-gzfW-qLH06sgaCnVK-YTOtu6pusitNNhL8,1363
90
+ opencos/utils/vsim_helper.py,sha256=1johPOGbjbMgnCDSTpgsQcSuAquiqq1Y2MBxS6WY6b4,1552
91
+ opencos_eda-0.3.0.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
92
+ opencos_eda-0.3.0.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
93
+ opencos_eda-0.3.0.dist-info/METADATA,sha256=KFNlElAF1mTMOenvOMpVfD5MRlIj1shxNBUiFGTuTQM,666
94
+ opencos_eda-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
95
+ opencos_eda-0.3.0.dist-info/entry_points.txt,sha256=6n1T5NwVYDhN5l1h5zmyT197G4pE0SySDreB0QJzJR0,218
96
+ opencos_eda-0.3.0.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
97
+ opencos_eda-0.3.0.dist-info/RECORD,,