From 575cd330c60d8748416c0c64f7dd53ac1877fd95 Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 3 Feb 2026 23:06:07 -0800 Subject: [PATCH] use fanin_wr and fanin_rd --- .../cpuif/taxi_apb/taxi_apb_cpuif.py | 13 +++++++++++-- .../cpuif/taxi_apb/taxi_apb_tmpl.sv | 5 ++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/peakrdl_busdecoder/cpuif/taxi_apb/taxi_apb_cpuif.py b/src/peakrdl_busdecoder/cpuif/taxi_apb/taxi_apb_cpuif.py index f0dc7be..0221025 100644 --- a/src/peakrdl_busdecoder/cpuif/taxi_apb/taxi_apb_cpuif.py +++ b/src/peakrdl_busdecoder/cpuif/taxi_apb/taxi_apb_cpuif.py @@ -53,7 +53,7 @@ class TaxiAPBCpuif(BaseCpuif): return "\n".join(map(lambda kv: f"assign {kv[0]} = {kv[1]};", fanout.items())) - def fanin(self, node: AddressableNode | None = None) -> str: + def fanin_wr(self, node: AddressableNode | None = None) -> str: fanin: dict[str, str] = {} if node is None: fanin["cpuif_rd_ack"] = "'0" @@ -73,18 +73,27 @@ class TaxiAPBCpuif(BaseCpuif): # no user? return "\n".join(map(lambda kv: f"{kv[0]} = {kv[1]};", fanin.items())) - def readback(self, node: AddressableNode | None = None) -> str: + def fanin_rd(self, node: AddressableNode | None = None, *, error: bool = False) -> str: fanin: dict[str, str] = {} if node is None: + fanin["cpuif_rd_ack"] = "'0" + fanin["cpuif_rd_err"] = "'0" fanin["cpuif_rd_data"] = "'0" + if error: + fanin["cpuif_rd_ack"] = "'1" + fanin["cpuif_rd_err"] = "cpuif_rd_sel.cpuif_err" else: # Use intermediate signals for interface arrays to avoid # non-constant indexing of interface arrays in procedural blocks if self.is_interface and node.is_array and node.array_dimensions: # Generate array index string [i0][i1]... for the intermediate signal array_idx = "".join(f"[i{i}]" for i in range(len(node.array_dimensions))) + fanin["cpuif_rd_ack"] = f"{node.inst_name}_fanin_ready{array_idx}" + fanin["cpuif_rd_err"] = f"{node.inst_name}_fanin_err{array_idx}" fanin["cpuif_rd_data"] = f"{node.inst_name}_fanin_data{array_idx}" else: + fanin["cpuif_rd_ack"] = self.signal("prdata", node, "i") + fanin["cpuif_rd_err"] = self.signal("pslverr", node, "i") fanin["cpuif_rd_data"] = self.signal("prdata", node, "i") return "\n".join(map(lambda kv: f"{kv[0]} = {kv[1]};", fanin.items())) diff --git a/src/peakrdl_busdecoder/cpuif/taxi_apb/taxi_apb_tmpl.sv b/src/peakrdl_busdecoder/cpuif/taxi_apb/taxi_apb_tmpl.sv index 8c6c908..4fe842c 100644 --- a/src/peakrdl_busdecoder/cpuif/taxi_apb/taxi_apb_tmpl.sv +++ b/src/peakrdl_busdecoder/cpuif/taxi_apb/taxi_apb_tmpl.sv @@ -24,9 +24,8 @@ assign cpuif_wr_data = {{cpuif.signal("pwdata")}}; assign cpuif_wr_byte_en = {{cpuif.signal("pstrb")}}; assign {{cpuif.signal("prdata")}} = cpuif_rd_data; -assign {{cpuif.signal("pready")}} = cpuif_rd_ack; -assign {{cpuif.signal("pslverr")}} = cpuif_rd_err | cpuif_rd_sel.cpuif_err | cpuif_wr_sel.cpuif_err; - +assign {{cpuif.signal("pready")}} = cpuif_rd_ack | cpuif_wr_ack; +assign {{cpuif.signal("pslverr")}} = cpuif_rd_err | cpuif_wr_err; //-------------------------------------------------------------------------- // Fanout CPU Bus interface signals //--------------------------------------------------------------------------