diff --git a/src/peakrdl_busdecoder/cpuif/apb4/apb4_cpuif_flat.py b/src/peakrdl_busdecoder/cpuif/apb4/apb4_cpuif_flat.py index 17ec392..56ed87f 100644 --- a/src/peakrdl_busdecoder/cpuif/apb4/apb4_cpuif_flat.py +++ b/src/peakrdl_busdecoder/cpuif/apb4/apb4_cpuif_flat.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING from systemrdl.node import AddressableNode -from ...utils import get_indexed_path +from ...utils import clog2, get_indexed_path from ..base_cpuif import BaseCpuif from .apb4_interface import APB4FlatInterface @@ -42,7 +42,7 @@ class APB4CpuifFlat(BaseCpuif): fanout[self.signal("PWRITE", node, "gi")] = ( f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node, 'gi')}" ) - fanout[self.signal("PADDR", node, "gi")] = self.signal("PADDR") + fanout[self.signal("PADDR", node, "gi")] = f"{self.signal('PADDR')}[{clog2(node.size) - 1}:0]" fanout[self.signal("PPROT", node, "gi")] = self.signal("PPROT") fanout[self.signal("PWDATA", node, "gi")] = "cpuif_wr_data" fanout[self.signal("PSTRB", node, "gi")] = "cpuif_wr_byte_en" diff --git a/src/peakrdl_busdecoder/cpuif/apb4/apb4_interface.py b/src/peakrdl_busdecoder/cpuif/apb4/apb4_interface.py index be87240..3ad19fb 100644 --- a/src/peakrdl_busdecoder/cpuif/apb4/apb4_interface.py +++ b/src/peakrdl_busdecoder/cpuif/apb4/apb4_interface.py @@ -2,6 +2,7 @@ from systemrdl.node import AddressableNode +from ...utils import clog2 from ..interface import FlatInterface, SVInterface @@ -50,7 +51,7 @@ class APB4FlatInterface(FlatInterface): f"output logic {self.signal('PSEL', child)}", f"output logic {self.signal('PENABLE', child)}", f"output logic {self.signal('PWRITE', child)}", - f"output logic [{self.cpuif.addr_width - 1}:0] {self.signal('PADDR', child)}", + f"output logic [{clog2(child.size) - 1}:0] {self.signal('PADDR', child)}", f"output logic [2:0] {self.signal('PPROT', child)}", f"output logic [{self.cpuif.data_width - 1}:0] {self.signal('PWDATA', child)}", f"output logic [{self.cpuif.data_width // 8 - 1}:0] {self.signal('PSTRB', child)}",