digsim-logic-simulator 0.7.0__py3-none-any.whl → 0.9.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.

@@ -5,266 +5,119 @@
5
5
  Module with classes to parse a yosys netlist
6
6
  """
7
7
 
8
+ from __future__ import annotations
8
9
 
9
- class _NetlistPort:
10
- """A class describing a port within a netlist"""
10
+ from typing import Any, Optional, Union
11
11
 
12
- def __init__(self, parent, name, net=None, is_source=None):
13
- self._parent = parent
14
- self._name = name
15
- self._is_source = is_source
16
- self._sinks = []
17
- if net is None:
18
- self._nets = []
19
- else:
20
- self._nets = [net]
12
+ from pydantic import Field
13
+ from pydantic.dataclasses import dataclass
21
14
 
22
- def name(self):
23
- """Return port name"""
24
- return self._name
25
15
 
26
- def get_parent(self):
27
- """Return port parent"""
28
- return self._parent
16
+ @dataclass
17
+ class NetPort:
18
+ parent: Union[YosysModule, YosysCell]
19
+ parent_name: str
20
+ name: str
21
+ bit_index: Optional[int] = None
29
22
 
30
- def is_source(self):
31
- """Return true if port is a source (false for sink)"""
32
- return self._is_source
33
23
 
34
- def add_sinks(self, sinks):
35
- """Add sinks to source port"""
36
- self._sinks.extend(sinks)
24
+ @dataclass
25
+ class Nets:
26
+ source: dict[int, NetPort] = Field(default_factory=dict)
27
+ sinks: dict[int, list[NetPort]] = Field(default_factory=dict)
37
28
 
38
- def get_sinks(self):
39
- """Get source port sinks"""
40
- return self._sinks
41
29
 
42
- def get_nets(self):
43
- """Get port nets"""
44
- return self._nets
45
-
46
- def from_module_dict(self, port_dict, global_nets):
47
- """Create xternal port from module dict"""
48
- self._is_source = port_dict["direction"] == "input"
49
- for net in port_dict["bits"]:
50
- if net not in global_nets:
51
- global_nets.append(net)
52
- self._nets.append(net)
53
-
54
-
55
- class _NetlistBlock:
56
- """Common base class for modules and cells"""
57
-
58
- def __init__(self, name, block_type=None):
59
- self._name = name
60
- self._ports = {}
61
- self._nets = []
62
- self._block_type = block_type
63
- self._net_to_source_port = {}
64
- self._net_to_sink_ports = {}
65
-
66
- def name(self):
67
- """Return name of block (cell or module)"""
68
- return self._name
69
-
70
- def get_type(self):
71
- """Get type"""
72
- return self._block_type
73
-
74
- def set_type(self, block_type):
75
- """Set type"""
76
- self._block_type = block_type
77
-
78
- def add_port(self, name, port):
79
- """Add port to block (cell or module)"""
80
- self._ports[name] = port
81
- nets = port.get_nets()
82
- if port.is_source():
83
- for net in nets:
84
- self._net_to_source_port[net] = port
85
- else:
86
- for net in nets:
87
- if net not in self._net_to_sink_ports:
88
- self._net_to_sink_ports[net] = []
89
- if port not in self._net_to_sink_ports[net]:
90
- self._net_to_sink_ports[net].append(port)
91
-
92
- def get_nets(self):
93
- """Get nets of block (cell or module)"""
94
- return self._nets
95
-
96
- def get_source_ports(self):
97
- """Get source ports of block (cell or module)"""
98
- ports = []
99
- for _, port in self._net_to_source_port.items():
100
- ports.append(port)
101
- return ports
102
-
103
- def get_source_port(self, net):
104
- """Get source port of block (cell or module)"""
105
- return self._net_to_source_port.get(net)
106
-
107
- def get_sink_ports(self, net):
108
- """Get sink port of block (cell or module)"""
109
- return self._net_to_sink_ports.get(net, [])
30
+ @dataclass
31
+ class YosysPort:
32
+ direction: str
33
+ bits: list[Union[int, str]]
110
34
 
35
+ @property
36
+ def is_output(self):
37
+ return self.direction == "output"
111
38
 
112
- class _NetlistCell(_NetlistBlock):
113
- """A class holding a cell in a yosys netlist"""
39
+ def is_same(self, compare_port):
40
+ return (compare_port.direction == self.direction) and (
41
+ len(compare_port.bits) == len(self.bits)
42
+ )
114
43
 
115
- def __init__(self, name):
116
- super().__init__(name)
117
44
 
118
- def get_friendly_name(self):
45
+ @dataclass
46
+ class YosysCell:
47
+ type: str
48
+ port_directions: dict[str, str] = Field(default_factory=dict)
49
+ connections: dict[str, list[Union[str, int]]] = Field(default_factory=dict)
50
+ hide_name: int = 0
51
+ parameters: dict[str, Any] = Field(default_factory=dict)
52
+ attributes: dict[str, Any] = Field(default_factory=dict)
53
+
54
+ def get_nets(self, name, nets):
55
+ for port_name, net_list in self.connections.items():
56
+ net = net_list[0]
57
+ port = NetPort(parent=self, parent_name=name, name=port_name)
58
+ if self.port_directions[port_name] == "input":
59
+ if net not in nets.sinks:
60
+ nets.sinks[net] = []
61
+ nets.sinks[net].append(port)
62
+ else:
63
+ nets.source[net] = port
64
+
65
+ def component_name(self, name):
119
66
  """Return a friendly name for a netlist cell"""
120
- return f"{self.name().split('$')[-1]}_{self.get_friendly_type()}"
67
+ return f"{name.split('$')[-1]}_{self.component_type()}"
121
68
 
122
- def get_friendly_type(self):
69
+ def component_type(self):
123
70
  """Return a friendly type for a netlist cell"""
124
- return f"_{self.get_type()[2:-1]}_"
125
-
126
- def from_dict(self, cell_dict, global_nets):
127
- """Create netlist cell from dict"""
128
- self.set_type(cell_dict["type"])
129
- for port_name, port_dir in cell_dict["port_directions"].items():
130
- output = port_dir == "output"
131
- port_net = cell_dict["connections"][port_name]
132
- self._nets.extend(port_net)
133
- for net in port_net:
134
- if net not in global_nets:
135
- global_nets.append(net)
136
- port = _NetlistPort(self, port_name, net, output)
137
- self.add_port(port_name, port)
138
-
139
-
140
- class _NestlistModule(_NetlistBlock):
141
- """A class holding a module in a yosys netlist"""
142
-
143
- def __init__(self, name):
144
- super().__init__(name, "module")
145
- self._cells = {}
146
- self._module_nets = []
147
- self._ext_if = {}
148
-
149
- static_cell = _NetlistCell("StaticLevel")
150
- static_cell.from_dict(
151
- {
152
- "type": "$_StaticLevel_",
153
- "port_directions": {"L": "output", "H": "output"},
154
- "connections": {"L": ["0"], "H": ["1"]},
155
- },
156
- self._nets,
157
- )
158
- self._cells["StaticLevel"] = static_cell
71
+ return f"_{self.type[2:-1]}_"
159
72
 
160
- def from_dict(self, module_dict):
161
- """Create module from dict"""
162
- for ext_port_name, port_dict in module_dict["ports"].items():
163
- ext_port = _NetlistPort(self, ext_port_name)
164
- ext_port.from_module_dict(port_dict, self._nets)
165
- nets = ext_port.get_nets()
166
- ext_port_dict = {"output": ext_port.is_source(), "nets": nets}
167
- self._ext_if[ext_port_name] = ext_port_dict
168
- self.add_port(ext_port_name, ext_port)
169
73
 
170
- for cell_name, cell_dict in module_dict["cells"].items():
171
- cell = _NetlistCell(cell_name)
172
- cell.from_dict(cell_dict, self._nets)
173
- self._cells[cell_name] = cell
74
+ @dataclass
75
+ class YosysNetName:
76
+ bits: list[int]
77
+ attributes: dict[str, Any] = Field(default_factory=dict)
78
+ hide_name: int = 0
174
79
 
175
- def get_cells(self):
176
- """Get cells dict"""
177
- return self._cells
178
80
 
179
- def get_external_interface(self):
180
- """Get external interface dict"""
181
- return self._ext_if
81
+ @dataclass
82
+ class YosysModule:
83
+ attributes: dict[str, Any] = Field(default_factory=dict)
84
+ parameter_default_values: dict[str, Any] = Field(default_factory=dict)
85
+ ports: dict[str, YosysPort] = Field(default_factory=dict)
86
+ cells: dict[str, YosysCell] = Field(default_factory=dict)
87
+ netnames: dict[str, YosysNetName] = Field(default_factory=dict)
182
88
 
183
- def get_source(self, net):
184
- """Get source port for net"""
185
- module_port = self.get_source_port(net)
186
- if module_port is not None:
187
- return module_port
188
- for _, cell in self._cells.items():
189
- cell_port = cell.get_source_port(net)
190
- if cell_port is not None:
191
- return cell_port
192
- return None
89
+ def is_same_interface(self, netlist):
90
+ is_same = True
91
+ for netlist_port_name, netlist_port in netlist.ports.items():
92
+ module_port = self.ports.get(netlist_port_name)
93
+ if module_port is None or not module_port.is_same(netlist_port):
94
+ is_same = False
95
+ break
96
+ return is_same
193
97
 
194
- def get_sinks(self, net):
195
- """Get module sinks (input ports)"""
196
- sink_ports = self.get_sink_ports(net)
197
- for _, cell in self._cells.items():
198
- cell_sink_ports = cell.get_sink_ports(net)
199
- for port in cell_sink_ports:
200
- if port not in sink_ports:
201
- sink_ports.append(port)
202
- return sink_ports
203
-
204
- def connect(self):
205
- """Connect all nets within module"""
206
- _source_port_dict = {}
207
- _sink_ports_dict = {}
208
- _cells_dict = {}
209
-
210
- # Build net to cell dict
211
- for _, cell in self._cells.items():
212
- for cell_net in cell.get_nets():
213
- if cell_net not in _cells_dict:
214
- _cells_dict[cell_net] = []
215
- _cells_dict[cell_net].append(cell)
216
-
217
- # Build net to ports dict
218
- for net in self._nets:
219
- # Module
220
- port = self.get_source_port(net)
221
- if port is not None:
222
- _source_port_dict[net] = port
223
- sink_ports = self.get_sink_ports(net)
224
- # Cells
225
- for cell in _cells_dict.get(net, []):
226
- port = cell.get_source_port(net)
227
- if port is not None:
228
- _source_port_dict[net] = port
229
- cell_sink_ports = cell.get_sink_ports(net)
230
- sink_ports.extend(cell_sink_ports)
231
- _sink_ports_dict[net] = sink_ports
98
+ def get_nets(self):
99
+ nets = Nets()
232
100
 
233
- # Connect
234
- for net in self._nets:
235
- source_port = _source_port_dict[net]
236
- sink_ports = _sink_ports_dict[net]
237
- source_port.add_sinks(sink_ports)
101
+ for port_name, port_item in self.ports.items():
102
+ for bit_index, net in enumerate(port_item.bits):
103
+ port = NetPort(parent=self, parent_name="top", name=port_name, bit_index=bit_index)
104
+ if port_item.is_output:
105
+ if net not in nets.sinks:
106
+ nets.sinks[net] = []
107
+ nets.sinks[net].append(port)
108
+ else:
109
+ nets.source[net] = port
238
110
 
239
- # Connect module nets
240
- for module_net in self._module_nets:
241
- nets = module_net.get_nets()
242
- ports = []
243
- for net in nets:
244
- port = _source_port_dict[net]
245
- ports.append(port)
246
- module_net.set_ports(ports)
111
+ for cell_name, cell in self.cells.items():
112
+ cell.get_nets(cell_name, nets)
247
113
 
248
- def get_module_nets(self):
249
- """Get the nets for this module"""
250
- return self._module_nets
114
+ return nets
251
115
 
252
116
 
117
+ @dataclass
253
118
  class YosysNetlist:
254
- """A class holding the content of a yosys netlist"""
255
-
256
- def __init__(self):
257
- self._modules = {}
119
+ creator: Optional[str] = None
120
+ modules: dict[str, YosysModule] = Field(default_factory=dict)
258
121
 
259
122
  def get_modules(self):
260
- """Get modules dict"""
261
- return self._modules
262
-
263
- def from_dict(self, netlist_dict):
264
- """Parse netlist from dict"""
265
- for module_name, module_dict in netlist_dict["modules"].items():
266
- module = _NestlistModule(module_name)
267
- module.from_dict(module_dict)
268
- self._modules[module_name] = module
269
- for _, module in self._modules.items():
270
- module.connect()
123
+ return self.modules
@@ -1,42 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digsim-logic-simulator
3
- Version: 0.7.0
3
+ Version: 0.9.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>
7
- License: The Clear BSD License
8
-
9
- Copyright (c) 2023-2024, Fredrik Andersson
10
- All rights reserved.
11
-
12
- Redistribution and use in source and binary forms, with or without
13
- modification, are permitted provided that the following conditions are met:
14
-
15
- * Redistributions of source code must retain the above copyright notice, this
16
- list of conditions and the following disclaimer.
17
-
18
- * Redistributions in binary form must reproduce the above copyright notice,
19
- this list of conditions and the following disclaimer in the documentation
20
- and/or other materials provided with the distribution.
21
-
22
- * Neither the name of the copyright holder nor the names of its
23
- contributors may be used to endorse or promote products derived from
24
- this software without specific prior written permission.
25
-
26
- NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
27
- LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
29
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
31
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
33
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
36
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
-
38
- -------------------------------------------------------------------------------
39
-
40
7
  Project-URL: homepage, https://github.com/freand76/digsim
41
8
  Keywords: educational,simulation,digital
42
9
  Classifier: Development Status :: 5 - Production/Stable
@@ -50,12 +17,12 @@ Classifier: Programming Language :: Python :: 3 :: Only
50
17
  Requires-Python: >=3.9
51
18
  Description-Content-Type: text/markdown
52
19
  License-File: LICENSE.md
53
- Requires-Dist: pyvcd>=0.4.1
54
- Requires-Dist: pyside6>=6.9.0
20
+ Requires-Dist: pyvcd==0.4.1
21
+ Requires-Dist: pyside6==6.9.1
55
22
  Requires-Dist: pexpect==4.9.0
56
- Requires-Dist: pydantic==2.11.4
23
+ Requires-Dist: pydantic==2.11.7
57
24
  Requires-Dist: qtawesome==1.4.0
58
- Requires-Dist: yowasp-yosys==0.53.0.0.post912
25
+ Requires-Dist: yowasp-yosys==0.57.0.0.post986
59
26
  Dynamic: license-file
60
27
 
61
28
  # DigSim - Interactive Digital Logic Simulator
@@ -1,7 +1,7 @@
1
1
  digsim/__init__.py,sha256=UB-i1HtNR6rIX4_SClZp-lM4njGa7_1sbMvd14NuyAs,149
2
2
  digsim/app/__main__.py,sha256=iECz0kvEQ0R4fGzH6KAOxyDfoyvwrRLo7JmT0jMx39s,1368
3
3
  digsim/app/gui/__init__.py,sha256=-HnN8a-AcDcovbCHf1a_R-sQtW2_tQXnPJ3izyKLOjw,165
4
- digsim/app/gui/_circuit_area.py,sha256=w2K0n3ubbLvwiZHs2NyErUoNly0_TWFTf-XXsCtxpVY,16366
4
+ digsim/app/gui/_circuit_area.py,sha256=rbqP957eVAuYBvtg5anybOrvnGc6TSe9dB_0rRsHSDI,16366
5
5
  digsim/app/gui/_component_selection.py,sha256=C-TeBruf8sGdEnGATtLm6jTesIqf-0AnKRBRLrtL_18,6388
6
6
  digsim/app/gui/_main_window.py,sha256=X0AIh3m1ySaldgYr3MHddRSqVkNdWl_qNJOIdnv2mNA,5275
7
7
  digsim/app/gui/_top_bar.py,sha256=HWGiWTKjYz3yRJ4K1tbMyVxhTC-Y6LEiREr6nHMAhKE,13067
@@ -17,7 +17,7 @@ digsim/app/gui_objects/_dip_switch_object.py,sha256=6SmqoyF3MuUphLJA4tlyff4JXJBx
17
17
  digsim/app/gui_objects/_gui_note_object.py,sha256=sMakGjdR0truGBzaR2GaFZZoDg99v76Bs5DD6ea3cjA,2604
18
18
  digsim/app/gui_objects/_gui_object_factory.py,sha256=wfe0M4ZNSd5mK_0fi6ZhzHddFxkm_t4tku3OZir2VzU,2465
19
19
  digsim/app/gui_objects/_hexdigit_object.py,sha256=cCxxpcSRLXRFNLIfrY_AUBGOSVIjRjO3HAuOv7wXGkI,1930
20
- digsim/app/gui_objects/_image_objects.py,sha256=KQgWaiEoqbtqWib-pCoo-qs-J3GvRlVQFzjLNEBx-JQ,7553
20
+ digsim/app/gui_objects/_image_objects.py,sha256=hOFgkpp0Ar0btncVXp7Jors7hXQQENc1FqzJGS1m_G0,7613
21
21
  digsim/app/gui_objects/_label_object.py,sha256=6CnISeYEmmef28T6yBYJ1z-a_3nTtyl4p-EU-pEzVK0,3570
22
22
  digsim/app/gui_objects/_logic_analyzer_object.py,sha256=B3WpFrTu9LDF0S_ol0VVS4vOIDqw_e08wmEX7fBjD98,2671
23
23
  digsim/app/gui_objects/_seven_segment_object.py,sha256=EaNRxmM_IA-JkLHVVHXwSCd8jV9JAXTmdXMuXOidio4,4227
@@ -60,8 +60,8 @@ digsim/app/settings/_component_settings.py,sha256=88D9OuEcFIlaqZozomWHSYrl7opz4j
60
60
  digsim/app/settings/_gui_settings.py,sha256=sDi2POUsHvS7_4SO5qsTu_nN48HsTN4UfGPzdmECs9w,2764
61
61
  digsim/app/settings/_shortcut_dialog.py,sha256=JTm7aawG2ar_DvWhBT8ZzgWsq9gLEJ6pJ_-eHUMPh-c,1524
62
62
  digsim/circuit/__init__.py,sha256=yGyhcdnlcpht_hyR2az_A4c7-bO_NkT2lBIDFvtI010,216
63
- digsim/circuit/_circuit.py,sha256=UNJBM2MyTXPWWEPXe4T4Z9Qc6vsm9We_Rk7mEfV9yIA,10023
64
- digsim/circuit/_waves_writer.py,sha256=hh-hwNrT9c0jDLLxYw0anvwomJXVJK5iIbGVjcQddG0,1645
63
+ digsim/circuit/_circuit.py,sha256=r_QFKhB13p9hLbrKUN0RtR1o2sqc-UNemdiz-La8cGY,10956
64
+ digsim/circuit/_waves_writer.py,sha256=ZedBa2TbWuq-zDc1MQyANmQOMDGGzNMSh4nKPuqXCkA,2092
65
65
  digsim/circuit/components/__init__.py,sha256=j-xNFbXJ15rSJLhDg7E-SlKvxn6Uy7Zl42YDUkZBFZo,1267
66
66
  digsim/circuit/components/_bus_bits.py,sha256=mHWkwAHtkEq88pOEQ0b5ndFZvum794j7kUkTAWHUCdc,1916
67
67
  digsim/circuit/components/_button.py,sha256=Q8drjQ2kNFCfgK-7UzlmNHP47bOpGa9_t16pDtjhL4s,1028
@@ -72,7 +72,7 @@ digsim/circuit/components/_flip_flops.py,sha256=eOB1hpSfK7vlpcOQzHqILpAzfwsqQPob
72
72
  digsim/circuit/components/_gates.py,sha256=K_aFT4GTo4JF_zoaNYiCRZfZEx4vEibMHZSCDImfPHQ,7167
73
73
  digsim/circuit/components/_hexdigit.py,sha256=MQlmEnQkQnuH6rGc-FB68mOctjVY8QyAR5FCOHYNCns,2259
74
74
  digsim/circuit/components/_ic.py,sha256=Rs8Z_PuhKo3peK9pwdbvlGNK8_w6evSdXYNdrjWB3-8,917
75
- digsim/circuit/components/_label_wire.py,sha256=5xcPNWt8GtQEUk_BDJXWHQ3RfH62bAFQpiyeJlppOpA,5116
75
+ digsim/circuit/components/_label_wire.py,sha256=wAAvq-o1ygsX5br6O9KvsPtQyU5C2FdMRUJP_WWlXSw,5164
76
76
  digsim/circuit/components/_led.py,sha256=hR_iclDWZua8duNy9BQcTBuhKkIh3g5ahpfkHQ1LYSA,452
77
77
  digsim/circuit/components/_logic_analyzer.py,sha256=K6sUfN23lUfQ5GHQFrxvR8fgfWKLy29Cj0K7dZzW_cE,1809
78
78
  digsim/circuit/components/_mem64kbyte.py,sha256=tqex3qFxa7jk841f87inNB4UIY9E5z1SleqAL82eCUY,1482
@@ -83,23 +83,23 @@ digsim/circuit/components/_seven_segment.py,sha256=UxxjGLuIirVB2Px09XlL8_zjgE7F8
83
83
  digsim/circuit/components/_static_level.py,sha256=2Assm1cmAfryVZ3KTQ1uGY8Q6eRrBipdwLITewXfIHg,677
84
84
  digsim/circuit/components/_static_value.py,sha256=vfRPS_F9mKOXpHJxzs0JQKXqcj0o6d-090zbyZaECA4,1236
85
85
  digsim/circuit/components/_yosys_atoms.py,sha256=NeH8XjjpoACHBfQRqR5RJxWorZhSjGk0t73cJOviSZw,37599
86
- digsim/circuit/components/_yosys_component.py,sha256=XDNSAfM6Qvhe6G0-M1uiY2NQ-A6oPSQX4kcB_ccvSWg,8810
87
- digsim/circuit/components/atoms/__init__.py,sha256=kPr-ZKYPiW8NgEvKooMyLYc4DpfMurkALqWcKLhuK28,483
88
- digsim/circuit/components/atoms/_component.py,sha256=pnPzWmJYvgcdYt0TFTq12M88mz-esZBg1E7VtlZ5WK8,8287
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
89
  digsim/circuit/components/atoms/_digsim_exception.py,sha256=Y5mBve15zZbduqNNAyf7WzqDk4NtvUL_g2vYy5kBQ3U,173
90
- digsim/circuit/components/atoms/_port.py,sha256=BzfCBSQT34AMH10PyAj-eg0UqQpvFJz01fd3HmCwHhE,11688
91
- digsim/circuit/components/ic/74162.json,sha256=BtLDDhNP4jYQD2EZ2nBHfUMRbuPztR54luLEpWl7j-o,26632
92
- digsim/circuit/components/ic/7448.json,sha256=7p9l6l_QSw6DtphZcGgBMMP0PyMB5DYglciMhqCKp04,21211
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
93
  digsim/storage_model/__init__.py,sha256=lubmO9_BCUtEahyW1yE7f3aGHngEevGIwf_0LeOB7Y8,289
94
94
  digsim/storage_model/_app.py,sha256=Aer9s_mUBKSydsyeWYvVPHX2XF5ZGPuXq8z4PoXu8lA,1353
95
95
  digsim/storage_model/_circuit.py,sha256=NnaHLwqb9gAhqAxeZ1RkHHvoS_YJwixlz0xs-zmIrQU,3596
96
96
  digsim/synth/__init__.py,sha256=jhBHLOHf-vNa94Zg5q5dGcf0fgQTModfjUKtmUSffiw,180
97
97
  digsim/synth/__main__.py,sha256=wZWAzWsisoxA7hfqkKtu3H066uWyFajgPro2MEGlKbs,2173
98
98
  digsim/synth/_synthesis.py,sha256=ug9vSeTyZrvRCboNLL7dDIFVpGqH_ibr5fhOZJHpqUs,4271
99
- digsim/utils/__init__.py,sha256=Az_zmbORYMzmptuA2_xfn5jDxbCPRSMlVuntr0sYexU,167
100
- digsim/utils/_yosys_netlist.py,sha256=FevsHPSKoBk8SSBzvSGkJeTFOiZajjbWCHjZUZwfF4g,8562
101
- digsim_logic_simulator-0.7.0.dist-info/licenses/LICENSE.md,sha256=FrvohZfyfpH4xrvKdXiQ5hD7dUB7w4DcsRA3p-pOmLw,1693
102
- digsim_logic_simulator-0.7.0.dist-info/METADATA,sha256=B9bPM0Q8X16INltjcNg_SstiiZ63eCEPxX8c3OJHyPI,6516
103
- digsim_logic_simulator-0.7.0.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
104
- digsim_logic_simulator-0.7.0.dist-info/top_level.txt,sha256=qpCMzQKADZHVqZIoQgFrv3qJ3u7PPU73gTCXQglqLa8,7
105
- digsim_logic_simulator-0.7.0.dist-info/RECORD,,
99
+ digsim/utils/__init__.py,sha256=MT9TNcpa7fNAqtBsmCcceKMrUSU_v9xeJ6Nox_TL7Lo,191
100
+ digsim/utils/_yosys_netlist.py,sha256=TnEQc27NxPD96uGAF_wiijsZsX59vmDqzNP9rkMnLyc,3612
101
+ digsim_logic_simulator-0.9.0.dist-info/licenses/LICENSE.md,sha256=FrvohZfyfpH4xrvKdXiQ5hD7dUB7w4DcsRA3p-pOmLw,1693
102
+ digsim_logic_simulator-0.9.0.dist-info/METADATA,sha256=5NVelguEoPG3GlO78OlDNwfzX-NWC5Zqt1w8BD5yIVA,4557
103
+ digsim_logic_simulator-0.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
104
+ digsim_logic_simulator-0.9.0.dist-info/top_level.txt,sha256=qpCMzQKADZHVqZIoQgFrv3qJ3u7PPU73gTCXQglqLa8,7
105
+ digsim_logic_simulator-0.9.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5