Files
rtl_libs/axi/axi4_flat_to_if.sv
2026-05-28 16:41:26 +03:00

98 lines
4.2 KiB
Systemverilog

module axi4_flat_to_if #(
parameter int unsigned ADDR_W = 32,
parameter int unsigned DATA_W = 64,
parameter int unsigned ID_W = 4,
parameter int unsigned USER_W = 1
)(
input logic [ID_W-1:0] s_axi_awid,
input logic [ADDR_W-1:0] s_axi_awaddr,
input logic [7:0] s_axi_awlen,
input logic [2:0] s_axi_awsize,
input logic [1:0] s_axi_awburst,
input logic s_axi_awlock,
input logic [3:0] s_axi_awcache,
input logic [2:0] s_axi_awprot,
input logic [3:0] s_axi_awqos,
input logic [3:0] s_axi_awregion,
input logic [USER_W-1:0] s_axi_awuser,
input logic s_axi_awvalid,
output logic s_axi_awready,
input logic [DATA_W-1:0] s_axi_wdata,
input logic [DATA_W/8-1:0] s_axi_wstrb,
input logic s_axi_wlast,
input logic [USER_W-1:0] s_axi_wuser,
input logic s_axi_wvalid,
output logic s_axi_wready,
output logic [ID_W-1:0] s_axi_bid,
output logic [1:0] s_axi_bresp,
output logic [USER_W-1:0] s_axi_buser,
output logic s_axi_bvalid,
input logic s_axi_bready,
input logic [ID_W-1:0] s_axi_arid,
input logic [ADDR_W-1:0] s_axi_araddr,
input logic [7:0] s_axi_arlen,
input logic [2:0] s_axi_arsize,
input logic [1:0] s_axi_arburst,
input logic s_axi_arlock,
input logic [3:0] s_axi_arcache,
input logic [2:0] s_axi_arprot,
input logic [3:0] s_axi_arqos,
input logic [3:0] s_axi_arregion,
input logic [USER_W-1:0] s_axi_aruser,
input logic s_axi_arvalid,
output logic s_axi_arready,
output logic [ID_W-1:0] s_axi_rid,
output logic [DATA_W-1:0] s_axi_rdata,
output logic [1:0] s_axi_rresp,
output logic s_axi_rlast,
output logic [USER_W-1:0] s_axi_ruser,
output logic s_axi_rvalid,
input logic s_axi_rready,
axi4_if.master m_axi
);
assign m_axi.req.aw.id = s_axi_awid;
assign m_axi.req.aw.addr = s_axi_awaddr;
assign m_axi.req.aw.len = s_axi_awlen;
assign m_axi.req.aw.size = s_axi_awsize;
assign m_axi.req.aw.burst = axi_pkg::axi_burst_t'(s_axi_awburst);
assign m_axi.req.aw.lock = s_axi_awlock;
assign m_axi.req.aw.cache = s_axi_awcache;
assign m_axi.req.aw.prot = s_axi_awprot;
assign m_axi.req.aw.qos = s_axi_awqos;
assign m_axi.req.aw.region = s_axi_awregion;
assign m_axi.req.aw.user = s_axi_awuser;
assign m_axi.req.aw.valid = s_axi_awvalid;
assign s_axi_awready = m_axi.resp.aw_ready;
assign m_axi.req.w.data = s_axi_wdata;
assign m_axi.req.w.strb = s_axi_wstrb;
assign m_axi.req.w.last = s_axi_wlast;
assign m_axi.req.w.user = s_axi_wuser;
assign m_axi.req.w.valid = s_axi_wvalid;
assign s_axi_wready = m_axi.resp.w_ready;
assign s_axi_bid = m_axi.resp.b.id;
assign s_axi_bresp = m_axi.resp.b.resp;
assign s_axi_buser = m_axi.resp.b.user;
assign s_axi_bvalid = m_axi.resp.b.valid;
assign m_axi.req.b_ready = s_axi_bready;
assign m_axi.req.ar.id = s_axi_arid;
assign m_axi.req.ar.addr = s_axi_araddr;
assign m_axi.req.ar.len = s_axi_arlen;
assign m_axi.req.ar.size = s_axi_arsize;
assign m_axi.req.ar.burst = axi_pkg::axi_burst_t'(s_axi_arburst);
assign m_axi.req.ar.lock = s_axi_arlock;
assign m_axi.req.ar.cache = s_axi_arcache;
assign m_axi.req.ar.prot = s_axi_arprot;
assign m_axi.req.ar.qos = s_axi_arqos;
assign m_axi.req.ar.region = s_axi_arregion;
assign m_axi.req.ar.user = s_axi_aruser;
assign m_axi.req.ar.valid = s_axi_arvalid;
assign s_axi_arready = m_axi.resp.ar_ready;
assign s_axi_rid = m_axi.resp.r.id;
assign s_axi_rdata = m_axi.resp.r.data;
assign s_axi_rresp = m_axi.resp.r.resp;
assign s_axi_rlast = m_axi.resp.r.last;
assign s_axi_ruser = m_axi.resp.r.user;
assign s_axi_rvalid = m_axi.resp.r.valid;
assign m_axi.req.r_ready = s_axi_rready;
endmodule