opencos-eda 0.3.14__py3-none-any.whl → 0.3.15__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 CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  import sys
4
4
 
5
+ # pylint: disable=invalid-name
6
+
5
7
  NAME = 'opencos-eda'
6
8
 
7
9
  # Use standard library metadata module starting Python 3.8
@@ -19,4 +21,4 @@ else:
19
21
  ver = "unknown" # Or raise an error, or handle differently
20
22
 
21
23
 
22
- VERSION = ver # pylint: disable=invalid-name
24
+ VERSION = ver
opencos/_waves_pkg.sv CHANGED
@@ -26,27 +26,25 @@ package _waves_pkg;
26
26
  automatic string trace_str_value = "";
27
27
  void'($value$plusargs("trace=%s", trace_str_value));
28
28
  if (trace_str_value.tolower() == "vcd") begin
29
- $display("%t %m: Starting tracing to ./dump.vcd, plusarg +trace=%s",
30
- $realtime, trace_str_value);
29
+ $display("%t %m: Starting tracing to ./dump.vcd, plusarg +trace=vcd", $realtime);
31
30
  $dumpfile("dump.vcd");
32
31
  $dumpvars();
33
- return 1;
32
+ end else begin
33
+ $display("%t %m: Starting tracing to ./dump.fst", $realtime);
34
+ $dumpfile("dump.fst");
35
+ $dumpvars();
34
36
  end
35
37
  end
36
38
 
37
- $display("%t %m: Starting tracing to ./dump.fst", $realtime);
38
- $dumpfile("dump.fst");
39
- $dumpvars();
40
39
  return 1;
41
40
 
42
41
  endfunction : init_trace
43
42
 
44
- `elsif RIVIERA
43
+ `elsif IVERILOG
45
44
 
46
45
  bit trace_en_init = 0;
47
46
  bit trace_en = init_trace();
48
47
 
49
- // Note: must be non-automatic function for --tool=riviera
50
48
  function bit init_trace();
51
49
 
52
50
  if (trace_en_init) // only do this once.
@@ -55,26 +53,59 @@ package _waves_pkg;
55
53
  trace_en_init = 1;
56
54
 
57
55
  if ($test$plusargs("trace") != 0) begin
58
- automatic string trace_str_value = "";
56
+ $display("%t %m: Starting tracing to ./dump.vcd, plusarg +trace present", $realtime);
57
+ $dumpfile("dump.vcd");
58
+ $dumpvars();
59
+ return 1;
60
+ end
61
+
62
+ endfunction : init_trace
63
+
64
+ `endif
65
+ `endif
66
+ `endif
67
+
68
+ endpackage : _waves_pkg
69
+
70
+ //
71
+ // For RIVIERA (and SIMULATION, and not disabled):
72
+ // - it will not run system calls from a package function, unless that package was
73
+ // used by the testbench
74
+ // - so we have to
75
+ // - create a side module _waves_module. Fortunately the $dumpvars() in riviera
76
+ // dumps all module hier, not just that from _waves_module.
77
+ // - We will have to include work._waves_module in the vsim call (in riviera.py)
78
+ //
79
+
80
+ // TODO(drew): please test this on a file that doesn't involve ocsim_pkg.sv
81
+
82
+ `ifdef SIMULATION
83
+ `ifndef _WAVES_PKG_DISABLE_DUMPFILE // hook to disable this if user chooses
84
+ `ifdef RIVIERA
85
+
86
+ module _waves_module;
87
+
88
+ string trace_str_value = "";
89
+
90
+ initial begin
91
+
92
+ if ($test$plusargs("trace") != 0) begin
59
93
  void'($value$plusargs("trace=%s", trace_str_value));
60
94
  if (trace_str_value.tolower() == "vcd") begin
61
- $display("%t %m: Starting tracing to ./dump.vcd, plusarg +trace=%s",
62
- $realtime, trace_str_value);
95
+ $display("%t %m: Starting tracing to ./dump.vcd, plusarg +trace=vcd", $realtime);
63
96
  $dumpfile("dump.vcd");
64
97
  $dumpvars();
65
- return 1;
98
+ end else begin
99
+ $display("%t %m: Starting tracing to ./dump.fst", $realtime);
100
+ $dumpfile("dump.fst");
101
+ $dumpvars();
66
102
  end
67
103
  end
68
104
 
69
- $display("%t %m: Starting tracing to ./dump.fst", $realtime);
70
- $dumpfile("dump.fst");
71
- $dumpvars();
72
- return 1;
105
+ end
73
106
 
74
- endfunction : init_trace
107
+ endmodule : _waves_module
75
108
 
76
109
  `endif
77
110
  `endif
78
111
  `endif
79
-
80
- endpackage : _waves_pkg
opencos/commands/shell.py CHANGED
@@ -9,7 +9,7 @@ Not intended to be overriden by Tool based classes.'''
9
9
  # These also share a lot with CommandSim.* methods, so consider refactoring to share code,
10
10
  # for example, CommandShell.do_export could move to CommandDesign, and derived classes
11
11
  # set the allow-listed args to pass to export.
12
- # pylint: disable=too-many-arguments,too-many-positional-arguments
12
+ # pylint: disable=too-many-arguments
13
13
 
14
14
  import os
15
15
 
opencos/commands/sim.py CHANGED
@@ -9,7 +9,7 @@ Note that CommandSim is also a base class for opencos.commands.elab.CommandElab.
9
9
  # pylint: disable=R0801
10
10
 
11
11
  # TODO(drew): clean up CommandSim.check_logs_for_errors and CommandSim.run_commands_check_logs
12
- # pylint: disable=too-many-arguments,too-many-positional-arguments
12
+ # pylint: disable=too-many-arguments
13
13
 
14
14
  import os
15
15
  import shlex
@@ -22,6 +22,9 @@ from opencos.utils import status_constants
22
22
 
23
23
  from opencos.utils.str_helpers import strip_outer_quotes
24
24
 
25
+ THISPATH = os.path.dirname(__file__)
26
+ WAVES_PKG_SV_FNAME = str((Path(THISPATH) / '..' / '_waves_pkg.sv').resolve())
27
+
25
28
  def parameters_dict_get_command_list(
26
29
  params: dict, arg_prefix: str = '-G',
27
30
  hier_delimiter: str = '.',
@@ -638,8 +641,7 @@ class CommandSim(CommandDesign): # pylint: disable=too-many-public-methods
638
641
  break
639
642
 
640
643
  if not found_dumpfile:
641
- thispath = os.path.dirname(__file__)
642
- file_to_add = os.path.join(thispath, '..', '_waves_pkg.sv')
644
+ file_to_add = WAVES_PKG_SV_FNAME
643
645
  util.info(f'--waves arg present, no $dumpfile found, adding SV file: {file_to_add}')
644
646
  self.add_file(file_to_add)
645
647
 
@@ -706,7 +708,9 @@ class CommandSim(CommandDesign): # pylint: disable=too-many-public-methods
706
708
  if 'LICENSE_QUEUE' not in os.environ:
707
709
  os.environ['LICENSE_QUEUE'] = '1'
708
710
 
709
- def update_library_map(self, base_search_paths: list | None = None) -> None:
711
+ def update_library_map( # pylint: disable=dangerous-default-value
712
+ self, base_search_paths: list = []
713
+ ) -> None:
710
714
  '''
711
715
  Returns None, uses self.args['library-map'] to update:
712
716
 
@@ -739,7 +743,7 @@ class CommandSim(CommandDesign): # pylint: disable=too-many-public-methods
739
743
 
740
744
  # We have to go looking for lib_path though
741
745
  search_files = [lib_path]
742
- if base_search_paths and isinstance(base_search_paths, list):
746
+ if base_search_paths:
743
747
  for x in base_search_paths:
744
748
  search_files.append(Path(x) / lib_path)
745
749
  for x in search_files:
@@ -123,7 +123,7 @@ class CommandUpload(Command):
123
123
  def get_list_bitfiles(self, display: bool = True) -> list:
124
124
  '''Returns a list of bit files (ending with self.SUPPORTED_BIT_EXT)'''
125
125
 
126
- bitfiles: list[Path] = []
126
+ bitfiles = [] # list[Path]
127
127
 
128
128
  targets, files = self.get_targets_or_files_from_unparsed_args()
129
129
  targets.extend(files)
@@ -136,7 +136,7 @@ class CommandUpload(Command):
136
136
  if os.path.isfile(fullpath) and fullpath not in bitfiles:
137
137
  bitfiles.append(fullpath)
138
138
 
139
- matched: list[Path] = []
139
+ matched = [] # list[Path]
140
140
  for cand in bitfiles:
141
141
  debug(f"Looking for {cand=} in {targets=}")
142
142
  passing = all(re.search(t, str(cand)) for t in targets)
@@ -111,8 +111,8 @@ def get_handler_tool_version(tool: str, eda_command: str, config: dict) -> str:
111
111
 
112
112
 
113
113
 
114
- def get_handler_info_with_versions( # pylint: disable=too-many-branches
115
- config: dict | None = None,
114
+ def get_handler_info_with_versions( # pylint: disable=too-many-branches,dangerous-default-value
115
+ config: dict = {},
116
116
  include_commands: bool = True,
117
117
  sort: bool = True
118
118
  ) -> str:
@@ -202,8 +202,8 @@ def get_handler_info_with_versions( # pylint: disable=too-many-branches
202
202
  return info
203
203
 
204
204
 
205
- def pretty_info_handler_tools(
206
- info: dict | None = None, config: dict | None = None, command: str | None = ''
205
+ def pretty_info_handler_tools( # pylint: disable=dangerous-default-value
206
+ info: dict = {}, config: dict = {}, command: str = ''
207
207
  ) -> None:
208
208
  '''Pretty print (via util.info) the result from get_handler_info_with_versions()
209
209
 
@@ -151,6 +151,7 @@ class CommonSimQuesta(CommandSim, ToolQuesta):
151
151
  def prepare_compile(self):
152
152
  self.set_tool_defines()
153
153
  self.update_library_map()
154
+ self.add_waves_pkg_file()
154
155
  self.write_vlog_dot_f()
155
156
  self.write_vsim_dot_do(dot_do_to_write='all')
156
157
 
opencos/tools/riviera.py CHANGED
@@ -14,6 +14,7 @@ from pathlib import Path
14
14
  from opencos import util
15
15
  from opencos.commands import CommandFList
16
16
  from opencos.files import safe_shutil_which
17
+ from opencos.commands.sim import WAVES_PKG_SV_FNAME
17
18
  from opencos.tools.questa_common import ToolQuesta, CommonSimQuesta
18
19
  from opencos.utils.str_helpers import sanitize_defines_for_sh
19
20
  from opencos.utils import status_constants
@@ -127,8 +128,6 @@ class CommandSimRiviera(CommonSimQuesta, ToolRiviera):
127
128
  def compile(self):
128
129
  '''Override for CommandSimModelsimAse.compile() so we can set our own must_strings'''
129
130
 
130
- self.add_waves_pkg_file()
131
-
132
131
  if self.args['stop-before-compile']:
133
132
  # don't run anything, save everyting we've already run in _prep_compile()
134
133
  return
@@ -240,7 +239,7 @@ class CommandSimRiviera(CommonSimQuesta, ToolRiviera):
240
239
 
241
240
 
242
241
 
243
- def write_vsim_dot_do( # pylint: disable=too-many-branches,too-many-locals
242
+ def write_vsim_dot_do( # pylint: disable=too-many-branches,too-many-locals,too-many-statements
244
243
  self, dot_do_to_write: list
245
244
  ) -> None:
246
245
  '''Writes files(s) based on dot_do_to_write(list of str)
@@ -296,6 +295,10 @@ class CommandSimRiviera(CommonSimQuesta, ToolRiviera):
296
295
  f" {voptargs_str} {vsim_ext_args} {vsim_libs} work.{self.args['top']}"
297
296
  )
298
297
 
298
+ if self.args['waves'] and WAVES_PKG_SV_FNAME in self.files:
299
+ # kind of a hack, but add _waves_module (from _waves_pkg.sv) if that file
300
+ # was in our files list.
301
+ vsim_one_liner += ' work._waves_module'
299
302
 
300
303
  for l in self.args['add-top-library']:
301
304
  vsim_one_liner += f' {l}'
@@ -424,14 +427,14 @@ class CommandSimRiviera(CommonSimQuesta, ToolRiviera):
424
427
 
425
428
  return ' '.join(vsim_suppress_list)
426
429
 
427
- def update_library_map(self, base_search_paths: list | None = None) -> None:
430
+ def update_library_map( # pylint: disable=dangerous-default-value
431
+ self, base_search_paths: list = []
432
+ ) -> None:
428
433
  '''Override from sim::CommandSim
429
434
 
430
435
  We add some common places to look relative to the Riviera install paths
431
436
  '''
432
- bsp = []
433
- if isinstance(base_search_paths, list):
434
- bsp += base_search_paths
437
+ bsp = [] + base_search_paths
435
438
  bsp += [
436
439
  Path(self.sim_exe_base_path),
437
440
  Path(self.sim_exe_base_path) / '..',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencos-eda
3
- Version: 0.3.14
3
+ Version: 0.3.15
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
@@ -1,6 +1,6 @@
1
1
  opencos/__init__.py,sha256=RwJA9oc1uUlvNX7v5zoqwjnSRNq2NZwRlHqtS-ICJkI,122
2
- opencos/_version.py,sha256=KaWIjS0c08g-C0fgYY1kXwSPqhOFxaq5pYEeoZhOR_I,617
3
- opencos/_waves_pkg.sv,sha256=TL5YT9lT-fn2FD54MbVVZROmZ7vtW3ScA_rM2eRzKmU,2068
2
+ opencos/_version.py,sha256=FLlmTepF7P0hC-506fgEvv3NSxGxtWgeR7g2UkNK7PI,618
3
+ opencos/_waves_pkg.sv,sha256=yWojzRYVIqV2H5xa5e0v34LgK4oLMu3k9_N8EYXy2f0,2852
4
4
  opencos/deps_schema.py,sha256=wKRMuFzOIapwpCPFGvWGM8Mcwdh9yngHOiDRMmvUaIg,17394
5
5
  opencos/eda.py,sha256=2vJLMYMW9muWieNaOJz-U5EIVchmVyhTfmEcnZwQtvg,37382
6
6
  opencos/eda_base.py,sha256=-nguHrrYVb8a853HEMfFrOoXlsEEeRnDdFR66nTwX0s,124332
@@ -10,7 +10,7 @@ opencos/eda_config_reduced.yml,sha256=BOKGfe-OmVIF0SKhTTglPIzfAoGuCZ8n-f2KpoLF8d
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=NoVUvUeqvM18Svx1Oy4R8xM4Numq_YZneKyHSDnMMnY,8546
13
+ opencos/eda_tool_helper.py,sha256=7KY-E7wnWCNRHXeekDg1tFivcZw86-MsrmXiw7Fc6h0,8578
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
@@ -29,12 +29,12 @@ opencos/commands/lint.py,sha256=piPb0l0zE3sAtNJkFQ-oNpuHxnaV_RNXkXtEj_9mwGs,1594
29
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
- opencos/commands/shell.py,sha256=upHpFs8Gdtzi-boVXwsC-QzEsnvtoZNMAu4oN10kdxw,7801
33
- opencos/commands/sim.py,sha256=mpy1vOEeAfMfGmc_Q1ukWddgAmkXzShdVGKKdMLjvXs,31548
32
+ opencos/commands/shell.py,sha256=WPKS27fTr0MG4Gqz_RzSwv4n8AINuQ_ntSmJtHeat_I,7771
33
+ opencos/commands/sim.py,sha256=-dBxyHWMlUeLllsyhHa82jYKcLWxZA9qntS_vbeV3V0,31569
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
37
- opencos/commands/upload.py,sha256=D5ln2gXsRHbPkOcy8S9jcwv-x6N4SK3m49urr1CLKo0,7915
37
+ opencos/commands/upload.py,sha256=OGMI4By0942jL9LK7xBy5_WjvVzRbAr_RB3rS5fNobI,7917
38
38
  opencos/commands/waves.py,sha256=LYF1UcxkHFYYtYoebnh9iE_on80PbbmzIpaSk-XtZcI,9232
39
39
  opencos/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  opencos/deps/defaults.py,sha256=Z6mIVJEV0zQ9rC-HkQFMBFAkixjqKS1TATPSc27wOeA,1502
@@ -65,10 +65,10 @@ opencos/tools/iverilog.py,sha256=aehXQV22U7MIaH8XuEI9ApWztsez0NaW960_Z01oZWc,678
65
65
  opencos/tools/modelsim_ase.py,sha256=NEzAXJtiVWkKb3N-O3PYxSnnFmrq8LNrqjxFNBwzfKI,2254
66
66
  opencos/tools/quartus.py,sha256=gtswIhpnHjUTmw5g1BRxhjB6tofXEsx-I6IySjwyF94,32303
67
67
  opencos/tools/questa.py,sha256=QP0JCt8rWf0-snncNP0_Pi6oRY6_Z9Hwix1IYlRdGEc,2057
68
- opencos/tools/questa_common.py,sha256=4K5OoFlCCZcPTQDW8pYvMDJm3WpIJ6yxLnx5akRtIuU,21897
68
+ opencos/tools/questa_common.py,sha256=JYF4MrAcELurcA-t3Hzjb9KKtzHBEEYmXWKWAt8Gi0c,21931
69
69
  opencos/tools/questa_fe.py,sha256=yYNlUnA2pQ8-gELLajnvJgqg6ZXb6F26YRmyvrlNFOA,2155
70
70
  opencos/tools/questa_fse.py,sha256=CjOAn1Ik-3Hd-vyUH_WyTTJxH2yPfhNEfXbedCir7J4,2116
71
- opencos/tools/riviera.py,sha256=kRBG1ypS7TH1bA0_Hw7-q5sH7xS7X__rizUgAJgCfgg,19269
71
+ opencos/tools/riviera.py,sha256=SsBOQ-xQQeBr_jPKI50bGzFHXKQeAa7WX3Ql6AC-3wE,19535
72
72
  opencos/tools/slang.py,sha256=MxRwu4laSbv7oa3lO-BKg4McL7KAckSA003sL-9sY3U,9682
73
73
  opencos/tools/slang_yosys.py,sha256=z8gUcNSGDl5S6Ufxdx54WWe5v73w0UydErBKFWBR6ZI,10154
74
74
  opencos/tools/surelog.py,sha256=QaXS1EWI2b1TqBoekpXndoHxS6t2e8SD-I2Ryi-gHGs,6666
@@ -84,10 +84,10 @@ opencos/utils/str_helpers.py,sha256=ctl0Zh0h0JW7OlReeSdGxB9wODQYzmMO-9-h55rSRv0,
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.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,,
87
+ opencos_eda-0.3.15.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
88
+ opencos_eda-0.3.15.dist-info/licenses/LICENSE.spdx,sha256=8gn1610RMP6eFgT3Hm6q9VKXt0RvdTItL_oxMo72jII,189
89
+ opencos_eda-0.3.15.dist-info/METADATA,sha256=eMegaTVGReQYdwr58zGGkc8fmhuJywlujQ1wawgA4dA,1165
90
+ opencos_eda-0.3.15.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
91
+ opencos_eda-0.3.15.dist-info/entry_points.txt,sha256=QOlMZnQeqqwOzIaeKBcY_WlMR3idmOAEbGFh2dXlqJw,290
92
+ opencos_eda-0.3.15.dist-info/top_level.txt,sha256=J4JDP-LpRyJqPNeh9bSjx6yrLz2Mk0h6un6YLmtqql4,8
93
+ opencos_eda-0.3.15.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5