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

141 lines
4.1 KiB
Systemverilog

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