opencos-eda 0.3.7__py3-none-any.whl → 0.3.9__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/sim.py +61 -11
- opencos/eda.py +62 -8
- opencos/eda_base.py +77 -18
- opencos/eda_config.py +1 -0
- opencos/eda_config_defaults.yml +42 -8
- opencos/tests/test_tools.py +53 -30
- opencos/tools/iverilog.py +2 -2
- opencos/tools/modelsim_ase.py +19 -378
- opencos/tools/questa.py +42 -247
- opencos/tools/questa_common.py +481 -0
- opencos/tools/questa_fe.py +84 -0
- opencos/tools/questa_fse.py +7 -8
- opencos/tools/riviera.py +60 -12
- opencos/tools/slang.py +24 -0
- opencos/tools/surelog.py +22 -0
- opencos/tools/verilator.py +11 -5
- opencos/tools/vivado.py +4 -0
- opencos/util.py +2 -1
- opencos/utils/str_helpers.py +4 -4
- opencos/utils/vsim_helper.py +8 -1
- {opencos_eda-0.3.7.dist-info → opencos_eda-0.3.9.dist-info}/METADATA +2 -1
- {opencos_eda-0.3.7.dist-info → opencos_eda-0.3.9.dist-info}/RECORD +27 -25
- {opencos_eda-0.3.7.dist-info → opencos_eda-0.3.9.dist-info}/WHEEL +0 -0
- {opencos_eda-0.3.7.dist-info → opencos_eda-0.3.9.dist-info}/entry_points.txt +0 -0
- {opencos_eda-0.3.7.dist-info → opencos_eda-0.3.9.dist-info}/licenses/LICENSE +0 -0
- {opencos_eda-0.3.7.dist-info → opencos_eda-0.3.9.dist-info}/licenses/LICENSE.spdx +0 -0
- {opencos_eda-0.3.7.dist-info → opencos_eda-0.3.9.dist-info}/top_level.txt +0 -0
opencos/tools/riviera.py
CHANGED
|
@@ -11,16 +11,18 @@ import shutil
|
|
|
11
11
|
import subprocess
|
|
12
12
|
|
|
13
13
|
from opencos import util
|
|
14
|
-
from opencos.tools.
|
|
14
|
+
from opencos.tools.questa_common import ToolQuesta, CommonSimQuesta
|
|
15
|
+
from opencos.commands import CommandFList
|
|
15
16
|
from opencos.utils.str_helpers import sanitize_defines_for_sh
|
|
16
17
|
from opencos.utils import status_constants
|
|
17
18
|
|
|
18
|
-
class ToolRiviera(
|
|
19
|
+
class ToolRiviera(ToolQuesta):
|
|
19
20
|
'''ToolRiviera used by opencos.eda for --tool=riviera'''
|
|
20
21
|
|
|
21
22
|
_TOOL = 'riviera'
|
|
22
23
|
_EXE = 'vsim'
|
|
23
24
|
use_vopt = False
|
|
25
|
+
uvm_versions = set()
|
|
24
26
|
|
|
25
27
|
def get_versions(self) -> str:
|
|
26
28
|
if self._VERSION:
|
|
@@ -40,7 +42,17 @@ class ToolRiviera(ToolModelsimAse):
|
|
|
40
42
|
)
|
|
41
43
|
stdout = version_ret.stdout.decode('utf-8', errors='replace').rstrip()
|
|
42
44
|
|
|
43
|
-
#
|
|
45
|
+
# Get the UVM versions in the install directory. Note this may run
|
|
46
|
+
# more than once, so only do this if self.uvm_versions not yet set:
|
|
47
|
+
riviera_path, _ = os.path.split(self.sim_exe_base_path)
|
|
48
|
+
vlib_path = os.path.join(riviera_path, 'vlib')
|
|
49
|
+
if not self.uvm_versions and os.path.isdir(vlib_path):
|
|
50
|
+
for item in os.listdir(vlib_path):
|
|
51
|
+
# uvm-1.1, uvm-1.1d - so don't pick anything > 9 chars (uvm-M.mRr)
|
|
52
|
+
if item.startswith('uvm-') and '1800' not in item and len(item) <= 9:
|
|
53
|
+
self.uvm_versions.add(item[4:])
|
|
54
|
+
|
|
55
|
+
# For Version, expect:
|
|
44
56
|
# Aldec, Inc. Riviera-PRO version 2025.04.139.9738 built for Linux64 on May 30, 2025
|
|
45
57
|
left, right = stdout.split('version')
|
|
46
58
|
if 'Riviera' not in left:
|
|
@@ -49,14 +61,20 @@ class ToolRiviera(ToolModelsimAse):
|
|
|
49
61
|
return self._VERSION
|
|
50
62
|
|
|
51
63
|
|
|
52
|
-
class CommandSimRiviera(
|
|
64
|
+
class CommandSimRiviera(CommonSimQuesta, ToolRiviera):
|
|
53
65
|
'''CommandSimRiviera is a command handler for: eda sim --tool=riviera'''
|
|
54
66
|
|
|
55
67
|
def __init__(self, config: dict):
|
|
56
|
-
|
|
68
|
+
CommonSimQuesta.__init__(self, config=config)
|
|
69
|
+
|
|
70
|
+
# This technically inherits ToolQuesta and ToolRiviera, but ToolRiviera will
|
|
71
|
+
# override get_versions(). Just be careful on using issinstance(cls_obj, ToolQuesta),
|
|
72
|
+
# and instead use self._TOOL, or self.args['tool']
|
|
57
73
|
ToolRiviera.__init__(self, config=self.config)
|
|
74
|
+
|
|
58
75
|
self.shell_command = os.path.join(self.sim_exe_base_path, 'vsim')
|
|
59
|
-
self.starter_edition =
|
|
76
|
+
self.starter_edition = False
|
|
77
|
+
|
|
60
78
|
self.args.update({
|
|
61
79
|
'tool': self._TOOL, # override
|
|
62
80
|
'gui': False,
|
|
@@ -76,6 +94,18 @@ class CommandSimRiviera(CommandSimModelsimAse, ToolRiviera):
|
|
|
76
94
|
'bring your own .tcl file to run in Riviera (vsim) for coverage. The default'
|
|
77
95
|
' tcl steps are (from tool config in --config-yml): '
|
|
78
96
|
) + '; '.join(self.tool_config.get('simulate-coverage-tcl', [])),
|
|
97
|
+
'uvm': (
|
|
98
|
+
'Attempts to support UVM. Adds to vlog: -l uvm +incdir+PATH for the PATH to'
|
|
99
|
+
' uvm_macros.svh for the installed version of Riviera used.'
|
|
100
|
+
),
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
if self.uvm_versions:
|
|
104
|
+
# set default to latest version:
|
|
105
|
+
self.args['uvm-version'] = sorted(self.uvm_versions)[-1]
|
|
106
|
+
|
|
107
|
+
self.args_kwargs.update({
|
|
108
|
+
'uvm-version': { 'choices': list(self.uvm_versions) }
|
|
79
109
|
})
|
|
80
110
|
|
|
81
111
|
def set_tool_defines(self):
|
|
@@ -136,7 +166,9 @@ class CommandSimRiviera(CommandSimModelsimAse, ToolRiviera):
|
|
|
136
166
|
return []
|
|
137
167
|
|
|
138
168
|
|
|
139
|
-
def write_vlog_dot_f(
|
|
169
|
+
def write_vlog_dot_f( # pylint: disable=too-many-branches
|
|
170
|
+
self, filename: str = 'vlog.f'
|
|
171
|
+
) -> None:
|
|
140
172
|
'''Returns none, creates filename (str) for a vlog.f'''
|
|
141
173
|
vlog_dot_f_lines = []
|
|
142
174
|
|
|
@@ -153,6 +185,12 @@ class CommandSimRiviera(CommandSimModelsimAse, ToolRiviera):
|
|
|
153
185
|
vlog_dot_f_fname = filename
|
|
154
186
|
vlog_dot_f_fpath = os.path.join(self.args['work-dir'], vlog_dot_f_fname)
|
|
155
187
|
|
|
188
|
+
if self.args['uvm']:
|
|
189
|
+
vlog_dot_f_lines.extend([
|
|
190
|
+
f'-uvmver {self.args["uvm-version"]}',
|
|
191
|
+
'-dbg'
|
|
192
|
+
])
|
|
193
|
+
|
|
156
194
|
for value in self.incdirs:
|
|
157
195
|
vlog_dot_f_lines += [ f"+incdir+{value}" ]
|
|
158
196
|
|
|
@@ -189,7 +227,7 @@ class CommandSimRiviera(CommandSimModelsimAse, ToolRiviera):
|
|
|
189
227
|
|
|
190
228
|
|
|
191
229
|
|
|
192
|
-
def write_vsim_dot_do( # pylint: disable=too-many-branches
|
|
230
|
+
def write_vsim_dot_do( # pylint: disable=too-many-branches,too-many-locals
|
|
193
231
|
self, dot_do_to_write: list
|
|
194
232
|
) -> None:
|
|
195
233
|
'''Writes files(s) based on dot_do_to_write(list of str)
|
|
@@ -216,19 +254,22 @@ class CommandSimRiviera(CommandSimModelsimAse, ToolRiviera):
|
|
|
216
254
|
voptargs_str += self.tool_config.get('simulate-waves-args',
|
|
217
255
|
'+accb +accr +access +r+w')
|
|
218
256
|
if self.args['coverage']:
|
|
219
|
-
voptargs_str += self.tool_config.get('coverage-args', '')
|
|
257
|
+
voptargs_str += ' ' + self.tool_config.get('coverage-args', '')
|
|
258
|
+
|
|
259
|
+
if self.args['uvm']:
|
|
260
|
+
if all(x not in voptargs_str for x in ('+access +r', '+access +w+r')):
|
|
261
|
+
voptargs_str += ' +access +r'
|
|
220
262
|
|
|
221
263
|
# parameters
|
|
222
264
|
if self.parameters:
|
|
223
265
|
voptargs_str += ' ' + ' '.join(self.process_parameters_get_list(arg_prefix='-G'))
|
|
224
266
|
|
|
225
|
-
|
|
226
|
-
# to add to vsim_one_liner.
|
|
267
|
+
vsim_libs = ' '.join([f'-l {x}' for x in self.args['sim-library']])
|
|
227
268
|
|
|
228
269
|
vsim_one_liner = (
|
|
229
270
|
"vsim"
|
|
230
271
|
f" -sv_seed {self.args['seed']} {sim_plusargs_str}"
|
|
231
|
-
f" {voptargs_str} {vsim_ext_args} work.{self.args['top']}"
|
|
272
|
+
f" {voptargs_str} {vsim_ext_args} {vsim_libs} work.{self.args['top']}"
|
|
232
273
|
)
|
|
233
274
|
|
|
234
275
|
vsim_one_liner = vsim_one_liner.replace('\n', ' ') # needs to be a one-liner
|
|
@@ -355,3 +396,10 @@ class CommandLintRiviera(CommandSimRiviera):
|
|
|
355
396
|
super().__init__(config)
|
|
356
397
|
self.args['stop-after-compile'] = True
|
|
357
398
|
self.args['stop-after-elaborate'] = True
|
|
399
|
+
|
|
400
|
+
class CommandFListRiviera(CommandFList, ToolRiviera):
|
|
401
|
+
'''CommonFListQuesta is a command handler for: eda flist --tool=riviera'''
|
|
402
|
+
|
|
403
|
+
def __init__(self, config: dict):
|
|
404
|
+
CommandFList.__init__(self, config=config)
|
|
405
|
+
ToolRiviera.__init__(self, config=self.config)
|
opencos/tools/slang.py
CHANGED
|
@@ -176,6 +176,30 @@ class CommandElabSlang(CommandElab, ToolSlang):
|
|
|
176
176
|
def get_post_simulate_command_lists(self, **kwargs) -> list:
|
|
177
177
|
return []
|
|
178
178
|
|
|
179
|
+
def update_tool_warn_err_counts_from_log_lines(
|
|
180
|
+
self, log_lines: list, bad_strings: list, warning_strings: list
|
|
181
|
+
) -> None:
|
|
182
|
+
'''
|
|
183
|
+
Overriden from Command, we ignore bad_strings/warning_strings and use a custom
|
|
184
|
+
checker.
|
|
185
|
+
'''
|
|
186
|
+
for line in log_lines:
|
|
187
|
+
if not line.startswith('Build failed: '):
|
|
188
|
+
continue
|
|
189
|
+
if not all(x in line for x in ('errors', 'warnings')):
|
|
190
|
+
continue
|
|
191
|
+
|
|
192
|
+
parts = line.strip().split()
|
|
193
|
+
if len(parts) < 6:
|
|
194
|
+
continue
|
|
195
|
+
|
|
196
|
+
errs = parts[2]
|
|
197
|
+
warns = parts[4]
|
|
198
|
+
if errs.isdigit():
|
|
199
|
+
self.tool_error_count += int(errs)
|
|
200
|
+
if warns.isdigit():
|
|
201
|
+
self.tool_warning_count += int(warns)
|
|
202
|
+
|
|
179
203
|
def _get_slang_command_list_start(self) -> list:
|
|
180
204
|
command_list = [self.slang_exe]
|
|
181
205
|
|
opencos/tools/surelog.py
CHANGED
|
@@ -147,6 +147,28 @@ class CommandElabSurelog(CommandElab, ToolSurelog):
|
|
|
147
147
|
command_lists=self.surelog_command_lists, line_breaks=True
|
|
148
148
|
)
|
|
149
149
|
|
|
150
|
+
def update_tool_warn_err_counts_from_log_lines(
|
|
151
|
+
self, log_lines: list, bad_strings: list, warning_strings: list
|
|
152
|
+
) -> None:
|
|
153
|
+
'''
|
|
154
|
+
Overriden from Command, we ignore bad_strings/warning_strings and use a custom
|
|
155
|
+
checker.
|
|
156
|
+
'''
|
|
157
|
+
for line in log_lines:
|
|
158
|
+
line = line.strip()
|
|
159
|
+
if line.endswith(' 0'):
|
|
160
|
+
continue
|
|
161
|
+
if line.startswith('[ FATAL] : ') or \
|
|
162
|
+
line.startswith('[ SYNTAX] : ') or \
|
|
163
|
+
line.startswith('[ ERROR] : '):
|
|
164
|
+
parts = line.split()
|
|
165
|
+
if parts[-1].isdigit():
|
|
166
|
+
self.tool_error_count += int(parts[-1])
|
|
167
|
+
if line.startswith('[WARNING] : '):
|
|
168
|
+
parts = line.split()
|
|
169
|
+
if parts[-1].isdigit():
|
|
170
|
+
self.tool_warning_count += int(parts[-1])
|
|
171
|
+
|
|
150
172
|
|
|
151
173
|
class CommandLintSurelog(CommandElabSurelog):
|
|
152
174
|
'''CommandLintSurelog is a command handler for: eda lint --tool=surelog.'''
|
opencos/tools/verilator.py
CHANGED
|
@@ -82,7 +82,6 @@ class VerilatorSim(CommandSim, ToolVerilator):
|
|
|
82
82
|
'lint-only': False,
|
|
83
83
|
'cc-mode': False,
|
|
84
84
|
'verilator-coverage-args': [],
|
|
85
|
-
'uvm': False,
|
|
86
85
|
'x-assign': '',
|
|
87
86
|
'x-initial': '',
|
|
88
87
|
})
|
|
@@ -117,9 +116,9 @@ class VerilatorSim(CommandSim, ToolVerilator):
|
|
|
117
116
|
' Also conditinally adds to verilated exe call:'
|
|
118
117
|
' +verilator+rand+reset+[0,2] for arg values 0, unique|fast'),
|
|
119
118
|
'uvm': (
|
|
120
|
-
'Warns on Verilator < 5.042, or missing $UVM_HOME environment
|
|
121
|
-
' .env, $UVM_HOME/uvm_pkg.sv should exist), and will run verilator
|
|
122
|
-
' -Wno-fatal +define+UVM_NO_DPI'
|
|
119
|
+
'Enables UVM. Warns on Verilator < 5.042, or missing $UVM_HOME environment'
|
|
120
|
+
' var set (or in .env, $UVM_HOME/uvm_pkg.sv should exist), and will run verilator'
|
|
121
|
+
' with args: -Wno-fatal +define+UVM_NO_DPI'
|
|
123
122
|
),
|
|
124
123
|
'verilator-coverage-args': (
|
|
125
124
|
'Requires --coverage, args to be applied to verilator_coverage, which runs'
|
|
@@ -127,6 +126,12 @@ class VerilatorSim(CommandSim, ToolVerilator):
|
|
|
127
126
|
),
|
|
128
127
|
})
|
|
129
128
|
|
|
129
|
+
|
|
130
|
+
self.args_kwargs.update({
|
|
131
|
+
'x-assign': { 'choices': ['0', '1', 'unique', 'fast'] },
|
|
132
|
+
'x-initial': { 'choices': ['0', 'unique', 'fast'] },
|
|
133
|
+
})
|
|
134
|
+
|
|
130
135
|
self.verilate_command_lists = []
|
|
131
136
|
self.lint_only_command_lists = []
|
|
132
137
|
self.verilated_exec_command_lists = []
|
|
@@ -562,7 +567,8 @@ class VerilatorSim(CommandSim, ToolVerilator):
|
|
|
562
567
|
'version > v5.042')
|
|
563
568
|
|
|
564
569
|
if not os.environ.get('UVM_HOME', ''):
|
|
565
|
-
util.warning('--uvm set, however env (or .env or --env-file)
|
|
570
|
+
util.warning('--uvm set, however env (or .env or --env-file)',
|
|
571
|
+
'$UVM_HOME is not set')
|
|
566
572
|
|
|
567
573
|
uvm_pkg_found = self._verilator_support_uvm_pkg_fpath(add_if_found=add_uvm_pkg_if_found)
|
|
568
574
|
if warnings and not uvm_pkg_found:
|
opencos/tools/vivado.py
CHANGED
|
@@ -225,6 +225,8 @@ class CommandSimVivado(CommandSim, ToolVivado):
|
|
|
225
225
|
|
|
226
226
|
if self.tool_config.get('elab-waves-args', ''):
|
|
227
227
|
command_list += self.tool_config.get('elab-waves-args', '').split()
|
|
228
|
+
if self.args['uvm']:
|
|
229
|
+
command_list.extend(['-L', 'uvm'])
|
|
228
230
|
elif self.args['gui'] and self.args['waves']:
|
|
229
231
|
command_list += ['-debug', 'all']
|
|
230
232
|
elif self.args['gui']:
|
|
@@ -305,6 +307,8 @@ class CommandSimVivado(CommandSim, ToolVivado):
|
|
|
305
307
|
command_list[0] += ".bat"
|
|
306
308
|
if typ == 'sv':
|
|
307
309
|
command_list.append('-sv')
|
|
310
|
+
if self.args['uvm']:
|
|
311
|
+
command_list.extend(['-L', 'uvm'])
|
|
308
312
|
command_list += self.tool_config.get('compile-args', '').split()
|
|
309
313
|
if util.args['verbose']:
|
|
310
314
|
command_list += ['-v', '2']
|
opencos/util.py
CHANGED
|
@@ -901,7 +901,8 @@ def exit( # pylint: disable=redefined-builtin
|
|
|
901
901
|
elif args['warnings']:
|
|
902
902
|
info_color = Colors.yellow
|
|
903
903
|
info(
|
|
904
|
-
f"{start}Exiting with {args['warnings']} warnings
|
|
904
|
+
f"{start}Exiting with {Colors.bold}{args['warnings']} warnings{info_color},",
|
|
905
|
+
f"{Colors.bold}{args['errors']} errors",
|
|
905
906
|
color=info_color
|
|
906
907
|
)
|
|
907
908
|
sys.exit(error_code)
|
opencos/utils/str_helpers.py
CHANGED
|
@@ -132,11 +132,11 @@ def get_terminal_columns():
|
|
|
132
132
|
|
|
133
133
|
Returns:
|
|
134
134
|
int: The number of columns in the terminal, or a default value (e.g., 80)
|
|
135
|
-
if the terminal size cannot be determined.
|
|
135
|
+
if the terminal size cannot be determined. Min value of 40 is returned.
|
|
136
136
|
"""
|
|
137
137
|
try:
|
|
138
138
|
size = os.get_terminal_size()
|
|
139
|
-
return size.columns
|
|
139
|
+
return max(40, size.columns)
|
|
140
140
|
except OSError:
|
|
141
141
|
# Handle cases where the terminal size cannot be determined (e.g., not in a TTY)
|
|
142
142
|
return 80 # Default to 80 columns
|
|
@@ -166,13 +166,13 @@ def pretty_list_columns_manual(data: list, num_columns: int = 4, auto_columns: b
|
|
|
166
166
|
max_line_len = 0
|
|
167
167
|
for x in max_lengths:
|
|
168
168
|
max_line_len += x + _spacing
|
|
169
|
-
if max_line_len
|
|
169
|
+
if max_line_len >= window_cols:
|
|
170
170
|
# subtract a column (already >= 2):
|
|
171
171
|
ret_lines.extend(
|
|
172
172
|
pretty_list_columns_manual(data=data, num_columns=num_columns-1, auto_columns=True)
|
|
173
173
|
)
|
|
174
174
|
return ret_lines
|
|
175
|
-
if max_line_len + max_item_len + _spacing
|
|
175
|
+
if max_line_len + max_item_len + _spacing < window_cols:
|
|
176
176
|
# add 1 more column if we're guaranteed to have room.
|
|
177
177
|
ret_lines.extend(
|
|
178
178
|
pretty_list_columns_manual(data=data, num_columns=num_columns+1, auto_columns=True)
|
opencos/utils/vsim_helper.py
CHANGED
|
@@ -18,6 +18,12 @@ TOOL_IS = {
|
|
|
18
18
|
'questa_fse': False
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
def found() -> str:
|
|
22
|
+
'''Returns the found tool, or blank str'''
|
|
23
|
+
for k,v in TOOL_IS.items():
|
|
24
|
+
if k and v:
|
|
25
|
+
return k
|
|
26
|
+
return ''
|
|
21
27
|
|
|
22
28
|
def init() -> None:
|
|
23
29
|
'''Sets INIT_HAS_RUN=True (only runs once) and one of TOOL_IS[tool] = True'''
|
|
@@ -41,13 +47,14 @@ def init() -> None:
|
|
|
41
47
|
if proc is None or proc.returncode != 0:
|
|
42
48
|
return
|
|
43
49
|
|
|
44
|
-
|
|
45
50
|
stdout_str_lower = proc.stdout.decode('utf-8', errors='replace').lower()
|
|
46
51
|
|
|
47
52
|
if all(x in stdout_str_lower for x in ('starter', 'modelsim', 'fpga')):
|
|
48
53
|
TOOL_IS['modelsim_ase'] = True
|
|
49
54
|
elif all(x in stdout_str_lower for x in ('starter', 'questa', 'fpga')):
|
|
50
55
|
TOOL_IS['questa_fse'] = True
|
|
56
|
+
elif all(x in stdout_str_lower for x in ('questa', 'fpga')):
|
|
57
|
+
TOOL_IS['questa_fe'] = True
|
|
51
58
|
elif all(x in stdout_str_lower for x in ('riviera', 'aldec')):
|
|
52
59
|
TOOL_IS['riviera'] = True
|
|
53
60
|
elif 'questa' in stdout_str_lower:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opencos-eda
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.9
|
|
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,6 +20,7 @@ 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"
|
|
23
24
|
Provides-Extra: cocotb
|
|
24
25
|
Requires-Dist: cocotb>=2.0; extra == "cocotb"
|
|
25
26
|
Requires-Dist: pytest>=8.3.5; extra == "cocotb"
|
|
@@ -2,10 +2,10 @@ 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
4
|
opencos/deps_schema.py,sha256=fx1_IJhsDYkUciwwCPTXHP6ftFjTsPVjO4xg12twIjw,17384
|
|
5
|
-
opencos/eda.py,sha256=
|
|
6
|
-
opencos/eda_base.py,sha256=
|
|
7
|
-
opencos/eda_config.py,sha256=
|
|
8
|
-
opencos/eda_config_defaults.yml,sha256=
|
|
5
|
+
opencos/eda.py,sha256=VzuRw2m-LB8mR4nNOcIlZe7GxgGPuussC7pVGq8qHJs,26990
|
|
6
|
+
opencos/eda_base.py,sha256=J_al8-oQS5HCTJyiNSFVaNosESPctLWNpKG7FVGJXks,117815
|
|
7
|
+
opencos/eda_config.py,sha256=d7gMx9ZJTcnUwVhqUkQtY4PI3UGD0ZvH8D_GXvc5Erc,14199
|
|
8
|
+
opencos/eda_config_defaults.yml,sha256=uLbCDG9m7zEg8DCCL2ZDFgiVO09K1ObQs02__Q4RDhk,17093
|
|
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
|
|
@@ -18,7 +18,7 @@ opencos/files.py,sha256=4fomXM5vyA5FUAImSeAjrPchQPysPSD07c_TLYg5cd8,1617
|
|
|
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=rJnXWOy_5vlb_qC1O5LmeOwJaJZrV46ZM9tYAcQKqAw,44453
|
|
22
22
|
opencos/commands/__init__.py,sha256=oOOQmn5_jHAMSOfA3swJJ7mdoyHsJA0lJwKPTudlTns,1125
|
|
23
23
|
opencos/commands/build.py,sha256=mvJYxk5J15k0Cr8R7oIdIIdsEtWV3gE-LnPweVwtSDo,1487
|
|
24
24
|
opencos/commands/deps_help.py,sha256=WDrU7H9sypzDAxe_CHqhW5B_scbQMzBEdf-v-Jcfd5Q,10682
|
|
@@ -31,7 +31,7 @@ opencos/commands/multi.py,sha256=kC21JYJU5E-rP0v690YsgR2rV9WikoeUTwGC4gzYK3M,275
|
|
|
31
31
|
opencos/commands/open.py,sha256=XckvKUNwvc5KHbYGV-eQ2i0WG4X-yckroDaMC610MB4,804
|
|
32
32
|
opencos/commands/proj.py,sha256=cExW9ZZkw6nkpVyNfeQzJADzmPtbYgBgWml82tqO6jY,1158
|
|
33
33
|
opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
|
|
34
|
-
opencos/commands/sim.py,sha256=
|
|
34
|
+
opencos/commands/sim.py,sha256=a8fsf_Yw5igGiLhJGszlsKxTuQndfrFdStexmA4gwgE,24142
|
|
35
35
|
opencos/commands/sweep.py,sha256=ni4XFgnFF8HLXtwPhETyLWfvc2kgtm4bcxFcKzUhkf0,9343
|
|
36
36
|
opencos/commands/synth.py,sha256=m4ZwqHgOF5We0XP94F7TQli11WCPlkzhamI4fDfFR1o,4573
|
|
37
37
|
opencos/commands/targets.py,sha256=_jRNhm2Fqj0fmMvTw6Ba39DCsRHf_r_uZCy_R064kpA,1472
|
|
@@ -55,7 +55,7 @@ opencos/tests/test_eda.py,sha256=n76XUSfaPNnTZeS8u5z6f9MHKPJIls4o-S4ftlGxuNg,377
|
|
|
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
|
-
opencos/tests/test_tools.py,sha256=
|
|
58
|
+
opencos/tests/test_tools.py,sha256=xzxlHSgqZNN9urxzNfQU4vjexmxRF6bsKvXijU35z78,15046
|
|
59
59
|
opencos/tests/deps_files/command_order/DEPS.yml,sha256=jFce1gErT8XJpovYJj7t7X6Lu-Up_4yNRj9L8wOCAbI,1046
|
|
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
|
|
@@ -68,30 +68,32 @@ opencos/tools/cocotb.py,sha256=bR97Mb87D0HPdoV82rLT7oszPLmdIPzYU1IEBaGnuXg,20544
|
|
|
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
|
-
opencos/tools/iverilog.py,sha256=
|
|
72
|
-
opencos/tools/modelsim_ase.py,sha256=
|
|
71
|
+
opencos/tools/iverilog.py,sha256=PH_mvFU3LbMAPNskxMi1tD4DsMWRcsy27V_M0La9TNY,6558
|
|
72
|
+
opencos/tools/modelsim_ase.py,sha256=2QYxaHNsDghnimvIJmkpo_M6w2oZyiyvmak0a5jh4cM,2620
|
|
73
73
|
opencos/tools/quartus.py,sha256=_TfmPSYpbhmDLw7Dur-rRP0iGwv9hhQ6E5G-XLiYPEM,30486
|
|
74
|
-
opencos/tools/questa.py,sha256=
|
|
75
|
-
opencos/tools/
|
|
76
|
-
opencos/tools/
|
|
77
|
-
opencos/tools/
|
|
74
|
+
opencos/tools/questa.py,sha256=oPZUM_OeDhIef0x1HicKUwLwxi0t31Jf1fekNh3IM9Y,2423
|
|
75
|
+
opencos/tools/questa_common.py,sha256=vRHA0vlK_KA7V999ThIQ66mL562pDsANcG0w29ceLCM,18936
|
|
76
|
+
opencos/tools/questa_fe.py,sha256=fRyi0-WFzp1RN7TGSZ7VTk4LFmxHkpy8BMKE3CxTmMg,2524
|
|
77
|
+
opencos/tools/questa_fse.py,sha256=cH9vxpwa1pi0A9hVPWc_IqYMByaviYlccxQOTpZBC1A,2486
|
|
78
|
+
opencos/tools/riviera.py,sha256=eidlIkggqOHGyrm4ldzfDCO6D-nVnEa6mT5en-rjSK0,15684
|
|
79
|
+
opencos/tools/slang.py,sha256=nDB9eK_DNAgewsXP4Sc1wh_bQiOr5q3-3ccpTbdWr1Y,9423
|
|
78
80
|
opencos/tools/slang_yosys.py,sha256=MKh13eAmLJDkynZiezyT8E2gI4CKnXipzgFCZppaMXo,10230
|
|
79
|
-
opencos/tools/surelog.py,sha256=
|
|
81
|
+
opencos/tools/surelog.py,sha256=uqUOpDq9Vs8Inj4m3nlMbag47LrJB4QHUIRes7dFbQY,6520
|
|
80
82
|
opencos/tools/tabbycad_yosys.py,sha256=2LePPgYXBVdsy7YcffPIWN-I0B7queLQ_f_pme2SCGw,7803
|
|
81
|
-
opencos/tools/verilator.py,sha256=
|
|
82
|
-
opencos/tools/vivado.py,sha256=
|
|
83
|
+
opencos/tools/verilator.py,sha256=oIZpqiawohf21JZ_ib0NSAbVpVMYCwPswQ315Y6nU7g,24941
|
|
84
|
+
opencos/tools/vivado.py,sha256=k_7sc9cv69BIkIxnbQKNFjLubS_O-p7HvTH_SkiZDMQ,41643
|
|
83
85
|
opencos/tools/yosys.py,sha256=2h88u0NA_vqLgZG9I78gIy6nQuWxyT6mirDlyjTHn9w,28290
|
|
84
86
|
opencos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
87
|
opencos/utils/markup_helpers.py,sha256=A8Ev5UJ4EVKjdcF2g85SQbjdPZR4jGpNqCLaBy_4v7Q,4569
|
|
86
88
|
opencos/utils/status_constants.py,sha256=na6YsqlsCwIYzTXWE14dPadUYRNTrOS6YTXHCer2NbA,635
|
|
87
|
-
opencos/utils/str_helpers.py,sha256
|
|
89
|
+
opencos/utils/str_helpers.py,sha256=mCByhIyZLwDJuyeT70YShepgkkikY0pf7k6_xS93dGg,6675
|
|
88
90
|
opencos/utils/subprocess_helpers.py,sha256=nmRUe5sPyXomzKEvEQU5231U_vilj8TuXNXLipwqLTM,6579
|
|
89
91
|
opencos/utils/vscode_helper.py,sha256=9nHyMUIL-gzfW-qLH06sgaCnVK-YTOtu6pusitNNhL8,1363
|
|
90
|
-
opencos/utils/vsim_helper.py,sha256=
|
|
91
|
-
opencos_eda-0.3.
|
|
92
|
-
opencos_eda-0.3.
|
|
93
|
-
opencos_eda-0.3.
|
|
94
|
-
opencos_eda-0.3.
|
|
95
|
-
opencos_eda-0.3.
|
|
96
|
-
opencos_eda-0.3.
|
|
97
|
-
opencos_eda-0.3.
|
|
92
|
+
opencos/utils/vsim_helper.py,sha256=tunDMI8EVeWlnheRUtWUPh4qTr9CpKtv9NqbMBcIv28,1806
|
|
93
|
+
opencos_eda-0.3.9.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
|
94
|
+
opencos_eda-0.3.9.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
|
|
95
|
+
opencos_eda-0.3.9.dist-info/METADATA,sha256=EUww5O4Rxx7oknCVGRHElcYkmAd2jLcpVdwSuFgBkQs,1208
|
|
96
|
+
opencos_eda-0.3.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
97
|
+
opencos_eda-0.3.9.dist-info/entry_points.txt,sha256=6n1T5NwVYDhN5l1h5zmyT197G4pE0SySDreB0QJzJR0,218
|
|
98
|
+
opencos_eda-0.3.9.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
|
|
99
|
+
opencos_eda-0.3.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|