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 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
- image_path = f"{os.path.dirname(__file__)}/images/app_icon.png"
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)
@@ -6,7 +6,7 @@
6
6
  # pylint: disable=too-few-public-methods
7
7
  # pylint: disable=too-many-instance-attributes
8
8
 
9
- import os
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 = os.path.basename(self._vcd_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 os
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(f"{os.path.dirname(__file__)}/{cls.IMAGE_FILENAME}")
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
- self.component.reload_file()
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()
@@ -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 = os.path.dirname(path)
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 = os.path.dirname(path)
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
- self.parameter_set("inverted", inverted)
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
- if self.parameter_get("inverted"):
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
- if self.parameter_get("inverted"):
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 = NAND(circuit)
235
- _nandr = NAND(circuit)
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, "nS"))
241
- self.add_port(PortWire(self, "nR"))
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.nS.wire = _nands.A
246
- self.nR.wire = _nandr.B
247
- _nands.Y.wire = self.Q
248
- _nandr.Y.wire = self.nQ
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=(4 * digits)))
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:
@@ -4,7 +4,7 @@
4
4
  """
5
5
  Module for creating a yosys component in the ic folder
6
6
  """
7
- import os
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 f"{os.path.dirname(__file__)}/ic"
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.parameter_set("start_on", start_on)
18
- self._on = start_on
19
+ self._on = False
20
+ if start_on:
21
+ logging.warning("Setting 'start_on' has been removed")
19
22
 
20
- def _set(self, set_on):
21
- if set_on:
22
- self.turn_on()
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(self.parameter_get("start_on"))
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.O.value = 0
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
- }
@@ -39,7 +39,7 @@ class ClassNameParameterComponent(Component):
39
39
  return 0
40
40
  if level in ["P", "1"]:
41
41
  return 1
42
- raise Exception(f"Unknown value ä{level}'")
42
+ raise ValueError(f"Unknown value ä{level}'")
43
43
 
44
44
 
45
45
  class _BUF_(Component):
@@ -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
- os.unlink(filename)
193
+ Path(filename).unlink()
194
194
 
195
195
  yosys_netlist = YosysNetlist()
196
196
  yosys_netlist.from_dict(netlist_dict)
digsim/synth/__init__.py CHANGED
@@ -3,4 +3,4 @@
3
3
 
4
4
  """ All classes within digsim.synth namespace """
5
5
 
6
- from ._synthesis import Synthesis # noqa: F401
6
+ from ._synthesis import Synthesis, SynthesisException # noqa: F401
@@ -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
- class SynthesisException(Exception):
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
- if ls_output_found and "$abstract" in line:
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
- if process.returncode != 0:
45
- raise SynthesisException("Yosys execution failed...")
46
- os.unlink(script_file)
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
- os.unlink(script_file)
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.1
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
  ![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Ffreand76%2Fdigsim%2Fmain%2Fpyproject.toml)
60
+ ![PyPI - Version](https://img.shields.io/pypi/v/digsim-logic-simulator)
61
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/digsim-logic-simulator)
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
  [![Star History Chart](https://api.star-history.com/svg?repos=freand76/digsim&type=Date)](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=J2o90H-WRyCwrhzKZv82QFS9-wuwoilmA7HHT4rmbpI,1334
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=odmRo187nWLt_fvZLJv4tjIDBeq0jmzShZKULs9-Ws4,13142
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=sQK_u9QYjJgu-Mr0614JtpGwP92frXBZq4PJ2c8ucZA,7621
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=Q9OBB2YZOAgB_U5y9lqLYlNlk9dHcAQlDdNVnj7mvfk,755
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=9q81tTE5IZZ4MxaEYtN0JIybLULdzNG_5rbt4P2tkQc,6534
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=Nkwi0Ixq8dl3G_c7v3D6YyBmVtE6hul0fSjLwVZsf4c,1434
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=cZuOUYkA1Myf18slsdXgu8u2WH4q7EW5g5iMdNJAgJE,7198
73
- digsim/circuit/components/_hexdigit.py,sha256=gJMRG5fq_Tpi4RLH8QEzUNh-YTRnehwdOvikS_xVC-4,2259
74
- digsim/circuit/components/_ic.py,sha256=fS93im6GEz8QLOADWNIlibu2Q5CLeV7fE8jnJ_plEEw,901
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=AC0g6_sx12KfVBRH8OkPYhSSffJD14EVQPHHNBruO3g,1473
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=GG4HoxK1RmmXKt_R4qehZWqHexx9oELNuARuX4_2kDE,37736
86
- digsim/circuit/components/_yosys_component.py,sha256=IzW0DYgRs__gKjpJou7KQL3TYIe0Zcf1H8C_Qv3PxSE,9241
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=YAJv6ZOvZxzw2Q4U3sY7azpoU5FicaBLan4FKPHwDaw,162
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=gdjoolkEDM1e5T1brJ8TtUr4sQ7lXcBmCe-XlkqKV-4,3246
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.1.dist-info/LICENSE.md,sha256=nx2x6ryeruncSHeHtF33WLjt5JARcm5rLdZuK_c8hL0,1688
99
- digsim_logic_simulator-0.0.1.dist-info/METADATA,sha256=av0vhKAgWoAzrKOkMkNNcm4QdZu1GxbEVM3loAZdGBs,5856
100
- digsim_logic_simulator-0.0.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
101
- digsim_logic_simulator-0.0.1.dist-info/top_level.txt,sha256=qpCMzQKADZHVqZIoQgFrv3qJ3u7PPU73gTCXQglqLa8,7
102
- digsim_logic_simulator-0.0.1.dist-info/RECORD,,
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,,