from litex.soc.interconnect import wishbone
from litex.soc.interconnect import axi
+# Record layouts -----------------------------------------------------------------------------------
+
+def axi_fifo_ctrl_layout():
+ return [
+ ("racount", 3, DIR_M_TO_S),
+ ("rcount", 8, DIR_M_TO_S),
+ ("rdissuecapen", 1, DIR_S_TO_M),
+ ("wacount", 6, DIR_M_TO_S),
+ ("wcount", 8, DIR_M_TO_S),
+ ("wrissuecapen", 1, DIR_S_TO_M),
+ ]
+
+# SoC Zync -----------------------------------------------------------------------------------------
class SoCZynq(SoCCore):
SoCCore.mem_map["csr"] = 0x00000000
)
platform.add_ip(os.path.join("ip", ps7_name + ".xci"))
+ # GP0 ------------------------------------------------------------------------------------------
+
def add_gp0(self):
self.axi_gp0 = axi_gp0 = axi.AXIInterface(data_width=32, address_width=32, id_width=12)
self.ps7_params.update(
o_M_AXI_GP0_WVALID=axi_gp0.w.valid,
o_M_AXI_GP0_WLAST=axi_gp0.w.last,
i_M_AXI_GP0_WREADY=axi_gp0.w.ready,
- #o_M_AXI_GP0_WID=,
+ o_M_AXI_GP0_WID=axi_gp0.w.id,
o_M_AXI_GP0_WDATA=axi_gp0.w.data,
o_M_AXI_GP0_WSTRB=axi_gp0.w.strb,
i_M_AXI_GP0_RDATA=axi_gp0.r.data,
)
+ # HP0 ------------------------------------------------------------------------------------------
+
+ def add_hp0(self):
+ self.axi_hp0 = axi_hp0 = axi.AXIInterface(data_width=64, address_width=32, id_width=6)
+ self.axi_hp0_fifo_ctrl = axi_hp0_fifo_ctrl = Record(axi_fifo_ctrl_layout())
+ self.ps7_params.update(
+ # axi hp0 aw
+ i_M_AXI_HP0_AWVALID=axi_hp0.aw.valid,
+ o_M_AXI_HP0_AWREADY=axi_hp0.aw.ready,
+ i_M_AXI_HP0_AWADDR=axi_hp0.aw.addr,
+ i_M_AXI_HP0_AWBURST=axi_hp0.aw.burst,
+ i_M_AXI_HP0_AWLEN=axi_hp0.aw.len,
+ i_M_AXI_HP0_AWSIZE=axi_hp0.aw.size,
+ i_M_AXI_HP0_AWID=axi_hp0.aw.id,
+ i_M_AXI_HP0_AWLOCK=axi_hp0.aw.lock,
+ i_M_AXI_HP0_AWPROT=axi_hp0.aw.prot,
+ i_M_AXI_HP0_AWCACHE=axi_hp0.aw.cache,
+ i_M_AXI_HP0_AWQOS=axi_hp0.aw.qos,
+
+ # axi hp0 w
+ i_M_AXI_HP0_WVALID=axi_hp0.w.valid,
+ i_M_AXI_HP0_WLAST=axi_hp0.w.last,
+ o_M_AXI_HP0_WREADY=axi_hp0.w.ready,
+ i_M_AXI_HP0_WID=axi_hp0.w.id,
+ i_M_AXI_HP0_WDATA=axi_hp0.w.data,
+ i_M_AXI_HP0_WSTRB=axi_hp0.w.strb,
+
+ # axi hp0 b
+ o_M_AXI_HP0_BVALID=axi_hp0.b.valid,
+ i_M_AXI_HP0_BREADY=axi_hp0.b.ready,
+ o_M_AXI_HP0_BID=axi_hp0.b.id,
+ o_M_AXI_HP0_BRESP=axi_hp0.b.resp,
+
+ # axi hp0 ar
+ i_M_AXI_HP0_ARVALID=axi_hp0.ar.valid,
+ o_M_AXI_HP0_ARREADY=axi_hp0.ar.ready,
+ i_M_AXI_HP0_ARADDR=axi_hp0.ar.addr,
+ i_M_AXI_HP0_ARBURST=axi_hp0.ar.burst,
+ i_M_AXI_HP0_ARLEN=axi_hp0.ar.len,
+ i_M_AXI_HP0_ARID=axi_hp0.ar.id,
+ i_M_AXI_HP0_ARLOCK=axi_hp0.ar.lock,
+ i_M_AXI_HP0_ARSIZE=axi_hp0.ar.size,
+ i_M_AXI_HP0_ARPROT=axi_hp0.ar.prot,
+ i_M_AXI_HP0_ARCACHE=axi_hp0.ar.cache,
+ i_M_AXI_HP0_ARQOS=axi_hp0.ar.qos,
+
+ # axi hp0 r
+ o_M_AXI_HP0_RVALID=axi_hp0.r.valid,
+ i_M_AXI_HP0_RREADY=axi_hp0.r.ready,
+ o_M_AXI_HP0_RLAST=axi_hp0.r.last,
+ o_M_AXI_HP0_RID=axi_hp0.r.id,
+ o_M_AXI_HP0_RRESP=axi_hp0.r.resp,
+ o_M_AXI_HP0_RDATA=axi_hp0.r.data,
+
+ # axi hp0 fifo ctrl
+ i_S_AXI_HP0_FIFO_CTRL_0_RACOUNT=axi_hp0_fifo_ctrl.racount,
+ i_S_AXI_HP0_FIFO_CTRL_0_RCOUNT=axi_hp0_fifo_ctrl.rcount,
+ o_S_AXI_HP0_FIFO_CTRL_0_RDISSUECAPEN=axi_hp0_fifo_ctrl.rdissuecapen,
+ i_S_AXI_HP0_FIFO_CTRL_0_WACOUNT=axi_hp0_fifo_ctrl.wacount,
+ i_S_AXI_HP0_FIFO_CTRL_0_WCOUNT=axi_hp0_fifo_ctrl.wcount,
+ o_S_AXI_HP0_FIFO_CTRL_0_WRISSUECAPEN=axi_hp0_fifo_ctrl.wrissuecapen
+ )
+
def add_axi_to_wishbone(self, axi_port, base_address=0x43c00000):
wb = wishbone.Interface()
axi2wishbone = axi.AXI2Wishbone(axi_port, wb, base_address)