refactor: add rtl dir
This commit is contained in:
140
axi/rtl/axi_pkg.sv
Normal file
140
axi/rtl/axi_pkg.sv
Normal file
@ -0,0 +1,140 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user