summaryrefslogtreecommitdiff
path: root/platform/wavelet3d/w3d_interconnect.sv
diff options
context:
space:
mode:
Diffstat (limited to 'platform/wavelet3d/w3d_interconnect.sv')
-rw-r--r--platform/wavelet3d/w3d_interconnect.sv123
1 files changed, 89 insertions, 34 deletions
diff --git a/platform/wavelet3d/w3d_interconnect.sv b/platform/wavelet3d/w3d_interconnect.sv
index 6f5fa66..c874c4b 100644
--- a/platform/wavelet3d/w3d_interconnect.sv
+++ b/platform/wavelet3d/w3d_interconnect.sv
@@ -7,10 +7,12 @@ module w3d_interconnect
host_dbus,
host_ibus,
sgdma_mem,
+ vdc_stream,
if_axib.m dram,
if_axil.m gfx_ctrl,
+ vdc_ctrl,
sgdma_ctrl,
external_io
);
@@ -26,7 +28,8 @@ module w3d_interconnect
.gfx_vram,
.host_dbus(dram_host.s),
.host_ibus,
- .sgdma_mem
+ .sgdma_mem,
+ .vdc_stream
);
w3d_interconnect_host_data data
@@ -44,6 +47,7 @@ module w3d_interconnect
.srst_n,
.host(mmio_axi.s),
.gfx_ctrl,
+ .vdc_ctrl,
.sgdma_ctrl,
.external_io
);
@@ -59,6 +63,7 @@ module w3d_interconnect_dram
host_dbus,
host_ibus,
sgdma_mem,
+ vdc_stream,
if_axib.m dram
);
@@ -69,59 +74,68 @@ module w3d_interconnect_dram
endfunction
defparam
- xbar.NM = 4,
+ xbar.NM = 5,
xbar.NS = 1,
xbar.OPT_LOWPOWER = 0,
xbar.SLAVE_ADDR = '0,
xbar.SLAVE_MASK = '0,
xbar.C_AXI_ID_WIDTH = 8;
+ //FIXME: Lower-numbered masters (last in {..., ...}) always win
+
axixbar xbar
(
.S_AXI_ACLK(clk),
.S_AXI_ARESETN(srst_n),
.S_AXI_AWVALID({
+ sgdma_mem.awvalid,
gfx_vram.awvalid,
host_dbus.awvalid,
host_ibus.awvalid,
- sgdma_mem.awvalid
+ vdc_stream.awvalid
}),
.S_AXI_AWREADY({
+ sgdma_mem.awready,
gfx_vram.awready,
host_dbus.awready,
host_ibus.awready,
- sgdma_mem.awready
+ vdc_stream.awready
}),
.S_AXI_AWID({
+ sgdma_mem.awid,
gfx_vram.awid,
host_dbus.awid,
host_ibus.awid,
- sgdma_mem.awid
+ vdc_stream.awid
}),
.S_AXI_AWADDR({
+ sgdma_mem.awaddr,
vram_addr(gfx_vram.awaddr),
host_dbus.awaddr,
host_ibus.awaddr,
- sgdma_mem.awaddr
+ vram_addr(vdc_stream.awaddr)
}),
.S_AXI_AWLEN({
+ sgdma_mem.awlen,
gfx_vram.awlen,
host_dbus.awlen,
host_ibus.awlen,
- sgdma_mem.awlen
+ vdc_stream.awlen
}),
.S_AXI_AWSIZE({
+ sgdma_mem.awsize,
gfx_vram.awsize,
host_dbus.awsize,
host_ibus.awsize,
- sgdma_mem.awsize
+ vdc_stream.awsize
}),
.S_AXI_AWBURST({
+ sgdma_mem.awburst,
gfx_vram.awburst,
host_dbus.awburst,
host_ibus.awburst,
- sgdma_mem.awburst
+ vdc_stream.awburst
}),
.S_AXI_AWLOCK('0),
.S_AXI_AWCACHE('0),
@@ -129,102 +143,118 @@ module w3d_interconnect_dram
.S_AXI_AWQOS('0),
.S_AXI_WVALID({
+ sgdma_mem.wvalid,
gfx_vram.wvalid,
host_dbus.wvalid,
host_ibus.wvalid,
- sgdma_mem.wvalid
+ vdc_stream.wvalid
}),
.S_AXI_WREADY({
+ sgdma_mem.wready,
gfx_vram.wready,
host_dbus.wready,
host_ibus.wready,
- sgdma_mem.wready
+ vdc_stream.wready
}),
.S_AXI_WDATA({
+ sgdma_mem.wdata,
gfx_vram.wdata,
host_dbus.wdata,
host_ibus.wdata,
- sgdma_mem.wdata
+ vdc_stream.wdata
}),
.S_AXI_WSTRB({
+ sgdma_mem.wstrb,
gfx_vram.wstrb,
host_dbus.wstrb,
host_ibus.wstrb,
- sgdma_mem.wstrb
+ vdc_stream.wstrb
}),
.S_AXI_WLAST({
+ sgdma_mem.wlast,
gfx_vram.wlast,
host_dbus.wlast,
host_ibus.wlast,
- sgdma_mem.wlast
+ vdc_stream.wlast
}),
.S_AXI_BVALID({
+ sgdma_mem.bvalid,
gfx_vram.bvalid,
host_dbus.bvalid,
host_ibus.bvalid,
- sgdma_mem.bvalid
+ vdc_stream.bvalid
}),
.S_AXI_BREADY({
+ sgdma_mem.bready,
gfx_vram.bready,
host_dbus.bready,
host_ibus.bready,
- sgdma_mem.bready
+ vdc_stream.bready
}),
.S_AXI_BID({
+ sgdma_mem.bid,
gfx_vram.bid,
host_dbus.bid,
host_ibus.bid,
- sgdma_mem.bid
+ vdc_stream.bid
}),
.S_AXI_BRESP({
+ sgdma_mem.bresp,
gfx_vram.bresp,
host_dbus.bresp,
host_ibus.bresp,
- sgdma_mem.bresp
+ vdc_stream.bresp
}),
.S_AXI_ARVALID({
+ sgdma_mem.arvalid,
gfx_vram.arvalid,
host_dbus.arvalid,
host_ibus.arvalid,
- sgdma_mem.arvalid
+ vdc_stream.arvalid
}),
.S_AXI_ARREADY({
+ sgdma_mem.arready,
gfx_vram.arready,
host_dbus.arready,
host_ibus.arready,
- sgdma_mem.arready
+ vdc_stream.arready
}),
.S_AXI_ARID({
+ sgdma_mem.arid,
gfx_vram.arid,
host_dbus.arid,
host_ibus.arid,
- sgdma_mem.arid
+ vdc_stream.arid
}),
.S_AXI_ARADDR({
+ sgdma_mem.araddr,
vram_addr(gfx_vram.araddr),
host_dbus.araddr,
host_ibus.araddr,
- sgdma_mem.araddr
+ vram_addr(vdc_stream.araddr)
}),
.S_AXI_ARLEN({
+ sgdma_mem.arlen,
gfx_vram.arlen,
host_dbus.arlen,
host_ibus.arlen,
- sgdma_mem.arlen
+ vdc_stream.arlen
}),
.S_AXI_ARSIZE({
+ sgdma_mem.arsize,
gfx_vram.arsize,
host_dbus.arsize,
host_ibus.arsize,
- sgdma_mem.arsize
+ vdc_stream.arsize
}),
.S_AXI_ARBURST({
+ sgdma_mem.arburst,
gfx_vram.arburst,
host_dbus.arburst,
host_ibus.arburst,
- sgdma_mem.arburst
+ vdc_stream.arburst
}),
.S_AXI_ARLOCK('0),
.S_AXI_ARCACHE('0),
@@ -232,40 +262,46 @@ module w3d_interconnect_dram
.S_AXI_ARQOS('0),
.S_AXI_RVALID({
+ sgdma_mem.rvalid,
gfx_vram.rvalid,
host_dbus.rvalid,
host_ibus.rvalid,
- sgdma_mem.rvalid
+ vdc_stream.rvalid
}),
.S_AXI_RREADY({
+ sgdma_mem.rready,
gfx_vram.rready,
host_dbus.rready,
host_ibus.rready,
- sgdma_mem.rready
+ vdc_stream.rready
}),
.S_AXI_RID({
+ sgdma_mem.rid,
gfx_vram.rid,
host_dbus.rid,
host_ibus.rid,
- sgdma_mem.rid
+ vdc_stream.rid
}),
.S_AXI_RDATA({
+ sgdma_mem.rdata,
gfx_vram.rdata,
host_dbus.rdata,
host_ibus.rdata,
- sgdma_mem.rdata
+ vdc_stream.rdata
}),
.S_AXI_RRESP({
+ sgdma_mem.rresp,
gfx_vram.rresp,
host_dbus.rresp,
host_ibus.rresp,
- sgdma_mem.rresp
+ vdc_stream.rresp
}),
.S_AXI_RLAST({
+ sgdma_mem.rlast,
gfx_vram.rlast,
host_dbus.rlast,
host_ibus.rlast,
- sgdma_mem.rlast
+ vdc_stream.rlast
}),
.M_AXI_AWVALID(dram.awvalid),
@@ -606,31 +642,36 @@ module w3d_interconnect_host_mmio
if_axil.s host,
if_axil.m gfx_ctrl,
+ vdc_ctrl,
sgdma_ctrl,
external_io
);
localparam logic[31:0]
GFX_CTRL_BASE = 32'h2000_0000,
- GFX_CTRL_MASK = 32'hf800_0000,
+ GFX_CTRL_MASK = 32'hfc00_0000,
+ VDC_CTRL_BASE = 32'h2400_0000,
+ VDC_CTRL_MASK = 32'hfc00_0000,
SGDMA_CTRL_BASE = 32'h2800_0000,
- SGDMA_CTRL_MASK = 32'hf800_0000,
+ SGDMA_CTRL_MASK = 32'hfc00_0000,
EXTERNAL_IO_BASE = 32'h3000_0000,
EXTERNAL_IO_MASK = 32'hf000_0000;
defparam xbar.NM = 1;
- defparam xbar.NS = 3;
+ defparam xbar.NS = 4;
defparam xbar.OPT_LOWPOWER = 0;
defparam xbar.SLAVE_ADDR = {
EXTERNAL_IO_BASE,
SGDMA_CTRL_BASE,
+ VDC_CTRL_BASE,
GFX_CTRL_BASE
};
defparam xbar.SLAVE_MASK = {
EXTERNAL_IO_MASK,
SGDMA_CTRL_MASK,
+ VDC_CTRL_MASK,
GFX_CTRL_MASK
};
@@ -666,34 +707,40 @@ module w3d_interconnect_host_mmio
.M_AXI_AWADDR({
external_io.awaddr,
sgdma_ctrl.awaddr,
+ vdc_ctrl.awaddr,
gfx_ctrl.awaddr
}),
.M_AXI_AWPROT(),
.M_AXI_AWVALID({
external_io.awvalid,
sgdma_ctrl.awvalid,
+ vdc_ctrl.awvalid,
gfx_ctrl.awvalid
}),
.M_AXI_AWREADY({
external_io.awready,
sgdma_ctrl.awready,
+ vdc_ctrl.awready,
gfx_ctrl.awready
}),
.M_AXI_WDATA({
external_io.wdata,
sgdma_ctrl.wdata,
+ vdc_ctrl.wdata,
gfx_ctrl.wdata
}),
.M_AXI_WSTRB(),
.M_AXI_WVALID({
external_io.wvalid,
sgdma_ctrl.wvalid,
+ vdc_ctrl.wvalid,
gfx_ctrl.wvalid
}),
.M_AXI_WREADY({
external_io.wready,
sgdma_ctrl.wready,
+ vdc_ctrl.wready,
gfx_ctrl.wready
}),
@@ -701,45 +748,53 @@ module w3d_interconnect_host_mmio
.M_AXI_BVALID({
external_io.bvalid,
sgdma_ctrl.bvalid,
+ vdc_ctrl.bvalid,
gfx_ctrl.bvalid
}),
.M_AXI_BREADY({
external_io.bready,
sgdma_ctrl.bready,
+ vdc_ctrl.bready,
gfx_ctrl.bready
}),
.M_AXI_ARADDR({
external_io.araddr,
sgdma_ctrl.araddr,
+ vdc_ctrl.araddr,
gfx_ctrl.araddr
}),
.M_AXI_ARPROT(),
.M_AXI_ARVALID({
external_io.arvalid,
sgdma_ctrl.arvalid,
+ vdc_ctrl.arvalid,
gfx_ctrl.arvalid
}),
.M_AXI_ARREADY({
external_io.arready,
sgdma_ctrl.arready,
+ vdc_ctrl.arready,
gfx_ctrl.arready
}),
.M_AXI_RDATA({
external_io.rdata,
sgdma_ctrl.rdata,
+ vdc_ctrl.rdata,
gfx_ctrl.rdata
}),
.M_AXI_RRESP('0),
.M_AXI_RVALID({
external_io.rvalid,
sgdma_ctrl.rvalid,
+ vdc_ctrl.rvalid,
gfx_ctrl.rvalid
}),
.M_AXI_RREADY({
external_io.rready,
sgdma_ctrl.rready,
+ vdc_ctrl.rready,
gfx_ctrl.rready
})
);