use fanin_wr and fanin_rd
This commit is contained in:
@@ -53,7 +53,7 @@ class TaxiAPBCpuif(BaseCpuif):
|
|||||||
|
|
||||||
return "\n".join(map(lambda kv: f"assign {kv[0]} = {kv[1]};", fanout.items()))
|
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, *, error: bool = False) -> str:
|
||||||
fanin: dict[str, str] = {}
|
fanin: dict[str, str] = {}
|
||||||
if node is None:
|
if node is None:
|
||||||
fanin["cpuif_rd_ack"] = "'0"
|
fanin["cpuif_rd_ack"] = "'0"
|
||||||
@@ -73,18 +73,27 @@ class TaxiAPBCpuif(BaseCpuif):
|
|||||||
# no user?
|
# no user?
|
||||||
return "\n".join(map(lambda kv: f"{kv[0]} = {kv[1]};", fanin.items()))
|
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] = {}
|
fanin: dict[str, str] = {}
|
||||||
if node is None:
|
if node is None:
|
||||||
|
fanin["cpuif_rd_ack"] = "'0"
|
||||||
|
fanin["cpuif_rd_err"] = "'0"
|
||||||
fanin["cpuif_rd_data"] = "'0"
|
fanin["cpuif_rd_data"] = "'0"
|
||||||
|
if error:
|
||||||
|
fanin["cpuif_rd_ack"] = "'1"
|
||||||
|
fanin["cpuif_rd_err"] = "cpuif_rd_sel.cpuif_err"
|
||||||
else:
|
else:
|
||||||
# Use intermediate signals for interface arrays to avoid
|
# Use intermediate signals for interface arrays to avoid
|
||||||
# non-constant indexing of interface arrays in procedural blocks
|
# non-constant indexing of interface arrays in procedural blocks
|
||||||
if self.is_interface and node.is_array and node.array_dimensions:
|
if self.is_interface and node.is_array and node.array_dimensions:
|
||||||
# Generate array index string [i0][i1]... for the intermediate signal
|
# Generate array index string [i0][i1]... for the intermediate signal
|
||||||
array_idx = "".join(f"[i{i}]" for i in range(len(node.array_dimensions)))
|
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}"
|
fanin["cpuif_rd_data"] = f"{node.inst_name}_fanin_data{array_idx}"
|
||||||
else:
|
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")
|
fanin["cpuif_rd_data"] = self.signal("prdata", node, "i")
|
||||||
|
|
||||||
return "\n".join(map(lambda kv: f"{kv[0]} = {kv[1]};", fanin.items()))
|
return "\n".join(map(lambda kv: f"{kv[0]} = {kv[1]};", fanin.items()))
|
||||||
|
|||||||
@@ -24,9 +24,8 @@ assign cpuif_wr_data = {{cpuif.signal("pwdata")}};
|
|||||||
assign cpuif_wr_byte_en = {{cpuif.signal("pstrb")}};
|
assign cpuif_wr_byte_en = {{cpuif.signal("pstrb")}};
|
||||||
|
|
||||||
assign {{cpuif.signal("prdata")}} = cpuif_rd_data;
|
assign {{cpuif.signal("prdata")}} = cpuif_rd_data;
|
||||||
assign {{cpuif.signal("pready")}} = cpuif_rd_ack;
|
assign {{cpuif.signal("pready")}} = cpuif_rd_ack | cpuif_wr_ack;
|
||||||
assign {{cpuif.signal("pslverr")}} = cpuif_rd_err | cpuif_rd_sel.cpuif_err | cpuif_wr_sel.cpuif_err;
|
assign {{cpuif.signal("pslverr")}} = cpuif_rd_err | cpuif_wr_err;
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Fanout CPU Bus interface signals
|
// Fanout CPU Bus interface signals
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user