OpenCores
URL https://opencores.org/ocsvn/wb2axi4/wb2axi4/trunk

Subversion Repositories wb2axi4

[/] [wb2axi4/] [trunk/] [rtl/] [axi2wb.sv] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alzhang
//Author     : Alex Zhang (cgzhangwei@gmail.com)
2
//Date       : 03-11-2015
3 3 alzhang
`include "wb2axi_parameters.vh"
4 2 alzhang
module axi2wb (
5
axi_clk,
6
wb_clk,
7
axi_resetn,
8
wb_resetn,
9
ENABLE,
10
AXI_IF,
11
WB_TX_IF
12
);
13 3 alzhang
parameter AXI_ID_W         = `WB2AXI_AXI_ID_W   ;
14
parameter AXI_ADDR_W       = `WB2AXI_AXI_ADDR_W ;
15
parameter AXI_DATA_W       = `WB2AXI_AXI_DATA_W ;
16
parameter AXI_PROT_W       = `WB2AXI_AXI_PROT_W ;
17
parameter AXI_STB_W        = `WB2AXI_AXI_STB_W  ;
18
parameter AXI_LEN_W        = `WB2AXI_AXI_LEN_W  ;
19
parameter AXI_SIZE_W       = `WB2AXI_AXI_SIZE_W ;
20
parameter AXI_BURST_W      = `WB2AXI_AXI_BURST_W;
21
parameter AXI_LOCK_W       = `WB2AXI_AXI_LOCK_W ;
22
parameter AXI_CACHE_W      = `WB2AXI_AXI_CACHE_W;
23
parameter AXI_RESP_W       = `WB2AXI_AXI_RESP_W ;
24 2 alzhang
 
25 3 alzhang
parameter FIFO_ADDR_DEPTH_W = 10;
26
parameter FIFO_ADDR_W       = AXI_ID_W+AXI_ADDR_W+AXI_PROT_W+AXI_LEN_W+AXI_SIZE_W+AXI_BURST_W+AXI_LOCK_W+AXI_CACHE_W+1;
27
parameter FIFO_DATA_DEPTH_W = 11;
28
parameter FIFO_DATA_W       = AXI_ID_W+AXI_DATA_W+AXI_STB_W+2;
29 2 alzhang
 
30
parameter WB_ADR_W          = 32;
31
parameter WB_DAT_W          = 32;
32
parameter WB_TGA_W          = 8;
33
parameter WB_TGD_W          = 8;
34
parameter WB_TGC_W          = 4;
35
parameter WB_SEL_W          = 4;
36
parameter WB_CTI_W          = 3;
37
parameter WB_BTE_W          = 2;
38
 
39 3 alzhang
localparam SRAM_UNUSED_ADDR_W= 4;
40
localparam AXI_MAX_RESP_W    = 4;
41
localparam FA_SRAM_UNUSED_ADDR_W = 1;
42
localparam FD_SRAM_UNUSED_ADDR_W = 1;
43 2 alzhang
input  wire             axi_clk;
44
input  wire             wb_clk;
45
input  wire             axi_resetn;
46
input  wire             wb_resetn;
47 3 alzhang
input  wire             ENABLE;
48 2 alzhang
axi_if.target           AXI_IF;
49 3 alzhang
wishbone_if.master      WB_TX_IF;
50 2 alzhang
 
51 3 alzhang
sram_if #(.DATA_W(32), .ADDR_W(11))  dat_sram_tx();
52
sram_if #(.DATA_W(64), .ADDR_W(10))  adr_sram_tx();
53
 
54
wire                   sync_ENABLE_axi;
55
wire                   sync_ENABLE_wb ;
56
wire                   fifo_adr_full  ;
57
wire                   fifo_dat_full  ;
58
wire [FIFO_DATA_W-1:0] fifo_dat_rdata ;
59
wire [FIFO_ADDR_W-1:0] fifo_adr_rdata ;
60
 
61 2 alzhang
sync_doble_ff #(.DATA_W(1)) I_SYNC_ENABLE_AXI (
62 3 alzhang
  .CLK              (           axi_clk ),
63
  .RESET_N          (        axi_resetn ),
64 2 alzhang
  .DIN              (            ENABLE ),
65
  .DOUT             (   sync_ENABLE_axi )
66
);
67
sync_doble_ff #(.DATA_W(1)) I_SYNC_ENABLE_WB (
68 3 alzhang
  .CLK              (            wb_clk ),
69
  .RESET_N          (         wb_resetn ),
70 2 alzhang
  .DIN              (            ENABLE ),
71
  .DOUT             (   sync_ENABLE_wb  )
72
);
73 3 alzhang
wire [FIFO_ADDR_W-1:0]  fifo_addr_info;
74
wire [FIFO_DATA_W-1:0]  fifo_data_info;
75
wire                    fifo_addr_wr  ;
76
wire                    fifo_data_wr  ;
77
wire [FIFO_ADDR_W-1:0]  fifo_adr_wdata;
78
wire [FIFO_DATA_W-1:0]  fifo_dat_wdata;
79 2 alzhang
 
80
axi_ingress #(
81 3 alzhang
      .AXI_ID_W        (    AXI_ID_W    ),
82 2 alzhang
      .AXI_ADDR_W      (    AXI_ADDR_W   ),
83
      .AXI_DATA_W      (    AXI_DATA_W   ),
84
      .AXI_PROT_W      (    AXI_PROT_W   ),
85
      .AXI_STB_W       (    AXI_STB_W    ),
86
      .AXI_LEN_W       (    AXI_LEN_W    ),
87 3 alzhang
      .AXI_SIZE_W      (    AXI_SIZE_W   ),
88
      .AXI_BURST_W     (    AXI_BURST_W  ),
89
      .AXI_LOCK_W      (    AXI_LOCK_W   ),
90
      .AXI_CACHE_W     (    AXI_CACHE_W  ),
91
      .AXI_RESP_W      (    AXI_RESP_W   ),
92
      .AXI_MAX_RESP_W  ( AXI_MAX_RESP_W  ),
93
      .FIFO_DAT_W      (   FIFO_DATA_W   ),
94
      .FIFO_ADR_W      (   FIFO_ADDR_W   )
95 2 alzhang
) I_AXI_INGRESS (
96
  .axi_clk        ( axi_clk       ),
97
  .reset_n        ( axi_resetn    ),
98
  .AXI_IF         ( AXI_IF        ),
99
  .fifo_full      ( fifo_full     ),
100
  .fifo_addr_info ( fifo_addr_info),
101
  .fifo_data_info ( fifo_data_info),
102
  .fifo_addr_wr   ( fifo_addr_wr  ),
103
  .fifo_data_wr   ( fifo_data_wr  )
104
);
105
 
106
assign fifo_full  = fifo_adr_full | fifo_dat_full;
107
 
108
async_fifo #(
109
  .FIFO_DEPTH_W      (FIFO_ADDR_DEPTH_W),
110
  .FIFO_W            (FIFO_ADDR_W),
111
  .SRAM_UNUSED_ADDR_W(FA_SRAM_UNUSED_ADDR_W)
112
) I_FIFO_ADR (
113
  .wrclk_RESET_N    (      axi_resetn ),
114
  .rdclk_RESET_N    (       wb_resetn ),
115
  .wr_en            ( sync_ENABLE_axi ),
116
  .rd_en            ( sync_ENABLE_wb  ),
117
  .fifo_wr_clk      (         axi_clk ),
118
  .fifo_rd_clk      (         wb_clk  ),
119
  .fifo_wr          (     fifo_adr_wr ),
120
  .fifo_rd          (     fifo_adr_rd ),
121
  .fifo_wdata       (  fifo_adr_wdata ),
122
  .fifo_rdata       (  fifo_adr_rdata ),
123
  .fifo_empty       (  fifo_adr_empty ),
124
  .fifo_full        (   fifo_adr_full ),
125 3 alzhang
  .fifo_level       (                 ),
126
  .SRAM_IF          (     adr_sram_tx )
127 2 alzhang
);
128 3 alzhang
wire    adr_sram_enable;
129
wire    adr_sram_wr;
130
wire [FIFO_ADDR_W-1:0] adr_sram_din;
131
wire [FIFO_ADDR_W-1:0] adr_sram_dout;
132
wire [FIFO_ADDR_DEPTH_W-1:0] adr_sram_addr;
133
sram_model #(
134
  .MEM_ADDR_W  (FIFO_ADDR_DEPTH_W),
135
  .MEM_DATA_W  (FIFO_ADDR_W)
136
) SRAM_ADR_1phc1024x32mx4tn(
137
  .CLK(axi_clk        ),
138
  .NCE(adr_sram_enable),
139
  .NWRT(adr_sram_wr   ),
140
  .NOE(1'b0           ),
141
  .DIN(adr_sram_din   ),
142
  .ADDR(adr_sram_addr ),
143
  .DOUT(adr_sram_dout )
144
);
145
assign adr_sram_enable   = adr_sram_tx.rd_l | adr_sram_tx.wr_l;
146
assign adr_sram_wr       = adr_sram_tx.wr_l;
147
assign adr_sram_din      = adr_sram_tx.wdata;
148
assign adr_sram_addr     = ~adr_sram_tx.wr_l ? adr_sram_tx.wr_address : adr_sram_tx.rd_address;
149
assign adr_sram_tx.rdata = adr_sram_dout;
150
 
151 2 alzhang
assign fifo_adr_wr    = fifo_addr_wr;
152
assign fifo_adr_wdata = fifo_addr_info;
153
async_fifo #(
154
  .FIFO_DEPTH_W      (FIFO_DATA_DEPTH_W),
155
  .FIFO_W            (FIFO_DATA_W),
156
  .SRAM_UNUSED_ADDR_W(FD_SRAM_UNUSED_ADDR_W)
157
) I_FIFO_DAT (
158
  .wrclk_RESET_N    (      axi_resetn ),
159
  .rdclk_RESET_N    (       wb_resetn ),
160
  .wr_en            ( sync_ENABLE_axi ),
161
  .rd_en            ( sync_ENABLE_wb  ),
162
  .fifo_wr_clk      (         axi_clk ),
163
  .fifo_rd_clk      (         wb_clk  ),
164
  .fifo_wr          (     fifo_dat_wr ),
165
  .fifo_rd          (     fifo_dat_rd ),
166
  .fifo_wdata       (  fifo_dat_wdata ),
167
  .fifo_rdata       (  fifo_dat_rdata ),
168
  .fifo_empty       (  fifo_dat_empty ),
169
  .fifo_full        (   fifo_dat_full ),
170 3 alzhang
  .fifo_level       (                 ),
171
  .SRAM_IF          (     dat_sram_tx )
172 2 alzhang
);
173 3 alzhang
wire    dat_sram_enable;
174
wire    dat_sram_wr;
175
wire [FIFO_DATA_W-1:0]       dat_sram_din;
176
wire [FIFO_DATA_W-1:0]       dat_sram_dout;
177
wire [FIFO_DATA_DEPTH_W-1:0] dat_sram_addr;
178
sram_model #(
179
  .MEM_ADDR_W  (FIFO_DATA_DEPTH_W),
180
  .MEM_DATA_W  (FIFO_DATA_W)
181
) SRAM_DAT_1phc1024x32mx4tn(
182
  .CLK(axi_clk        ),
183
  .NCE(dat_sram_enable),
184
  .NWRT(dat_sram_wr   ),
185
  .NOE(1'b0           ),
186
  .DIN(dat_sram_din   ),
187
  .ADDR(dat_sram_addr),
188
  .DOUT(dat_sram_dout)
189
);
190
assign dat_sram_enable   = dat_sram_tx.rd_l | dat_sram_tx.wr_l;
191
assign dat_sram_wr       = dat_sram_tx.wr_l;
192
assign dat_sram_din      = dat_sram_tx.wdata;
193
assign dat_sram_addr     = ~dat_sram_tx.wr_l ? dat_sram_tx.wr_address : dat_sram_tx.rd_address;
194
assign dat_sram_tx.rdata = dat_sram_dout;
195
 
196
 
197 2 alzhang
assign fifo_dat_wr    = fifo_data_wr;
198
assign fifo_dat_wdata = fifo_data_info;
199
wb_egress #(
200 3 alzhang
  .WB_ADR_W   (WB_ADR_W   ),
201
  .WB_DAT_W   (WB_DAT_W   ),
202
  .WB_TGA_W   (WB_TGA_W   ),
203
  .WB_TGD_W   (WB_TGD_W   ),
204
  .WB_TGC_W   (WB_TGC_W   ),
205
  .WB_SEL_W   (WB_SEL_W   ),
206
  .WB_CTI_W   (WB_CTI_W   ),
207
  .WB_BTE_W   (WB_BTE_W   ),
208
  .AXI_ID_W   (AXI_ID_W   ),
209
  .AXI_ADDR_W (AXI_ADDR_W ),
210
  .AXI_LEN_W  (AXI_LEN_W  ),
211
  .AXI_SIZE_W (AXI_SIZE_W ),
212
  .AXI_BURST_W(AXI_BURST_W),
213
  .AXI_LOCK_W (AXI_LOCK_W ),
214
  .AXI_CACHE_W(AXI_CACHE_W),
215
  .AXI_PROT_W (AXI_PROT_W ),
216
  .AXI_DATA_W (AXI_DATA_W ),
217
  .AXI_STB_W  (AXI_STB_W )
218 2 alzhang
) I_WB_EGRESS(
219
  .wb_clk         ( wb_clk         ),
220
  .wb_resetn      ( wb_resetn      ),
221
  .ENABLE         ( sync_ENABLE_wb ),
222
  .WB_TX_IF       ( WB_TX_IF       ),
223
  .fifo_adr_rdata ( fifo_adr_rdata ),
224
  .fifo_adr_rd    ( fifo_adr_rd    ),
225
  .fifo_adr_empty ( fifo_adr_empty ),
226
  .fifo_dat_rdata ( fifo_dat_rdata ),
227
  .fifo_dat_rd    ( fifo_dat_rd    ),
228 3 alzhang
  .fifo_dat_empty ( fifo_dat_empty )
229 2 alzhang
);
230
 
231
endmodule

powered by: WebSVN 2.1.0

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