blob: 3672c9760c956c42cb9db882ad0bb84205bde6d1 [file] [log] [blame]
module axi_slice
#(
parameter AXI_ADDR_WIDTH = 32,
parameter AXI_DATA_WIDTH = 64,
parameter AXI_USER_WIDTH = 6,
parameter AXI_ID_WIDTH = 3,
parameter SLICE_DEPTH = 2,
parameter AXI_STRB_WIDTH = AXI_DATA_WIDTH/8
)
(
clk_i,
rst_ni,
test_en_i,
axi_slave_aw_valid_i,
axi_slave_aw_addr_i,
axi_slave_aw_prot_i,
axi_slave_aw_region_i,
axi_slave_aw_len_i,
axi_slave_aw_size_i,
axi_slave_aw_burst_i,
axi_slave_aw_lock_i,
axi_slave_aw_cache_i,
axi_slave_aw_qos_i,
axi_slave_aw_id_i,
axi_slave_aw_user_i,
axi_slave_aw_ready_o,
axi_slave_ar_valid_i,
axi_slave_ar_addr_i,
axi_slave_ar_prot_i,
axi_slave_ar_region_i,
axi_slave_ar_len_i,
axi_slave_ar_size_i,
axi_slave_ar_burst_i,
axi_slave_ar_lock_i,
axi_slave_ar_cache_i,
axi_slave_ar_qos_i,
axi_slave_ar_id_i,
axi_slave_ar_user_i,
axi_slave_ar_ready_o,
axi_slave_w_valid_i,
axi_slave_w_data_i,
axi_slave_w_strb_i,
axi_slave_w_user_i,
axi_slave_w_last_i,
axi_slave_w_ready_o,
axi_slave_r_valid_o,
axi_slave_r_data_o,
axi_slave_r_resp_o,
axi_slave_r_last_o,
axi_slave_r_id_o,
axi_slave_r_user_o,
axi_slave_r_ready_i,
axi_slave_b_valid_o,
axi_slave_b_resp_o,
axi_slave_b_id_o,
axi_slave_b_user_o,
axi_slave_b_ready_i,
axi_master_aw_valid_o,
axi_master_aw_addr_o,
axi_master_aw_prot_o,
axi_master_aw_region_o,
axi_master_aw_len_o,
axi_master_aw_size_o,
axi_master_aw_burst_o,
axi_master_aw_lock_o,
axi_master_aw_cache_o,
axi_master_aw_qos_o,
axi_master_aw_id_o,
axi_master_aw_user_o,
axi_master_aw_ready_i,
axi_master_ar_valid_o,
axi_master_ar_addr_o,
axi_master_ar_prot_o,
axi_master_ar_region_o,
axi_master_ar_len_o,
axi_master_ar_size_o,
axi_master_ar_burst_o,
axi_master_ar_lock_o,
axi_master_ar_cache_o,
axi_master_ar_qos_o,
axi_master_ar_id_o,
axi_master_ar_user_o,
axi_master_ar_ready_i,
axi_master_w_valid_o,
axi_master_w_data_o,
axi_master_w_strb_o,
axi_master_w_user_o,
axi_master_w_last_o,
axi_master_w_ready_i,
axi_master_r_valid_i,
axi_master_r_data_i,
axi_master_r_resp_i,
axi_master_r_last_i,
axi_master_r_id_i,
axi_master_r_user_i,
axi_master_r_ready_o,
axi_master_b_valid_i,
axi_master_b_resp_i,
axi_master_b_id_i,
axi_master_b_user_i,
axi_master_b_ready_o
);
//parameter AXI_ADDR_WIDTH = 32;
//parameter AXI_DATA_WIDTH = 64;
//parameter AXI_USER_WIDTH = 6;
//parameter AXI_ID_WIDTH = 3;
//parameter SLICE_DEPTH = 2;
//parameter AXI_STRB_WIDTH = AXI_DATA_WIDTH / 8;
input wire clk_i;
input wire rst_ni;
input wire test_en_i;
input wire axi_slave_aw_valid_i;
input wire [AXI_ADDR_WIDTH - 1:0] axi_slave_aw_addr_i;
input wire [2:0] axi_slave_aw_prot_i;
input wire [3:0] axi_slave_aw_region_i;
input wire [7:0] axi_slave_aw_len_i;
input wire [2:0] axi_slave_aw_size_i;
input wire [1:0] axi_slave_aw_burst_i;
input wire axi_slave_aw_lock_i;
input wire [3:0] axi_slave_aw_cache_i;
input wire [3:0] axi_slave_aw_qos_i;
input wire [AXI_ID_WIDTH - 1:0] axi_slave_aw_id_i;
input wire [AXI_USER_WIDTH - 1:0] axi_slave_aw_user_i;
output wire axi_slave_aw_ready_o;
input wire axi_slave_ar_valid_i;
input wire [AXI_ADDR_WIDTH - 1:0] axi_slave_ar_addr_i;
input wire [2:0] axi_slave_ar_prot_i;
input wire [3:0] axi_slave_ar_region_i;
input wire [7:0] axi_slave_ar_len_i;
input wire [2:0] axi_slave_ar_size_i;
input wire [1:0] axi_slave_ar_burst_i;
input wire axi_slave_ar_lock_i;
input wire [3:0] axi_slave_ar_cache_i;
input wire [3:0] axi_slave_ar_qos_i;
input wire [AXI_ID_WIDTH - 1:0] axi_slave_ar_id_i;
input wire [AXI_USER_WIDTH - 1:0] axi_slave_ar_user_i;
output wire axi_slave_ar_ready_o;
input wire axi_slave_w_valid_i;
input wire [AXI_DATA_WIDTH - 1:0] axi_slave_w_data_i;
input wire [AXI_STRB_WIDTH - 1:0] axi_slave_w_strb_i;
input wire [AXI_USER_WIDTH - 1:0] axi_slave_w_user_i;
input wire axi_slave_w_last_i;
output wire axi_slave_w_ready_o;
output wire axi_slave_r_valid_o;
output wire [AXI_DATA_WIDTH - 1:0] axi_slave_r_data_o;
output wire [1:0] axi_slave_r_resp_o;
output wire axi_slave_r_last_o;
output wire [AXI_ID_WIDTH - 1:0] axi_slave_r_id_o;
output wire [AXI_USER_WIDTH - 1:0] axi_slave_r_user_o;
input wire axi_slave_r_ready_i;
output wire axi_slave_b_valid_o;
output wire [1:0] axi_slave_b_resp_o;
output wire [AXI_ID_WIDTH - 1:0] axi_slave_b_id_o;
output wire [AXI_USER_WIDTH - 1:0] axi_slave_b_user_o;
input wire axi_slave_b_ready_i;
output wire axi_master_aw_valid_o;
output wire [AXI_ADDR_WIDTH - 1:0] axi_master_aw_addr_o;
output wire [2:0] axi_master_aw_prot_o;
output wire [3:0] axi_master_aw_region_o;
output wire [7:0] axi_master_aw_len_o;
output wire [2:0] axi_master_aw_size_o;
output wire [1:0] axi_master_aw_burst_o;
output wire axi_master_aw_lock_o;
output wire [3:0] axi_master_aw_cache_o;
output wire [3:0] axi_master_aw_qos_o;
output wire [AXI_ID_WIDTH - 1:0] axi_master_aw_id_o;
output wire [AXI_USER_WIDTH - 1:0] axi_master_aw_user_o;
input wire axi_master_aw_ready_i;
output wire axi_master_ar_valid_o;
output wire [AXI_ADDR_WIDTH - 1:0] axi_master_ar_addr_o;
output wire [2:0] axi_master_ar_prot_o;
output wire [3:0] axi_master_ar_region_o;
output wire [7:0] axi_master_ar_len_o;
output wire [2:0] axi_master_ar_size_o;
output wire [1:0] axi_master_ar_burst_o;
output wire axi_master_ar_lock_o;
output wire [3:0] axi_master_ar_cache_o;
output wire [3:0] axi_master_ar_qos_o;
output wire [AXI_ID_WIDTH - 1:0] axi_master_ar_id_o;
output wire [AXI_USER_WIDTH - 1:0] axi_master_ar_user_o;
input wire axi_master_ar_ready_i;
output wire axi_master_w_valid_o;
output wire [AXI_DATA_WIDTH - 1:0] axi_master_w_data_o;
output wire [AXI_STRB_WIDTH - 1:0] axi_master_w_strb_o;
output wire [AXI_USER_WIDTH - 1:0] axi_master_w_user_o;
output wire axi_master_w_last_o;
input wire axi_master_w_ready_i;
input wire axi_master_r_valid_i;
input wire [AXI_DATA_WIDTH - 1:0] axi_master_r_data_i;
input wire [1:0] axi_master_r_resp_i;
input wire axi_master_r_last_i;
input wire [AXI_ID_WIDTH - 1:0] axi_master_r_id_i;
input wire [AXI_USER_WIDTH - 1:0] axi_master_r_user_i;
output wire axi_master_r_ready_o;
input wire axi_master_b_valid_i;
input wire [1:0] axi_master_b_resp_i;
input wire [AXI_ID_WIDTH - 1:0] axi_master_b_id_i;
input wire [AXI_USER_WIDTH - 1:0] axi_master_b_user_i;
output wire axi_master_b_ready_o;
axi_aw_buffer #(
.ID_WIDTH(AXI_ID_WIDTH),
.ADDR_WIDTH(AXI_ADDR_WIDTH),
.USER_WIDTH(AXI_USER_WIDTH),
.BUFFER_DEPTH(SLICE_DEPTH)
) aw_buffer_i(
.clk_i(clk_i),
.rst_ni(rst_ni),
.test_en_i(test_en_i),
.slave_valid_i(axi_slave_aw_valid_i),
.slave_addr_i(axi_slave_aw_addr_i),
.slave_prot_i(axi_slave_aw_prot_i),
.slave_region_i(axi_slave_aw_region_i),
.slave_len_i(axi_slave_aw_len_i),
.slave_size_i(axi_slave_aw_size_i),
.slave_burst_i(axi_slave_aw_burst_i),
.slave_lock_i(axi_slave_aw_lock_i),
.slave_cache_i(axi_slave_aw_cache_i),
.slave_qos_i(axi_slave_aw_qos_i),
.slave_id_i(axi_slave_aw_id_i),
.slave_user_i(axi_slave_aw_user_i),
.slave_ready_o(axi_slave_aw_ready_o),
.master_valid_o(axi_master_aw_valid_o),
.master_addr_o(axi_master_aw_addr_o),
.master_prot_o(axi_master_aw_prot_o),
.master_region_o(axi_master_aw_region_o),
.master_len_o(axi_master_aw_len_o),
.master_size_o(axi_master_aw_size_o),
.master_burst_o(axi_master_aw_burst_o),
.master_lock_o(axi_master_aw_lock_o),
.master_cache_o(axi_master_aw_cache_o),
.master_qos_o(axi_master_aw_qos_o),
.master_id_o(axi_master_aw_id_o),
.master_user_o(axi_master_aw_user_o),
.master_ready_i(axi_master_aw_ready_i)
);
axi_ar_buffer #(
.ID_WIDTH(AXI_ID_WIDTH),
.ADDR_WIDTH(AXI_ADDR_WIDTH),
.USER_WIDTH(AXI_USER_WIDTH),
.BUFFER_DEPTH(SLICE_DEPTH)
) ar_buffer_i(
.clk_i(clk_i),
.rst_ni(rst_ni),
.test_en_i(test_en_i),
.slave_valid_i(axi_slave_ar_valid_i),
.slave_addr_i(axi_slave_ar_addr_i),
.slave_prot_i(axi_slave_ar_prot_i),
.slave_region_i(axi_slave_ar_region_i),
.slave_len_i(axi_slave_ar_len_i),
.slave_size_i(axi_slave_ar_size_i),
.slave_burst_i(axi_slave_ar_burst_i),
.slave_lock_i(axi_slave_ar_lock_i),
.slave_cache_i(axi_slave_ar_cache_i),
.slave_qos_i(axi_slave_ar_qos_i),
.slave_id_i(axi_slave_ar_id_i),
.slave_user_i(axi_slave_ar_user_i),
.slave_ready_o(axi_slave_ar_ready_o),
.master_valid_o(axi_master_ar_valid_o),
.master_addr_o(axi_master_ar_addr_o),
.master_prot_o(axi_master_ar_prot_o),
.master_region_o(axi_master_ar_region_o),
.master_len_o(axi_master_ar_len_o),
.master_size_o(axi_master_ar_size_o),
.master_burst_o(axi_master_ar_burst_o),
.master_lock_o(axi_master_ar_lock_o),
.master_cache_o(axi_master_ar_cache_o),
.master_qos_o(axi_master_ar_qos_o),
.master_id_o(axi_master_ar_id_o),
.master_user_o(axi_master_ar_user_o),
.master_ready_i(axi_master_ar_ready_i)
);
axi_w_buffer #(
.DATA_WIDTH(AXI_DATA_WIDTH),
.USER_WIDTH(AXI_USER_WIDTH),
.BUFFER_DEPTH(SLICE_DEPTH)
) w_buffer_i(
.clk_i(clk_i),
.rst_ni(rst_ni),
.test_en_i(test_en_i),
.slave_valid_i(axi_slave_w_valid_i),
.slave_data_i(axi_slave_w_data_i),
.slave_strb_i(axi_slave_w_strb_i),
.slave_user_i(axi_slave_w_user_i),
.slave_last_i(axi_slave_w_last_i),
.slave_ready_o(axi_slave_w_ready_o),
.master_valid_o(axi_master_w_valid_o),
.master_data_o(axi_master_w_data_o),
.master_strb_o(axi_master_w_strb_o),
.master_user_o(axi_master_w_user_o),
.master_last_o(axi_master_w_last_o),
.master_ready_i(axi_master_w_ready_i)
);
axi_r_buffer #(
.ID_WIDTH(AXI_ID_WIDTH),
.DATA_WIDTH(AXI_DATA_WIDTH),
.USER_WIDTH(AXI_USER_WIDTH),
.BUFFER_DEPTH(SLICE_DEPTH)
) r_buffer_i(
.clk_i(clk_i),
.rst_ni(rst_ni),
.test_en_i(test_en_i),
.slave_valid_i(axi_master_r_valid_i),
.slave_data_i(axi_master_r_data_i),
.slave_resp_i(axi_master_r_resp_i),
.slave_user_i(axi_master_r_user_i),
.slave_id_i(axi_master_r_id_i),
.slave_last_i(axi_master_r_last_i),
.slave_ready_o(axi_master_r_ready_o),
.master_valid_o(axi_slave_r_valid_o),
.master_data_o(axi_slave_r_data_o),
.master_resp_o(axi_slave_r_resp_o),
.master_user_o(axi_slave_r_user_o),
.master_id_o(axi_slave_r_id_o),
.master_last_o(axi_slave_r_last_o),
.master_ready_i(axi_slave_r_ready_i)
);
axi_b_buffer #(
.ID_WIDTH(AXI_ID_WIDTH),
.USER_WIDTH(AXI_USER_WIDTH),
.BUFFER_DEPTH(SLICE_DEPTH)
) b_buffer_i(
.clk_i(clk_i),
.rst_ni(rst_ni),
.test_en_i(test_en_i),
.slave_valid_i(axi_master_b_valid_i),
.slave_resp_i(axi_master_b_resp_i),
.slave_id_i(axi_master_b_id_i),
.slave_user_i(axi_master_b_user_i),
.slave_ready_o(axi_master_b_ready_o),
.master_valid_o(axi_slave_b_valid_o),
.master_resp_o(axi_slave_b_resp_o),
.master_id_o(axi_slave_b_id_o),
.master_user_o(axi_slave_b_user_o),
.master_ready_i(axi_slave_b_ready_i)
);
endmodule