Fix APB PREADY not asserted on invalid address decode errors (#40)
Fix APB PREADY signal to assert during error conditions Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
This commit is contained in:
@@ -53,22 +53,32 @@ class APB3CpuifFlat(BaseCpuif):
|
||||
|
||||
return "\n".join(f"assign {kv[0]} = {kv[1]};" for kv in fanout.items())
|
||||
|
||||
def fanin(self, node: AddressableNode | None = None) -> str:
|
||||
def fanin_wr(self, node: AddressableNode | None = None, *, error: bool = False) -> str:
|
||||
fanin: dict[str, str] = {}
|
||||
if node is None:
|
||||
fanin["cpuif_wr_ack"] = "'0"
|
||||
fanin["cpuif_wr_err"] = "'0"
|
||||
if error:
|
||||
fanin["cpuif_wr_ack"] = "'1"
|
||||
fanin["cpuif_wr_err"] = "cpuif_wr_sel.cpuif_err"
|
||||
else:
|
||||
fanin["cpuif_wr_ack"] = self.signal("PREADY", node, "i")
|
||||
fanin["cpuif_wr_err"] = self.signal("PSLVERR", node, "i")
|
||||
|
||||
return "\n".join(f"{kv[0]} = {kv[1]};" for kv in fanin.items())
|
||||
|
||||
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:
|
||||
fanin["cpuif_rd_ack"] = self.signal("PREADY", node, "i")
|
||||
fanin["cpuif_rd_err"] = self.signal("PSLVERR", node, "i")
|
||||
|
||||
return "\n".join(f"{kv[0]} = {kv[1]};" for kv in fanin.items())
|
||||
|
||||
def readback(self, node: AddressableNode | None = None) -> str:
|
||||
fanin: dict[str, str] = {}
|
||||
if node is None:
|
||||
fanin["cpuif_rd_data"] = "'0"
|
||||
else:
|
||||
fanin["cpuif_rd_data"] = self.signal("PRDATA", node, "i")
|
||||
|
||||
return "\n".join(f"{kv[0]} = {kv[1]};" for kv in fanin.items())
|
||||
|
||||
Reference in New Issue
Block a user