opencos-eda 0.2.57__py3-none-any.whl → 0.3.1__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.
- opencos/_version.py +6 -3
- opencos/_waves_pkg.sv +34 -2
- opencos/commands/build.py +1 -0
- opencos/commands/export.py +1 -0
- opencos/commands/flist.py +1 -0
- opencos/commands/lec.py +1 -0
- opencos/commands/proj.py +1 -0
- opencos/commands/shell.py +4 -0
- opencos/commands/sim.py +47 -1
- opencos/commands/synth.py +4 -0
- opencos/deps/defaults.py +15 -7
- opencos/deps/deps_commands.py +84 -74
- opencos/deps/deps_file.py +11 -5
- opencos/deps/deps_processor.py +79 -3
- opencos/deps_schema.py +3 -0
- opencos/eda.py +2 -1
- opencos/eda_base.py +105 -34
- opencos/eda_config_defaults.yml +5 -1
- opencos/files.py +1 -0
- opencos/tests/deps_files/command_order/DEPS.yml +11 -0
- opencos/tests/helpers.py +50 -20
- opencos/tests/test_deps_helpers.py +37 -25
- opencos/tests/test_eda.py +26 -60
- opencos/tools/modelsim_ase.py +17 -9
- opencos/tools/riviera.py +31 -6
- opencos/tools/verilator.py +28 -38
- opencos/util.py +111 -16
- opencos/utils/vscode_helper.py +1 -1
- opencos/utils/vsim_helper.py +1 -1
- {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/METADATA +2 -1
- {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/RECORD +36 -36
- {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/WHEEL +0 -0
- {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/entry_points.txt +0 -0
- {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/licenses/LICENSE +0 -0
- {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.dist-info}/licenses/LICENSE.spdx +0 -0
- {opencos_eda-0.2.57.dist-info → opencos_eda-0.3.1.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,78 @@ def process_token(arg: list) -> bool:
|
|
|
420
427
|
return False
|
|
421
428
|
|
|
422
429
|
|
|
423
|
-
def
|
|
424
|
-
'''
|
|
425
|
-
|
|
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
|
+
|
|
438
|
+
def patch_args_for_dir(tokens: list, patch_dir: str, caller_info: str) -> list:
|
|
439
|
+
'''Given list of args, attempt to correct for relative dir'''
|
|
440
|
+
|
|
441
|
+
# deal with relative path args or files.
|
|
442
|
+
# Note the dot-f file could have been in a different directory (-f=path/to/my.f)
|
|
443
|
+
# As a workaround to deal with relative paths, attempt to replace relative
|
|
444
|
+
# path args within this dotf contents - so they are relative the dotf dir:
|
|
445
|
+
if not os.path.isdir(patch_dir):
|
|
446
|
+
return tokens
|
|
447
|
+
|
|
448
|
+
ret = []
|
|
449
|
+
for word in tokens:
|
|
450
|
+
if word.startswith('-') and '=' in word:
|
|
451
|
+
parts = word.split('=')
|
|
452
|
+
leftarg = parts[0] + '='
|
|
453
|
+
word = '='.join(parts[1:])
|
|
454
|
+
elif word.startswith('+incdir+'):
|
|
455
|
+
# do for +incdir+ too
|
|
456
|
+
leftarg = '+incdir+'
|
|
457
|
+
word = word[len('+incdir+'):]
|
|
458
|
+
else:
|
|
459
|
+
leftarg = ''
|
|
460
|
+
|
|
461
|
+
if word and not os.path.isabs(word) and \
|
|
462
|
+
os.path.exists(os.path.join(patch_dir, word)):
|
|
463
|
+
# fix relative path of word, or --arg=word
|
|
464
|
+
word = os.path.abspath(os.path.join(patch_dir, word))
|
|
465
|
+
info(f'Using relative path {patch_dir} for arg/token: {leftarg}{word}',
|
|
466
|
+
f'{caller_info}')
|
|
467
|
+
ret.append(f'{leftarg}{word}')
|
|
468
|
+
return ret
|
|
469
|
+
|
|
470
|
+
def read_tokens_from_dot_f(filepath: str, caller_info: str = '', verbose: bool = False) -> list:
|
|
471
|
+
'''Returns list of tokens from a .f file, with ENV vars expanded'''
|
|
472
|
+
|
|
473
|
+
# Let's defer 'info' printing out what input files were opened until after
|
|
474
|
+
# args['quiet'] and debug is resolved (which may be in these .f files)
|
|
475
|
+
start_str = f"Opening -f / --input-file '{filepath}' for contents {caller_info}"
|
|
476
|
+
if verbose:
|
|
477
|
+
info(start_str)
|
|
478
|
+
else:
|
|
479
|
+
debug(start_str)
|
|
426
480
|
if not os.path.isfile(filepath):
|
|
427
|
-
error(f'-f (or --input-file): {filepath} does not exist',
|
|
481
|
+
error(f'-f (or --input-file): {filepath} does not exist {caller_info}',
|
|
428
482
|
error_code=status_constants.EDA_GENERAL_FILE_NOT_FOUND)
|
|
429
483
|
return []
|
|
484
|
+
if os.path.abspath(filepath) in dot_f_files_expanded:
|
|
485
|
+
error(f'-f (or --input-file): {filepath} has already been expanded',
|
|
486
|
+
f'cannot traverse again (duplicate arg or nested .f files) {caller_info}')
|
|
487
|
+
dot_f_files_expanded.add(os.path.abspath(filepath))
|
|
430
488
|
tokens = []
|
|
489
|
+
dotf_file_dir, _ = os.path.split(filepath)
|
|
431
490
|
with open(filepath, encoding='utf-8') as f:
|
|
432
491
|
for line in f:
|
|
433
|
-
|
|
492
|
+
line = os.path.expandvars(line.strip())
|
|
493
|
+
if not line or line.startswith('#') or line.startswith('//'):
|
|
494
|
+
continue
|
|
495
|
+
words = line.split()
|
|
496
|
+
tokens.extend(patch_args_for_dir(
|
|
497
|
+
tokens=words, patch_dir=dotf_file_dir, caller_info=f"(from dotf {filepath})"
|
|
498
|
+
))
|
|
434
499
|
return tokens
|
|
435
500
|
|
|
501
|
+
|
|
436
502
|
def process_debug_args(parsed: argparse.Namespace) -> None:
|
|
437
503
|
'''Sets global debug_level based on parsed args'''
|
|
438
504
|
global debug_level # pylint: disable=global-statement
|
|
@@ -446,7 +512,9 @@ def process_debug_args(parsed: argparse.Namespace) -> None:
|
|
|
446
512
|
debug_level = 0
|
|
447
513
|
|
|
448
514
|
|
|
449
|
-
def process_tokens(
|
|
515
|
+
def process_tokens( # pylint: disable=too-many-branches
|
|
516
|
+
tokens: list, caller_info: str = ''
|
|
517
|
+
) -> (argparse.Namespace, list):
|
|
450
518
|
'''Processes tokens (unparsed args list) on util's ArgumentParser
|
|
451
519
|
|
|
452
520
|
Returns tuple of (parsed Namespace, unparsed args list)
|
|
@@ -454,9 +522,9 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
|
|
|
454
522
|
global debug_level # pylint: disable=global-statement
|
|
455
523
|
debug_level = 0
|
|
456
524
|
|
|
457
|
-
# Deal with --debug, --debug-level,
|
|
458
|
-
# for now put dot-f file contents in front of of tokens, do this in a
|
|
459
|
-
# argparser
|
|
525
|
+
# Deal with --debug, --debug-level, --env-file, -f/--input-file(s) tokens first,
|
|
526
|
+
# for now put dot-f file contents in front of of tokens, do this first in a
|
|
527
|
+
# separate custom argparser:
|
|
460
528
|
bool_action_kwargs = get_argparse_bool_action_kwargs()
|
|
461
529
|
parser = argparse.ArgumentParser(
|
|
462
530
|
prog='opencos -f/--input-file', add_help=False, allow_abbrev=False
|
|
@@ -465,10 +533,14 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
|
|
|
465
533
|
help='Display additional debug messaging level 1 or higher')
|
|
466
534
|
parser.add_argument('--debug-level', type=int, default=0,
|
|
467
535
|
help='Set debug level messaging (default: 0)')
|
|
536
|
+
parser.add_argument('--env-file', default=[], action='append',
|
|
537
|
+
help='dotenv file(s) to pass ENV vars, (default: .env, loaded last)'
|
|
538
|
+
)
|
|
468
539
|
parser.add_argument('-f', '--input-file', default=[], action='append',
|
|
469
540
|
help=(
|
|
470
|
-
'Input .f file to be expanded as eda'
|
|
471
|
-
'
|
|
541
|
+
'Input .f file to be expanded as eda args, defines, incdirs,'
|
|
542
|
+
' files, or targets.'
|
|
543
|
+
))
|
|
472
544
|
try:
|
|
473
545
|
parsed, unparsed = parser.parse_known_args(tokens + [''])
|
|
474
546
|
tokens2 = list(filter(None, unparsed))
|
|
@@ -478,8 +550,25 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
|
|
|
478
550
|
process_debug_args(parsed=parsed)
|
|
479
551
|
debug(f'util.process_tokens: {parsed=} {unparsed=} from: {tokens}')
|
|
480
552
|
|
|
481
|
-
|
|
482
|
-
|
|
553
|
+
if os.path.isfile(str(Path('.env'))):
|
|
554
|
+
parsed.env_file.append('.env')
|
|
555
|
+
if parsed.env_file:
|
|
556
|
+
for env_file in parsed.env_file:
|
|
557
|
+
load_env_file(env_file)
|
|
558
|
+
|
|
559
|
+
if parsed.input_file:
|
|
560
|
+
dotf_tokens = []
|
|
561
|
+
for filepath in parsed.input_file:
|
|
562
|
+
dotf_tokens.extend(read_tokens_from_dot_f(
|
|
563
|
+
filepath=filepath, caller_info=caller_info
|
|
564
|
+
))
|
|
565
|
+
|
|
566
|
+
# put the .f files before the unparsed args.
|
|
567
|
+
tokens2 = dotf_tokens + tokens2
|
|
568
|
+
|
|
569
|
+
# recurse until we've resolved nested .f files.
|
|
570
|
+
return process_tokens(tokens=tokens2, caller_info=f'(from {parsed.input_file[-1]})')
|
|
571
|
+
|
|
483
572
|
|
|
484
573
|
# Continue with all normal parsing beyond --debug and -f/--input-file,
|
|
485
574
|
# Note that we re-parse everything in case there was --debug or --debug-level in
|
|
@@ -494,7 +583,8 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
|
|
|
494
583
|
process_debug_args(parsed=parsed)
|
|
495
584
|
|
|
496
585
|
if parsed.input_file:
|
|
497
|
-
warning(f'
|
|
586
|
+
warning(f'python error, nested -f/--input-file(s) {parsed.input_file} should',
|
|
587
|
+
'have already been resolved')
|
|
498
588
|
|
|
499
589
|
# clear existing artifacts dicts (mostly for pytests repeatedly calling eda.main),
|
|
500
590
|
# set artifacts.enabled based on args['artifacts-json']
|
|
@@ -519,6 +609,11 @@ def process_tokens(tokens: list) -> (argparse.Namespace, list):
|
|
|
519
609
|
if key in args and value is not None:
|
|
520
610
|
args[key] = value # only update with non-None values to our global 'args' dict
|
|
521
611
|
|
|
612
|
+
for filepath in env_files_loaded:
|
|
613
|
+
info(f"Loaded --env-file '{os.path.relpath(filepath)}'")
|
|
614
|
+
for filepath in dot_f_files_expanded:
|
|
615
|
+
info(f"Processed -f / --input-file '{os.path.relpath(filepath)}' for contents")
|
|
616
|
+
|
|
522
617
|
return parsed, unparsed
|
|
523
618
|
|
|
524
619
|
# ********************
|
|
@@ -776,8 +871,8 @@ def getcwd():
|
|
|
776
871
|
error(f"Unable to getcwd(), did it get deleted from under us? Exception: {e}")
|
|
777
872
|
return None
|
|
778
873
|
|
|
779
|
-
_OC_ROOT = None
|
|
780
|
-
_OC_ROOT_SET = False
|
|
874
|
+
_OC_ROOT = None # pylint: disable=invalid-name
|
|
875
|
+
_OC_ROOT_SET = False # pylint: disable=invalid-name
|
|
781
876
|
|
|
782
877
|
def get_oc_root(error_on_fail: bool = False) -> None:
|
|
783
878
|
'''Returns a str or False for the root directory of *this* repo.
|
opencos/utils/vscode_helper.py
CHANGED
opencos/utils/vsim_helper.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opencos-eda
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
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,11 +1,11 @@
|
|
|
1
1
|
opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
|
|
2
|
-
opencos/_version.py,sha256=
|
|
3
|
-
opencos/_waves_pkg.sv,sha256=
|
|
4
|
-
opencos/deps_schema.py,sha256=
|
|
5
|
-
opencos/eda.py,sha256=
|
|
6
|
-
opencos/eda_base.py,sha256=
|
|
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=Spt_Ssq5aVZ6L_J1koaDMB1jo81srIStwl9KMG5_irU,108740
|
|
7
7
|
opencos/eda_config.py,sha256=z3yQOPGBX7-yKp6BdQYfJ9eOJf-Jctl-mwCDj3vj2BI,12712
|
|
8
|
-
opencos/eda_config_defaults.yml,sha256=
|
|
8
|
+
opencos/eda_config_defaults.yml,sha256=LF0yAncYeaPtZIoAfEeo2aiDXT4cjYa99soGks0WRzM,16063
|
|
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
|
|
@@ -14,49 +14,49 @@ opencos/eda_extract_targets.py,sha256=POlxZfqf2dNH2nc1CEw5B_53vSHAicSTkpU9_-2_6Z
|
|
|
14
14
|
opencos/eda_tool_helper.py,sha256=_YgobDLEWW6Fzdr976LxaCDZ4DKRyuMs5CrYQHaTPrU,2558
|
|
15
15
|
opencos/export_helper.py,sha256=5BnrkhiieJBgYKAryhXD7HSGtrgvXQpZ8B5ltdrhbRY,22649
|
|
16
16
|
opencos/export_json_convert.py,sha256=tSIMbLFtc_Fo66EhFovMii1v_qJYyFZJrPNnoPdW7L0,4182
|
|
17
|
-
opencos/files.py,sha256=
|
|
17
|
+
opencos/files.py,sha256=AQOnsrvoc0r76LiFrkoMbwOGdUO1FpBiFY_jyyI_ve8,1566
|
|
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=
|
|
21
|
+
opencos/util.py,sha256=ffaSoDDOsL6mx_fYgAyJA8fawsxZ5YHKqs67b8iW5rw,41921
|
|
22
22
|
opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
|
|
23
|
-
opencos/commands/build.py,sha256=
|
|
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=
|
|
27
|
-
opencos/commands/flist.py,sha256=
|
|
28
|
-
opencos/commands/lec.py,sha256=
|
|
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
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=
|
|
33
|
-
opencos/commands/shell.py,sha256=
|
|
34
|
-
opencos/commands/sim.py,sha256=
|
|
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=
|
|
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=
|
|
42
|
-
opencos/deps/deps_commands.py,sha256=
|
|
43
|
-
opencos/deps/deps_file.py,sha256=
|
|
44
|
-
opencos/deps/deps_processor.py,sha256=
|
|
41
|
+
opencos/deps/defaults.py,sha256=NXh3V4oInrBVlDw64B2OCI77wzdn1NtaD64srhBnmZU,1486
|
|
42
|
+
opencos/deps/deps_commands.py,sha256=q4JfSfzRO2nM2zdNT4enCy33FokEytZYQJn1HJ6osJk,16606
|
|
43
|
+
opencos/deps/deps_file.py,sha256=36KvkixS_TcIjetpvJEmYpkdaYhuY42aVi7WvV3Qtw8,16445
|
|
44
|
+
opencos/deps/deps_processor.py,sha256=DBaMUEnpoIL4xaNPs2f2AFGcWLST5pP_Qgup9r-8D7M,41403
|
|
45
45
|
opencos/hw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
46
|
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=
|
|
50
|
+
opencos/tests/helpers.py,sha256=fs7GRlCJWj_uwwilikKI6R9tbozgGH5Uxi6_qqvEEwc,11231
|
|
51
51
|
opencos/tests/test_build.py,sha256=FQAxOpLVQShAHD_L5rqJctPeSAoqoOCNFI0RXflLuY0,387
|
|
52
|
-
opencos/tests/test_deps_helpers.py,sha256=
|
|
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=
|
|
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=
|
|
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
|
|
@@ -69,16 +69,16 @@ 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=
|
|
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=
|
|
76
|
+
opencos/tools/riviera.py,sha256=FAumXIt9u4JXwR5BHe-0APX3K0Lg3RT2lWQ-GNGL3vA,13016
|
|
77
77
|
opencos/tools/slang.py,sha256=UpsFeExup2awARxxxADD9f923Hw6ubiSEq2tKtJbS1c,8305
|
|
78
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=
|
|
81
|
+
opencos/tools/verilator.py,sha256=nVYF9F-VAHmT0uqmHpYZIvvZ2GjFIVW5zKpYBAWW8rI,20810
|
|
82
82
|
opencos/tools/vivado.py,sha256=GQdPd1mp02it_uyhMqpFfJgh0AKIMn-20BhHNEDp5HY,41398
|
|
83
83
|
opencos/tools/yosys.py,sha256=t3Au8gdwTepIKCPCXHpRXEdtmORQK8xqNvF6baIa7DM,28260
|
|
84
84
|
opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -86,12 +86,12 @@ opencos/utils/markup_helpers.py,sha256=A8Ev5UJ4EVKjdcF2g85SQbjdPZR4jGpNqCLaBy_4v
|
|
|
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=
|
|
90
|
-
opencos/utils/vsim_helper.py,sha256=
|
|
91
|
-
opencos_eda-0.
|
|
92
|
-
opencos_eda-0.
|
|
93
|
-
opencos_eda-0.
|
|
94
|
-
opencos_eda-0.
|
|
95
|
-
opencos_eda-0.
|
|
96
|
-
opencos_eda-0.
|
|
97
|
-
opencos_eda-0.
|
|
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.1.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
|
92
|
+
opencos_eda-0.3.1.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
|
|
93
|
+
opencos_eda-0.3.1.dist-info/METADATA,sha256=Gc70L29pHLuc43gNk0yJw3-dGE98LYbpu-o7FdLM4sw,666
|
|
94
|
+
opencos_eda-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
95
|
+
opencos_eda-0.3.1.dist-info/entry_points.txt,sha256=6n1T5NwVYDhN5l1h5zmyT197G4pE0SySDreB0QJzJR0,218
|
|
96
|
+
opencos_eda-0.3.1.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
|
|
97
|
+
opencos_eda-0.3.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|