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.
- opencos/commands/flist.py +222 -39
- opencos/commands/multi.py +4 -2
- opencos/commands/sim.py +192 -8
- opencos/deps/deps_file.py +4 -1
- opencos/deps_schema.py +2 -2
- opencos/eda.py +12 -9
- opencos/eda_base.py +39 -8
- opencos/eda_config.py +37 -6
- opencos/eda_config_defaults.yml +30 -5
- opencos/eda_tool_helper.py +4 -4
- opencos/tools/cocotb.py +0 -11
- opencos/tools/invio.py +0 -6
- opencos/tools/iverilog.py +17 -16
- opencos/tools/modelsim_ase.py +0 -12
- opencos/tools/quartus.py +21 -1
- opencos/tools/questa.py +0 -14
- opencos/tools/questa_common.py +54 -25
- opencos/tools/questa_fe.py +0 -14
- opencos/tools/questa_fse.py +0 -14
- opencos/tools/riviera.py +104 -25
- opencos/tools/slang.py +12 -9
- opencos/tools/slang_yosys.py +0 -6
- opencos/tools/surelog.py +11 -8
- opencos/tools/tabbycad_yosys.py +1 -7
- opencos/tools/verilator.py +18 -11
- opencos/tools/vivado.py +92 -25
- opencos/tools/yosys.py +8 -5
- opencos/util.py +14 -5
- opencos/utils/str_helpers.py +4 -1
- {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/METADATA +1 -2
- {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/RECORD +36 -36
- {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/WHEEL +0 -0
- {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/entry_points.txt +0 -0
- {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/licenses/LICENSE +0 -0
- {opencos_eda-0.3.12.dist-info → opencos_eda-0.3.14.dist-info}/licenses/LICENSE.spdx +0 -0
- {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':
|
|
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':
|
|
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(
|
|
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']
|
|
339
|
+
if self.args['sim-library']:
|
|
323
340
|
self.sim_libraries += self.args['sim-library'] # Add any command line libraries
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
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
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
928
|
-
|
|
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
|
-
|
|
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 =
|
|
32
|
-
env_files_loaded =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
))
|
opencos/utils/str_helpers.py
CHANGED
|
@@ -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.
|
|
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=
|
|
5
|
-
opencos/eda.py,sha256=
|
|
6
|
-
opencos/eda_base.py,sha256
|
|
7
|
-
opencos/eda_config.py,sha256=
|
|
8
|
-
opencos/eda_config_defaults.yml,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
61
|
-
opencos/tools/invio.py,sha256=
|
|
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=
|
|
65
|
-
opencos/tools/modelsim_ase.py,sha256=
|
|
66
|
-
opencos/tools/quartus.py,sha256=
|
|
67
|
-
opencos/tools/questa.py,sha256=
|
|
68
|
-
opencos/tools/questa_common.py,sha256=
|
|
69
|
-
opencos/tools/questa_fe.py,sha256=
|
|
70
|
-
opencos/tools/questa_fse.py,sha256=
|
|
71
|
-
opencos/tools/riviera.py,sha256=
|
|
72
|
-
opencos/tools/slang.py,sha256=
|
|
73
|
-
opencos/tools/slang_yosys.py,sha256=
|
|
74
|
-
opencos/tools/surelog.py,sha256=
|
|
75
|
-
opencos/tools/tabbycad_yosys.py,sha256=
|
|
76
|
-
opencos/tools/verilator.py,sha256=
|
|
77
|
-
opencos/tools/vivado.py,sha256=
|
|
78
|
-
opencos/tools/yosys.py,sha256=
|
|
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=
|
|
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.
|
|
88
|
-
opencos_eda-0.3.
|
|
89
|
-
opencos_eda-0.3.
|
|
90
|
-
opencos_eda-0.3.
|
|
91
|
-
opencos_eda-0.3.
|
|
92
|
-
opencos_eda-0.3.
|
|
93
|
-
opencos_eda-0.3.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|