digsim-logic-simulator 0.0.1__py3-none-any.whl → 0.1.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/app/__main__.py +3 -2
- digsim/app/gui/_top_bar.py +2 -2
- digsim/app/gui_objects/_image_objects.py +3 -5
- digsim/app/gui_objects/_yosys_object.py +6 -1
- digsim/app/model/_model.py +3 -3
- digsim/circuit/components/_button.py +6 -20
- digsim/circuit/components/_gates.py +8 -8
- digsim/circuit/components/_hexdigit.py +1 -1
- digsim/circuit/components/_ic.py +2 -2
- digsim/circuit/components/_on_off_switch.py +12 -21
- digsim/circuit/components/_yosys_atoms.py +1 -1
- digsim/circuit/components/_yosys_component.py +4 -4
- digsim/synth/__init__.py +1 -1
- digsim/synth/_synthesis.py +23 -7
- {digsim_logic_simulator-0.0.1.dist-info → digsim_logic_simulator-0.1.0.dist-info}/METADATA +15 -4
- {digsim_logic_simulator-0.0.1.dist-info → digsim_logic_simulator-0.1.0.dist-info}/RECORD +19 -19
- {digsim_logic_simulator-0.0.1.dist-info → digsim_logic_simulator-0.1.0.dist-info}/LICENSE.md +0 -0
- {digsim_logic_simulator-0.0.1.dist-info → digsim_logic_simulator-0.1.0.dist-info}/WHEEL +0 -0
- {digsim_logic_simulator-0.0.1.dist-info → digsim_logic_simulator-0.1.0.dist-info}/top_level.txt +0 -0
digsim/app/__main__.py
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
""" The main class module of the digsim.app namespace """
|
|
5
5
|
|
|
6
6
|
import argparse
|
|
7
|
-
import os
|
|
8
7
|
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
9
|
|
|
10
10
|
from PySide6.QtCore import Qt
|
|
11
11
|
from PySide6.QtGui import QIcon, QPainter, QPixmap
|
|
@@ -17,7 +17,8 @@ from digsim.app.model import AppModel
|
|
|
17
17
|
|
|
18
18
|
if __name__ == "__main__":
|
|
19
19
|
app = QApplication(sys.argv)
|
|
20
|
-
|
|
20
|
+
main_path = Path(__file__).parent
|
|
21
|
+
image_path = main_path / "images/app_icon.png"
|
|
21
22
|
image_pixmap = QPixmap(image_path)
|
|
22
23
|
size = max(image_pixmap.size().height(), image_pixmap.size().width())
|
|
23
24
|
icon_pixmap = QPixmap(size, size)
|
digsim/app/gui/_top_bar.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# pylint: disable=too-few-public-methods
|
|
7
7
|
# pylint: disable=too-many-instance-attributes
|
|
8
8
|
|
|
9
|
-
import
|
|
9
|
+
from pathlib import Path
|
|
10
10
|
|
|
11
11
|
import qtawesome as qta
|
|
12
12
|
|
|
@@ -182,7 +182,7 @@ class VcdControlWidget(QFrame):
|
|
|
182
182
|
|
|
183
183
|
def _start_vcd(self, filename):
|
|
184
184
|
self._vcd_filename = filename
|
|
185
|
-
display_filename =
|
|
185
|
+
display_filename = Path(self._vcd_filename).name
|
|
186
186
|
self._filename_widget.set_filename(display_filename)
|
|
187
187
|
self._enable_buttons(True)
|
|
188
188
|
# Close old vcd (if any)
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
# pylint: disable=too-many-arguments
|
|
7
7
|
|
|
8
|
-
import
|
|
8
|
+
from pathlib import Path
|
|
9
9
|
|
|
10
10
|
from PySide6.QtCore import QPoint, Qt
|
|
11
11
|
from PySide6.QtGui import QFont, QPen, QPixmap
|
|
@@ -45,11 +45,9 @@ class ImageObject(ComponentObject):
|
|
|
45
45
|
def _get_pixmaps(cls):
|
|
46
46
|
"""Load the pixmap at first use"""
|
|
47
47
|
if cls.ACTIVE_IMAGE_FILENAME is not None and cls._pixmap_active is None:
|
|
48
|
-
cls._pixmap_active = QPixmap(
|
|
49
|
-
f"{os.path.dirname(__file__)}/{cls.ACTIVE_IMAGE_FILENAME}"
|
|
50
|
-
)
|
|
48
|
+
cls._pixmap_active = QPixmap(Path(__file__).parent / cls.ACTIVE_IMAGE_FILENAME)
|
|
51
49
|
if cls.IMAGE_FILENAME is not None and cls._pixmap is None:
|
|
52
|
-
cls._pixmap = QPixmap(
|
|
50
|
+
cls._pixmap = QPixmap(Path(__file__).parent / cls.IMAGE_FILENAME)
|
|
53
51
|
|
|
54
52
|
def paint_component(self, painter):
|
|
55
53
|
self.paint_component_base(painter)
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
from PySide6.QtGui import QAction
|
|
7
7
|
|
|
8
|
+
from digsim.circuit.components.atoms import DigsimException
|
|
9
|
+
|
|
8
10
|
from ._image_objects import ImageObject
|
|
9
11
|
|
|
10
12
|
|
|
@@ -23,5 +25,8 @@ class YosysObject(ImageObject):
|
|
|
23
25
|
reloadAction.triggered.connect(self._reload)
|
|
24
26
|
|
|
25
27
|
def _reload(self):
|
|
26
|
-
|
|
28
|
+
try:
|
|
29
|
+
self.component.reload_file()
|
|
30
|
+
except DigsimException as exc:
|
|
31
|
+
self._app_model.sig_warning_log.emit("Reload Yosys Warning", str(exc))
|
|
27
32
|
self._app_model.model_reset()
|
digsim/app/model/_model.py
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# pylint: disable=too-many-instance-attributes
|
|
7
7
|
|
|
8
8
|
import json
|
|
9
|
-
import os
|
|
10
9
|
import queue
|
|
11
10
|
import time
|
|
11
|
+
from pathlib import Path
|
|
12
12
|
|
|
13
13
|
from PySide6.QtCore import QThread, Signal
|
|
14
14
|
|
|
@@ -156,7 +156,7 @@ class AppModel(QThread):
|
|
|
156
156
|
|
|
157
157
|
def save_circuit(self, path):
|
|
158
158
|
"""Save the circuit with GUI information"""
|
|
159
|
-
circuit_folder =
|
|
159
|
+
circuit_folder = str(Path(path).parent)
|
|
160
160
|
circuit_dict = self.objects.circuit_to_dict(circuit_folder)
|
|
161
161
|
shortcuts_dict = self.shortcuts.to_dict()
|
|
162
162
|
circuit_dict.update(shortcuts_dict)
|
|
@@ -173,7 +173,7 @@ class AppModel(QThread):
|
|
|
173
173
|
self._model_clear()
|
|
174
174
|
with open(path, mode="r", encoding="utf-8") as json_file:
|
|
175
175
|
circuit_dict = json.load(json_file)
|
|
176
|
-
circuit_folder =
|
|
176
|
+
circuit_folder = str(Path(path).parent)
|
|
177
177
|
if len(circuit_folder) == 0:
|
|
178
178
|
circuit_folder = "."
|
|
179
179
|
exception_str_list = self.objects.dict_to_circuit(circuit_dict, circuit_folder)
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
""" A PushButton component """
|
|
5
5
|
|
|
6
|
+
import logging
|
|
7
|
+
|
|
6
8
|
from .atoms import CallbackComponent, PortOutImmediate
|
|
7
9
|
|
|
8
10
|
|
|
@@ -14,24 +16,19 @@ class PushButton(CallbackComponent):
|
|
|
14
16
|
portout = PortOutImmediate(self, "O")
|
|
15
17
|
self.add_port(portout)
|
|
16
18
|
portout.update_parent(True)
|
|
17
|
-
|
|
19
|
+
if inverted:
|
|
20
|
+
logging.warning("Setting 'inverted' has been removed")
|
|
18
21
|
|
|
19
22
|
def default_state(self):
|
|
20
23
|
self.release()
|
|
21
24
|
|
|
22
25
|
def push(self):
|
|
23
26
|
"""Push pushbutton"""
|
|
24
|
-
|
|
25
|
-
self.O.value = 0
|
|
26
|
-
else:
|
|
27
|
-
self.O.value = 1
|
|
27
|
+
self.O.value = 1
|
|
28
28
|
|
|
29
29
|
def release(self):
|
|
30
30
|
"""Release pushbutton"""
|
|
31
|
-
|
|
32
|
-
self.O.value = 1
|
|
33
|
-
else:
|
|
34
|
-
self.O.value = 0
|
|
31
|
+
self.O.value = 0
|
|
35
32
|
|
|
36
33
|
def reconfigure(self):
|
|
37
34
|
self.release()
|
|
@@ -49,14 +46,3 @@ class PushButton(CallbackComponent):
|
|
|
49
46
|
|
|
50
47
|
def onrelease(self):
|
|
51
48
|
self.release()
|
|
52
|
-
|
|
53
|
-
@classmethod
|
|
54
|
-
def get_parameters(cls):
|
|
55
|
-
return {
|
|
56
|
-
"inverted": {
|
|
57
|
-
"type": bool,
|
|
58
|
-
"default": False,
|
|
59
|
-
"description": "Button output is inverted",
|
|
60
|
-
"reconfigurable": True,
|
|
61
|
-
},
|
|
62
|
-
}
|
|
@@ -231,18 +231,18 @@ class SR(MultiComponent):
|
|
|
231
231
|
|
|
232
232
|
def __init__(self, circuit, name=None):
|
|
233
233
|
super().__init__(circuit, name)
|
|
234
|
-
_nands =
|
|
235
|
-
_nandr =
|
|
234
|
+
_nands = NOR(circuit)
|
|
235
|
+
_nandr = NOR(circuit)
|
|
236
236
|
self.add(_nands)
|
|
237
237
|
self.add(_nandr)
|
|
238
238
|
_nands.Y.wire = _nandr.A
|
|
239
239
|
_nandr.Y.wire = _nands.B
|
|
240
|
-
self.add_port(PortWire(self, "
|
|
241
|
-
self.add_port(PortWire(self, "
|
|
240
|
+
self.add_port(PortWire(self, "S"))
|
|
241
|
+
self.add_port(PortWire(self, "R"))
|
|
242
242
|
self.add_port(PortWire(self, "Q"))
|
|
243
243
|
self.add_port(PortWire(self, "nQ"))
|
|
244
244
|
|
|
245
|
-
self.
|
|
246
|
-
self.
|
|
247
|
-
_nands.Y.wire = self.
|
|
248
|
-
_nandr.Y.wire = self.
|
|
245
|
+
self.S.wire = _nands.A
|
|
246
|
+
self.R.wire = _nandr.B
|
|
247
|
+
_nands.Y.wire = self.nQ
|
|
248
|
+
_nandr.Y.wire = self.Q
|
|
@@ -30,7 +30,7 @@ class HexDigit(CallbackComponent):
|
|
|
30
30
|
|
|
31
31
|
def __init__(self, circuit, name=None, digits=1, dot=True):
|
|
32
32
|
super().__init__(circuit, name)
|
|
33
|
-
self.add_port(PortIn(self, "val", width=
|
|
33
|
+
self.add_port(PortIn(self, "val", width=4 * digits))
|
|
34
34
|
self.parameter_set("digits", digits)
|
|
35
35
|
self.parameter_set("dot", dot)
|
|
36
36
|
if dot:
|
digsim/circuit/components/_ic.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"""
|
|
5
5
|
Module for creating a yosys component in the ic folder
|
|
6
6
|
"""
|
|
7
|
-
import
|
|
7
|
+
from pathlib import Path
|
|
8
8
|
|
|
9
9
|
from ._yosys_component import YosysComponent
|
|
10
10
|
|
|
@@ -20,7 +20,7 @@ class IntegratedCircuit(YosysComponent):
|
|
|
20
20
|
@classmethod
|
|
21
21
|
def folder(cls):
|
|
22
22
|
"""Get predefined IC folder"""
|
|
23
|
-
return
|
|
23
|
+
return str(Path(__file__).parent / "ic")
|
|
24
24
|
|
|
25
25
|
def settings_to_dict(self):
|
|
26
26
|
return {"ic_name": self.parameter_get("ic_name")}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
""" An On/Off Switch component """
|
|
5
5
|
|
|
6
|
+
import logging
|
|
7
|
+
|
|
6
8
|
from .atoms import CallbackComponent, PortOutDelta
|
|
7
9
|
|
|
8
10
|
|
|
@@ -14,17 +16,18 @@ class OnOffSwitch(CallbackComponent):
|
|
|
14
16
|
portout = PortOutDelta(self, "O", delay_ns=0)
|
|
15
17
|
self.add_port(portout)
|
|
16
18
|
portout.update_parent(True)
|
|
17
|
-
self.
|
|
18
|
-
|
|
19
|
+
self._on = False
|
|
20
|
+
if start_on:
|
|
21
|
+
logging.warning("Setting 'start_on' has been removed")
|
|
19
22
|
|
|
20
|
-
def _set(self,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
else:
|
|
24
|
-
self.turn_off()
|
|
23
|
+
def _set(self, state):
|
|
24
|
+
self._on = state
|
|
25
|
+
self.O.value = 1 if state else 0
|
|
25
26
|
|
|
26
27
|
def default_state(self):
|
|
27
|
-
self._set(
|
|
28
|
+
self._set(False)
|
|
29
|
+
|
|
30
|
+
self.turn_off()
|
|
28
31
|
|
|
29
32
|
def turn_on(self):
|
|
30
33
|
"""Turn on the switch"""
|
|
@@ -33,8 +36,7 @@ class OnOffSwitch(CallbackComponent):
|
|
|
33
36
|
|
|
34
37
|
def turn_off(self):
|
|
35
38
|
"""Turn off the switch"""
|
|
36
|
-
self.
|
|
37
|
-
self._on = False
|
|
39
|
+
self._set(False)
|
|
38
40
|
|
|
39
41
|
def toggle(self):
|
|
40
42
|
"""Toggle the switch"""
|
|
@@ -50,14 +52,3 @@ class OnOffSwitch(CallbackComponent):
|
|
|
50
52
|
@property
|
|
51
53
|
def active(self):
|
|
52
54
|
return self._on
|
|
53
|
-
|
|
54
|
-
@classmethod
|
|
55
|
-
def get_parameters(cls):
|
|
56
|
-
return {
|
|
57
|
-
"start_on": {
|
|
58
|
-
"type": bool,
|
|
59
|
-
"default": False,
|
|
60
|
-
"description": "Switch on after reset",
|
|
61
|
-
"reconfigurable": True,
|
|
62
|
-
},
|
|
63
|
-
}
|
|
@@ -10,8 +10,8 @@ from a yosys json netlist.
|
|
|
10
10
|
# pylint: disable=too-many-instance-attributes
|
|
11
11
|
|
|
12
12
|
import json
|
|
13
|
-
import os
|
|
14
13
|
import tempfile
|
|
14
|
+
from pathlib import Path
|
|
15
15
|
|
|
16
16
|
import digsim.circuit.components._yosys_atoms
|
|
17
17
|
from digsim.synth import Synthesis
|
|
@@ -171,8 +171,8 @@ class YosysComponent(MultiComponent):
|
|
|
171
171
|
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
|
|
172
172
|
filename = tmp_file.name
|
|
173
173
|
synthesis = Synthesis(self._path, filename, toplevel)
|
|
174
|
-
if not synthesis.execute():
|
|
175
|
-
raise YosysComponentException("Yosys synthesis error")
|
|
174
|
+
if not synthesis.execute(silent=True):
|
|
175
|
+
raise YosysComponentException(f"Yosys synthesis error {self._path}")
|
|
176
176
|
return filename
|
|
177
177
|
|
|
178
178
|
def _load_netlist_dict(self):
|
|
@@ -190,7 +190,7 @@ class YosysComponent(MultiComponent):
|
|
|
190
190
|
netlist_dict = json.load(json_file)
|
|
191
191
|
|
|
192
192
|
if unlink_file:
|
|
193
|
-
|
|
193
|
+
Path(filename).unlink()
|
|
194
194
|
|
|
195
195
|
yosys_netlist = YosysNetlist()
|
|
196
196
|
yosys_netlist.from_dict(netlist_dict)
|
digsim/synth/__init__.py
CHANGED
digsim/synth/_synthesis.py
CHANGED
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
"""Helper module for yosys synthesis"""
|
|
5
5
|
|
|
6
|
-
import os
|
|
7
6
|
import subprocess
|
|
8
7
|
import tempfile
|
|
8
|
+
from pathlib import Path
|
|
9
9
|
|
|
10
|
+
from digsim.circuit.components.atoms import DigsimException
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
|
|
13
|
+
class SynthesisException(DigsimException):
|
|
12
14
|
"""Exception class for yosys synthesis"""
|
|
13
15
|
|
|
14
16
|
|
|
@@ -30,20 +32,34 @@ class Synthesis:
|
|
|
30
32
|
stream.write("ls\n")
|
|
31
33
|
stream.flush()
|
|
32
34
|
|
|
35
|
+
success = False
|
|
33
36
|
with subprocess.Popen(
|
|
34
37
|
["yosys", script_file], stdout=subprocess.PIPE, stdin=None
|
|
35
38
|
) as process:
|
|
36
39
|
modules = []
|
|
37
40
|
ls_output_found = False
|
|
41
|
+
modules_done = False
|
|
38
42
|
while process.poll() is None:
|
|
39
43
|
line = process.stdout.readline().decode("utf-8").rstrip()
|
|
44
|
+
if modules_done:
|
|
45
|
+
continue
|
|
40
46
|
if "modules:" in line:
|
|
41
47
|
ls_output_found = True
|
|
42
|
-
|
|
48
|
+
continue
|
|
49
|
+
if ls_output_found:
|
|
50
|
+
if len(line) == 0:
|
|
51
|
+
modules_done = True
|
|
52
|
+
continue
|
|
43
53
|
modules.append(line.replace("$abstract\\", "").strip())
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
success = process.returncode == 0
|
|
55
|
+
Path(script_file).unlink()
|
|
56
|
+
if not success:
|
|
57
|
+
files_str = ""
|
|
58
|
+
for verilog_file in verilog_files:
|
|
59
|
+
if len(files_str) > 0:
|
|
60
|
+
files_str += ", "
|
|
61
|
+
files_str += Path(verilog_file).name
|
|
62
|
+
raise SynthesisException(f"Yosys error for {files_str}")
|
|
47
63
|
return modules
|
|
48
64
|
|
|
49
65
|
def __init__(self, verilog_files, json_output_file, verilog_top_module):
|
|
@@ -83,7 +99,7 @@ class Synthesis:
|
|
|
83
99
|
if not silent:
|
|
84
100
|
print("Yosys: ", line)
|
|
85
101
|
success = process.returncode == 0
|
|
86
|
-
|
|
102
|
+
Path(script_file).unlink()
|
|
87
103
|
return success
|
|
88
104
|
|
|
89
105
|
def get_log(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: digsim-logic-simulator
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 0.1.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>
|
|
@@ -57,6 +57,8 @@ Requires-Dist: qtawesome
|
|
|
57
57
|
# DigSim - Interactive Digital Logic Simulator
|
|
58
58
|
|
|
59
59
|

|
|
60
|
+

|
|
61
|
+

|
|
60
62
|
|
|
61
63
|
<p align="center">
|
|
62
64
|
<img alt="The DigSim Application" src="https://raw.githubusercontent.com/freand76/digsim/af1bf95eb16d1af19f26159a4c1e1b88565703d7/docs/images/screenshot_digsim_app.png" width=85%>
|
|
@@ -83,7 +85,12 @@ and even if it is slower than many other simulators it is not entirely useless.
|
|
|
83
85
|
|
|
84
86
|
## Quickstart
|
|
85
87
|
|
|
86
|
-
### Install
|
|
88
|
+
### Install from PyPi
|
|
89
|
+
```
|
|
90
|
+
pip3 install digsim-logic-simulator
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Install from GitHub
|
|
87
94
|
```
|
|
88
95
|
> git clone https://github.com/freand76/digsim.git
|
|
89
96
|
> cd digsim
|
|
@@ -110,12 +117,12 @@ Then the following package must be installed:
|
|
|
110
117
|
> apt install libxcb-cursor0
|
|
111
118
|
```
|
|
112
119
|
|
|
113
|
-
### Start with example circuit
|
|
120
|
+
### Start with example circuit (example circuits are available in the github repository)
|
|
114
121
|
```
|
|
115
122
|
> python3 -m digsim.app --load example_circuits/counter_yosys_netlist.circuit
|
|
116
123
|
```
|
|
117
124
|
|
|
118
|
-
### Run example
|
|
125
|
+
### Run example (examples are available in the github repository)
|
|
119
126
|
```
|
|
120
127
|
> python3 examples/example_sr.py
|
|
121
128
|
```
|
|
@@ -133,6 +140,10 @@ Then the following package must be installed:
|
|
|
133
140
|
> python3 -m digsim.synth synth -i <verilog file 1> <optional verilog file 2> -o <output_file.json> -t <verilog top_module>
|
|
134
141
|
```
|
|
135
142
|
|
|
143
|
+
## Documentation
|
|
144
|
+
|
|
145
|
+
[Documentation](https://github.com/freand76/digsim/blob/main/docs/documentation.md) on GitHub
|
|
146
|
+
|
|
136
147
|
## Star History
|
|
137
148
|
|
|
138
149
|
[](https://star-history.com/#freand76/digsim&Date)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
digsim/__init__.py,sha256=FDN6JCbGIBP21Zdf_ZNRryiJ6zQLIlTGTZk-Zj4zwpI,151
|
|
2
|
-
digsim/app/__main__.py,sha256=
|
|
2
|
+
digsim/app/__main__.py,sha256=EYeDrLJR6XC-fRNOhnrDSCDqv60LcO7wY638w3pdHPk,1370
|
|
3
3
|
digsim/app/gui/__init__.py,sha256=UXHtaunKWrrd4QTIna6DAF4rCMqFsBFmodDBj4YB6EI,167
|
|
4
4
|
digsim/app/gui/_circuit_area.py,sha256=iEGINxE-IwmqwVsFMJvqZ2cmauEqf4vo8W83JxIMI_k,16482
|
|
5
5
|
digsim/app/gui/_component_selection.py,sha256=BKBAp46pajiqQo1efpdIB7tczHSUkTiL6aMXfYTlzms,6425
|
|
6
6
|
digsim/app/gui/_main_window.py,sha256=E4pX-5g6ZBLIZv-MpB92wHP2_QSOVcQvjL6ug2X2dHg,5312
|
|
7
|
-
digsim/app/gui/_top_bar.py,sha256=
|
|
7
|
+
digsim/app/gui/_top_bar.py,sha256=YEKJ-ucDDHH4fcHL9GS6jJ8teDhEKuTRaCAN1qTO8Rc,13150
|
|
8
8
|
digsim/app/gui/_utils.py,sha256=SSbe4B-trgZpaerPZilAaZYeqMOlFZMuufTth8KyOAg,660
|
|
9
9
|
digsim/app/gui/_warning_dialog.py,sha256=XINQRNeLtWDFueYXMjTJU6UvIwQ1W1F3lbigp7aPH1Y,1533
|
|
10
10
|
digsim/app/gui_objects/__init__.py,sha256=qNA190htBAVOQr01oxE7NnAo_A6gtPGuKD3yuNfy8hk,266
|
|
@@ -17,12 +17,12 @@ digsim/app/gui_objects/_dip_switch_object.py,sha256=_4zkRzEWtv0NwTpjol0nqZhbmgVr
|
|
|
17
17
|
digsim/app/gui_objects/_gui_note_object.py,sha256=RAlsH1BBi8XQhEWbAW-mDPSQJpOtPuM6SEkw3Nyekdg,2606
|
|
18
18
|
digsim/app/gui_objects/_gui_object_factory.py,sha256=90G_X8FOa-U05iqUFV4M5q6pe9r7_QDcQ5W8sXwTkQQ,2467
|
|
19
19
|
digsim/app/gui_objects/_hexdigit_object.py,sha256=fLoqpfmmFWelMYosVGdcUZhXEsPCIIURJ07SJvRVIR4,1928
|
|
20
|
-
digsim/app/gui_objects/_image_objects.py,sha256=
|
|
20
|
+
digsim/app/gui_objects/_image_objects.py,sha256=M7s-lgKD7A7FaX3_O2BZroWpR_ooKlXIITxDAfI0z0s,7588
|
|
21
21
|
digsim/app/gui_objects/_label_object.py,sha256=uRgTkLHpIddtnDSyOPZrbjVZKduodPHDGA8WxpnxZE4,3572
|
|
22
22
|
digsim/app/gui_objects/_logic_analyzer_object.py,sha256=b-Q9V7fDvA411-m0HZGYx4fUnUv6Pyf9ZuXCzIUaeZU,2674
|
|
23
23
|
digsim/app/gui_objects/_seven_segment_object.py,sha256=qPR2tBbbjzwcH6pr5Yg6BrWHXcTzI5vQwCrF5l9lqm0,4262
|
|
24
24
|
digsim/app/gui_objects/_shortcut_objects.py,sha256=Ze3kayeBV7lweurSEsj98_-ChBjB6OwZESp4M6Zgljs,2763
|
|
25
|
-
digsim/app/gui_objects/_yosys_object.py,sha256=
|
|
25
|
+
digsim/app/gui_objects/_yosys_object.py,sha256=OucYqfEKQMLyj0Kma7BP0_6pM_3HUBMRKLs07V6l54M,955
|
|
26
26
|
digsim/app/gui_objects/images/AND.png,sha256=d53gEcxIlfqmW-Q4Za3n5i_NmSEcjJqlbh8XxoSdR3o,12062
|
|
27
27
|
digsim/app/gui_objects/images/Analyzer.png,sha256=1OrkKsL6ktxKI12KzNJT7rgEi2X-jAqp6vrVuVthErY,1591
|
|
28
28
|
digsim/app/gui_objects/images/BUF.png,sha256=fd8DqEM3aht4cjoWuqsbHlTiQaFa9ddibe3iel1WYLo,12819
|
|
@@ -49,7 +49,7 @@ digsim/app/gui_objects/images/YOSYS.png,sha256=etTO9jadU0amxQG7ySRjD6fME4HjrEEqX
|
|
|
49
49
|
digsim/app/gui_objects/images/ZERO.png,sha256=hXnZgEVO3T_zN5CiFhu6cIXr19LAu6SdvX-sIOq06E4,3459
|
|
50
50
|
digsim/app/images/app_icon.png,sha256=OfPoYA4o4Af79DTqQxSNLca0FdXRHEYteBK-xCQFEAw,16041
|
|
51
51
|
digsim/app/model/__init__.py,sha256=djkoPeT3QoWyjzHdxTTAo7lpu9XbnXDvBBkffCAewms,161
|
|
52
|
-
digsim/app/model/_model.py,sha256=
|
|
52
|
+
digsim/app/model/_model.py,sha256=MVrsIv8CZnITsVn79OyjJ9dMqajO5beEzhj7yJ_FCpE,6551
|
|
53
53
|
digsim/app/model/_model_components.py,sha256=8x96YmkeHEaBYaB5i88G_Zf9MHcc05g8Go_YEBJ3R_o,6500
|
|
54
54
|
digsim/app/model/_model_new_wire.py,sha256=5HnF5-gtKtB1Tp6ZIF7QuNo5zEHmsUpnBEmj6ZllLiA,1810
|
|
55
55
|
digsim/app/model/_model_objects.py,sha256=mX7xMmLFYLZjwvG7CjpkWcKOfB5FPR1FgAe4mDSW1Vw,5078
|
|
@@ -64,39 +64,39 @@ digsim/circuit/_circuit.py,sha256=YM3Rj2_DtxrP3oaWfAaFJkQGUopTmXQtOITZhszu8ZA,11
|
|
|
64
64
|
digsim/circuit/_waves_writer.py,sha256=tdh8Na_JoaC2gRHCPAK-UXEAgTC_ZcGHPBCAO7aekWA,1710
|
|
65
65
|
digsim/circuit/components/__init__.py,sha256=YlrIUxtpi0K2ne3pEeMM0Z9s2h7y7ezOUbKNDQfT06Q,1269
|
|
66
66
|
digsim/circuit/components/_bus_bits.py,sha256=0AvvteRnG4SpW_l-0e-cgBG85VxYlbfdVQFvQVSp88Y,1912
|
|
67
|
-
digsim/circuit/components/_button.py,sha256=
|
|
67
|
+
digsim/circuit/components/_button.py,sha256=JK0yi48Putaf5RWJoPfD7kh9D4Gu5Nq2ZQKN3nnGOx0,1030
|
|
68
68
|
digsim/circuit/components/_buzzer.py,sha256=zRvPhY8hdahDxfNTBzoGXJReQ_8iO3ot02Gz68szq2s,1125
|
|
69
69
|
digsim/circuit/components/_clock.py,sha256=E6cINzY7_YXpHpr23Fn_V2_QhYLnPIZe0elxWozBUrY,1487
|
|
70
70
|
digsim/circuit/components/_dip_switch.py,sha256=SX8vjNC2Nf0KZtXIRjBxz42fKJmp1qGHo4K0MJpg4N4,1807
|
|
71
71
|
digsim/circuit/components/_flip_flops.py,sha256=eOB1hpSfK7vlpcOQzHqILpAzfwsqQPobC-_ebDxGVLw,2942
|
|
72
|
-
digsim/circuit/components/_gates.py,sha256=
|
|
73
|
-
digsim/circuit/components/_hexdigit.py,sha256=
|
|
74
|
-
digsim/circuit/components/_ic.py,sha256=
|
|
72
|
+
digsim/circuit/components/_gates.py,sha256=_eQXmDCDnaE2QPjxoRa4QB0RB2YInPXW6JV1bPxiE0Q,7192
|
|
73
|
+
digsim/circuit/components/_hexdigit.py,sha256=899_4hc02vWgpNVm7Ts7-PBHJc7Dc5hZFSJFayJuLQk,2257
|
|
74
|
+
digsim/circuit/components/_ic.py,sha256=ppr6i7BpMiTdk889-TlFdANo0e-P4uDFeFA-666D1QQ,916
|
|
75
75
|
digsim/circuit/components/_label_wire.py,sha256=NNlxwWCBGYGjQLiliqXRLGIkd3eOoCAVYW8tnPEI-sk,5112
|
|
76
76
|
digsim/circuit/components/_led.py,sha256=djFGARGE1-DlTI7Xqd9eksqk6U1Cq8l51hLrzd_ut68,454
|
|
77
77
|
digsim/circuit/components/_logic_analyzer.py,sha256=14iKsEifXXLIoZtm7ZOukHbFm7Y8TTTVO36Dplg-2hU,1809
|
|
78
78
|
digsim/circuit/components/_mem64kbyte.py,sha256=tqex3qFxa7jk841f87inNB4UIY9E5z1SleqAL82eCUY,1482
|
|
79
79
|
digsim/circuit/components/_memstdout.py,sha256=sCYkKH8XuWhB7-14VQOy7TkTgq-g0UDbhiI1HmM4HW8,1255
|
|
80
80
|
digsim/circuit/components/_note.py,sha256=4o4bRw_7smKc_FGrVkhPwwIqC_500Vj_w8TrNtK1A8s,602
|
|
81
|
-
digsim/circuit/components/_on_off_switch.py,sha256=
|
|
81
|
+
digsim/circuit/components/_on_off_switch.py,sha256=bVLRJhBEdkNteSwW3v6ncloq6p8qWdqwx1I9azbRRjw,1202
|
|
82
82
|
digsim/circuit/components/_seven_segment.py,sha256=8_qLkO6HVxDQuFGvg5ZxjziGMbMczydpPIbcHfpzTRg,798
|
|
83
83
|
digsim/circuit/components/_static_level.py,sha256=bUzLf6Q0ASWFVhq5w2-PEm07yJO0reIF50SK0alJZjE,679
|
|
84
84
|
digsim/circuit/components/_static_value.py,sha256=ZnrL2_x5HvXKc7kYJiv6-qGr6cHBI7M0pdk7y7YTzpI,1236
|
|
85
|
-
digsim/circuit/components/_yosys_atoms.py,sha256=
|
|
86
|
-
digsim/circuit/components/_yosys_component.py,sha256=
|
|
85
|
+
digsim/circuit/components/_yosys_atoms.py,sha256=VYk2t0vWUAmvKSAkIQh6aEmZJ8oBo930-uUU5FrkK-s,37737
|
|
86
|
+
digsim/circuit/components/_yosys_component.py,sha256=hCCTiTUcmHogfNQ2-4_JxXfSPwBJLC6zTzeya6KI9Vg,9285
|
|
87
87
|
digsim/circuit/components/atoms/__init__.py,sha256=1WJXjodu8Mkkmexn8wuHCfwXUI1OGRJMDAzeJccmGes,485
|
|
88
88
|
digsim/circuit/components/atoms/_component.py,sha256=wzImlksBIup9vTmjoWZYx7ZdZsLzrleKAokn0EM0xaI,9865
|
|
89
89
|
digsim/circuit/components/atoms/_digsim_exception.py,sha256=Y5mBve15zZbduqNNAyf7WzqDk4NtvUL_g2vYy5kBQ3U,173
|
|
90
90
|
digsim/circuit/components/atoms/_port.py,sha256=AFsKnGcfOHCjy9P3W24-e15wRiIvSESc4Yk_JLL4q7I,12159
|
|
91
91
|
digsim/circuit/components/ic/74162.json,sha256=BtLDDhNP4jYQD2EZ2nBHfUMRbuPztR54luLEpWl7j-o,26632
|
|
92
92
|
digsim/circuit/components/ic/7448.json,sha256=7p9l6l_QSw6DtphZcGgBMMP0PyMB5DYglciMhqCKp04,21211
|
|
93
|
-
digsim/synth/__init__.py,sha256=
|
|
93
|
+
digsim/synth/__init__.py,sha256=HMnCufXXuxr7ZevbrI5ugpAfpxjjiyjOnOtH94FCKXw,182
|
|
94
94
|
digsim/synth/__main__.py,sha256=CGFTMRWzCVsFVriq7f9AQqo-BPeEkQ86_kbLmOpSh3M,2007
|
|
95
|
-
digsim/synth/_synthesis.py,sha256=
|
|
95
|
+
digsim/synth/_synthesis.py,sha256=JmttnD4f-hGz_Q7dARZKL0z_rLWIdAPkSG7zvf6o97E,3809
|
|
96
96
|
digsim/utils/__init__.py,sha256=1WW4WR61YIrehXvHp_fSTBkAUBb9G5v3npGQLYY_CvA,169
|
|
97
97
|
digsim/utils/_yosys_netlist.py,sha256=g-7hkVgGOYJUQbKv8wBqHMHqj44utuGHGbtaRb-qG60,8562
|
|
98
|
-
digsim_logic_simulator-0.0.
|
|
99
|
-
digsim_logic_simulator-0.0.
|
|
100
|
-
digsim_logic_simulator-0.0.
|
|
101
|
-
digsim_logic_simulator-0.0.
|
|
102
|
-
digsim_logic_simulator-0.0.
|
|
98
|
+
digsim_logic_simulator-0.1.0.dist-info/LICENSE.md,sha256=nx2x6ryeruncSHeHtF33WLjt5JARcm5rLdZuK_c8hL0,1688
|
|
99
|
+
digsim_logic_simulator-0.1.0.dist-info/METADATA,sha256=PiIsLqhcZGFlQgXJ9sBYA2zhQ4fgJDxFFF1XzQlh7M8,6303
|
|
100
|
+
digsim_logic_simulator-0.1.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
101
|
+
digsim_logic_simulator-0.1.0.dist-info/top_level.txt,sha256=qpCMzQKADZHVqZIoQgFrv3qJ3u7PPU73gTCXQglqLa8,7
|
|
102
|
+
digsim_logic_simulator-0.1.0.dist-info/RECORD,,
|
{digsim_logic_simulator-0.0.1.dist-info → digsim_logic_simulator-0.1.0.dist-info}/LICENSE.md
RENAMED
|
File without changes
|
|
File without changes
|
{digsim_logic_simulator-0.0.1.dist-info → digsim_logic_simulator-0.1.0.dist-info}/top_level.txt
RENAMED
|
File without changes
|