digsim-logic-simulator 0.12.0__py3-none-any.whl → 0.14.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of digsim-logic-simulator might be problematic. Click here for more details.
- digsim/__init__.py +1 -1
- digsim/app/__main__.py +17 -13
- digsim/app/gui/__init__.py +1 -1
- digsim/app/gui/_circuit_area.py +32 -21
- digsim/app/gui/_component_selection.py +3 -1
- digsim/app/gui/_main_window.py +1 -1
- digsim/app/gui/_top_bar.py +1 -1
- digsim/app/gui/_utils.py +1 -1
- digsim/app/gui_objects/__init__.py +2 -2
- digsim/app/gui_objects/_bus_bit_object.py +1 -1
- digsim/app/gui_objects/_buzzer_object.py +7 -7
- digsim/app/gui_objects/_component_context_menu.py +2 -2
- digsim/app/gui_objects/_component_object.py +11 -10
- digsim/app/gui_objects/_component_port_item.py +1 -3
- digsim/app/gui_objects/_dip_switch_object.py +6 -5
- digsim/app/gui_objects/_gui_note_object.py +11 -12
- digsim/app/gui_objects/_gui_object_factory.py +2 -2
- digsim/app/gui_objects/_hexdigit_object.py +1 -1
- digsim/app/gui_objects/_image_objects.py +8 -6
- digsim/app/gui_objects/_label_object.py +4 -3
- digsim/app/gui_objects/_logic_analyzer_object.py +19 -10
- digsim/app/gui_objects/_seven_segment_object.py +11 -4
- digsim/app/gui_objects/_shortcut_objects.py +4 -3
- digsim/app/gui_objects/_yosys_object.py +1 -1
- digsim/app/model/__init__.py +1 -1
- digsim/app/model/_model.py +8 -4
- digsim/app/model/_model_components.py +2 -5
- digsim/app/model/_model_new_wire.py +3 -2
- digsim/app/model/_model_objects.py +2 -6
- digsim/app/model/_model_settings.py +2 -2
- digsim/app/model/_model_shortcuts.py +1 -15
- digsim/app/settings/__init__.py +1 -1
- digsim/app/settings/_component_settings.py +2 -2
- digsim/app/settings/_gui_settings.py +1 -1
- digsim/app/settings/_shortcut_dialog.py +4 -5
- digsim/circuit/__init__.py +1 -1
- digsim/circuit/_circuit.py +52 -38
- digsim/circuit/components/__init__.py +1 -1
- digsim/circuit/components/_bus_bits.py +1 -1
- digsim/circuit/components/_button.py +2 -6
- digsim/circuit/components/_buzzer.py +1 -1
- digsim/circuit/components/_clock.py +1 -1
- digsim/circuit/components/_dip_switch.py +1 -1
- digsim/circuit/components/_flip_flops.py +1 -1
- digsim/circuit/components/_hexdigit.py +1 -1
- digsim/circuit/components/_ic.py +1 -1
- digsim/circuit/components/_label_wire.py +1 -1
- digsim/circuit/components/_led.py +1 -1
- digsim/circuit/components/_logic_analyzer.py +1 -1
- digsim/circuit/components/_mem64kbyte.py +1 -1
- digsim/circuit/components/_memstdout.py +1 -1
- digsim/circuit/components/_note.py +1 -1
- digsim/circuit/components/_on_off_switch.py +1 -1
- digsim/circuit/components/_seven_segment.py +1 -1
- digsim/circuit/components/_static_level.py +1 -1
- digsim/circuit/components/_static_value.py +1 -1
- digsim/circuit/components/_yosys_component.py +2 -2
- digsim/circuit/components/atoms/__init__.py +1 -0
- digsim/circuit/components/atoms/_component.py +14 -4
- digsim/circuit/components/atoms/_digsim_exception.py +1 -1
- digsim/circuit/components/atoms/_port.py +45 -29
- digsim/storage_model/_app.py +8 -3
- digsim/storage_model/_circuit.py +16 -8
- digsim/synth/__init__.py +1 -1
- digsim/synth/__main__.py +3 -3
- digsim/synth/_synthesis.py +6 -3
- digsim/utils/__init__.py +1 -1
- digsim/utils/_yosys_netlist.py +10 -4
- {digsim_logic_simulator-0.12.0.dist-info → digsim_logic_simulator-0.14.0.dist-info}/METADATA +4 -5
- digsim_logic_simulator-0.14.0.dist-info/RECORD +105 -0
- digsim_logic_simulator-0.12.0.dist-info/RECORD +0 -105
- {digsim_logic_simulator-0.12.0.dist-info → digsim_logic_simulator-0.14.0.dist-info}/WHEEL +0 -0
- {digsim_logic_simulator-0.12.0.dist-info → digsim_logic_simulator-0.14.0.dist-info}/licenses/LICENSE.md +0 -0
- {digsim_logic_simulator-0.12.0.dist-info → digsim_logic_simulator-0.14.0.dist-info}/top_level.txt +0 -0
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
8
|
import abc
|
|
9
|
+
from typing import Literal, Optional, Union
|
|
9
10
|
|
|
10
11
|
from ._digsim_exception import DigsimException
|
|
11
12
|
|
|
12
13
|
|
|
14
|
+
VALUE_TYPE = Union[int, Literal["X"]]
|
|
15
|
+
|
|
16
|
+
|
|
13
17
|
class PortConnectionError(DigsimException):
|
|
14
18
|
"""Exception for illegal connections"""
|
|
15
19
|
|
|
@@ -23,8 +27,8 @@ class Port(abc.ABC):
|
|
|
23
27
|
self._width: int = width # The bit-width of this port
|
|
24
28
|
self._output: bool = output # Is this port an output port
|
|
25
29
|
self._wired_ports: list[Port] = [] # The ports that this port drives
|
|
26
|
-
self._value:
|
|
27
|
-
self._edge_detect_value:
|
|
30
|
+
self._value: VALUE_TYPE = "X" # The value of this port
|
|
31
|
+
self._edge_detect_value: VALUE_TYPE = "X" # Last edge detect value
|
|
28
32
|
self.init() # Initialize the port
|
|
29
33
|
|
|
30
34
|
def init(self):
|
|
@@ -39,12 +43,12 @@ class Port(abc.ABC):
|
|
|
39
43
|
return self._wired_ports
|
|
40
44
|
|
|
41
45
|
@property
|
|
42
|
-
def value(self) ->
|
|
46
|
+
def value(self) -> VALUE_TYPE:
|
|
43
47
|
"""Get the value of the port, can be "X" """
|
|
44
48
|
return self._value
|
|
45
49
|
|
|
46
50
|
@value.setter
|
|
47
|
-
def value(self, value:
|
|
51
|
+
def value(self, value: VALUE_TYPE):
|
|
48
52
|
"""Set the value of the port"""
|
|
49
53
|
self.set_value(value)
|
|
50
54
|
|
|
@@ -60,7 +64,7 @@ class Port(abc.ABC):
|
|
|
60
64
|
driver = self.get_driver()
|
|
61
65
|
if driver is not None:
|
|
62
66
|
driver.disconnect(self)
|
|
63
|
-
for port in self._wired_ports:
|
|
67
|
+
for port in self._wired_ports[:]:
|
|
64
68
|
self.disconnect(port)
|
|
65
69
|
self._width = width
|
|
66
70
|
|
|
@@ -98,7 +102,7 @@ class Port(abc.ABC):
|
|
|
98
102
|
"""Get parent component"""
|
|
99
103
|
return self._parent
|
|
100
104
|
|
|
101
|
-
def update_wires(self, value:
|
|
105
|
+
def update_wires(self, value: VALUE_TYPE):
|
|
102
106
|
"""Update connected wires (and self._value) with value"""
|
|
103
107
|
if self._value == value:
|
|
104
108
|
return
|
|
@@ -106,11 +110,21 @@ class Port(abc.ABC):
|
|
|
106
110
|
for port in self._wired_ports:
|
|
107
111
|
port.value = self._value
|
|
108
112
|
|
|
109
|
-
def get_wired_ports_recursive(self) -> list[Port]:
|
|
110
|
-
"""Get all connected ports (
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
def get_wired_ports_recursive(self, processed_ports: Optional[set] = None) -> list[Port]:
|
|
114
|
+
"""Get all connected ports (iterative), avoiding duplicates."""
|
|
115
|
+
if processed_ports is None:
|
|
116
|
+
processed_ports = set()
|
|
117
|
+
|
|
118
|
+
all_wired_ports = []
|
|
119
|
+
ports_to_process = [self]
|
|
120
|
+
|
|
121
|
+
while ports_to_process:
|
|
122
|
+
port = ports_to_process.pop()
|
|
123
|
+
if port in processed_ports:
|
|
124
|
+
continue
|
|
125
|
+
processed_ports.add(port)
|
|
126
|
+
all_wired_ports.append(port)
|
|
127
|
+
ports_to_process.extend(port.wired_ports)
|
|
114
128
|
return all_wired_ports
|
|
115
129
|
|
|
116
130
|
def is_output(self) -> bool:
|
|
@@ -144,7 +158,7 @@ class Port(abc.ABC):
|
|
|
144
158
|
return falling_edge
|
|
145
159
|
|
|
146
160
|
@abc.abstractmethod
|
|
147
|
-
def set_value(self, value:
|
|
161
|
+
def set_value(self, value: VALUE_TYPE):
|
|
148
162
|
"""Set value on port"""
|
|
149
163
|
|
|
150
164
|
@abc.abstractmethod
|
|
@@ -195,7 +209,7 @@ class PortWire(Port):
|
|
|
195
209
|
super().__init__(parent, name, width, output)
|
|
196
210
|
self._port_driver: Port | None = None # The port that drives this port
|
|
197
211
|
|
|
198
|
-
def set_value(self, value:
|
|
212
|
+
def set_value(self, value: VALUE_TYPE):
|
|
199
213
|
if value != self.value:
|
|
200
214
|
self.update_wires(value)
|
|
201
215
|
|
|
@@ -221,7 +235,7 @@ class PortIn(PortWire):
|
|
|
221
235
|
def __init__(self, parent, name: str, width: int = 1):
|
|
222
236
|
super().__init__(parent, name, width, output=False)
|
|
223
237
|
|
|
224
|
-
def set_value(self, value:
|
|
238
|
+
def set_value(self, value: VALUE_TYPE):
|
|
225
239
|
super().set_value(value)
|
|
226
240
|
self.parent().update()
|
|
227
241
|
|
|
@@ -246,16 +260,16 @@ class PortOutDelta(Port):
|
|
|
246
260
|
"""Set port propagation delay"""
|
|
247
261
|
self._delay_ns = delay_ns
|
|
248
262
|
|
|
249
|
-
def set_value(self, value:
|
|
263
|
+
def set_value(self, value: VALUE_TYPE):
|
|
250
264
|
self.parent().add_event(self, value, self._delay_ns)
|
|
251
265
|
|
|
252
|
-
def update_port(self, value:
|
|
266
|
+
def update_port(self, value: VALUE_TYPE):
|
|
253
267
|
"""Update the port output and the connected wires"""
|
|
254
268
|
self.update_wires(value)
|
|
255
269
|
if self._update_parent:
|
|
256
270
|
self.parent().update()
|
|
257
271
|
|
|
258
|
-
def delta_cycle(self, value:
|
|
272
|
+
def delta_cycle(self, value: VALUE_TYPE):
|
|
259
273
|
"""Handle the delta cycle event from the circuit"""
|
|
260
274
|
self.update_port(value)
|
|
261
275
|
|
|
@@ -282,11 +296,11 @@ class PortOutImmediate(PortOutDelta):
|
|
|
282
296
|
def __init__(self, parent, name: str, width: int = 1):
|
|
283
297
|
super().__init__(parent, name, width)
|
|
284
298
|
|
|
285
|
-
def set_value(self, value:
|
|
299
|
+
def set_value(self, value: VALUE_TYPE):
|
|
286
300
|
self.parent().add_event(self, value, 0)
|
|
287
301
|
super().update_port(value)
|
|
288
302
|
|
|
289
|
-
def delta_cycle(self, value:
|
|
303
|
+
def delta_cycle(self, value: VALUE_TYPE):
|
|
290
304
|
"""
|
|
291
305
|
Do nothing here, the event is just used to updates waves in Circuit class
|
|
292
306
|
"""
|
|
@@ -303,7 +317,7 @@ class PortWireBit(PortWire):
|
|
|
303
317
|
super().__init__(parent, name, 1, output)
|
|
304
318
|
self._parent_port = parent_port
|
|
305
319
|
|
|
306
|
-
def set_value(self, value:
|
|
320
|
+
def set_value(self, value: VALUE_TYPE):
|
|
307
321
|
super().set_value(value)
|
|
308
322
|
self._parent_port.update_value_from_bits()
|
|
309
323
|
|
|
@@ -333,17 +347,20 @@ class PortMultiBitWire(Port):
|
|
|
333
347
|
for bit in self._bits:
|
|
334
348
|
bit.init()
|
|
335
349
|
|
|
336
|
-
def set_value(self, value:
|
|
337
|
-
if
|
|
350
|
+
def set_value(self, value: VALUE_TYPE):
|
|
351
|
+
if isinstance(value, str):
|
|
338
352
|
return
|
|
339
353
|
for bit_id, bit in enumerate(self._bits):
|
|
340
354
|
bit_val = (value >> bit_id) & 1
|
|
341
355
|
bit.value = bit_val
|
|
342
356
|
|
|
343
|
-
def get_wired_ports_recursive(self) -> list[Port]:
|
|
344
|
-
|
|
357
|
+
def get_wired_ports_recursive(self, processed_ports: Optional[set] = None) -> list[Port]:
|
|
358
|
+
if processed_ports is None:
|
|
359
|
+
processed_ports = set()
|
|
360
|
+
|
|
361
|
+
all_wired_ports = super().get_wired_ports_recursive(processed_ports)
|
|
345
362
|
for bit in self._bits:
|
|
346
|
-
all_wired_ports.extend(bit.get_wired_ports_recursive())
|
|
363
|
+
all_wired_ports.extend(bit.get_wired_ports_recursive(processed_ports))
|
|
347
364
|
return all_wired_ports
|
|
348
365
|
|
|
349
366
|
def set_driver(self, port: Port | None):
|
|
@@ -364,18 +381,17 @@ class PortMultiBitWire(Port):
|
|
|
364
381
|
|
|
365
382
|
def update_value_from_bits(self):
|
|
366
383
|
"""Update the port with the value of the bits"""
|
|
367
|
-
|
|
384
|
+
value = 0
|
|
385
|
+
for bit_id, bit in enumerate(self._bits):
|
|
368
386
|
if bit.value == "X":
|
|
369
387
|
self.update_wires("X")
|
|
370
388
|
return
|
|
371
|
-
value = 0
|
|
372
|
-
for bit_id, bit in enumerate(self._bits):
|
|
373
389
|
value = value | (bit.value << bit_id)
|
|
374
390
|
self.update_wires(value)
|
|
375
391
|
# Send event just to update waves
|
|
376
392
|
self.parent().add_event(self, value, 0)
|
|
377
393
|
|
|
378
|
-
def delta_cycle(self, value:
|
|
394
|
+
def delta_cycle(self, value: VALUE_TYPE):
|
|
379
395
|
"""
|
|
380
396
|
Do nothing here, the event passed in 'update_value_from_bits'
|
|
381
397
|
is just used to updates waves in Circuit class
|
digsim/storage_model/_app.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023-
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2025
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""
|
|
@@ -33,8 +33,13 @@ class AppFileDataClass:
|
|
|
33
33
|
|
|
34
34
|
@staticmethod
|
|
35
35
|
def load(filename):
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
try:
|
|
37
|
+
with open(filename, mode="r", encoding="utf-8") as json_file:
|
|
38
|
+
app_filedata_class = AppFileDataClass(**json.load(json_file))
|
|
39
|
+
except json.JSONDecodeError as exc:
|
|
40
|
+
raise ValueError(f"Malformed JSON file: {filename} - {exc}") from exc
|
|
41
|
+
except FileNotFoundError as exc:
|
|
42
|
+
raise FileNotFoundError(f"File not found: {filename}") from exc
|
|
38
43
|
return app_filedata_class
|
|
39
44
|
|
|
40
45
|
def save(self, filename):
|
digsim/storage_model/_circuit.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023-
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2025
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""
|
|
@@ -21,9 +21,11 @@ class WireDataClass:
|
|
|
21
21
|
dst: str
|
|
22
22
|
|
|
23
23
|
def connect(self, circuit):
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
src_comp
|
|
24
|
+
src_comp_name, src_port_name = self.src.split(".")
|
|
25
|
+
dst_comp_name, dst_port_name = self.dst.split(".")
|
|
26
|
+
src_comp = circuit.get_component(src_comp_name)
|
|
27
|
+
dst_comp = circuit.get_component(dst_comp_name)
|
|
28
|
+
src_comp.port(src_port_name).wire = dst_comp.port(dst_port_name)
|
|
27
29
|
|
|
28
30
|
@classmethod
|
|
29
31
|
def list_from_port(cls, src_port):
|
|
@@ -92,10 +94,11 @@ class CircuitDataClass:
|
|
|
92
94
|
@staticmethod
|
|
93
95
|
def from_circuit(circuit):
|
|
94
96
|
dc = CircuitDataClass(name=circuit.name)
|
|
95
|
-
|
|
97
|
+
toplevel_components = circuit.get_toplevel_components()
|
|
98
|
+
for comp in toplevel_components:
|
|
96
99
|
dc.components.append(ComponentDataClass.from_component(comp))
|
|
97
100
|
|
|
98
|
-
for comp in
|
|
101
|
+
for comp in toplevel_components:
|
|
99
102
|
for port in comp.ports:
|
|
100
103
|
dc.wires.extend(WireDataClass.list_from_port(port))
|
|
101
104
|
|
|
@@ -108,8 +111,13 @@ class CircuitFileDataClass:
|
|
|
108
111
|
|
|
109
112
|
@staticmethod
|
|
110
113
|
def load(filename):
|
|
111
|
-
|
|
112
|
-
|
|
114
|
+
try:
|
|
115
|
+
with open(filename, mode="r", encoding="utf-8") as json_file:
|
|
116
|
+
dc = CircuitFileDataClass(**json.load(json_file))
|
|
117
|
+
except json.JSONDecodeError as exc:
|
|
118
|
+
raise ValueError(f"Malformed JSON file: {filename} - {exc}") from exc
|
|
119
|
+
except FileNotFoundError as exc:
|
|
120
|
+
raise FileNotFoundError(f"File not found: {filename}") from exc
|
|
113
121
|
return dc
|
|
114
122
|
|
|
115
123
|
def save(self, filename):
|
digsim/synth/__init__.py
CHANGED
digsim/synth/__main__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2025
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""The main class module of the digsim.synth namespace"""
|
|
@@ -45,7 +45,7 @@ if __name__ == "__main__":
|
|
|
45
45
|
subparser = parser.add_subparsers(required=True)
|
|
46
46
|
synth_parser = subparser.add_parser("synth")
|
|
47
47
|
synth_parser.add_argument(
|
|
48
|
-
"--input-files", "-i", type=str, nargs="
|
|
48
|
+
"--input-files", "-i", type=str, nargs="+", required=True, help="The verilog input files"
|
|
49
49
|
)
|
|
50
50
|
synth_parser.add_argument(
|
|
51
51
|
"--output-file", "-o", type=str, required=True, help="The json output file"
|
|
@@ -59,7 +59,7 @@ if __name__ == "__main__":
|
|
|
59
59
|
synth_parser.set_defaults(func=_synth_modules)
|
|
60
60
|
list_parser = subparser.add_parser("list")
|
|
61
61
|
list_parser.add_argument(
|
|
62
|
-
"--input-files", "-i", type=str, nargs="
|
|
62
|
+
"--input-files", "-i", type=str, nargs="+", required=True, help="The verilog input files"
|
|
63
63
|
)
|
|
64
64
|
list_parser.set_defaults(func=_list_modules)
|
|
65
65
|
arguments = parser.parse_args()
|
digsim/synth/_synthesis.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2025
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""Helper module for yosys synthesis"""
|
|
@@ -116,7 +116,7 @@ class Synthesis:
|
|
|
116
116
|
script += "proc; flatten; "
|
|
117
117
|
script += "memory_dff; "
|
|
118
118
|
script += "proc; opt; techmap; opt; "
|
|
119
|
-
script += f"synth -top {self._verilog_top_module}; "
|
|
119
|
+
script += f"synth -noabc -top {self._verilog_top_module}; "
|
|
120
120
|
|
|
121
121
|
pexp = self._pexpect_spawn_yosys()
|
|
122
122
|
self._pexpect_wait_for_prompt(pexp)
|
|
@@ -137,7 +137,10 @@ class Synthesis:
|
|
|
137
137
|
def synth_to_dict(self, silent=False):
|
|
138
138
|
"""Execute yosys with generated synthesis script and return python dict"""
|
|
139
139
|
yosys_json = self.synth_to_json(silent)
|
|
140
|
-
|
|
140
|
+
try:
|
|
141
|
+
netlist_dict = json.loads(yosys_json)
|
|
142
|
+
except json.JSONDecodeError as exc:
|
|
143
|
+
raise SynthesisException(f"Malformed JSON output from Yosys: {exc}") from exc
|
|
141
144
|
return netlist_dict
|
|
142
145
|
|
|
143
146
|
def synth_to_json_file(self, filename, silent=False):
|
digsim/utils/__init__.py
CHANGED
digsim/utils/_yosys_netlist.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2025
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""
|
|
@@ -7,12 +7,15 @@ Module with classes to parse a yosys netlist
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
from typing import Any, Optional, Union
|
|
10
|
+
from typing import Any, Literal, Optional, Union
|
|
11
11
|
|
|
12
12
|
from pydantic import Field
|
|
13
13
|
from pydantic.dataclasses import dataclass
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
BIT_TYPE = list[Union[int, Literal["X"], Literal["0"], Literal["1"]]]
|
|
17
|
+
|
|
18
|
+
|
|
16
19
|
@dataclass
|
|
17
20
|
class NetPort:
|
|
18
21
|
parent: Union[YosysModule, YosysCell]
|
|
@@ -30,7 +33,7 @@ class Nets:
|
|
|
30
33
|
@dataclass
|
|
31
34
|
class YosysPort:
|
|
32
35
|
direction: str
|
|
33
|
-
bits:
|
|
36
|
+
bits: BIT_TYPE
|
|
34
37
|
|
|
35
38
|
@property
|
|
36
39
|
def is_output(self):
|
|
@@ -46,13 +49,16 @@ class YosysPort:
|
|
|
46
49
|
class YosysCell:
|
|
47
50
|
type: str
|
|
48
51
|
port_directions: dict[str, str] = Field(default_factory=dict)
|
|
49
|
-
connections: dict[str,
|
|
52
|
+
connections: dict[str, BIT_TYPE] = Field(default_factory=dict)
|
|
50
53
|
hide_name: int = 0
|
|
51
54
|
parameters: dict[str, Any] = Field(default_factory=dict)
|
|
52
55
|
attributes: dict[str, Any] = Field(default_factory=dict)
|
|
53
56
|
|
|
54
57
|
def get_nets(self, name, nets):
|
|
55
58
|
for port_name, net_list in self.connections.items():
|
|
59
|
+
if not net_list:
|
|
60
|
+
# Handle empty net_list, e.g., by skipping or raising an error
|
|
61
|
+
continue
|
|
56
62
|
net = net_list[0]
|
|
57
63
|
port = NetPort(parent=self, parent_name=name, name=port_name)
|
|
58
64
|
if self.port_directions[port_name] == "input":
|
{digsim_logic_simulator-0.12.0.dist-info → digsim_logic_simulator-0.14.0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digsim-logic-simulator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.0
|
|
4
4
|
Summary: Interactive Digital Logic Simulator
|
|
5
5
|
Author-email: Fredrik Andersson <freand@gmail.com>
|
|
6
6
|
Maintainer-email: Fredrik Andersson <freand@gmail.com>
|
|
@@ -8,21 +8,20 @@ Project-URL: homepage, https://github.com/freand76/digsim
|
|
|
8
8
|
Keywords: educational,simulation,digital
|
|
9
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
15
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
-
Requires-Python: >=3.
|
|
16
|
+
Requires-Python: >=3.10
|
|
18
17
|
Description-Content-Type: text/markdown
|
|
19
18
|
License-File: LICENSE.md
|
|
20
19
|
Requires-Dist: pyvcd==0.4.1
|
|
21
20
|
Requires-Dist: pyside6==6.9.1
|
|
22
21
|
Requires-Dist: pexpect==4.9.0
|
|
23
|
-
Requires-Dist: pydantic==2.
|
|
22
|
+
Requires-Dist: pydantic==2.12.3
|
|
24
23
|
Requires-Dist: qtawesome==1.4.0
|
|
25
|
-
Requires-Dist: yowasp-yosys==0.
|
|
24
|
+
Requires-Dist: yowasp-yosys==0.58.0.0.post1010
|
|
26
25
|
Dynamic: license-file
|
|
27
26
|
|
|
28
27
|
# DigSim - Interactive Digital Logic Simulator
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
digsim/__init__.py,sha256=cPP3o3Poil_rxQh3syOJd0MuqU4sPnudjaesG18GF8E,154
|
|
2
|
+
digsim/app/__main__.py,sha256=0Cw_kzox6oDRO2cOS4Q6_g6TlThpUTfJNnaAfaJXxsg,1516
|
|
3
|
+
digsim/app/gui/__init__.py,sha256=jLV8w5SIh4PadWA3UDnLk2strI3_xEIfQEt5Sb62YUc,170
|
|
4
|
+
digsim/app/gui/_circuit_area.py,sha256=zwQ2tVujriY2DdQI4Jy7anebh0Ul5od99HDDphZQTdo,16590
|
|
5
|
+
digsim/app/gui/_component_selection.py,sha256=LTVSA3xd85jqULn6GfrBnmfDeP_iYlj4_UjKUd_4FHQ,6590
|
|
6
|
+
digsim/app/gui/_main_window.py,sha256=4lTQLYNGg_PNJlGSJqaQKZ7RbpUq71x9O0FUKnP-rAo,5275
|
|
7
|
+
digsim/app/gui/_top_bar.py,sha256=JSP-aF5oFZ-1uHA5SNyRThpHLs9YVnTPA65h2EhxCN4,13067
|
|
8
|
+
digsim/app/gui/_utils.py,sha256=GMPIucfMQhXGwX91CGmeoRpxS8qwOfDLUI76fPJWk0I,665
|
|
9
|
+
digsim/app/gui/_warning_dialog.py,sha256=N9G2wyQTyiqMnTtbExMzHgdbCBA0epfhNWY4GVF6xH8,1496
|
|
10
|
+
digsim/app/gui_objects/__init__.py,sha256=VYR64j5VX8yavCXoPGtPMS4mJpJR6NSRxvXPuSdxFX0,248
|
|
11
|
+
digsim/app/gui_objects/_bus_bit_object.py,sha256=qKZg1SLds9LNq3DUTR7dtM_3gosrfhENopKd0gpqTMY,3059
|
|
12
|
+
digsim/app/gui_objects/_buzzer_object.py,sha256=f-Kgrf5r5iUZMHXy2kmzxDDA0ROMPAPNJbguMSrdEu4,3294
|
|
13
|
+
digsim/app/gui_objects/_component_context_menu.py,sha256=pPhvNYO5lR6J61_NKJt5HPBRiypSuMAIcbcWoZU4DIA,2824
|
|
14
|
+
digsim/app/gui_objects/_component_object.py,sha256=ntD34AEqaJovzDYMrlxOrdyjqprPU_urWUbznnBQNTM,13323
|
|
15
|
+
digsim/app/gui_objects/_component_port_item.py,sha256=_28fqR0MAvKiD51qK7P1K-DSgHzg3r1SGydr0Og2ZbU,2046
|
|
16
|
+
digsim/app/gui_objects/_dip_switch_object.py,sha256=8-YJdkcg0UXxbkxmyq4Ep4ZezZOkxCw6tfQ5Yq3mOlE,3636
|
|
17
|
+
digsim/app/gui_objects/_gui_note_object.py,sha256=qPB0OBq6jxKlqH8yoV2wchDFqrJdjB3AP993hDj1Kcs,2592
|
|
18
|
+
digsim/app/gui_objects/_gui_object_factory.py,sha256=T9TeQVh-DHbOwnn2BtwI0gxnubgp0vUmT36O0b1grLk,2466
|
|
19
|
+
digsim/app/gui_objects/_hexdigit_object.py,sha256=0psnY8dMVZwGmoQeETbhgwilJOyjF8eqx2zaVwdWqVY,1935
|
|
20
|
+
digsim/app/gui_objects/_image_objects.py,sha256=WsWesxfRbGO1cSbXD7nikw7E-gx8A-af458Q52xk0dU,7677
|
|
21
|
+
digsim/app/gui_objects/_label_object.py,sha256=DrmgWW5ACJksd2P3lUUog7CRBj7RWzCkTfvhb6LQCxM,3585
|
|
22
|
+
digsim/app/gui_objects/_logic_analyzer_object.py,sha256=WK-EsthfXzfDDnGA8-wgq_7RhuKwdyQ_KWdXitov-Zk,3078
|
|
23
|
+
digsim/app/gui_objects/_seven_segment_object.py,sha256=KpCOQNmSQ5EX_WRbTACawfNo5fCZ4aWyZTcU_5yy6r0,4370
|
|
24
|
+
digsim/app/gui_objects/_shortcut_objects.py,sha256=8gKAAlv0AlBowDp726EsDBxj1KSwSJne74_bqz0jh08,2747
|
|
25
|
+
digsim/app/gui_objects/_yosys_object.py,sha256=iq8Zmw4tV_sJuULcKEu7mvvK_m19m2ymypLqCawnCyI,958
|
|
26
|
+
digsim/app/gui_objects/images/AND.png,sha256=d53gEcxIlfqmW-Q4Za3n5i_NmSEcjJqlbh8XxoSdR3o,12062
|
|
27
|
+
digsim/app/gui_objects/images/Analyzer.png,sha256=1OrkKsL6ktxKI12KzNJT7rgEi2X-jAqp6vrVuVthErY,1591
|
|
28
|
+
digsim/app/gui_objects/images/BUF.png,sha256=fd8DqEM3aht4cjoWuqsbHlTiQaFa9ddibe3iel1WYLo,12819
|
|
29
|
+
digsim/app/gui_objects/images/Buzzer.png,sha256=sdAQehr03pEpQXrm2RTqUqDpUI15WU1ohFf4fB90uvI,5856
|
|
30
|
+
digsim/app/gui_objects/images/Clock.png,sha256=NAsu1IKb2tiZ_oFs3C7t7Wzc3xzq-1PBLVm7NcT9whQ,3117
|
|
31
|
+
digsim/app/gui_objects/images/DFF.png,sha256=OalrTM4XbMouEeB0xXg8nPy3gZzMxwnvgtF149XsTl0,9038
|
|
32
|
+
digsim/app/gui_objects/images/DIP_SWITCH.png,sha256=8t2gdexuHn9Z3lUi7B7hNM71IxRMulgAn8T5TlFPqPM,16899
|
|
33
|
+
digsim/app/gui_objects/images/FlipFlop.png,sha256=PLCMrH0CBXU6jgDTPpGsgEAqmgNN3c5hvU1sjZzOU40,4452
|
|
34
|
+
digsim/app/gui_objects/images/IC.png,sha256=7YoAkD_5CrTIdmArjD_HjZyT9odAYuCwufDDpVC3Jsw,5493
|
|
35
|
+
digsim/app/gui_objects/images/LED_OFF.png,sha256=bk-X-R-l8CvdD-xat0zI5pc9S1t6j0Ewx4G_vMt1sRE,7075
|
|
36
|
+
digsim/app/gui_objects/images/LED_ON.png,sha256=YSYDNx8zjFoqEy9kuognaL8eL0acuVHV7b4ArlK_ol4,9389
|
|
37
|
+
digsim/app/gui_objects/images/MUX.png,sha256=d8Q0qUJIRCdFQbxAg_sc4MJG3F6QRTbCT4ysgkCm6DE,1912
|
|
38
|
+
digsim/app/gui_objects/images/NAND.png,sha256=W-dZPNg2Qh0M-FkA8Gbblh42EvMKtBI37IenZKDIbLE,11718
|
|
39
|
+
digsim/app/gui_objects/images/NOR.png,sha256=eFaignMSIiUPJnc8VkIQ9Yg1iF6qVjrM9sA50EGqp9g,15091
|
|
40
|
+
digsim/app/gui_objects/images/NOT.png,sha256=V1QoUHpBbEX2Tish4DIe_wImAVj-M9DL5QrNIKNo-nQ,12593
|
|
41
|
+
digsim/app/gui_objects/images/ONE.png,sha256=ftnpl7_gMTLc08k08Ka_QfnLv5H1u5AhPitZNPe_42E,1212
|
|
42
|
+
digsim/app/gui_objects/images/OR.png,sha256=54lsnUphLRwY9ioOOqAsRW0KRVTNOHZOPBKosXUTAOc,14870
|
|
43
|
+
digsim/app/gui_objects/images/PB.png,sha256=bhnhD-Ood9hSBFr-aia2iCPT_Q7VYBaEq076sqU3DBY,8468
|
|
44
|
+
digsim/app/gui_objects/images/Switch_OFF.png,sha256=ta11PvVIajT2gugj_SPK3mLn9_WaluqAK3t4aks9a-8,4752
|
|
45
|
+
digsim/app/gui_objects/images/Switch_ON.png,sha256=fVo6Vi89-Fv32SsyWcRL9N7eDwDrTe1_hX6_602BR5A,4819
|
|
46
|
+
digsim/app/gui_objects/images/XNOR.png,sha256=yoDcf5vn_OtcUnQQ3qSTLRqVTNBF_fmaGlpvXpWw_HE,14610
|
|
47
|
+
digsim/app/gui_objects/images/XOR.png,sha256=yHfL2LnWVeepTunrgUF3Z5m3dVpQ1iuNL6EGKI1TAKs,16118
|
|
48
|
+
digsim/app/gui_objects/images/YOSYS.png,sha256=etTO9jadU0amxQG7ySRjD6fME4HjrEEqXttM4XWDzxU,3117
|
|
49
|
+
digsim/app/gui_objects/images/ZERO.png,sha256=hXnZgEVO3T_zN5CiFhu6cIXr19LAu6SdvX-sIOq06E4,3459
|
|
50
|
+
digsim/app/images/app_icon.png,sha256=OfPoYA4o4Af79DTqQxSNLca0FdXRHEYteBK-xCQFEAw,16041
|
|
51
|
+
digsim/app/model/__init__.py,sha256=v7NoGYYBXUiDPwL_lDalLP0tgkIq_F5UCFUm-hVBy4U,164
|
|
52
|
+
digsim/app/model/_model.py,sha256=BFQXDBZc-9xqtApFST2WTy3_AuBeuVkB1bLpFJ8a5nY,6520
|
|
53
|
+
digsim/app/model/_model_components.py,sha256=nWIQ5Bgt61UF7pzqnBSjLW35nat_pQUIMiH-bLDHlk0,6262
|
|
54
|
+
digsim/app/model/_model_new_wire.py,sha256=cLzzM813638suuBf2BRe6rrqkyVKwLMqWBwo3bI0PYk,1873
|
|
55
|
+
digsim/app/model/_model_objects.py,sha256=b_0oTBj2S_ZHZ0FBC9Imv7eHpkOgLmuMZ-4HWrvSadY,5136
|
|
56
|
+
digsim/app/model/_model_settings.py,sha256=o6C6x5q7hKC_HgjdCJpl9FLIAL6uBV4O5Qx4E879AWI,1022
|
|
57
|
+
digsim/app/model/_model_shortcuts.py,sha256=PVQ9KJffS5CzUfH-DYCgzucHlXFy3zZAytuxI2bn2kA,2092
|
|
58
|
+
digsim/app/settings/__init__.py,sha256=MRLxBhuNUMYo-PHWo-xcoYwH_l4sU_RIWI_ONIU-qBs,313
|
|
59
|
+
digsim/app/settings/_component_settings.py,sha256=z89KfVfS5oLg6Wd6DhsFygvG6RBqRgXpyLiKl9gqOW8,16288
|
|
60
|
+
digsim/app/settings/_gui_settings.py,sha256=_Nfq8qGis--7dEgeDGgaY5xxBRALKDzn7jKfDiaSK-Q,2764
|
|
61
|
+
digsim/app/settings/_shortcut_dialog.py,sha256=SkuPoF6SlujBH7-xKT6n6jB507Fc1qRPzugFMrUDNJo,1461
|
|
62
|
+
digsim/circuit/__init__.py,sha256=mBQZEeYYYxEnWOdKcFlM_7-alC4nkEMbf55iqAVeGc0,221
|
|
63
|
+
digsim/circuit/_circuit.py,sha256=w9ha-5ymrGic5ZPkJRY_oL5ESNKwp-svjyNyLGeyJm8,11467
|
|
64
|
+
digsim/circuit/_waves_writer.py,sha256=ZedBa2TbWuq-zDc1MQyANmQOMDGGzNMSh4nKPuqXCkA,2092
|
|
65
|
+
digsim/circuit/components/__init__.py,sha256=5DXrkwFJ3C4xUsvjV7ahiRnwBZLNaadY88i4qOgcaqQ,1272
|
|
66
|
+
digsim/circuit/components/_bus_bits.py,sha256=Ds8dL_lMG2phX2rphe9jenSjDk4asDYddl5g9-IIcpg,1921
|
|
67
|
+
digsim/circuit/components/_button.py,sha256=5alsssihwR33iTv6HuN06fgVRftqwl5tRX05rqdSWY8,913
|
|
68
|
+
digsim/circuit/components/_buzzer.py,sha256=Vo2nPXmdrdAX1r4aXWWAuA6OyejPTRb7nyMCVQAfLFw,1130
|
|
69
|
+
digsim/circuit/components/_clock.py,sha256=21i0ViVn6GTGQUepUMTOSbLmcWAksGKmU4y7ZBmU3P8,1492
|
|
70
|
+
digsim/circuit/components/_dip_switch.py,sha256=biDG6SvepN5xyezC5BxJsq94yoMy2Xn92gBxPU7HIag,1812
|
|
71
|
+
digsim/circuit/components/_flip_flops.py,sha256=T6sHhV-hVCCKnFDOnL9A-t8vcSo1opQszv9EIsqZw2I,2947
|
|
72
|
+
digsim/circuit/components/_gates.py,sha256=K_aFT4GTo4JF_zoaNYiCRZfZEx4vEibMHZSCDImfPHQ,7167
|
|
73
|
+
digsim/circuit/components/_hexdigit.py,sha256=LB_RhWnaNqcaMKon66nlAVL_jkEqz_pyQ2FlW6Chapw,2264
|
|
74
|
+
digsim/circuit/components/_ic.py,sha256=8iUbuyQqM5glEcpDCJD2OdwSxr1TG5AtKOXU4I3qlWI,922
|
|
75
|
+
digsim/circuit/components/_label_wire.py,sha256=KWFtNy1Tp7PzMsDIfJHbLxpekQeuRW5h53haz6kzevE,5169
|
|
76
|
+
digsim/circuit/components/_led.py,sha256=7Ctvp7YI6U38W7X9XCbfbg0s5LI5Hz7UoeKtSxzTQrw,457
|
|
77
|
+
digsim/circuit/components/_logic_analyzer.py,sha256=A0UvmEwDpwc8vqIk44rI5l1_fsySDGxO4GsStGOByG0,1814
|
|
78
|
+
digsim/circuit/components/_mem64kbyte.py,sha256=6OdrCZW5L-qY7hvENxVVCHUnmyUTAfIacFOwv9v-tEw,1487
|
|
79
|
+
digsim/circuit/components/_memstdout.py,sha256=vqUlDx9E4azy4gpjcgTH3Ns2poiqcflNBIYHMg97LWs,1260
|
|
80
|
+
digsim/circuit/components/_note.py,sha256=apvXDTqegAtQ3XbWEEm3hEhFAakmPPrbveupqfwtrBo,609
|
|
81
|
+
digsim/circuit/components/_on_off_switch.py,sha256=GZAyUUCUpdHpXigqJnoDDZcq3HTKTOFdHO_IyM9eECc,1205
|
|
82
|
+
digsim/circuit/components/_seven_segment.py,sha256=WZnGw27ElQo__eV-M6bn-UYY17lTRgwTNWwReMJE8dY,802
|
|
83
|
+
digsim/circuit/components/_static_level.py,sha256=Y5tVEjwX2LVpc31iWop2qQDJPZR5NdvLq1D3o2Yo6p0,682
|
|
84
|
+
digsim/circuit/components/_static_value.py,sha256=48Jkj5qsDLOfvtYYNnKxoU9rVlIa9BzCJ89At9Dvyqg,1241
|
|
85
|
+
digsim/circuit/components/_yosys_atoms.py,sha256=NeH8XjjpoACHBfQRqR5RJxWorZhSjGk0t73cJOviSZw,37599
|
|
86
|
+
digsim/circuit/components/_yosys_component.py,sha256=EDcvFMNGVj-hxKUUNeWWQ74sFyA3vCxbd0MKX942S9w,8797
|
|
87
|
+
digsim/circuit/components/atoms/__init__.py,sha256=tQuxYg6mCz72GCJ1qognO0J3upTKmZR-VhH1IdKnbSg,514
|
|
88
|
+
digsim/circuit/components/atoms/_component.py,sha256=4_pbo25DbVoHdoDVok67NqltanTZwcj-8NH-Q4mKdOw,9255
|
|
89
|
+
digsim/circuit/components/atoms/_digsim_exception.py,sha256=vSBuRWVl5HXQBEqwKjnPm55LWGUdYar5NQCJAVyQ1xg,178
|
|
90
|
+
digsim/circuit/components/atoms/_port.py,sha256=6zqdzflqUYAJgoC-gtFb9eBYHgCX9mhUJD2-KqqDPPA,13009
|
|
91
|
+
digsim/circuit/components/ic/74162.json,sha256=RAeSva6TVuwfKHsvU9HC-ZVfRVrCkIsQUz_jcANT_fE,26693
|
|
92
|
+
digsim/circuit/components/ic/7448.json,sha256=hKMXhPqW-JBTF6rdz9u5HC_hY9cBRpJtMkLP7uOQXIo,21185
|
|
93
|
+
digsim/storage_model/__init__.py,sha256=lubmO9_BCUtEahyW1yE7f3aGHngEevGIwf_0LeOB7Y8,289
|
|
94
|
+
digsim/storage_model/_app.py,sha256=JoI9C2w_90e6IyEaQENDxQtf2ag7obhMhLD-Jz_kI1Q,1617
|
|
95
|
+
digsim/storage_model/_circuit.py,sha256=VhQ96jZMbVjCE2XBQ8D0ABA8sG0SiI5oyc_GZZYfNfw,3978
|
|
96
|
+
digsim/synth/__init__.py,sha256=Y-uEO51auZrxHJ7mj61a0ou4c75XNVyDpYDrLHfee9w,185
|
|
97
|
+
digsim/synth/__main__.py,sha256=M8lMBUO6oHENospJCj43Ed40w0bX0_E6yL-_O8g9LWg,2178
|
|
98
|
+
digsim/synth/_synthesis.py,sha256=g2zw0M3E6xiYLwY2WOKi9-uJ5YtNeVwCpFviuXfhUHk,5197
|
|
99
|
+
digsim/utils/__init__.py,sha256=sUWzEcR3aTo8uDqi9oMDs04XLa-uUXFSgLuhkbSvaNs,196
|
|
100
|
+
digsim/utils/_yosys_netlist.py,sha256=uNrTINGm8J_66Cgvgk1ItKyk7u65YfUl7av6ASBWVl0,4036
|
|
101
|
+
digsim_logic_simulator-0.14.0.dist-info/licenses/LICENSE.md,sha256=FrvohZfyfpH4xrvKdXiQ5hD7dUB7w4DcsRA3p-pOmLw,1693
|
|
102
|
+
digsim_logic_simulator-0.14.0.dist-info/METADATA,sha256=Rit9T71PcNWVN8yoxHOloZg4agr8P0ByXR7R6HyXP1E,4510
|
|
103
|
+
digsim_logic_simulator-0.14.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
104
|
+
digsim_logic_simulator-0.14.0.dist-info/top_level.txt,sha256=qpCMzQKADZHVqZIoQgFrv3qJ3u7PPU73gTCXQglqLa8,7
|
|
105
|
+
digsim_logic_simulator-0.14.0.dist-info/RECORD,,
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
digsim/__init__.py,sha256=UB-i1HtNR6rIX4_SClZp-lM4njGa7_1sbMvd14NuyAs,149
|
|
2
|
-
digsim/app/__main__.py,sha256=iECz0kvEQ0R4fGzH6KAOxyDfoyvwrRLo7JmT0jMx39s,1368
|
|
3
|
-
digsim/app/gui/__init__.py,sha256=-HnN8a-AcDcovbCHf1a_R-sQtW2_tQXnPJ3izyKLOjw,165
|
|
4
|
-
digsim/app/gui/_circuit_area.py,sha256=rbqP957eVAuYBvtg5anybOrvnGc6TSe9dB_0rRsHSDI,16366
|
|
5
|
-
digsim/app/gui/_component_selection.py,sha256=C-TeBruf8sGdEnGATtLm6jTesIqf-0AnKRBRLrtL_18,6388
|
|
6
|
-
digsim/app/gui/_main_window.py,sha256=X0AIh3m1ySaldgYr3MHddRSqVkNdWl_qNJOIdnv2mNA,5275
|
|
7
|
-
digsim/app/gui/_top_bar.py,sha256=HWGiWTKjYz3yRJ4K1tbMyVxhTC-Y6LEiREr6nHMAhKE,13067
|
|
8
|
-
digsim/app/gui/_utils.py,sha256=SSbe4B-trgZpaerPZilAaZYeqMOlFZMuufTth8KyOAg,660
|
|
9
|
-
digsim/app/gui/_warning_dialog.py,sha256=N9G2wyQTyiqMnTtbExMzHgdbCBA0epfhNWY4GVF6xH8,1496
|
|
10
|
-
digsim/app/gui_objects/__init__.py,sha256=DV7hnqz4Xcwk_-BiKrPxB31c7k-R4Oemmo_KOUjoQrQ,264
|
|
11
|
-
digsim/app/gui_objects/_bus_bit_object.py,sha256=Q8oW-bAGLRAvR2-8PxyHL4M68FLKFgNpDiL4E7BPUOQ,3059
|
|
12
|
-
digsim/app/gui_objects/_buzzer_object.py,sha256=wD0nJ-0f6lj9jREPM0rH2HyncpIXJrr9oHgq33oHyO8,3252
|
|
13
|
-
digsim/app/gui_objects/_component_context_menu.py,sha256=57M23M8Xb4t8eN8l9GQQ4AUBYZlEBjE0_a4d71yCDos,2821
|
|
14
|
-
digsim/app/gui_objects/_component_object.py,sha256=zktprBWHR81LS2UPrQTyebzXIDQV_xIFavGQe0nCtDg,13144
|
|
15
|
-
digsim/app/gui_objects/_component_port_item.py,sha256=Rxl952_3BCqM2H7TJDfbSTlalfFicDStrjqMUKEtdns,2089
|
|
16
|
-
digsim/app/gui_objects/_dip_switch_object.py,sha256=6SmqoyF3MuUphLJA4tlyff4JXJBxJLWmt3ZEferFtf4,3576
|
|
17
|
-
digsim/app/gui_objects/_gui_note_object.py,sha256=sMakGjdR0truGBzaR2GaFZZoDg99v76Bs5DD6ea3cjA,2604
|
|
18
|
-
digsim/app/gui_objects/_gui_object_factory.py,sha256=wfe0M4ZNSd5mK_0fi6ZhzHddFxkm_t4tku3OZir2VzU,2465
|
|
19
|
-
digsim/app/gui_objects/_hexdigit_object.py,sha256=cCxxpcSRLXRFNLIfrY_AUBGOSVIjRjO3HAuOv7wXGkI,1930
|
|
20
|
-
digsim/app/gui_objects/_image_objects.py,sha256=hOFgkpp0Ar0btncVXp7Jors7hXQQENc1FqzJGS1m_G0,7613
|
|
21
|
-
digsim/app/gui_objects/_label_object.py,sha256=6CnISeYEmmef28T6yBYJ1z-a_3nTtyl4p-EU-pEzVK0,3570
|
|
22
|
-
digsim/app/gui_objects/_logic_analyzer_object.py,sha256=B3WpFrTu9LDF0S_ol0VVS4vOIDqw_e08wmEX7fBjD98,2671
|
|
23
|
-
digsim/app/gui_objects/_seven_segment_object.py,sha256=EaNRxmM_IA-JkLHVVHXwSCd8jV9JAXTmdXMuXOidio4,4227
|
|
24
|
-
digsim/app/gui_objects/_shortcut_objects.py,sha256=XaTbjT-udJZ--O1uhBIrw8EHIHKbly6PGH-7tTTnPVQ,2724
|
|
25
|
-
digsim/app/gui_objects/_yosys_object.py,sha256=1LQ6nR_67lfWWNE56bdPJYkpEXhEi_9Z5UbiY0SGJIE,953
|
|
26
|
-
digsim/app/gui_objects/images/AND.png,sha256=d53gEcxIlfqmW-Q4Za3n5i_NmSEcjJqlbh8XxoSdR3o,12062
|
|
27
|
-
digsim/app/gui_objects/images/Analyzer.png,sha256=1OrkKsL6ktxKI12KzNJT7rgEi2X-jAqp6vrVuVthErY,1591
|
|
28
|
-
digsim/app/gui_objects/images/BUF.png,sha256=fd8DqEM3aht4cjoWuqsbHlTiQaFa9ddibe3iel1WYLo,12819
|
|
29
|
-
digsim/app/gui_objects/images/Buzzer.png,sha256=sdAQehr03pEpQXrm2RTqUqDpUI15WU1ohFf4fB90uvI,5856
|
|
30
|
-
digsim/app/gui_objects/images/Clock.png,sha256=NAsu1IKb2tiZ_oFs3C7t7Wzc3xzq-1PBLVm7NcT9whQ,3117
|
|
31
|
-
digsim/app/gui_objects/images/DFF.png,sha256=OalrTM4XbMouEeB0xXg8nPy3gZzMxwnvgtF149XsTl0,9038
|
|
32
|
-
digsim/app/gui_objects/images/DIP_SWITCH.png,sha256=8t2gdexuHn9Z3lUi7B7hNM71IxRMulgAn8T5TlFPqPM,16899
|
|
33
|
-
digsim/app/gui_objects/images/FlipFlop.png,sha256=PLCMrH0CBXU6jgDTPpGsgEAqmgNN3c5hvU1sjZzOU40,4452
|
|
34
|
-
digsim/app/gui_objects/images/IC.png,sha256=7YoAkD_5CrTIdmArjD_HjZyT9odAYuCwufDDpVC3Jsw,5493
|
|
35
|
-
digsim/app/gui_objects/images/LED_OFF.png,sha256=bk-X-R-l8CvdD-xat0zI5pc9S1t6j0Ewx4G_vMt1sRE,7075
|
|
36
|
-
digsim/app/gui_objects/images/LED_ON.png,sha256=YSYDNx8zjFoqEy9kuognaL8eL0acuVHV7b4ArlK_ol4,9389
|
|
37
|
-
digsim/app/gui_objects/images/MUX.png,sha256=d8Q0qUJIRCdFQbxAg_sc4MJG3F6QRTbCT4ysgkCm6DE,1912
|
|
38
|
-
digsim/app/gui_objects/images/NAND.png,sha256=W-dZPNg2Qh0M-FkA8Gbblh42EvMKtBI37IenZKDIbLE,11718
|
|
39
|
-
digsim/app/gui_objects/images/NOR.png,sha256=eFaignMSIiUPJnc8VkIQ9Yg1iF6qVjrM9sA50EGqp9g,15091
|
|
40
|
-
digsim/app/gui_objects/images/NOT.png,sha256=V1QoUHpBbEX2Tish4DIe_wImAVj-M9DL5QrNIKNo-nQ,12593
|
|
41
|
-
digsim/app/gui_objects/images/ONE.png,sha256=ftnpl7_gMTLc08k08Ka_QfnLv5H1u5AhPitZNPe_42E,1212
|
|
42
|
-
digsim/app/gui_objects/images/OR.png,sha256=54lsnUphLRwY9ioOOqAsRW0KRVTNOHZOPBKosXUTAOc,14870
|
|
43
|
-
digsim/app/gui_objects/images/PB.png,sha256=bhnhD-Ood9hSBFr-aia2iCPT_Q7VYBaEq076sqU3DBY,8468
|
|
44
|
-
digsim/app/gui_objects/images/Switch_OFF.png,sha256=ta11PvVIajT2gugj_SPK3mLn9_WaluqAK3t4aks9a-8,4752
|
|
45
|
-
digsim/app/gui_objects/images/Switch_ON.png,sha256=fVo6Vi89-Fv32SsyWcRL9N7eDwDrTe1_hX6_602BR5A,4819
|
|
46
|
-
digsim/app/gui_objects/images/XNOR.png,sha256=yoDcf5vn_OtcUnQQ3qSTLRqVTNBF_fmaGlpvXpWw_HE,14610
|
|
47
|
-
digsim/app/gui_objects/images/XOR.png,sha256=yHfL2LnWVeepTunrgUF3Z5m3dVpQ1iuNL6EGKI1TAKs,16118
|
|
48
|
-
digsim/app/gui_objects/images/YOSYS.png,sha256=etTO9jadU0amxQG7ySRjD6fME4HjrEEqXttM4XWDzxU,3117
|
|
49
|
-
digsim/app/gui_objects/images/ZERO.png,sha256=hXnZgEVO3T_zN5CiFhu6cIXr19LAu6SdvX-sIOq06E4,3459
|
|
50
|
-
digsim/app/images/app_icon.png,sha256=OfPoYA4o4Af79DTqQxSNLca0FdXRHEYteBK-xCQFEAw,16041
|
|
51
|
-
digsim/app/model/__init__.py,sha256=atbReJBH_qTVZqsKLvF3p9eZWxkglFi6cvt7fEGo0bo,159
|
|
52
|
-
digsim/app/model/_model.py,sha256=JE9-iJMxzgcY0r-4s708gDtA-aadw_hFSuERjKNZlfE,6421
|
|
53
|
-
digsim/app/model/_model_components.py,sha256=Q2iztl7MlWv_7vaa7me-dp-gOx6-7Tg3LZmTUQNBPrw,6371
|
|
54
|
-
digsim/app/model/_model_new_wire.py,sha256=5HnF5-gtKtB1Tp6ZIF7QuNo5zEHmsUpnBEmj6ZllLiA,1810
|
|
55
|
-
digsim/app/model/_model_objects.py,sha256=lqOjNIygIHT6Dq_PPa-D0B5elC49dB0KshF0ATzJZ0s,5217
|
|
56
|
-
digsim/app/model/_model_settings.py,sha256=BOwlwGT4h2R9tx7R5E1L4W0vli4GWh4RM77QBoqeKdw,1015
|
|
57
|
-
digsim/app/model/_model_shortcuts.py,sha256=xrUgs2Y18mSVun3sxzVscYTZ6n5DJTTZOnFhs4Jt_0M,2439
|
|
58
|
-
digsim/app/settings/__init__.py,sha256=0tkoBSYeJFFiUI8c_FqvqqyM4-_SU9Xq7mXCwiew5Oo,308
|
|
59
|
-
digsim/app/settings/_component_settings.py,sha256=88D9OuEcFIlaqZozomWHSYrl7opz4jZW2e8xGuUyTpg,16287
|
|
60
|
-
digsim/app/settings/_gui_settings.py,sha256=sDi2POUsHvS7_4SO5qsTu_nN48HsTN4UfGPzdmECs9w,2764
|
|
61
|
-
digsim/app/settings/_shortcut_dialog.py,sha256=JTm7aawG2ar_DvWhBT8ZzgWsq9gLEJ6pJ_-eHUMPh-c,1524
|
|
62
|
-
digsim/circuit/__init__.py,sha256=yGyhcdnlcpht_hyR2az_A4c7-bO_NkT2lBIDFvtI010,216
|
|
63
|
-
digsim/circuit/_circuit.py,sha256=r_QFKhB13p9hLbrKUN0RtR1o2sqc-UNemdiz-La8cGY,10956
|
|
64
|
-
digsim/circuit/_waves_writer.py,sha256=ZedBa2TbWuq-zDc1MQyANmQOMDGGzNMSh4nKPuqXCkA,2092
|
|
65
|
-
digsim/circuit/components/__init__.py,sha256=j-xNFbXJ15rSJLhDg7E-SlKvxn6Uy7Zl42YDUkZBFZo,1267
|
|
66
|
-
digsim/circuit/components/_bus_bits.py,sha256=mHWkwAHtkEq88pOEQ0b5ndFZvum794j7kUkTAWHUCdc,1916
|
|
67
|
-
digsim/circuit/components/_button.py,sha256=Q8drjQ2kNFCfgK-7UzlmNHP47bOpGa9_t16pDtjhL4s,1028
|
|
68
|
-
digsim/circuit/components/_buzzer.py,sha256=vArzQVe0yFjtqMxIx2BIvjRA-m-aipPUHVlgwbwpCXM,1125
|
|
69
|
-
digsim/circuit/components/_clock.py,sha256=Kks82_Ni_XJYvrgLFvPsAagbUnmH9QutGuwm1puM0B0,1487
|
|
70
|
-
digsim/circuit/components/_dip_switch.py,sha256=6f5EXVr3P-OXRB_FY5UOMTkBcJtUR2HHeeD38V7Wfmk,1807
|
|
71
|
-
digsim/circuit/components/_flip_flops.py,sha256=eOB1hpSfK7vlpcOQzHqILpAzfwsqQPobC-_ebDxGVLw,2942
|
|
72
|
-
digsim/circuit/components/_gates.py,sha256=K_aFT4GTo4JF_zoaNYiCRZfZEx4vEibMHZSCDImfPHQ,7167
|
|
73
|
-
digsim/circuit/components/_hexdigit.py,sha256=MQlmEnQkQnuH6rGc-FB68mOctjVY8QyAR5FCOHYNCns,2259
|
|
74
|
-
digsim/circuit/components/_ic.py,sha256=Rs8Z_PuhKo3peK9pwdbvlGNK8_w6evSdXYNdrjWB3-8,917
|
|
75
|
-
digsim/circuit/components/_label_wire.py,sha256=wAAvq-o1ygsX5br6O9KvsPtQyU5C2FdMRUJP_WWlXSw,5164
|
|
76
|
-
digsim/circuit/components/_led.py,sha256=hR_iclDWZua8duNy9BQcTBuhKkIh3g5ahpfkHQ1LYSA,452
|
|
77
|
-
digsim/circuit/components/_logic_analyzer.py,sha256=K6sUfN23lUfQ5GHQFrxvR8fgfWKLy29Cj0K7dZzW_cE,1809
|
|
78
|
-
digsim/circuit/components/_mem64kbyte.py,sha256=tqex3qFxa7jk841f87inNB4UIY9E5z1SleqAL82eCUY,1482
|
|
79
|
-
digsim/circuit/components/_memstdout.py,sha256=sCYkKH8XuWhB7-14VQOy7TkTgq-g0UDbhiI1HmM4HW8,1255
|
|
80
|
-
digsim/circuit/components/_note.py,sha256=ZpFPxKzJKbyOmd5YzLxfFllT49xqG3q9fGP1VBk3fW0,604
|
|
81
|
-
digsim/circuit/components/_on_off_switch.py,sha256=b2h_EClKRbOQTBpQYrOLRXzdps8da64lO9Nd7fp1RSY,1200
|
|
82
|
-
digsim/circuit/components/_seven_segment.py,sha256=UxxjGLuIirVB2Px09XlL8_zjgE7F89cY6z2SMS5FcPU,797
|
|
83
|
-
digsim/circuit/components/_static_level.py,sha256=2Assm1cmAfryVZ3KTQ1uGY8Q6eRrBipdwLITewXfIHg,677
|
|
84
|
-
digsim/circuit/components/_static_value.py,sha256=vfRPS_F9mKOXpHJxzs0JQKXqcj0o6d-090zbyZaECA4,1236
|
|
85
|
-
digsim/circuit/components/_yosys_atoms.py,sha256=NeH8XjjpoACHBfQRqR5RJxWorZhSjGk0t73cJOviSZw,37599
|
|
86
|
-
digsim/circuit/components/_yosys_component.py,sha256=LkYneNSvzQMn61RzlHk3aSkl9tF6JjibknfwmLeWCFk,8792
|
|
87
|
-
digsim/circuit/components/atoms/__init__.py,sha256=NU45pfJcSrdwZA-SVQeORlaznl_0BciY4VN3vVSnD8o,498
|
|
88
|
-
digsim/circuit/components/atoms/_component.py,sha256=DpMS1yOWWgk11Y9ae0PfuOJdlJsrzgrzuYrgsN62dbQ,8815
|
|
89
|
-
digsim/circuit/components/atoms/_digsim_exception.py,sha256=Y5mBve15zZbduqNNAyf7WzqDk4NtvUL_g2vYy5kBQ3U,173
|
|
90
|
-
digsim/circuit/components/atoms/_port.py,sha256=yT1TqmKPVlw8G_0r_6dErcqIkXCqB8z0pE5oL6Bnxzo,12596
|
|
91
|
-
digsim/circuit/components/ic/74162.json,sha256=RAeSva6TVuwfKHsvU9HC-ZVfRVrCkIsQUz_jcANT_fE,26693
|
|
92
|
-
digsim/circuit/components/ic/7448.json,sha256=hKMXhPqW-JBTF6rdz9u5HC_hY9cBRpJtMkLP7uOQXIo,21185
|
|
93
|
-
digsim/storage_model/__init__.py,sha256=lubmO9_BCUtEahyW1yE7f3aGHngEevGIwf_0LeOB7Y8,289
|
|
94
|
-
digsim/storage_model/_app.py,sha256=Aer9s_mUBKSydsyeWYvVPHX2XF5ZGPuXq8z4PoXu8lA,1353
|
|
95
|
-
digsim/storage_model/_circuit.py,sha256=NnaHLwqb9gAhqAxeZ1RkHHvoS_YJwixlz0xs-zmIrQU,3596
|
|
96
|
-
digsim/synth/__init__.py,sha256=jhBHLOHf-vNa94Zg5q5dGcf0fgQTModfjUKtmUSffiw,180
|
|
97
|
-
digsim/synth/__main__.py,sha256=wZWAzWsisoxA7hfqkKtu3H066uWyFajgPro2MEGlKbs,2173
|
|
98
|
-
digsim/synth/_synthesis.py,sha256=n49Yc2Wzb49mZQt_WSpoJy2eUfSBnzv1hTxcOP60L74,5034
|
|
99
|
-
digsim/utils/__init__.py,sha256=MT9TNcpa7fNAqtBsmCcceKMrUSU_v9xeJ6Nox_TL7Lo,191
|
|
100
|
-
digsim/utils/_yosys_netlist.py,sha256=Lcuo9seKcDu4O-NdBpJUpExvTT7Rx1STCBtF0xT8Nkc,3843
|
|
101
|
-
digsim_logic_simulator-0.12.0.dist-info/licenses/LICENSE.md,sha256=FrvohZfyfpH4xrvKdXiQ5hD7dUB7w4DcsRA3p-pOmLw,1693
|
|
102
|
-
digsim_logic_simulator-0.12.0.dist-info/METADATA,sha256=JHxzVc7fjDmDB6q2d1oHCjiJLhTN3yih1G8c5ZxIw_I,4558
|
|
103
|
-
digsim_logic_simulator-0.12.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
104
|
-
digsim_logic_simulator-0.12.0.dist-info/top_level.txt,sha256=qpCMzQKADZHVqZIoQgFrv3qJ3u7PPU73gTCXQglqLa8,7
|
|
105
|
-
digsim_logic_simulator-0.12.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{digsim_logic_simulator-0.12.0.dist-info → digsim_logic_simulator-0.14.0.dist-info}/top_level.txt
RENAMED
|
File without changes
|