OpenCores
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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.