package axi_pkg; typedef enum logic [1:0] { AXI_BURST_FIXED = 2'b00, AXI_BURST_INCR = 2'b01, AXI_BURST_WRAP = 2'b10 } axi_burst_t; typedef enum logic [1:0] { AXI_RESP_OKAY = 2'b00, AXI_RESP_EXOKAY = 2'b01, AXI_RESP_SLVERR = 2'b10, AXI_RESP_DECERR = 2'b11 } axi_resp_t; function automatic logic [2:0] axi_size_from_bytes(input int unsigned nbytes); case (nbytes) 1 : return 3'd0; 2 : return 3'd1; 4 : return 3'd2; 8 : return 3'd3; 16 : return 3'd4; 32 : return 3'd5; 64 : return 3'd6; 128 : return 3'd7; default: return 3'd0; endcase endfunction endpackage : axi_pkg `define AXI4_TYPEDEF_ALL(__name, __addr_t, __data_t, __strb_t, __id_t, __user_t) \ typedef struct packed { \ __id_t id; \ __addr_t addr; \ logic [7:0] len; \ logic [2:0] size; \ axi_pkg::axi_burst_t burst; \ logic lock; \ logic [3:0] cache; \ logic [2:0] prot; \ logic [3:0] qos; \ logic [3:0] region; \ __user_t user; \ logic valid; \ } __name``_aw_chan_t; \ typedef struct packed { \ __data_t data; \ __strb_t strb; \ logic last; \ __user_t user; \ logic valid; \ } __name``_w_chan_t; \ typedef struct packed { \ __id_t id; \ axi_pkg::axi_resp_t resp; \ __user_t user; \ logic valid; \ } __name``_b_chan_t; \ typedef struct packed { \ __id_t id; \ __addr_t addr; \ logic [7:0] len; \ logic [2:0] size; \ axi_pkg::axi_burst_t burst; \ logic lock; \ logic [3:0] cache; \ logic [2:0] prot; \ logic [3:0] qos; \ logic [3:0] region; \ __user_t user; \ logic valid; \ } __name``_ar_chan_t; \ typedef struct packed { \ __id_t id; \ __data_t data; \ axi_pkg::axi_resp_t resp; \ logic last; \ __user_t user; \ logic valid; \ } __name``_r_chan_t; \ typedef struct packed { \ __name``_aw_chan_t aw; \ __name``_w_chan_t w; \ logic b_ready; \ __name``_ar_chan_t ar; \ logic r_ready; \ } __name``_req_t; \ typedef struct packed { \ logic aw_ready; \ logic w_ready; \ __name``_b_chan_t b; \ logic ar_ready; \ __name``_r_chan_t r; \ } __name``_resp_t; `define AXI4L_TYPEDEF_ALL(__name, __addr_t, __data_t, __strb_t, __user_t) \ typedef struct packed { \ __addr_t addr; \ logic [2:0] prot; \ __user_t user; \ logic valid; \ } __name``_aw_chan_t; \ typedef struct packed { \ __data_t data; \ __strb_t strb; \ __user_t user; \ logic valid; \ } __name``_w_chan_t; \ typedef struct packed { \ axi_pkg::axi_resp_t resp; \ __user_t user; \ logic valid; \ } __name``_b_chan_t; \ typedef struct packed { \ __addr_t addr; \ logic [2:0] prot; \ __user_t user; \ logic valid; \ } __name``_ar_chan_t; \ typedef struct packed { \ __data_t data; \ axi_pkg::axi_resp_t resp; \ __user_t user; \ logic valid; \ } __name``_r_chan_t; \ typedef struct packed { \ __name``_aw_chan_t aw; \ __name``_w_chan_t w; \ logic b_ready; \ __name``_ar_chan_t ar; \ logic r_ready; \ } __name``_req_t; \ typedef struct packed { \ logic aw_ready; \ logic w_ready; \ __name``_b_chan_t b; \ logic ar_ready; \ __name``_r_chan_t r; \ } __name``_resp_t;