URL
https://opencores.org/ocsvn/wb2axi4/wb2axi4/trunk
Subversion Repositories wb2axi4
[/] [wb2axi4/] [trunk/] [rtl/] [axi2wb.sv] - Rev 2
Go to most recent revision | Compare with Previous | Blame | View Log
//Author : Alex Zhang (cgzhangwei@gmail.com)
//Date : 03-11-2015
module axi2wb (
axi_clk,
wb_clk,
axi_resetn,
wb_resetn,
ENABLE,
AXI_IF,
WB_TX_IF
);
parameter AXI_WID_W = 4;
parameter AXI_ADDR_W = 32;
parameter AXI_DATA_W = 32;
parameter AXI_PROT_W = 3;
parameter AXI_STB_W = 4;
parameter AXI_LEN_W = 4;
parameter AXI_ASIZE_W = 3;
parameter AXI_ABURST_W = 2;
parameter AXI_ALOCK_W = 2;
parameter AXI_ACACHE_W = 4;
parameter AXI_RESP_W = 2;
parameter FIFO_DEPTH_W = 10;
parameter FIFO_W = 64;
parameter WB_ADR_W = 32;
parameter WB_DAT_W = 32;
parameter WB_TGA_W = 8;
parameter WB_TGD_W = 8;
parameter WB_TGC_W = 4;
parameter WB_SEL_W = 4;
parameter WB_CTI_W = 3;
parameter WB_BTE_W = 2;
parameter AXI_MAX_RESP_W = 3;
parameter SRAM_UNUSED_ADDR_W= 4;
input wire axi_clk;
input wire wb_clk;
input wire axi_resetn;
input wire wb_resetn;
axi_if.target AXI_IF;
wb_if.master WB_TX_IF;
sram_if.initiator SRAM_ADR_IF;
sram_if.initiator SRAM_DAT_IF;
wire sync_ENABLE_axi;
wire sync_ENABLE_wb;
sync_doble_ff #(.DATA_W(1)) I_SYNC_ENABLE_AXI (
.CLK ( AXI_CLK ),
.RESET_N ( AXI_RESET_N ),
.DIN ( ENABLE ),
.DOUT ( sync_ENABLE_axi )
);
sync_doble_ff #(.DATA_W(1)) I_SYNC_ENABLE_WB (
.CLK ( MAC_CLK ),
.RESET_N ( MAC_RESET_N ),
.DIN ( ENABLE ),
.DOUT ( sync_ENABLE_wb )
);
axi_ingress #(
.AXI_WID_W ( AXI_WID_W ),
.AXI_ADDR_W ( AXI_ADDR_W ),
.AXI_DATA_W ( AXI_DATA_W ),
.AXI_PROT_W ( AXI_PROT_W ),
.AXI_STB_W ( AXI_STB_W ),
.AXI_LEN_W ( AXI_LEN_W ),
.AXI_ASIZE_W ( AXI_ASIZE_W ),
.AXI_ABURST_W ( AXI_ABURST_W ),
.AXI_ALOCK_W ( AXI_ALOCK_W ),
.AXI_ACACHE_W ( AXI_ACACHE_W ),
.AXI_RESP_W ( AXI_RESP_W ),
.AXI_MAX_RESP_W ( AXI_MAX_RESP_W )
) I_AXI_INGRESS (
.axi_clk ( axi_clk ),
.reset_n ( axi_resetn ),
.AXI_IF ( AXI_IF ),
.fifo_full ( fifo_full ),
.fifo_addr_info ( fifo_addr_info),
.fifo_data_info ( fifo_data_info),
.fifo_addr_wr ( fifo_addr_wr ),
.fifo_data_wr ( fifo_data_wr )
);
assign fifo_full = fifo_adr_full | fifo_dat_full;
async_fifo #(
.FIFO_DEPTH_W (FIFO_ADDR_DEPTH_W),
.FIFO_W (FIFO_ADDR_W),
.SRAM_UNUSED_ADDR_W(FA_SRAM_UNUSED_ADDR_W)
) I_FIFO_ADR (
.wrclk_RESET_N ( axi_resetn ),
.rdclk_RESET_N ( wb_resetn ),
.wr_en ( sync_ENABLE_axi ),
.rd_en ( sync_ENABLE_wb ),
.fifo_wr_clk ( axi_clk ),
.fifo_rd_clk ( wb_clk ),
.fifo_wr ( fifo_adr_wr ),
.fifo_rd ( fifo_adr_rd ),
.fifo_wdata ( fifo_adr_wdata ),
.fifo_rdata ( fifo_adr_rdata ),
.fifo_empty ( fifo_adr_empty ),
.fifo_full ( fifo_adr_full ),
);
assign fifo_adr_wr = fifo_addr_wr;
assign fifo_adr_wdata = fifo_addr_info;
async_fifo #(
.FIFO_DEPTH_W (FIFO_DATA_DEPTH_W),
.FIFO_W (FIFO_DATA_W),
.SRAM_UNUSED_ADDR_W(FD_SRAM_UNUSED_ADDR_W)
) I_FIFO_DAT (
.wrclk_RESET_N ( axi_resetn ),
.rdclk_RESET_N ( wb_resetn ),
.wr_en ( sync_ENABLE_axi ),
.rd_en ( sync_ENABLE_wb ),
.fifo_wr_clk ( axi_clk ),
.fifo_rd_clk ( wb_clk ),
.fifo_wr ( fifo_dat_wr ),
.fifo_rd ( fifo_dat_rd ),
.fifo_wdata ( fifo_dat_wdata ),
.fifo_rdata ( fifo_dat_rdata ),
.fifo_empty ( fifo_dat_empty ),
.fifo_full ( fifo_dat_full ),
);
assign fifo_dat_wr = fifo_data_wr;
assign fifo_dat_wdata = fifo_data_info;
wb_egress #(
.WB_ADR_W (WB_ADR_W )
.WB_DAT_W (WB_DAT_W )
.WB_TGA_W (WB_TGA_W )
.WB_TGD_W (WB_TGD_W )
.WB_TGC_W (WB_TGC_W )
.WB_SEL_W (WB_SEL_W )
.WB_CTI_W (WB_CTI_W )
.WB_BTE_W (WB_BTE_W )
.AXI_ID_W (AXI_ID_W )
.AXI_ADDR_W (AXI_ADDR_W )
.AXI_LEN_W (AXI_LEN_W )
.AXI_SIZE_W (AXI_SIZE_W )
.AXI_BURST_W(AXI_BURST_W)
.AXI_LOCK_W (AXI_LOCK_W )
.AXI_CACHE_W(AXI_CACHE_W)
.AXI_PROT_W (AXI_PROT_W )
.AXI_DATA_W (AXI_DATA_W )
.AXI_STRB_W (AXI_STRB_W )
) I_WB_EGRESS(
.wb_clk ( wb_clk ),
.wb_resetn ( wb_resetn ),
.ENABLE ( sync_ENABLE_wb ),
.WB_TX_IF ( WB_TX_IF ),
.fifo_adr_rdata ( fifo_adr_rdata ),
.fifo_adr_rd ( fifo_adr_rd ),
.fifo_adr_empty ( fifo_adr_empty ),
.fifo_dat_rdata ( fifo_dat_rdata ),
.fifo_dat_rd ( fifo_dat_rd ),
.fifo_dat_empty ( fifo_dat_empty ),
);
endmodule
Go to most recent revision | Compare with Previous | Blame | View Log