diff --git a/rtl/controller/src/axis_flat_to_if.sv b/rtl/controller/src/axis_flat_to_if.sv new file mode 100644 index 0000000..569e0e2 --- /dev/null +++ b/rtl/controller/src/axis_flat_to_if.sv @@ -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 diff --git a/rtl/controller/src/axis_if_to_flat.sv b/rtl/controller/src/axis_if_to_flat.sv new file mode 100644 index 0000000..e5ab45e --- /dev/null +++ b/rtl/controller/src/axis_if_to_flat.sv @@ -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 diff --git a/rtl/controller/src/controller_wrapper_axil.sv b/rtl/controller/src/controller_wrapper_axil.sv index 8c1d7ab..03b1bdb 100644 --- a/rtl/controller/src/controller_wrapper_axil.sv +++ b/rtl/controller/src/controller_wrapper_axil.sv @@ -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 \ No newline at end of file