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

Subversion Repositories axi_slave

[/] [axi_slave/] [trunk/] [src/] [base/] [axi_slave_ram.v] - Blame information for rev 10

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 eyalhoc
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  Author: Eyal Hochberg                                      ////
4
////          eyal@provartec.com                                 ////
5
////                                                             ////
6
////  Downloaded from: http://www.opencores.org                  ////
7
/////////////////////////////////////////////////////////////////////
8
////                                                             ////
9
//// Copyright (C) 2010 Provartec LTD                            ////
10
//// www.provartec.com                                           ////
11
//// info@provartec.com                                          ////
12
////                                                             ////
13
//// This source file may be used and distributed without        ////
14
//// restriction provided that this copyright statement is not   ////
15
//// removed from the file and that any derivative work contains ////
16
//// the original copyright notice and the associated disclaimer.////
17
////                                                             ////
18
//// This source file is free software; you can redistribute it  ////
19
//// and/or modify it under the terms of the GNU Lesser General  ////
20
//// Public License as published by the Free Software Foundation.////
21
////                                                             ////
22
//// This source is distributed in the hope that it will be      ////
23
//// useful, but WITHOUT ANY WARRANTY; without even the implied  ////
24
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR     ////
25
//// PURPOSE.  See the GNU Lesser General Public License for more////
26
//// details. http://www.gnu.org/licenses/lgpl.html              ////
27
////                                                             ////
28
/////////////////////////////////////////////////////////////////////
29
 
30
OUTFILE PREFIX_ram.v
31
 
32
INCLUDE def_axi_slave.txt
33
 
34
module PREFIX_ram(PORTS);
35
 
36
   input                      clk;
37
   input                      reset;
38
 
39
   revport                    GROUP_STUB_AXI;
40
 
41
   port                       GROUP_STUB_MEM;
42
 
43
 
44 10 eyalhoc
   //busy
45
   wire                       ARBUSY;
46
   wire                       RBUSY;
47
   wire                       AWBUSY;
48
   wire                       WBUSY;
49 2 eyalhoc
   wire                       BBUSY;
50
 
51
   //wcmd fifo
52
   wire [ADDR_BITS-1:0]       wcmd_addr;
53
   wire [ID_BITS-1:0]          wcmd_id;
54 10 eyalhoc
   wire [SIZE_BITS-1:0]       wcmd_size;
55 2 eyalhoc
   wire [LEN_BITS-1:0]        wcmd_len;
56
   wire [1:0]                  wcmd_resp;
57
   wire                       wcmd_timeout;
58
   wire                       wcmd_ready;
59
   wire                       wcmd_empty;
60
   wire                       wcmd_full;
61
 
62
   //rcmd fifo
63
   wire [ADDR_BITS-1:0]       rcmd_addr;
64
   wire [ID_BITS-1:0]          rcmd_id;
65 10 eyalhoc
   wire [SIZE_BITS-1:0]    rcmd_size;
66 2 eyalhoc
   wire [LEN_BITS-1:0]        rcmd_len;
67
   wire [1:0]                  rcmd_resp;
68
   wire                       rcmd_timeout;
69 10 eyalhoc
   wire                       rcmd_ready;
70
   wire                       rcmd_empty;
71 2 eyalhoc
   wire                       rcmd_full;
72
 
73
   wire [ID_BITS-1:0]          rcmd_id2;
74
   wire [LEN_BITS-1:0]        rcmd_len2;
75
 
76
   wire                       wresp_empty;
77
   wire                       wresp_pending;
78
   wire                       wresp_timeout;
79
 
80
   reg [ADDR_BITS-1:0]         TIMEOUT_AR_addr = {ADDR_BITS{1'b1}};
81
   reg [ADDR_BITS-1:0]         TIMEOUT_AW_addr = {ADDR_BITS{1'b1}};
82
   wire                       AR_stall = ARVALID & (TIMEOUT_AR_addr == ARADDR);
83
   wire                       AW_stall = AWVALID & (TIMEOUT_AW_addr == AWADDR);
84
 
85
   wire                       RD_last;
86
 
87
   assign                     RID   = rcmd_id2;
88
 
89 10 eyalhoc
 
90
   assign                     ARREADY = ((~rcmd_full) & (~AR_stall) & (~ARBUSY)) || (~ARVALID);
91
   assign                     AWREADY = ((~wcmd_full) & (~AW_stall) & (~AWBUSY)) || (~AWVALID);
92
   assign                     BVALID  = (~wresp_timeout) & (wresp_pending ? (~wresp_empty) : (~wresp_empty) & (~BBUSY));
93 2 eyalhoc
 
94
   CREATE axi_slave_busy.v
95
   PREFIX_busy
96
     PREFIX_busy (
97
                   .clk(clk),
98 10 eyalhoc
                   .reset(reset),
99
                   .ARBUSY(ARBUSY),
100
                   .RBUSY(RBUSY),
101
                   .AWBUSY(AWBUSY),
102
                   .WBUSY(WBUSY),
103 2 eyalhoc
                   .BBUSY(BBUSY)
104
                   );
105
 
106
   CREATE axi_slave_cmd_fifo.v
107
   PREFIX_cmd_fifo #(WCMD_DEPTH)
108
   PREFIX_wcmd_fifo (
109
                      .clk(clk),
110
                      .reset(reset),
111
                      .AADDR(AWADDR),
112
                      .AID(AWID),
113
                      .ASIZE(AWSIZE),
114
                      .ALEN(AWLEN),
115
                      .AVALID(AWVALID),
116
                      .AREADY(AWREADY),
117
                      .VALID(WVALID),
118
                      .READY(WREADY),
119
                      .LAST(WLAST),
120
                      .cmd_addr(wcmd_addr),
121
                      .cmd_id(wcmd_id), //not used
122
                      .cmd_size(wcmd_size),
123
                      .cmd_len(wcmd_len), //not used
124
                      .cmd_resp(),
125
                      .cmd_timeout(wcmd_timeout),
126
                      .cmd_ready(wcmd_ready),
127
                      .cmd_empty(wcmd_empty),
128
                      .cmd_full(wcmd_full)
129
                      );
130
 
131
 
132
   PREFIX_cmd_fifo #(RCMD_DEPTH)
133
   PREFIX_rcmd_fifo (
134
                      .clk(clk),
135
                      .reset(reset),
136
                      .AADDR(ARADDR),
137
                      .AID(ARID),
138
                      .ASIZE(ARSIZE),
139
                      .ALEN(ARLEN),
140
                      .AVALID(ARVALID),
141
                      .AREADY(ARREADY),
142
                      .VALID(RD_last),
143
                      .READY(1'b1),
144
                      .LAST(1'b1),
145
                      .cmd_addr(rcmd_addr),
146
                      .cmd_id(rcmd_id),
147
                      .cmd_size(rcmd_size),
148
                      .cmd_len(rcmd_len),
149
                      .cmd_resp(rcmd_resp),
150
                      .cmd_timeout(rcmd_timeout),
151
                      .cmd_ready(rcmd_ready),
152
                      .cmd_empty(),
153
                      .cmd_full()
154
                      );
155
 
156
   PREFIX_cmd_fifo #(RCMD_DEPTH)
157
   PREFIX_rcmd_fifo2 (
158
                       .clk(clk),
159
                       .reset(reset),
160
                       .AADDR(ARADDR),
161
                       .AID(ARID),
162
                       .ASIZE(ARSIZE),
163
                       .ALEN(ARLEN),
164
                       .AVALID(ARVALID),
165
                       .AREADY(ARREADY),
166
                       .VALID(RVALID),
167
                       .READY(RREADY),
168
                       .LAST(RLAST),
169
                       .cmd_addr(),
170
                       .cmd_id(rcmd_id2),
171
                       .cmd_size(),
172
                       .cmd_len(rcmd_len2),
173
                       .cmd_resp(),
174
                       .cmd_timeout(),
175
                       .cmd_ready(),
176 10 eyalhoc
                       .cmd_empty(rcmd_empty),
177 2 eyalhoc
                       .cmd_full(rcmd_full)
178
                       );
179
 
180
   CREATE axi_slave_wresp_fifo.v
181
   PREFIX_wresp_fifo #(WCMD_DEPTH)
182
     PREFIX_wresp_fifo (
183
                         .clk(clk),
184
                         .reset(reset),
185
                         .AWVALID(AWVALID),
186
                         .AWREADY(AWREADY),
187
                         .AWADDR(AWADDR),
188
                         .WVALID(WVALID),
189
                         .WREADY(WREADY),
190
                         .WLAST(WLAST),
191
                         .WID(WID),
192
                         .BID(BID),
193
                         .BRESP(BRESP),
194
                         .BVALID(BVALID),
195
                         .BREADY(BREADY),
196
                         .empty(wresp_empty),
197
                         .pending(wresp_pending),
198
                         .timeout(wresp_timeout)
199
                         );
200
 
201
   CREATE axi_slave_addr_gen.v
202
   PREFIX_addr_gen
203
     PREFIX_addr_gen_wr (
204
                          .clk(clk),
205
                          .reset(reset),
206
                          .cmd_addr(wcmd_addr),
207
                          .cmd_size(wcmd_size),
208
                          .advance(WVALID & WREADY & (~WLAST)),
209
                          .restart(WVALID & WREADY & WLAST),
210
                          .ADDR(ADDR_WR)
211
                          );
212
 
213
 
214
   PREFIX_addr_gen
215
     PREFIX_addr_gen_rd (
216
                          .clk(clk),
217
                          .reset(reset),
218
                          .cmd_addr(rcmd_addr),
219
                          .cmd_size(rcmd_size),
220
                          .advance(RD),
221
                          .restart(RD_last),
222
                          .ADDR(ADDR_RD)
223
                          );
224
 
225
   CREATE axi_slave_rd_buff.v
226 10 eyalhoc
   PREFIX_rd_buff
227 2 eyalhoc
   PREFIX_rd_buff(
228
                   .clk(clk),
229
                   .reset(reset),
230
                   .RD(RD),
231
                   .DOUT(DOUT),
232
                   .rcmd_len(rcmd_len),
233
                   .rcmd_len2(rcmd_len2),
234
                   .rcmd_resp(rcmd_resp),
235
                   .rcmd_timeout(rcmd_timeout),
236
                   .rcmd_ready(rcmd_ready),
237 10 eyalhoc
                   .RVALID(RVALID),
238 2 eyalhoc
                   .RREADY(RREADY),
239
                   .RLAST(RLAST),
240
                   .RDATA(RDATA),
241
                   .RD_last(RD_last),
242
                   .RRESP(RRESP),
243
                   .RBUSY(RBUSY)
244
                   );
245
 
246
   //wr_buff
247 10 eyalhoc
   assign                     WREADY = (~wcmd_timeout) & (~wcmd_empty) & (~WBUSY);
248
   assign                     WR     = WVALID & WREADY & (~wcmd_empty);
249
   assign                     DIN    = WDATA;
250
   assign                     BSEL   = WSTRB;
251 2 eyalhoc
 
252
 
253
endmodule
254
 
255
 

powered by: WebSVN 2.1.0

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