fanout/fainin wip
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from systemrdl.node import AddressableNode
|
||||
|
||||
from ...utils import get_indexed_path
|
||||
from ..base_cpuif import BaseCpuif
|
||||
|
||||
|
||||
@@ -26,20 +27,32 @@ class APB3Cpuif(BaseCpuif):
|
||||
self,
|
||||
signal: str,
|
||||
node: AddressableNode | None = None,
|
||||
idx: str | int | None = None,
|
||||
) -> str:
|
||||
if node is None:
|
||||
# Node is none, so this is a slave signal
|
||||
return f"s_apb.{signal}"
|
||||
|
||||
# Master signal
|
||||
base = f"m_apb_{node.inst_name}"
|
||||
if not node.is_array:
|
||||
return f"{base}.{signal}"
|
||||
if node.current_idx is not None:
|
||||
# This is a specific instance of an array
|
||||
return f"{base}_{'_'.join(map(str, node.current_idx))}.{signal}"
|
||||
if idx is not None:
|
||||
return f"{base}[{idx}].{signal}"
|
||||
return f"m_apb_{node.inst_name}.{signal}"
|
||||
|
||||
raise ValueError("Must provide an index for arrayed interface signals")
|
||||
def fanout(self, node: AddressableNode, idx: str | None = None) -> str:
|
||||
fanout: dict[str, str] = {}
|
||||
fanout[self.signal("PSEL", node, idx)] = (
|
||||
f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node)}|cpuif_rd_sel.{get_indexed_path(self.exp.ds.top_node, node)}"
|
||||
)
|
||||
fanout[self.signal("PSEL", node, idx)] = self.signal("PSEL")
|
||||
fanout[self.signal("PWRITE", node, idx)] = (
|
||||
f"cpuif_wr_sel.{get_indexed_path(self.exp.ds.top_node, node)}"
|
||||
)
|
||||
fanout[self.signal("PADDR", node, idx)] = self.signal("PADDR")
|
||||
fanout[self.signal("PWDATA", node, idx)] = "cpuif_wr_data"
|
||||
|
||||
return "\n".join(map(lambda kv: f"assign {kv[0]} = {kv[1]};", fanout.items()))
|
||||
|
||||
def fanin(self, node: AddressableNode, idx: str | None = None) -> str:
|
||||
fanin: dict[str, str] = {}
|
||||
fanin["cpuif_rd_data"] = self.signal("PRDATA", node, idx)
|
||||
fanin["cpuif_rd_ack"] = self.signal("PREADY", node, idx)
|
||||
fanin["cpuif_rd_err"] = self.signal("PSLVERR", node, idx)
|
||||
|
||||
return "\n".join(map(lambda kv: f"{kv[0]} = {kv[1]};", fanin.items()))
|
||||
|
||||
Reference in New Issue
Block a user