peakrdl-busdecoder 0.6.0__py3-none-any.whl → 0.6.3__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.
@@ -1,3 +1,4 @@
1
+ from collections import deque
1
2
  from typing import TYPE_CHECKING, overload
2
3
 
3
4
  from systemrdl.node import AddressableNode
@@ -32,7 +33,7 @@ class APB3Cpuif(BaseCpuif):
32
33
  def signal(self, signal: str, node: AddressableNode | None = None, indexer: str | None = None) -> str:
33
34
  return self._interface.signal(signal, node, indexer)
34
35
 
35
- def fanout(self, node: AddressableNode) -> str:
36
+ def fanout(self, node: AddressableNode, array_stack: deque[int]) -> str:
36
37
  fanout: dict[str, str] = {}
37
38
  fanout[self.signal("PSEL", node, "gi")] = (
38
39
  f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}|cpuif_rd_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
@@ -1,8 +1,10 @@
1
+ from collections import deque
1
2
  from typing import TYPE_CHECKING
2
3
 
3
4
  from systemrdl.node import AddressableNode
4
5
 
5
- from ...utils import get_indexed_path
6
+ from ...sv_int import SVInt
7
+ from ...utils import clog2, get_indexed_path
6
8
  from ..base_cpuif import BaseCpuif
7
9
  from .apb3_interface import APB3FlatInterface
8
10
 
@@ -33,8 +35,12 @@ class APB3CpuifFlat(BaseCpuif):
33
35
  ) -> str:
34
36
  return self._interface.signal(signal, node, idx)
35
37
 
36
- def fanout(self, node: AddressableNode) -> str:
38
+ def fanout(self, node: AddressableNode, array_stack: deque[int]) -> str:
37
39
  fanout: dict[str, str] = {}
40
+ addr_comp = [f"{self.signal('PADDR')}"]
41
+ for i, stride in enumerate(array_stack):
42
+ addr_comp.append(f"(gi{i}*{SVInt(stride, self.addr_width)})")
43
+
38
44
  fanout[self.signal("PSEL", node, "gi")] = (
39
45
  f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}|cpuif_rd_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
40
46
  )
@@ -42,7 +48,7 @@ class APB3CpuifFlat(BaseCpuif):
42
48
  fanout[self.signal("PWRITE", node, "gi")] = (
43
49
  f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
44
50
  )
45
- fanout[self.signal("PADDR", node, "gi")] = self.signal("PADDR")
51
+ fanout[self.signal("PADDR", node, "gi")] = f"{{{'-'.join(addr_comp)}}}[{clog2(node.size) - 1}:0]"
46
52
  fanout[self.signal("PWDATA", node, "gi")] = "cpuif_wr_data"
47
53
 
48
54
  return "\n".join(map(lambda kv: f"assign {kv[0]} = {kv[1]};", fanout.items()))
@@ -2,6 +2,7 @@
2
2
 
3
3
  from systemrdl.node import AddressableNode
4
4
 
5
+ from ...utils import clog2
5
6
  from ..interface import FlatInterface, SVInterface
6
7
 
7
8
 
@@ -48,7 +49,7 @@ class APB3FlatInterface(FlatInterface):
48
49
  f"output logic {self.signal('PSEL', child)}",
49
50
  f"output logic {self.signal('PENABLE', child)}",
50
51
  f"output logic {self.signal('PWRITE', child)}",
51
- f"output logic [{self.cpuif.addr_width - 1}:0] {self.signal('PADDR', child)}",
52
+ f"output logic [{clog2(child.size) - 1}:0] {self.signal('PADDR', child)}",
52
53
  f"output logic [{self.cpuif.data_width - 1}:0] {self.signal('PWDATA', child)}",
53
54
  f"input logic [{self.cpuif.data_width - 1}:0] {self.signal('PRDATA', child)}",
54
55
  f"input logic {self.signal('PREADY', child)}",
@@ -1,3 +1,4 @@
1
+ from collections import deque
1
2
  from typing import TYPE_CHECKING, overload
2
3
 
3
4
  from systemrdl.node import AddressableNode
@@ -33,7 +34,7 @@ class APB4Cpuif(BaseCpuif):
33
34
  def signal(self, signal: str, node: AddressableNode | None = None, indexer: str | None = None) -> str:
34
35
  return self._interface.signal(signal, node, indexer)
35
36
 
36
- def fanout(self, node: AddressableNode) -> str:
37
+ def fanout(self, node: AddressableNode, array_stack: deque[int]) -> str:
37
38
  fanout: dict[str, str] = {}
38
39
  fanout[self.signal("PSEL", node, "gi")] = (
39
40
  f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}|cpuif_rd_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
@@ -1,8 +1,10 @@
1
+ from collections import deque
1
2
  from typing import TYPE_CHECKING
2
3
 
3
4
  from systemrdl.node import AddressableNode
4
5
 
5
- from ...utils import get_indexed_path
6
+ from ...sv_int import SVInt
7
+ from ...utils import clog2, get_indexed_path
6
8
  from ..base_cpuif import BaseCpuif
7
9
  from .apb4_interface import APB4FlatInterface
8
10
 
@@ -33,8 +35,12 @@ class APB4CpuifFlat(BaseCpuif):
33
35
  ) -> str:
34
36
  return self._interface.signal(signal, node, idx)
35
37
 
36
- def fanout(self, node: AddressableNode) -> str:
38
+ def fanout(self, node: AddressableNode, array_stack: deque[int]) -> str:
37
39
  fanout: dict[str, str] = {}
40
+ addr_comp = [f"{self.signal('PADDR')}"]
41
+ for i, stride in enumerate(array_stack):
42
+ addr_comp.append(f"(gi{i}*{SVInt(stride, self.addr_width)})")
43
+
38
44
  fanout[self.signal("PSEL", node, "gi")] = (
39
45
  f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}|cpuif_rd_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
40
46
  )
@@ -42,7 +48,7 @@ class APB4CpuifFlat(BaseCpuif):
42
48
  fanout[self.signal("PWRITE", node, "gi")] = (
43
49
  f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
44
50
  )
45
- fanout[self.signal("PADDR", node, "gi")] = self.signal("PADDR")
51
+ fanout[self.signal("PADDR", node, "gi")] = f"{{{'-'.join(addr_comp)}}}[{clog2(node.size) - 1}:0]"
46
52
  fanout[self.signal("PPROT", node, "gi")] = self.signal("PPROT")
47
53
  fanout[self.signal("PWDATA", node, "gi")] = "cpuif_wr_data"
48
54
  fanout[self.signal("PSTRB", node, "gi")] = "cpuif_wr_byte_en"
@@ -2,6 +2,7 @@
2
2
 
3
3
  from systemrdl.node import AddressableNode
4
4
 
5
+ from ...utils import clog2
5
6
  from ..interface import FlatInterface, SVInterface
6
7
 
7
8
 
@@ -50,7 +51,7 @@ class APB4FlatInterface(FlatInterface):
50
51
  f"output logic {self.signal('PSEL', child)}",
51
52
  f"output logic {self.signal('PENABLE', child)}",
52
53
  f"output logic {self.signal('PWRITE', child)}",
53
- f"output logic [{self.cpuif.addr_width - 1}:0] {self.signal('PADDR', child)}",
54
+ f"output logic [{clog2(child.size) - 1}:0] {self.signal('PADDR', child)}",
54
55
  f"output logic [2:0] {self.signal('PPROT', child)}",
55
56
  f"output logic [{self.cpuif.data_width - 1}:0] {self.signal('PWDATA', child)}",
56
57
  f"output logic [{self.cpuif.data_width // 8 - 1}:0] {self.signal('PSTRB', child)}",
@@ -6,8 +6,6 @@
6
6
  assert_bad_data_width: assert($bits({{cpuif.signal("PWDATA")}}) == {{ds.package_name}}::{{ds.module_name|upper}}_DATA_WIDTH)
7
7
  else $error("Interface data width of %0d is incorrect. Shall be %0d bits", $bits({{cpuif.signal("PWDATA")}}), {{ds.package_name}}::{{ds.module_name|upper}}_DATA_WIDTH);
8
8
  end
9
- assert_wr_sel: assert property (@(posedge {{cpuif.signal("PCLK")}}) {{cpuif.signal("PSEL")}} && {{cpuif.signal("PWRITE")}} |-> ##1 ({{cpuif.signal("PREADY")}} || {{cpuif.signal("PSLVERR")}}))
10
- else $error("APB4 Slave port SEL implies that cpuif_wr_sel must be one-hot encoded");
11
9
  `endif
12
10
  {%- endif %}
13
11
 
@@ -1,3 +1,4 @@
1
+ from collections import deque
1
2
  from typing import TYPE_CHECKING, overload
2
3
 
3
4
  from systemrdl.node import AddressableNode
@@ -33,7 +34,7 @@ class AXI4LiteCpuif(BaseCpuif):
33
34
  def signal(self, signal: str, node: AddressableNode | None = None, indexer: str | None = None) -> str:
34
35
  return self._interface.signal(signal, node, indexer)
35
36
 
36
- def fanout(self, node: AddressableNode) -> str:
37
+ def fanout(self, node: AddressableNode, array_stack: deque[int]) -> str:
37
38
  fanout: dict[str, str] = {}
38
39
 
39
40
  wr_sel = f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
@@ -1,8 +1,10 @@
1
+ from collections import deque
1
2
  from typing import TYPE_CHECKING, overload
2
3
 
3
4
  from systemrdl.node import AddressableNode
4
5
 
5
- from ...utils import get_indexed_path
6
+ from ...sv_int import SVInt
7
+ from ...utils import clog2, get_indexed_path
6
8
  from ..base_cpuif import BaseCpuif
7
9
  from .axi4_lite_interface import AXI4LiteFlatInterface
8
10
 
@@ -35,15 +37,21 @@ class AXI4LiteCpuifFlat(BaseCpuif):
35
37
  def signal(self, signal: str, node: AddressableNode | None = None, indexer: str | None = None) -> str:
36
38
  return self._interface.signal(signal, node, indexer)
37
39
 
38
- def fanout(self, node: AddressableNode) -> str:
40
+ def fanout(self, node: AddressableNode, array_stack: deque[int]) -> str:
39
41
  fanout: dict[str, str] = {}
42
+ waddr_comp = [f"{self.signal('AWADDR')}"]
43
+ raddr_comp = [f"{self.signal('ARADDR')}"]
44
+ for i, stride in enumerate(array_stack):
45
+ offset = f"(gi{i}*{SVInt(stride, self.addr_width)})"
46
+ waddr_comp.append(offset)
47
+ raddr_comp.append(offset)
40
48
 
41
49
  wr_sel = f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
42
50
  rd_sel = f"cpuif_rd_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}"
43
51
 
44
52
  # Write address channel
45
53
  fanout[self.signal("AWVALID", node, "gi")] = wr_sel
46
- fanout[self.signal("AWADDR", node, "gi")] = self.signal("AWADDR")
54
+ fanout[self.signal("AWADDR", node, "gi")] = f"{{{'-'.join(waddr_comp)}}}[{clog2(node.size) - 1}:0]"
47
55
  fanout[self.signal("AWPROT", node, "gi")] = self.signal("AWPROT")
48
56
 
49
57
  # Write data channel
@@ -56,7 +64,7 @@ class AXI4LiteCpuifFlat(BaseCpuif):
56
64
 
57
65
  # Read address channel
58
66
  fanout[self.signal("ARVALID", node, "gi")] = rd_sel
59
- fanout[self.signal("ARADDR", node, "gi")] = self.signal("ARADDR")
67
+ fanout[self.signal("ARADDR", node, "gi")] = f"{{{'-'.join(raddr_comp)}}}[{clog2(node.size) - 1}:0]"
60
68
  fanout[self.signal("ARPROT", node, "gi")] = self.signal("ARPROT")
61
69
 
62
70
  # Read data channel (master -> slave)
@@ -2,6 +2,7 @@
2
2
 
3
3
  from systemrdl.node import AddressableNode
4
4
 
5
+ from ...utils import clog2
5
6
  from ..interface import FlatInterface, SVInterface
6
7
 
7
8
 
@@ -60,7 +61,7 @@ class AXI4LiteFlatInterface(FlatInterface):
60
61
  # Write address channel
61
62
  f"output logic {self.signal('AWVALID', child)}",
62
63
  f"input logic {self.signal('AWREADY', child)}",
63
- f"output logic [{self.cpuif.addr_width - 1}:0] {self.signal('AWADDR', child)}",
64
+ f"output logic [{clog2(child.size) - 1}:0] {self.signal('AWADDR', child)}",
64
65
  f"output logic [2:0] {self.signal('AWPROT', child)}",
65
66
  # Write data channel
66
67
  f"output logic {self.signal('WVALID', child)}",
@@ -74,7 +75,7 @@ class AXI4LiteFlatInterface(FlatInterface):
74
75
  # Read address channel
75
76
  f"output logic {self.signal('ARVALID', child)}",
76
77
  f"input logic {self.signal('ARREADY', child)}",
77
- f"output logic [{self.cpuif.addr_width - 1}:0] {self.signal('ARADDR', child)}",
78
+ f"output logic [{clog2(child.size) - 1}:0] {self.signal('ARADDR', child)}",
78
79
  f"output logic [2:0] {self.signal('ARPROT', child)}",
79
80
  # Read data channel
80
81
  f"input logic {self.signal('RVALID', child)}",
@@ -1,5 +1,6 @@
1
1
  import inspect
2
2
  import os
3
+ from collections import deque
3
4
  from typing import TYPE_CHECKING
4
5
 
5
6
  import jinja2 as jj
@@ -106,7 +107,7 @@ class BaseCpuif:
106
107
 
107
108
  return f"({cpuif_addr} - 'h{addr:x})[{clog2(size) - 1}:0]"
108
109
 
109
- def fanout(self, node: AddressableNode) -> str:
110
+ def fanout(self, node: AddressableNode, array_stack: deque[int]) -> str:
110
111
  raise NotImplementedError
111
112
 
112
113
  def fanin(self, node: AddressableNode | None = None) -> str:
@@ -43,7 +43,7 @@ class FanoutGenerator(BusDecoderListener):
43
43
  )
44
44
  self._stack.append(fb)
45
45
 
46
- self._stack[-1] += self._cpuif.fanout(node)
46
+ self._stack[-1] += self._cpuif.fanout(node, self._array_stride_stack)
47
47
 
48
48
  return action
49
49
 
@@ -4,7 +4,7 @@ from systemrdl.node import AddressableNode, AddrmapNode, FieldNode, Node, Regfil
4
4
  from systemrdl.rdltypes.references import PropertyReference
5
5
  from systemrdl.walker import RDLListener, RDLWalker, WalkerAction
6
6
 
7
- from .utils import is_pow2, ref_is_internal, roundup_pow2
7
+ from .utils import ref_is_internal
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from .exporter import BusDecoderExporter
@@ -159,27 +159,3 @@ class DesignValidator(RDLListener):
159
159
  else:
160
160
  # Exiting top addrmap. Resolve final answer
161
161
  self.contains_external_block = contains_external_block
162
-
163
- if contains_external_block:
164
- # Check that addressing follows strict alignment rules to allow
165
- # for simplified address bit-pruning
166
- if node.external:
167
- err_suffix = "is external"
168
- else:
169
- err_suffix = "contains an external addrmap/regfile/mem"
170
-
171
- req_align = roundup_pow2(node.size)
172
- if (node.raw_address_offset % req_align) != 0:
173
- self.msg.error(
174
- f"Address offset +0x{node.raw_address_offset:x} of instance '{node.inst_name}' is not a power of 2 multiple of its size 0x{node.size:x}. "
175
- f"This is required by the busdecoder exporter if a component {err_suffix}.",
176
- node.inst.inst_src_ref,
177
- )
178
- if node.is_array:
179
- assert node.array_stride is not None
180
- if not is_pow2(node.array_stride):
181
- self.msg.error(
182
- f"Address stride of instance array '{node.inst_name}' is not a power of 2"
183
- f"This is required by the busdecoder exporter if a component {err_suffix}.",
184
- node.inst.inst_src_ref,
185
- )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: peakrdl-busdecoder
3
- Version: 0.6.0
3
+ Version: 0.6.3
4
4
  Summary: Generate a SystemVerilog bus decoder from SystemRDL for splitting CPU interfaces to multiple sub-address spaces
5
5
  Author: Arnav Sacheti
6
6
  License: LGPLv3
@@ -26,9 +26,10 @@ Provides-Extra: cli
26
26
  Requires-Dist: peakrdl-cli>=1.2.3; extra == "cli"
27
27
  Dynamic: license-file
28
28
 
29
- [![Documentation Status](https://readthedocs.org/projects/peakrdl-busdecoder/badge/?version=latest)](http://peakrdl-busdecoder.readthedocs.io)
30
- [![build](https://github.com/arnavsacheti/PeakRDL-BusDecoder/workflows/build/badge.svg)](https://github.com/arnavsacheti/PeakRDL-BusDecoder/actions?query=workflow%3Abuild+branch%3Amain)
31
- [![Coverage Status](https://coveralls.io/repos/github/arnavsacheti/PeakRDL-BusDecoder/badge.svg?branch=main)](https://coveralls.io/github/arnavsacheti/PeakRDL-BusDecoder?branch=main)
29
+ [![Build](https://github.com/arnavsacheti/PeakRDL-BusDecoder/actions/workflows/build.yml/badge.svg)](https://github.com/arnavsacheti/PeakRDL-BusDecoder/actions/workflows/build.yml)
30
+ [![Test](https://github.com/arnavsacheti/PeakRDL-BusDecoder/actions/workflows/test.yml/badge.svg)](https://github.com/arnavsacheti/PeakRDL-BusDecoder/actions/workflows/test.yml)
31
+ [![Documentation](https://github.com/arnavsacheti/PeakRDL-BusDecoder/actions/workflows/docs.yml/badge.svg)](https://github.com/arnavsacheti/PeakRDL-BusDecoder/actions/workflows/docs.yml)
32
+ [![Coverage Status](https://coveralls.io/repos/github/arnavsacheti/PeakRDL-BusDecoder/badge.svg?branch=tests/coveralls)](https://coveralls.io/github/arnavsacheti/PeakRDL-BusDecoder?branch=tests/coveralls)
32
33
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/peakrdl-busdecoder.svg)](https://pypi.org/project/peakrdl-busdecoder)
33
34
 
34
35
  # PeakRDL-BusDecoder
@@ -12,7 +12,7 @@ peakrdl_busdecoder/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  peakrdl_busdecoder/struct_gen.py,sha256=UGNdGg-S6u2JRoDExP6Mt5h3bu01fP-gQ15FcwD9gNw,2334
13
13
  peakrdl_busdecoder/sv_int.py,sha256=D57h4sgqnQWQtPw80OeDZk_i2_t2aOTsihmASB4NkGo,1788
14
14
  peakrdl_busdecoder/utils.py,sha256=Kdcee6bhubI5XVX20JQ3wo0qYJTknqrv4l8kxhSd7wI,2219
15
- peakrdl_busdecoder/validate_design.py,sha256=91yuWEzj0aAZ0eqzF1TF4N17yqG-D5oK5yYxDINlPms,8857
15
+ peakrdl_busdecoder/validate_design.py,sha256=74MM3MC1kII0s2HqfEBvhWvD2rummn429X7qmtPjsSI,7523
16
16
  peakrdl_busdecoder/body/__init__.py,sha256=ZFTs8xIxeLyasyabLtGp7kClmmLlJpqdKJ854pmvTJg,311
17
17
  peakrdl_busdecoder/body/body.py,sha256=X4T3iCr94cgoz76tt2WtvhGGCweUFpUr9ogD6ol0LIg,466
18
18
  peakrdl_busdecoder/body/combinational_body.py,sha256=2FqbGHi405oEMAKlBfXz4hnLSn8Sr60kkFIUcL9oXf4,195
@@ -20,30 +20,30 @@ peakrdl_busdecoder/body/for_loop_body.py,sha256=lJYfDiB7MF9_mfbGEApoVHRViBCqpGRs
20
20
  peakrdl_busdecoder/body/if_body.py,sha256=S4oVS7yz04R1i-23W-aWpVcVZa5dW-H0FL_KnMy-Wsc,3261
21
21
  peakrdl_busdecoder/body/struct_body.py,sha256=74ItYoYD-GqEidxc-ncV5y8fzGoM47NI4GnnweclmS8,624
22
22
  peakrdl_busdecoder/cpuif/__init__.py,sha256=T8YrELGuOBIPgj1e86tNJ5tSCf7fXpPadqa71v5MEx8,59
23
- peakrdl_busdecoder/cpuif/base_cpuif.py,sha256=tSqBeV_eG5zvBaLltLY8qmJBhwuCym3rs_q4mIJT6HI,5058
23
+ peakrdl_busdecoder/cpuif/base_cpuif.py,sha256=PBRPLAkg_QYVnHXsd0O7gQhRGqJzJQlZh_HGSk6vRGg,5113
24
24
  peakrdl_busdecoder/cpuif/fanin_gen.py,sha256=ioCxjj3V3X8rHssqwuI4p_U-LKpBalATW_Qshtt8j9U,2425
25
25
  peakrdl_busdecoder/cpuif/fanin_intermediate_gen.py,sha256=hfvMyyx5ajEzvop3dzV37dT6Jn9yjORFnUkMAT1034A,5271
26
- peakrdl_busdecoder/cpuif/fanout_gen.py,sha256=0-6eMzYbf25csHaRUJCsiyFz7lxS2Mdu0bXNm6e6cFI,1850
26
+ peakrdl_busdecoder/cpuif/fanout_gen.py,sha256=-kopGBHC07D9VreygfN0VubHGVVO51og4lAFq6B1oV8,1876
27
27
  peakrdl_busdecoder/cpuif/interface.py,sha256=4NYJHv2rr50YLm_eB9I89Y4XUckMD42ZtHskU0_Nm8o,6448
28
28
  peakrdl_busdecoder/cpuif/apb3/__init__.py,sha256=Uq82IJHzlITUvjTuETvPpSzvLEYoairzzPKfPz7kuC4,119
29
- peakrdl_busdecoder/cpuif/apb3/apb3_cpuif.py,sha256=iQDpHpv9HQQiBm9zHlUuSCaUysraFvHA25kt2XlpKmM,4248
30
- peakrdl_busdecoder/cpuif/apb3/apb3_cpuif_flat.py,sha256=az0u0YOIuB5Tk2Dq76hu1B_batkiE3phnJS8G4pGyho,2422
31
- peakrdl_busdecoder/cpuif/apb3/apb3_interface.py,sha256=hU0GUCZGYnvskmZU6NznMGgRJFliD360WgwhsQh9rqY,2147
29
+ peakrdl_busdecoder/cpuif/apb3/apb3_cpuif.py,sha256=Gst5RM2Qwpk-OxBjLE6mK2SAuN7xqV1nMi79AvD4q5Y,4303
30
+ peakrdl_busdecoder/cpuif/apb3/apb3_cpuif_flat.py,sha256=Hv-JNx3LBbxOWYnud97XS26G3OvNCrbMis_T6zkYhmw,2718
31
+ peakrdl_busdecoder/cpuif/apb3/apb3_interface.py,sha256=PQwMtjETR9-c9S1BzjdWieCis2qoOfUyRQAWcD3ScyE,2170
32
32
  peakrdl_busdecoder/cpuif/apb3/apb3_tmpl.sv,sha256=6et25KbiNkZBD1hxjSx0XZFUP9NnvVpixMSGtwJuwdA,1967
33
33
  peakrdl_busdecoder/cpuif/apb4/__init__.py,sha256=k4JCbIrKGT8hiRvWJDcqc5xx7j9i_xYgpXU70sNaLsc,119
34
- peakrdl_busdecoder/cpuif/apb4/apb4_cpuif.py,sha256=SnQ1wERBkk1yc4ZiE4z__Sp2441ljFJ7b7mxGPKoiFQ,4457
35
- peakrdl_busdecoder/cpuif/apb4/apb4_cpuif_flat.py,sha256=rTLOYGdHLGD6aPs18Wb7R7gASnX1QnVpYQCotbrhP5U,2564
36
- peakrdl_busdecoder/cpuif/apb4/apb4_interface.py,sha256=Ln5jIBhCHbIYS5sxR5AjFVvcMYD_rw71VF6KqyyNUkg,2449
37
- peakrdl_busdecoder/cpuif/apb4/apb4_tmpl.sv,sha256=jjzIbiNvsDeMQWOIo08TpeKbSP3NILQkP3gWdlcX9Ak,2310
34
+ peakrdl_busdecoder/cpuif/apb4/apb4_cpuif.py,sha256=HarcUUxJcWLraijVaqHVWQOW_9TERD-fyfo3m_uzVhw,4512
35
+ peakrdl_busdecoder/cpuif/apb4/apb4_cpuif_flat.py,sha256=4uNfunrRR8uu0WcgUZFilFlj-Og1eJDKBDT4aMps4wI,2860
36
+ peakrdl_busdecoder/cpuif/apb4/apb4_interface.py,sha256=dnVWHi1NZScIR7sLYVfxbJDrU-Fm221O1XvHMdpSyi4,2472
37
+ peakrdl_busdecoder/cpuif/apb4/apb4_tmpl.sv,sha256=woX7UBWvg_mtnrBKSel60p269d1sFgGelzgA5kISxew,2020
38
38
  peakrdl_busdecoder/cpuif/axi4lite/__init__.py,sha256=5XuWfPK2jDzr6egKUDJFr8l3k3lW-feLIh-lN7Mo8Ks,145
39
- peakrdl_busdecoder/cpuif/axi4lite/axi4_lite_cpuif.py,sha256=_DpGXEFs77AFQAAspsGZxIxQuhehjPPFgL_9hLfuQeQ,5001
40
- peakrdl_busdecoder/cpuif/axi4lite/axi4_lite_cpuif_flat.py,sha256=M9f6-2XloH1UCwHctolO4Um8BfAYiivWVM5PmAfksjY,3420
41
- peakrdl_busdecoder/cpuif/axi4lite/axi4_lite_interface.py,sha256=eBs3RLGGvvQen4C6MR9RUZIHuTQEidYHG4NGxlYY1Bc,3702
39
+ peakrdl_busdecoder/cpuif/axi4lite/axi4_lite_cpuif.py,sha256=bSHP_xYczv30-F62wZYe3rqma458qi6sqSzLAKApiGE,5056
40
+ peakrdl_busdecoder/cpuif/axi4lite/axi4_lite_cpuif_flat.py,sha256=47yz1o6yoGFyoIswdka946n_kkwsApUhqYO_xNKekR4,3868
41
+ peakrdl_busdecoder/cpuif/axi4lite/axi4_lite_interface.py,sha256=EXW-nPJwMF_oCPdJ4XmreiLwhnpqSca9iViosh2rEXM,3721
42
42
  peakrdl_busdecoder/cpuif/axi4lite/axi4_lite_tmpl.sv,sha256=ketPrq715LSEs8Ar9ecXgnSe2AUAdQ70oNVmDbXc2Tc,3351
43
43
  peakrdl_busdecoder/udps/__init__.py,sha256=gPc74OMVWTIr5vgtFArzbhEyi1OYjllR3ZFwHJ8APaY,106
44
- peakrdl_busdecoder-0.6.0.dist-info/licenses/LICENSE,sha256=eAMIGRcnsTDZVr4qelHkJ49Rd_IiDY4_MVHU7N0UWSw,7646
45
- peakrdl_busdecoder-0.6.0.dist-info/METADATA,sha256=GNPShOm8hPu8gRdvDCK6v5rQgKJIPuPUVeIyTfZf83U,2558
46
- peakrdl_busdecoder-0.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
- peakrdl_busdecoder-0.6.0.dist-info/entry_points.txt,sha256=7Xzgt-C2F4cQu1kRLpZa0MbXSFFMC1SWEDnZkY0GH7s,73
48
- peakrdl_busdecoder-0.6.0.dist-info/top_level.txt,sha256=ZIYuTsl8cYby4g8tNR_JGzbYYTrG9mqYLSBqnY1Gpmk,19
49
- peakrdl_busdecoder-0.6.0.dist-info/RECORD,,
44
+ peakrdl_busdecoder-0.6.3.dist-info/licenses/LICENSE,sha256=eAMIGRcnsTDZVr4qelHkJ49Rd_IiDY4_MVHU7N0UWSw,7646
45
+ peakrdl_busdecoder-0.6.3.dist-info/METADATA,sha256=rQjXAQ5lEhiT7PIKdvIW8ecDc9El5aeEbGr2y5P5bAY,2797
46
+ peakrdl_busdecoder-0.6.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
+ peakrdl_busdecoder-0.6.3.dist-info/entry_points.txt,sha256=7Xzgt-C2F4cQu1kRLpZa0MbXSFFMC1SWEDnZkY0GH7s,73
48
+ peakrdl_busdecoder-0.6.3.dist-info/top_level.txt,sha256=ZIYuTsl8cYby4g8tNR_JGzbYYTrG9mqYLSBqnY1Gpmk,19
49
+ peakrdl_busdecoder-0.6.3.dist-info/RECORD,,