axis dma desc and status interface
This commit is contained in:
30
rtl/controller/src/axis_flat_to_if.sv
Normal file
30
rtl/controller/src/axis_flat_to_if.sv
Normal file
@ -0,0 +1,30 @@
|
||||
module axis_flat_to_if #(
|
||||
parameter int unsigned DATA_W = 64,
|
||||
parameter int unsigned KEEP_W = DATA_W / 8,
|
||||
parameter int unsigned ID_W = 8,
|
||||
parameter int unsigned DEST_W = 8,
|
||||
parameter int unsigned USER_W = 1
|
||||
)(
|
||||
input logic [DATA_W-1:0] s_axis_tdata,
|
||||
input logic [KEEP_W-1:0] s_axis_tkeep,
|
||||
input logic [KEEP_W-1:0] s_axis_tstrb,
|
||||
input logic s_axis_tlast,
|
||||
input logic [ID_W-1:0] s_axis_tid,
|
||||
input logic [DEST_W-1:0] s_axis_tdest,
|
||||
input logic [USER_W-1:0] s_axis_tuser,
|
||||
input logic s_axis_tvalid,
|
||||
output logic s_axis_tready,
|
||||
|
||||
axis_if.master m_axis
|
||||
);
|
||||
assign m_axis.req.t.data = s_axis_tdata;
|
||||
assign m_axis.req.t.keep = s_axis_tkeep;
|
||||
assign m_axis.req.t.strb = s_axis_tstrb;
|
||||
assign m_axis.req.t.last = s_axis_tlast;
|
||||
assign m_axis.req.t.id = s_axis_tid;
|
||||
assign m_axis.req.t.dest = s_axis_tdest;
|
||||
assign m_axis.req.t.user = s_axis_tuser;
|
||||
assign m_axis.req.t.valid = s_axis_tvalid;
|
||||
|
||||
assign s_axis_tready = m_axis.resp.ready;
|
||||
endmodule : axis_flat_to_if
|
||||
30
rtl/controller/src/axis_if_to_flat.sv
Normal file
30
rtl/controller/src/axis_if_to_flat.sv
Normal file
@ -0,0 +1,30 @@
|
||||
module axis_if_to_flat #(
|
||||
parameter int unsigned DATA_W = 64,
|
||||
parameter int unsigned KEEP_W = DATA_W / 8,
|
||||
parameter int unsigned ID_W = 8,
|
||||
parameter int unsigned DEST_W = 8,
|
||||
parameter int unsigned USER_W = 1
|
||||
)(
|
||||
axis_if.slave s_axis,
|
||||
|
||||
output logic [DATA_W-1:0] m_axis_tdata,
|
||||
output logic [KEEP_W-1:0] m_axis_tkeep,
|
||||
output logic [KEEP_W-1:0] m_axis_tstrb,
|
||||
output logic m_axis_tlast,
|
||||
output logic [ID_W-1:0] m_axis_tid,
|
||||
output logic [DEST_W-1:0] m_axis_tdest,
|
||||
output logic [USER_W-1:0] m_axis_tuser,
|
||||
output logic m_axis_tvalid,
|
||||
input logic m_axis_tready
|
||||
);
|
||||
assign m_axis_tdata = s_axis.req.t.data;
|
||||
assign m_axis_tkeep = s_axis.req.t.keep;
|
||||
assign m_axis_tstrb = s_axis.req.t.strb;
|
||||
assign m_axis_tlast = s_axis.req.t.last;
|
||||
assign m_axis_tid = s_axis.req.t.id;
|
||||
assign m_axis_tdest = s_axis.req.t.dest;
|
||||
assign m_axis_tuser = s_axis.req.t.user;
|
||||
assign m_axis_tvalid = s_axis.req.t.valid;
|
||||
|
||||
assign s_axis.resp.ready = m_axis_tready;
|
||||
endmodule : axis_if_to_flat
|
||||
@ -47,23 +47,11 @@ parameter int unsigned WRITE_STATUS_WIDTH = LEN_WIDTH + TAG_WIDTH + AXIS_ID_WIDT
|
||||
output logic adc_rst,
|
||||
|
||||
// AXIS DMA
|
||||
input logic ready_desc_read,
|
||||
input logic ready_desc_write,
|
||||
axis_if.master m_axis_status_read,
|
||||
axis_if.master m_axis_status_write,
|
||||
|
||||
output logic ready_status_read,
|
||||
output logic ready_status_write,
|
||||
|
||||
output logic valid_desc_read,
|
||||
output logic valid_desc_write,
|
||||
|
||||
input logic valid_status_read,
|
||||
input logic valid_status_write,
|
||||
|
||||
input logic [READ_STATUS_WIDTH-1:0] status_read_cmd_in,
|
||||
input logic [WRITE_STATUS_WIDTH-1:0] status_write_cmd_in,
|
||||
|
||||
output logic [READ_DESC_WIDTH-1:0] desc_read_cmd_out,
|
||||
output logic [WRITE_DESC_WIDTH-1:0] desc_write_cmd_out
|
||||
axis_if.slave s_axis_desc_read,
|
||||
axis_if.slave s_axis_desc_write
|
||||
);
|
||||
|
||||
logic start, rst_soft, send_desc_read, send_desc_write, take_status_read, take_status_write, cfg_bus_valid, busy;
|
||||
@ -230,4 +218,89 @@ parameter int unsigned WRITE_STATUS_WIDTH = LEN_WIDTH + TAG_WIDTH + AXIS_ID_WIDT
|
||||
.status_write_dma_hs(status_write_dma_hs)
|
||||
);
|
||||
|
||||
// AXIS LOGIC TRANSFORMATION
|
||||
axis_flat_to_if
|
||||
#(
|
||||
.DATA_W(READ_STATUS_WIDTH),
|
||||
.ID_W(8),
|
||||
.DEST_W(8),
|
||||
.USER_W(1)
|
||||
) axis_flat_to_if_status_read
|
||||
(
|
||||
.s_axis_tdata(status_read_cmd_in),
|
||||
.s_axis_tkeep(),
|
||||
.s_axis_tstrb(),
|
||||
.s_axis_tlast(),
|
||||
.s_axis_tid(),
|
||||
.s_axis_tdest(),
|
||||
.s_axis_tuser(),
|
||||
.s_axis_tvalid(valid_status_read),
|
||||
.s_axis_tready(ready_status_read),
|
||||
|
||||
.m_axis(m_axis_status_read)
|
||||
);
|
||||
|
||||
axis_flat_to_if
|
||||
#(
|
||||
.DATA_W(WRITE_STATUS_WIDTH),
|
||||
.ID_W(8),
|
||||
.DEST_W(8),
|
||||
.USER_W(1)
|
||||
) axis_flat_to_if_status_write
|
||||
(
|
||||
.s_axis_tdata(status_write_cmd_in),
|
||||
.s_axis_tkeep(),
|
||||
.s_axis_tstrb(),
|
||||
.s_axis_tlast(),
|
||||
.s_axis_tid(),
|
||||
.s_axis_tdest(),
|
||||
.s_axis_tuser(),
|
||||
.s_axis_tvalid(valid_status_write),
|
||||
.s_axis_tready(ready_status_write),
|
||||
|
||||
.m_axis(m_axis_status_write)
|
||||
);
|
||||
|
||||
axis_if_to_flat
|
||||
#(
|
||||
.DATA_W(READ_DESC_WIDTH),
|
||||
.ID_W(8),
|
||||
.DEST_W(8),
|
||||
.USER_W(1)
|
||||
) axis_if_to_flat_desc_read
|
||||
(
|
||||
.s_axis(s_axis_desc_read),
|
||||
|
||||
.m_axis_tdata(desc_read_cmd_out),
|
||||
.m_axis_tkeep(),
|
||||
.m_axis_tstrb(),
|
||||
.m_axis_tlast(),
|
||||
.m_axis_tid(),
|
||||
.m_axis_tdest(),
|
||||
.m_axis_tuser(),
|
||||
.m_axis_tvalid(valid_desc_read),
|
||||
.m_axis_tready(ready_desc_read)
|
||||
);
|
||||
|
||||
axis_if_to_flat
|
||||
#(
|
||||
.DATA_W(WRITE_DESC_WIDTH),
|
||||
.ID_W(8),
|
||||
.DEST_W(8),
|
||||
.USER_W(1)
|
||||
) axis_if_to_flat_desc_write
|
||||
(
|
||||
.s_axis(s_axis_desc_write),
|
||||
|
||||
.m_axis_tdata(desc_write_cmd_out),
|
||||
.m_axis_tkeep(),
|
||||
.m_axis_tstrb(),
|
||||
.m_axis_tlast(),
|
||||
.m_axis_tid(),
|
||||
.m_axis_tdest(),
|
||||
.m_axis_tuser(),
|
||||
.m_axis_tvalid(valid_desc_write),
|
||||
.m_axis_tready(ready_desc_write)
|
||||
);
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user