OpenCores
URL https://opencores.org/ocsvn/kiss-board/kiss-board/trunk

Subversion Repositories kiss-board

[/] [kiss-board/] [tags/] [initial/] [kiss-board_soc/] [src/] [extend/] [wb_dma/] [wb_dma_ch_sel.v] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 fukuchi
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  WISHBONE DMA Channel Select                                ////
4
////                                                             ////
5
////                                                             ////
6
////  Author: Rudolf Usselmann                                   ////
7
////          rudi@asics.ws                                      ////
8
////                                                             ////
9
////                                                             ////
10
////  Downloaded from: http://www.opencores.org/cores/wb_dma/    ////
11
////                                                             ////
12
/////////////////////////////////////////////////////////////////////
13
////                                                             ////
14
//// Copyright (C) 2000-2002 Rudolf Usselmann                    ////
15
////                         www.asics.ws                        ////
16
////                         rudi@asics.ws                       ////
17
////                                                             ////
18
//// This source file may be used and distributed without        ////
19
//// restriction provided that this copyright statement is not   ////
20
//// removed from the file and that any derivative work contains ////
21
//// the original copyright notice and the associated disclaimer.////
22
////                                                             ////
23
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
24
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
25
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
26
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
27
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
28
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
29
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
30
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
31
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
32
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
33
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
34
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
35
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
36
////                                                             ////
37
/////////////////////////////////////////////////////////////////////
38
 
39
//  CVS Log
40
//
41
//  $Id: wb_dma_ch_sel.v,v 1.1.1.1 2006-05-29 13:45:16 fukuchi Exp $
42
//
43
//  $Date: 2006-05-29 13:45:16 $
44
//  $Revision: 1.1.1.1 $
45
//  $Author: fukuchi $
46
//  $Locker:  $
47
//  $State: Exp $
48
//
49
// Change History:
50
//               $Log: not supported by cvs2svn $
51
//               Revision 1.4  2002/02/01 01:54:45  rudi
52
//
53
//               - Minor cleanup
54
//
55
//               Revision 1.3  2001/10/19 04:35:04  rudi
56
//
57
//               - Made the core parameterized
58
//
59
//               Revision 1.2  2001/08/15 05:40:30  rudi
60
//
61
//               - Changed IO names to be more clear.
62
//               - Uniquifyed define names to be core specific.
63
//               - Added Section 3.10, describing DMA restart.
64
//
65
//               Revision 1.1  2001/07/29 08:57:02  rudi
66
//
67
//
68
//               1) Changed Directory Structure
69
//               2) Added restart signal (REST)
70
//
71
//               Revision 1.4  2001/06/14 08:52:00  rudi
72
//
73
//
74
//               Changed arbiter module name.
75
//
76
//               Revision 1.3  2001/06/13 02:26:48  rudi
77
//
78
//
79
//               Small changes after running lint.
80
//
81
//               Revision 1.2  2001/06/05 10:22:36  rudi
82
//
83
//
84
//               - Added Support of up to 31 channels
85
//               - Added support for 2,4 and 8 priority levels
86
//               - Now can have up to 31 channels
87
//               - Added many configuration items
88
//               - Changed reset to async
89
//
90
//               Revision 1.1.1.1  2001/03/19 13:10:35  rudi
91
//               Initial Release
92
//
93
//
94
//
95
 
96
`include "wb_dma_defines.v"
97
 
98
module wb_dma_ch_sel(clk, rst,
99
 
100
        // DMA Request Lines
101
        req_i, ack_o, nd_i,
102
 
103
        // DMA Registers Inputs
104
        pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1,
105
        pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1,
106
        pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1,
107
        pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1,
108
        pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1,
109
        pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1,
110
        pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1,
111
        pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1,
112
        pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1,
113
        pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1,
114
        pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1,
115
        pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1,
116
        pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1,
117
        pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1,
118
        pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1,
119
        pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1,
120
        pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1,
121
        pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1,
122
        pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1,
123
        pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1,
124
        pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1,
125
        pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1,
126
        pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1,
127
        pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1,
128
        pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1,
129
        pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1,
130
        pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1,
131
        pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1,
132
        pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1,
133
        pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1,
134
        pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1,
135
 
136
        // DMA Registers Write Back Channel Select
137
        ch_sel, ndnr,
138
 
139
        // DMA Engine Interface
140
        de_start, ndr, csr, pointer, txsz, adr0, adr1, am0, am1,
141
        pointer_s, next_ch, de_ack, dma_busy
142
        );
143
 
144
////////////////////////////////////////////////////////////////////
145
//
146
// Module Parameters
147
//
148
 
149
// chXX_conf = { CBUF, ED, ARS, EN }
150
parameter       [1:0]    pri_sel  = 2'h0;
151
parameter       [3:0]    ch0_conf = 4'h1;
152
parameter       [3:0]    ch1_conf = 4'h0;
153
parameter       [3:0]    ch2_conf = 4'h0;
154
parameter       [3:0]    ch3_conf = 4'h0;
155
parameter       [3:0]    ch4_conf = 4'h0;
156
parameter       [3:0]    ch5_conf = 4'h0;
157
parameter       [3:0]    ch6_conf = 4'h0;
158
parameter       [3:0]    ch7_conf = 4'h0;
159
parameter       [3:0]    ch8_conf = 4'h0;
160
parameter       [3:0]    ch9_conf = 4'h0;
161
parameter       [3:0]    ch10_conf = 4'h0;
162
parameter       [3:0]    ch11_conf = 4'h0;
163
parameter       [3:0]    ch12_conf = 4'h0;
164
parameter       [3:0]    ch13_conf = 4'h0;
165
parameter       [3:0]    ch14_conf = 4'h0;
166
parameter       [3:0]    ch15_conf = 4'h0;
167
parameter       [3:0]    ch16_conf = 4'h0;
168
parameter       [3:0]    ch17_conf = 4'h0;
169
parameter       [3:0]    ch18_conf = 4'h0;
170
parameter       [3:0]    ch19_conf = 4'h0;
171
parameter       [3:0]    ch20_conf = 4'h0;
172
parameter       [3:0]    ch21_conf = 4'h0;
173
parameter       [3:0]    ch22_conf = 4'h0;
174
parameter       [3:0]    ch23_conf = 4'h0;
175
parameter       [3:0]    ch24_conf = 4'h0;
176
parameter       [3:0]    ch25_conf = 4'h0;
177
parameter       [3:0]    ch26_conf = 4'h0;
178
parameter       [3:0]    ch27_conf = 4'h0;
179
parameter       [3:0]    ch28_conf = 4'h0;
180
parameter       [3:0]    ch29_conf = 4'h0;
181
parameter       [3:0]    ch30_conf = 4'h0;
182
 
183
////////////////////////////////////////////////////////////////////
184
//
185
// Module IOs
186
//
187
 
188
input           clk, rst;
189
 
190
// DMA Request Lines
191
input   [30:0]   req_i;
192
output  [30:0]   ack_o;
193
input   [30:0]   nd_i;
194
 
195
// Channel Registers Inputs
196
input   [31:0]   pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
197
input   [31:0]   pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
198
input   [31:0]   pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
199
input   [31:0]   pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
200
input   [31:0]   pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
201
input   [31:0]   pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
202
input   [31:0]   pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
203
input   [31:0]   pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
204
input   [31:0]   pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
205
input   [31:0]   pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
206
input   [31:0]   pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
207
input   [31:0]   pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
208
input   [31:0]   pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
209
input   [31:0]   pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
210
input   [31:0]   pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
211
input   [31:0]   pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
212
input   [31:0]   pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
213
input   [31:0]   pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
214
input   [31:0]   pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
215
input   [31:0]   pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
216
input   [31:0]   pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
217
input   [31:0]   pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
218
input   [31:0]   pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
219
input   [31:0]   pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
220
input   [31:0]   pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
221
input   [31:0]   pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
222
input   [31:0]   pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
223
input   [31:0]   pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
224
input   [31:0]   pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
225
input   [31:0]   pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
226
input   [31:0]   pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
227
 
228
output  [4:0]    ch_sel;         // Write Back Channel Select
229
output  [30:0]   ndnr;           // Next Descriptor No Request
230
 
231
output          de_start;       // Start DMA Engine Indicator
232
output          ndr;            // Next Descriptor With Request (for current channel)
233
output  [31:0]   csr;            // Selected Channel CSR
234
output  [31:0]   pointer;        // LL Descriptor pointer
235
output  [31:0]   pointer_s;      // LL Descriptor previous pointer
236
output  [31:0]   txsz;           // Selected Channel Transfer Size
237
output  [31:0]   adr0, adr1;     // Selected Channel Addresses
238
output  [31:0]   am0, am1;       // Selected Channel Address Masks
239
 
240
input           next_ch;        // Indicates the DMA Engine is done
241
                                // with current transfer
242
input           de_ack;         // DMA engine ack output
243
 
244
input           dma_busy;
245
 
246
////////////////////////////////////////////////////////////////////
247
//
248
// Local Wires and Registers
249
//
250
 
251
reg     [30:0]   ack_o;
252
wire    [30:0]   valid;          // Indicates which channel is valid
253
reg             valid_sel;
254
reg     [30:0]   req_r;          // Channel Request inputs
255
reg     [30:0]   ndr_r;          // Next Descriptor Registered (and Request)
256
reg     [30:0]   ndnr;           // Next Descriptor Registered (and Not Request)
257
wire    [2:0]    pri_out;        // Highest unserviced priority
258
wire    [2:0]    pri0, pri1, pri2, pri3;         // Channel Priorities
259
wire    [2:0]    pri4, pri5, pri6, pri7;
260
wire    [2:0]    pri8, pri9, pri10, pri11;
261
wire    [2:0]    pri12, pri13, pri14, pri15;
262
wire    [2:0]    pri16, pri17, pri18, pri19;
263
wire    [2:0]    pri20, pri21, pri22, pri23;
264
wire    [2:0]    pri24, pri25, pri26, pri27;
265
wire    [2:0]    pri28, pri29, pri30;
266
reg     [4:0]    ch_sel_d;
267
reg     [4:0]    ch_sel_r;
268
 
269
reg             ndr;
270
reg             next_start;
271
reg             de_start_r;
272
reg     [31:0]   csr;            // Selected Channel CSR
273
reg     [31:0]   pointer;
274
reg     [31:0]   pointer_s;
275
reg     [31:0]   txsz;           // Selected Channel Transfer Size
276
reg     [31:0]   adr0, adr1;     // Selected Channel Addresses
277
reg     [31:0]   am0, am1;       // Selected Channel Address Masks
278
 
279
                                // Arbiter Request Inputs
280
wire    [30:0]   req_p0, req_p1, req_p2, req_p3;
281
wire    [30:0]   req_p4, req_p5, req_p6, req_p7;
282
wire    [30:0]   req_p8, req_p9, req_p10, req_p11;
283
wire    [30:0]   req_p12, req_p13, req_p14, req_p15;
284
wire    [30:0]   req_p16, req_p17, req_p18, req_p19;
285
wire    [30:0]   req_p20, req_p21, req_p22, req_p23;
286
wire    [30:0]   req_p24, req_p25, req_p26, req_p27;
287
wire    [30:0]   req_p28, req_p29, req_p30;
288
                                // Arbiter Grant Outputs
289
wire    [4:0]    gnt_p0_d, gnt_p1_d, gnt_p2_d, gnt_p3_d;
290
wire    [4:0]    gnt_p4_d, gnt_p5_d, gnt_p6_d, gnt_p7_d;
291
wire    [4:0]    gnt_p0, gnt_p1, gnt_p2, gnt_p3;
292
wire    [4:0]    gnt_p4, gnt_p5, gnt_p6, gnt_p7;
293
wire    [4:0]    gnt_p8, gnt_p9, gnt_p10, gnt_p11;
294
wire    [4:0]    gnt_p12, gnt_p13, gnt_p14, gnt_p15;
295
wire    [4:0]    gnt_p16, gnt_p17, gnt_p18, gnt_p19;
296
wire    [4:0]    gnt_p20, gnt_p21, gnt_p22, gnt_p23;
297
wire    [4:0]    gnt_p24, gnt_p25, gnt_p26, gnt_p27;
298
wire    [4:0]    gnt_p28, gnt_p29, gnt_p30;
299
 
300
 
301
////////////////////////////////////////////////////////////////////
302
//
303
// Aliases
304
//
305
 
306
assign pri0[0] = ch0_csr[13];
307
assign pri0[1] = (pri_sel == 2'd0) ? 1'b0 : ch0_csr[14];
308
assign pri0[2] = (pri_sel == 2'd2) ? ch0_csr[15] : 1'b0;
309
assign pri1[0] = ch1_csr[13];
310
assign pri1[1] = (pri_sel == 2'd0) ? 1'b0 : ch1_csr[14];
311
assign pri1[2] = (pri_sel == 2'd2) ? ch1_csr[15] : 1'b0;
312
assign pri2[0] = ch2_csr[13];
313
assign pri2[1] = (pri_sel == 2'd0) ? 1'b0 : ch2_csr[14];
314
assign pri2[2] = (pri_sel == 2'd2) ? ch2_csr[15] : 1'b0;
315
assign pri3[0] = ch3_csr[13];
316
assign pri3[1] = (pri_sel == 2'd0) ? 1'b0 : ch3_csr[14];
317
assign pri3[2] = (pri_sel == 2'd2) ? ch3_csr[15] : 1'b0;
318
assign pri4[0] = ch4_csr[13];
319
assign pri4[1] = (pri_sel == 2'd0) ? 1'b0 : ch4_csr[14];
320
assign pri4[2] = (pri_sel == 2'd2) ? ch4_csr[15] : 1'b0;
321
assign pri5[0] = ch5_csr[13];
322
assign pri5[1] = (pri_sel == 2'd0) ? 1'b0 : ch5_csr[14];
323
assign pri5[2] = (pri_sel == 2'd2) ? ch5_csr[15] : 1'b0;
324
assign pri6[0] = ch6_csr[13];
325
assign pri6[1] = (pri_sel == 2'd0) ? 1'b0 : ch6_csr[14];
326
assign pri6[2] = (pri_sel == 2'd2) ? ch6_csr[15] : 1'b0;
327
assign pri7[0] = ch7_csr[13];
328
assign pri7[1] = (pri_sel == 2'd0) ? 1'b0 : ch7_csr[14];
329
assign pri7[2] = (pri_sel == 2'd2) ? ch7_csr[15] : 1'b0;
330
assign pri8[0] = ch8_csr[13];
331
assign pri8[1] = (pri_sel == 2'd0) ? 1'b0 : ch8_csr[14];
332
assign pri8[2] = (pri_sel == 2'd2) ? ch8_csr[15] : 1'b0;
333
assign pri9[0] = ch9_csr[13];
334
assign pri9[1] = (pri_sel == 2'd0) ? 1'b0 : ch9_csr[14];
335
assign pri9[2] = (pri_sel == 2'd2) ? ch9_csr[15] : 1'b0;
336
assign pri10[0] = ch10_csr[13];
337
assign pri10[1] = (pri_sel == 2'd0) ? 1'b0 : ch10_csr[14];
338
assign pri10[2] = (pri_sel == 2'd2) ? ch10_csr[15] : 1'b0;
339
assign pri11[0] = ch11_csr[13];
340
assign pri11[1] = (pri_sel == 2'd0) ? 1'b0 : ch11_csr[14];
341
assign pri11[2] = (pri_sel == 2'd2) ? ch11_csr[15] : 1'b0;
342
assign pri12[0] = ch12_csr[13];
343
assign pri12[1] = (pri_sel == 2'd0) ? 1'b0 : ch12_csr[14];
344
assign pri12[2] = (pri_sel == 2'd2) ? ch12_csr[15] : 1'b0;
345
assign pri13[0] = ch13_csr[13];
346
assign pri13[1] = (pri_sel == 2'd0) ? 1'b0 : ch13_csr[14];
347
assign pri13[2] = (pri_sel == 2'd2) ? ch13_csr[15] : 1'b0;
348
assign pri14[0] = ch14_csr[13];
349
assign pri14[1] = (pri_sel == 2'd0) ? 1'b0 : ch14_csr[14];
350
assign pri14[2] = (pri_sel == 2'd2) ? ch14_csr[15] : 1'b0;
351
assign pri15[0] = ch15_csr[13];
352
assign pri15[1] = (pri_sel == 2'd0) ? 1'b0 : ch15_csr[14];
353
assign pri15[2] = (pri_sel == 2'd2) ? ch15_csr[15] : 1'b0;
354
assign pri16[0] = ch16_csr[13];
355
assign pri16[1] = (pri_sel == 2'd0) ? 1'b0 : ch16_csr[14];
356
assign pri16[2] = (pri_sel == 2'd2) ? ch16_csr[15] : 1'b0;
357
assign pri17[0] = ch17_csr[13];
358
assign pri17[1] = (pri_sel == 2'd0) ? 1'b0 : ch17_csr[14];
359
assign pri17[2] = (pri_sel == 2'd2) ? ch17_csr[15] : 1'b0;
360
assign pri18[0] = ch18_csr[13];
361
assign pri18[1] = (pri_sel == 2'd0) ? 1'b0 : ch18_csr[14];
362
assign pri18[2] = (pri_sel == 2'd2) ? ch18_csr[15] : 1'b0;
363
assign pri19[0] = ch19_csr[13];
364
assign pri19[1] = (pri_sel == 2'd0) ? 1'b0 : ch19_csr[14];
365
assign pri19[2] = (pri_sel == 2'd2) ? ch19_csr[15] : 1'b0;
366
assign pri20[0] = ch20_csr[13];
367
assign pri20[1] = (pri_sel == 2'd0) ? 1'b0 : ch20_csr[14];
368
assign pri20[2] = (pri_sel == 2'd2) ? ch20_csr[15] : 1'b0;
369
assign pri21[0] = ch21_csr[13];
370
assign pri21[1] = (pri_sel == 2'd0) ? 1'b0 : ch21_csr[14];
371
assign pri21[2] = (pri_sel == 2'd2) ? ch21_csr[15] : 1'b0;
372
assign pri22[0] = ch22_csr[13];
373
assign pri22[1] = (pri_sel == 2'd0) ? 1'b0 : ch22_csr[14];
374
assign pri22[2] = (pri_sel == 2'd2) ? ch22_csr[15] : 1'b0;
375
assign pri23[0] = ch23_csr[13];
376
assign pri23[1] = (pri_sel == 2'd0) ? 1'b0 : ch23_csr[14];
377
assign pri23[2] = (pri_sel == 2'd2) ? ch23_csr[15] : 1'b0;
378
assign pri24[0] = ch24_csr[13];
379
assign pri24[1] = (pri_sel == 2'd0) ? 1'b0 : ch24_csr[14];
380
assign pri24[2] = (pri_sel == 2'd2) ? ch24_csr[15] : 1'b0;
381
assign pri25[0] = ch25_csr[13];
382
assign pri25[1] = (pri_sel == 2'd0) ? 1'b0 : ch25_csr[14];
383
assign pri25[2] = (pri_sel == 2'd2) ? ch25_csr[15] : 1'b0;
384
assign pri26[0] = ch26_csr[13];
385
assign pri26[1] = (pri_sel == 2'd0) ? 1'b0 : ch26_csr[14];
386
assign pri26[2] = (pri_sel == 2'd2) ? ch26_csr[15] : 1'b0;
387
assign pri27[0] = ch27_csr[13];
388
assign pri27[1] = (pri_sel == 2'd0) ? 1'b0 : ch27_csr[14];
389
assign pri27[2] = (pri_sel == 2'd2) ? ch27_csr[15] : 1'b0;
390
assign pri28[0] = ch28_csr[13];
391
assign pri28[1] = (pri_sel == 2'd0) ? 1'b0 : ch28_csr[14];
392
assign pri28[2] = (pri_sel == 2'd2) ? ch28_csr[15] : 1'b0;
393
assign pri29[0] = ch29_csr[13];
394
assign pri29[1] = (pri_sel == 2'd0) ? 1'b0 : ch29_csr[14];
395
assign pri29[2] = (pri_sel == 2'd2) ? ch29_csr[15] : 1'b0;
396
assign pri30[0] = ch30_csr[13];
397
assign pri30[1] = (pri_sel == 2'd0) ? 1'b0 : ch30_csr[14];
398
assign pri30[2] = (pri_sel == 2'd2) ? ch30_csr[15] : 1'b0;
399
 
400
////////////////////////////////////////////////////////////////////
401
//
402
// Misc logic
403
//
404
 
405
// Chanel Valid flag
406
// The valid flag is asserted when the channel is enabled,
407
// and is either in "normal mode" (software control) or
408
// "hw handshake mode" (reqN control)
409
// validN = ch_enabled & (sw_mode | (hw_mode & reqN) )
410
 
411
always @(posedge clk)
412
        req_r <= #1 req_i & ~ack_o;
413
 
414
assign valid[0] = ch0_conf[0] & ch0_csr[`WDMA_CH_EN] & (ch0_csr[`WDMA_MODE] ? (req_r[0] & !ack_o[0]) : 1'b1);
415
assign valid[1] = ch1_conf[0] & ch1_csr[`WDMA_CH_EN] & (ch1_csr[`WDMA_MODE] ? (req_r[1] & !ack_o[1]) : 1'b1);
416
assign valid[2] = ch2_conf[0] & ch2_csr[`WDMA_CH_EN] & (ch2_csr[`WDMA_MODE] ? (req_r[2] & !ack_o[2]) : 1'b1);
417
assign valid[3] = ch3_conf[0] & ch3_csr[`WDMA_CH_EN] & (ch3_csr[`WDMA_MODE] ? (req_r[3] & !ack_o[3]) : 1'b1);
418
assign valid[4] = ch4_conf[0] & ch4_csr[`WDMA_CH_EN] & (ch4_csr[`WDMA_MODE] ? (req_r[4] & !ack_o[4]) : 1'b1);
419
assign valid[5] = ch5_conf[0] & ch5_csr[`WDMA_CH_EN] & (ch5_csr[`WDMA_MODE] ? (req_r[5] & !ack_o[5]) : 1'b1);
420
assign valid[6] = ch6_conf[0] & ch6_csr[`WDMA_CH_EN] & (ch6_csr[`WDMA_MODE] ? (req_r[6] & !ack_o[6]) : 1'b1);
421
assign valid[7] = ch7_conf[0] & ch7_csr[`WDMA_CH_EN] & (ch7_csr[`WDMA_MODE] ? (req_r[7] & !ack_o[7]) : 1'b1);
422
assign valid[8] = ch8_conf[0] & ch8_csr[`WDMA_CH_EN] & (ch8_csr[`WDMA_MODE] ? (req_r[8] & !ack_o[8]) : 1'b1);
423
assign valid[9] = ch9_conf[0] & ch9_csr[`WDMA_CH_EN] & (ch9_csr[`WDMA_MODE] ? (req_r[9] & !ack_o[9]) : 1'b1);
424
assign valid[10] = ch10_conf[0] & ch10_csr[`WDMA_CH_EN] & (ch10_csr[`WDMA_MODE] ? (req_r[10] & !ack_o[10]) : 1'b1);
425
assign valid[11] = ch11_conf[0] & ch11_csr[`WDMA_CH_EN] & (ch11_csr[`WDMA_MODE] ? (req_r[11] & !ack_o[11]) : 1'b1);
426
assign valid[12] = ch12_conf[0] & ch12_csr[`WDMA_CH_EN] & (ch12_csr[`WDMA_MODE] ? (req_r[12] & !ack_o[12]) : 1'b1);
427
assign valid[13] = ch13_conf[0] & ch13_csr[`WDMA_CH_EN] & (ch13_csr[`WDMA_MODE] ? (req_r[13] & !ack_o[13]) : 1'b1);
428
assign valid[14] = ch14_conf[0] & ch14_csr[`WDMA_CH_EN] & (ch14_csr[`WDMA_MODE] ? (req_r[14] & !ack_o[14]) : 1'b1);
429
assign valid[15] = ch15_conf[0] & ch15_csr[`WDMA_CH_EN] & (ch15_csr[`WDMA_MODE] ? (req_r[15] & !ack_o[15]) : 1'b1);
430
assign valid[16] = ch16_conf[0] & ch16_csr[`WDMA_CH_EN] & (ch16_csr[`WDMA_MODE] ? (req_r[16] & !ack_o[16]) : 1'b1);
431
assign valid[17] = ch17_conf[0] & ch17_csr[`WDMA_CH_EN] & (ch17_csr[`WDMA_MODE] ? (req_r[17] & !ack_o[17]) : 1'b1);
432
assign valid[18] = ch18_conf[0] & ch18_csr[`WDMA_CH_EN] & (ch18_csr[`WDMA_MODE] ? (req_r[18] & !ack_o[18]) : 1'b1);
433
assign valid[19] = ch19_conf[0] & ch19_csr[`WDMA_CH_EN] & (ch19_csr[`WDMA_MODE] ? (req_r[19] & !ack_o[19]) : 1'b1);
434
assign valid[20] = ch20_conf[0] & ch20_csr[`WDMA_CH_EN] & (ch20_csr[`WDMA_MODE] ? (req_r[20] & !ack_o[20]) : 1'b1);
435
assign valid[21] = ch21_conf[0] & ch21_csr[`WDMA_CH_EN] & (ch21_csr[`WDMA_MODE] ? (req_r[21] & !ack_o[21]) : 1'b1);
436
assign valid[22] = ch22_conf[0] & ch22_csr[`WDMA_CH_EN] & (ch22_csr[`WDMA_MODE] ? (req_r[22] & !ack_o[22]) : 1'b1);
437
assign valid[23] = ch23_conf[0] & ch23_csr[`WDMA_CH_EN] & (ch23_csr[`WDMA_MODE] ? (req_r[23] & !ack_o[23]) : 1'b1);
438
assign valid[24] = ch24_conf[0] & ch24_csr[`WDMA_CH_EN] & (ch24_csr[`WDMA_MODE] ? (req_r[24] & !ack_o[24]) : 1'b1);
439
assign valid[25] = ch25_conf[0] & ch25_csr[`WDMA_CH_EN] & (ch25_csr[`WDMA_MODE] ? (req_r[25] & !ack_o[25]) : 1'b1);
440
assign valid[26] = ch26_conf[0] & ch26_csr[`WDMA_CH_EN] & (ch26_csr[`WDMA_MODE] ? (req_r[26] & !ack_o[26]) : 1'b1);
441
assign valid[27] = ch27_conf[0] & ch27_csr[`WDMA_CH_EN] & (ch27_csr[`WDMA_MODE] ? (req_r[27] & !ack_o[27]) : 1'b1);
442
assign valid[28] = ch28_conf[0] & ch28_csr[`WDMA_CH_EN] & (ch28_csr[`WDMA_MODE] ? (req_r[28] & !ack_o[28]) : 1'b1);
443
assign valid[29] = ch29_conf[0] & ch29_csr[`WDMA_CH_EN] & (ch29_csr[`WDMA_MODE] ? (req_r[29] & !ack_o[29]) : 1'b1);
444
assign valid[30] = ch30_conf[0] & ch30_csr[`WDMA_CH_EN] & (ch30_csr[`WDMA_MODE] ? (req_r[30] & !ack_o[30]) : 1'b1);
445
 
446
always @(posedge clk)
447
        ndr_r <= #1 nd_i & req_i;
448
 
449
always @(posedge clk)
450
        ndnr <= #1 nd_i & ~req_i;
451
 
452
// Start Signal for DMA engine
453
assign de_start = (valid_sel & !de_start_r ) | next_start;
454
 
455
always @(posedge clk)
456
        de_start_r <= #1 valid_sel;
457
 
458
always @(posedge clk)
459
        next_start <= #1 next_ch & valid_sel;
460
 
461
// Ack outputs for HW handshake mode
462
always @(posedge clk)
463
        ack_o[0] <= #1 ch0_conf[0] & (ch_sel == 5'h0) & ch0_csr[`WDMA_MODE] & de_ack;
464
 
465
always @(posedge clk)
466
        ack_o[1] <= #1 ch1_conf[0] & (ch_sel == 5'h1) & ch1_csr[`WDMA_MODE] & de_ack;
467
 
468
always @(posedge clk)
469
        ack_o[2] <= #1 ch2_conf[0] & (ch_sel == 5'h2) & ch2_csr[`WDMA_MODE] & de_ack;
470
 
471
always @(posedge clk)
472
        ack_o[3] <= #1 ch3_conf[0] & (ch_sel == 5'h3) & ch3_csr[`WDMA_MODE] & de_ack;
473
 
474
always @(posedge clk)
475
        ack_o[4] <= #1 ch4_conf[0] & (ch_sel == 5'h4) & ch4_csr[`WDMA_MODE] & de_ack;
476
 
477
always @(posedge clk)
478
        ack_o[5] <= #1 ch5_conf[0] & (ch_sel == 5'h5) & ch5_csr[`WDMA_MODE] & de_ack;
479
 
480
always @(posedge clk)
481
        ack_o[6] <= #1 ch6_conf[0] & (ch_sel == 5'h6) & ch6_csr[`WDMA_MODE] & de_ack;
482
 
483
always @(posedge clk)
484
        ack_o[7] <= #1 ch7_conf[0] & (ch_sel == 5'h7) & ch7_csr[`WDMA_MODE] & de_ack;
485
 
486
always @(posedge clk)
487
        ack_o[8] <= #1 ch8_conf[0] & (ch_sel == 5'h8) & ch8_csr[`WDMA_MODE] & de_ack;
488
 
489
always @(posedge clk)
490
        ack_o[9] <= #1 ch9_conf[0] & (ch_sel == 5'h9) & ch9_csr[`WDMA_MODE] & de_ack;
491
 
492
always @(posedge clk)
493
        ack_o[10] <= #1 ch10_conf[0] & (ch_sel == 5'ha) & ch10_csr[`WDMA_MODE] & de_ack;
494
 
495
always @(posedge clk)
496
        ack_o[11] <= #1 ch11_conf[0] & (ch_sel == 5'hb) & ch11_csr[`WDMA_MODE] & de_ack;
497
 
498
always @(posedge clk)
499
        ack_o[12] <= #1 ch12_conf[0] & (ch_sel == 5'hc) & ch12_csr[`WDMA_MODE] & de_ack;
500
 
501
always @(posedge clk)
502
        ack_o[13] <= #1 ch13_conf[0] & (ch_sel == 5'hd) & ch13_csr[`WDMA_MODE] & de_ack;
503
 
504
always @(posedge clk)
505
        ack_o[14] <= #1 ch14_conf[0] & (ch_sel == 5'he) & ch14_csr[`WDMA_MODE] & de_ack;
506
 
507
always @(posedge clk)
508
        ack_o[15] <= #1 ch15_conf[0] & (ch_sel == 5'hf) & ch15_csr[`WDMA_MODE] & de_ack;
509
 
510
always @(posedge clk)
511
        ack_o[16] <= #1 ch16_conf[0] & (ch_sel == 5'h10) & ch16_csr[`WDMA_MODE] & de_ack;
512
 
513
always @(posedge clk)
514
        ack_o[17] <= #1 ch17_conf[0] & (ch_sel == 5'h11) & ch17_csr[`WDMA_MODE] & de_ack;
515
 
516
always @(posedge clk)
517
        ack_o[18] <= #1 ch18_conf[0] & (ch_sel == 5'h12) & ch18_csr[`WDMA_MODE] & de_ack;
518
 
519
always @(posedge clk)
520
        ack_o[19] <= #1 ch19_conf[0] & (ch_sel == 5'h13) & ch19_csr[`WDMA_MODE] & de_ack;
521
 
522
always @(posedge clk)
523
        ack_o[20] <= #1 ch20_conf[0] & (ch_sel == 5'h14) & ch20_csr[`WDMA_MODE] & de_ack;
524
 
525
always @(posedge clk)
526
        ack_o[21] <= #1 ch21_conf[0] & (ch_sel == 5'h15) & ch21_csr[`WDMA_MODE] & de_ack;
527
 
528
always @(posedge clk)
529
        ack_o[22] <= #1 ch22_conf[0] & (ch_sel == 5'h16) & ch22_csr[`WDMA_MODE] & de_ack;
530
 
531
always @(posedge clk)
532
        ack_o[23] <= #1 ch23_conf[0] & (ch_sel == 5'h17) & ch23_csr[`WDMA_MODE] & de_ack;
533
 
534
always @(posedge clk)
535
        ack_o[24] <= #1 ch24_conf[0] & (ch_sel == 5'h18) & ch24_csr[`WDMA_MODE] & de_ack;
536
 
537
always @(posedge clk)
538
        ack_o[25] <= #1 ch25_conf[0] & (ch_sel == 5'h19) & ch25_csr[`WDMA_MODE] & de_ack;
539
 
540
always @(posedge clk)
541
        ack_o[26] <= #1 ch26_conf[0] & (ch_sel == 5'h1a) & ch26_csr[`WDMA_MODE] & de_ack;
542
 
543
always @(posedge clk)
544
        ack_o[27] <= #1 ch27_conf[0] & (ch_sel == 5'h1b) & ch27_csr[`WDMA_MODE] & de_ack;
545
 
546
always @(posedge clk)
547
        ack_o[28] <= #1 ch28_conf[0] & (ch_sel == 5'h1c) & ch28_csr[`WDMA_MODE] & de_ack;
548
 
549
always @(posedge clk)
550
        ack_o[29] <= #1 ch29_conf[0] & (ch_sel == 5'h1d) & ch29_csr[`WDMA_MODE] & de_ack;
551
 
552
always @(posedge clk)
553
        ack_o[30] <= #1 ch30_conf[0] & (ch_sel == 5'h1e) & ch30_csr[`WDMA_MODE] & de_ack;
554
 
555
// Channel Select
556
always @(posedge clk or negedge rst)
557
        if(!rst)        ch_sel_r <= #1 0;
558
        else
559
        if(de_start)    ch_sel_r <= #1 ch_sel_d;
560
 
561
assign ch_sel = !dma_busy ? ch_sel_d : ch_sel_r;
562
 
563
////////////////////////////////////////////////////////////////////
564
//
565
// Select Registers based on arbiter (and priority) outputs
566
//
567
 
568
always @(ch_sel or valid)
569
        case(ch_sel)            // synopsys parallel_case full_case
570
           5'h0:        valid_sel = valid[0];
571
           5'h1:        valid_sel = valid[1];
572
           5'h2:        valid_sel = valid[2];
573
           5'h3:        valid_sel = valid[3];
574
           5'h4:        valid_sel = valid[4];
575
           5'h5:        valid_sel = valid[5];
576
           5'h6:        valid_sel = valid[6];
577
           5'h7:        valid_sel = valid[7];
578
           5'h8:        valid_sel = valid[8];
579
           5'h9:        valid_sel = valid[9];
580
           5'ha:        valid_sel = valid[10];
581
           5'hb:        valid_sel = valid[11];
582
           5'hc:        valid_sel = valid[12];
583
           5'hd:        valid_sel = valid[13];
584
           5'he:        valid_sel = valid[14];
585
           5'hf:        valid_sel = valid[15];
586
           5'h10:       valid_sel = valid[16];
587
           5'h11:       valid_sel = valid[17];
588
           5'h12:       valid_sel = valid[18];
589
           5'h13:       valid_sel = valid[19];
590
           5'h14:       valid_sel = valid[20];
591
           5'h15:       valid_sel = valid[21];
592
           5'h16:       valid_sel = valid[22];
593
           5'h17:       valid_sel = valid[23];
594
           5'h18:       valid_sel = valid[24];
595
           5'h19:       valid_sel = valid[25];
596
           5'h1a:       valid_sel = valid[26];
597
           5'h1b:       valid_sel = valid[27];
598
           5'h1c:       valid_sel = valid[28];
599
           5'h1d:       valid_sel = valid[29];
600
           5'h1e:       valid_sel = valid[30];
601
        endcase
602
 
603
always @(ch_sel or ndr_r)
604
        case(ch_sel)            // synopsys parallel_case full_case
605
           5'h0:        ndr = ndr_r[0];
606
           5'h1:        ndr = ndr_r[1];
607
           5'h2:        ndr = ndr_r[2];
608
           5'h3:        ndr = ndr_r[3];
609
           5'h4:        ndr = ndr_r[4];
610
           5'h5:        ndr = ndr_r[5];
611
           5'h6:        ndr = ndr_r[6];
612
           5'h7:        ndr = ndr_r[7];
613
           5'h8:        ndr = ndr_r[8];
614
           5'h9:        ndr = ndr_r[9];
615
           5'ha:        ndr = ndr_r[10];
616
           5'hb:        ndr = ndr_r[11];
617
           5'hc:        ndr = ndr_r[12];
618
           5'hd:        ndr = ndr_r[13];
619
           5'he:        ndr = ndr_r[14];
620
           5'hf:        ndr = ndr_r[15];
621
           5'h10:       ndr = ndr_r[16];
622
           5'h11:       ndr = ndr_r[17];
623
           5'h12:       ndr = ndr_r[18];
624
           5'h13:       ndr = ndr_r[19];
625
           5'h14:       ndr = ndr_r[20];
626
           5'h15:       ndr = ndr_r[21];
627
           5'h16:       ndr = ndr_r[22];
628
           5'h17:       ndr = ndr_r[23];
629
           5'h18:       ndr = ndr_r[24];
630
           5'h19:       ndr = ndr_r[25];
631
           5'h1a:       ndr = ndr_r[26];
632
           5'h1b:       ndr = ndr_r[27];
633
           5'h1c:       ndr = ndr_r[28];
634
           5'h1d:       ndr = ndr_r[29];
635
           5'h1e:       ndr = ndr_r[30];
636
        endcase
637
 
638
always @(ch_sel or pointer0 or pointer1 or pointer2 or pointer3 or pointer4
639
                or pointer5 or pointer6 or pointer7 or pointer8 or pointer9
640
                or pointer10 or pointer11 or pointer12 or pointer13 or pointer14
641
                or pointer15 or pointer16 or pointer17 or pointer18 or pointer19
642
                or pointer20 or pointer21 or pointer22 or pointer23 or pointer24
643
                or pointer25 or pointer26 or pointer27 or pointer28 or pointer29
644
                or pointer30 )
645
        case(ch_sel)            // synopsys parallel_case full_case
646
           5'h0:        pointer = pointer0;
647
           5'h1:        pointer = pointer1;
648
           5'h2:        pointer = pointer2;
649
           5'h3:        pointer = pointer3;
650
           5'h4:        pointer = pointer4;
651
           5'h5:        pointer = pointer5;
652
           5'h6:        pointer = pointer6;
653
           5'h7:        pointer = pointer7;
654
           5'h8:        pointer = pointer8;
655
           5'h9:        pointer = pointer9;
656
           5'ha:        pointer = pointer10;
657
           5'hb:        pointer = pointer11;
658
           5'hc:        pointer = pointer12;
659
           5'hd:        pointer = pointer13;
660
           5'he:        pointer = pointer14;
661
           5'hf:        pointer = pointer15;
662
           5'h10:       pointer = pointer16;
663
           5'h11:       pointer = pointer17;
664
           5'h12:       pointer = pointer18;
665
           5'h13:       pointer = pointer19;
666
           5'h14:       pointer = pointer20;
667
           5'h15:       pointer = pointer21;
668
           5'h16:       pointer = pointer22;
669
           5'h17:       pointer = pointer23;
670
           5'h18:       pointer = pointer24;
671
           5'h19:       pointer = pointer25;
672
           5'h1a:       pointer = pointer26;
673
           5'h1b:       pointer = pointer27;
674
           5'h1c:       pointer = pointer28;
675
           5'h1d:       pointer = pointer29;
676
           5'h1e:       pointer = pointer30;
677
        endcase
678
 
679
always @(ch_sel or pointer0_s or pointer1_s or pointer2_s or pointer3_s or pointer4_s
680
                or pointer5_s or pointer6_s or pointer7_s or pointer8_s or pointer9_s
681
                or pointer10_s or pointer11_s or pointer12_s or pointer13_s or pointer14_s
682
                or pointer15_s or pointer16_s or pointer17_s or pointer18_s or pointer19_s
683
                or pointer20_s or pointer21_s or pointer22_s or pointer23_s or pointer24_s
684
                or pointer25_s or pointer26_s or pointer27_s or pointer28_s or pointer29_s
685
                or pointer30_s )
686
        case(ch_sel)            // synopsys parallel_case full_case
687
           5'h0:        pointer_s = pointer0_s;
688
           5'h1:        pointer_s = pointer1_s;
689
           5'h2:        pointer_s = pointer2_s;
690
           5'h3:        pointer_s = pointer3_s;
691
           5'h4:        pointer_s = pointer4_s;
692
           5'h5:        pointer_s = pointer5_s;
693
           5'h6:        pointer_s = pointer6_s;
694
           5'h7:        pointer_s = pointer7_s;
695
           5'h8:        pointer_s = pointer8_s;
696
           5'h9:        pointer_s = pointer9_s;
697
           5'ha:        pointer_s = pointer10_s;
698
           5'hb:        pointer_s = pointer11_s;
699
           5'hc:        pointer_s = pointer12_s;
700
           5'hd:        pointer_s = pointer13_s;
701
           5'he:        pointer_s = pointer14_s;
702
           5'hf:        pointer_s = pointer15_s;
703
           5'h10:       pointer_s = pointer16_s;
704
           5'h11:       pointer_s = pointer17_s;
705
           5'h12:       pointer_s = pointer18_s;
706
           5'h13:       pointer_s = pointer19_s;
707
           5'h14:       pointer_s = pointer20_s;
708
           5'h15:       pointer_s = pointer21_s;
709
           5'h16:       pointer_s = pointer22_s;
710
           5'h17:       pointer_s = pointer23_s;
711
           5'h18:       pointer_s = pointer24_s;
712
           5'h19:       pointer_s = pointer25_s;
713
           5'h1a:       pointer_s = pointer26_s;
714
           5'h1b:       pointer_s = pointer27_s;
715
           5'h1c:       pointer_s = pointer28_s;
716
           5'h1d:       pointer_s = pointer29_s;
717
           5'h1e:       pointer_s = pointer30_s;
718
        endcase
719
 
720
always @(ch_sel or ch0_csr or ch1_csr or ch2_csr or ch3_csr or ch4_csr
721
                or ch5_csr or ch6_csr or ch7_csr or ch8_csr or ch9_csr
722
                or ch10_csr or ch11_csr or ch12_csr or ch13_csr or ch14_csr
723
                or ch15_csr or ch16_csr or ch17_csr or ch18_csr or ch19_csr
724
                or ch20_csr or ch21_csr or ch22_csr or ch23_csr or ch24_csr
725
                or ch25_csr or ch26_csr or ch27_csr or ch28_csr or ch29_csr
726
                or ch30_csr )
727
        case(ch_sel)            // synopsys parallel_case full_case
728
           5'h0:        csr = ch0_csr;
729
           5'h1:        csr = ch1_csr;
730
           5'h2:        csr = ch2_csr;
731
           5'h3:        csr = ch3_csr;
732
           5'h4:        csr = ch4_csr;
733
           5'h5:        csr = ch5_csr;
734
           5'h6:        csr = ch6_csr;
735
           5'h7:        csr = ch7_csr;
736
           5'h8:        csr = ch8_csr;
737
           5'h9:        csr = ch9_csr;
738
           5'ha:        csr = ch10_csr;
739
           5'hb:        csr = ch11_csr;
740
           5'hc:        csr = ch12_csr;
741
           5'hd:        csr = ch13_csr;
742
           5'he:        csr = ch14_csr;
743
           5'hf:        csr = ch15_csr;
744
           5'h10:       csr = ch16_csr;
745
           5'h11:       csr = ch17_csr;
746
           5'h12:       csr = ch18_csr;
747
           5'h13:       csr = ch19_csr;
748
           5'h14:       csr = ch20_csr;
749
           5'h15:       csr = ch21_csr;
750
           5'h16:       csr = ch22_csr;
751
           5'h17:       csr = ch23_csr;
752
           5'h18:       csr = ch24_csr;
753
           5'h19:       csr = ch25_csr;
754
           5'h1a:       csr = ch26_csr;
755
           5'h1b:       csr = ch27_csr;
756
           5'h1c:       csr = ch28_csr;
757
           5'h1d:       csr = ch29_csr;
758
           5'h1e:       csr = ch30_csr;
759
        endcase
760
 
761
always @(ch_sel or ch0_txsz or ch1_txsz or ch2_txsz or ch3_txsz or ch4_txsz
762
                or ch5_txsz or ch6_txsz or ch7_txsz or ch8_txsz or ch9_txsz
763
                or ch10_txsz or ch11_txsz or ch12_txsz or ch13_txsz or ch14_txsz
764
                or ch15_txsz or ch16_txsz or ch17_txsz or ch18_txsz or ch19_txsz
765
                or ch20_txsz or ch21_txsz or ch22_txsz or ch23_txsz or ch24_txsz
766
                or ch25_txsz or ch26_txsz or ch27_txsz or ch28_txsz or ch29_txsz
767
                or ch30_txsz )
768
        case(ch_sel)            // synopsys parallel_case full_case
769
           5'h0:        txsz = ch0_txsz;
770
           5'h1:        txsz = ch1_txsz;
771
           5'h2:        txsz = ch2_txsz;
772
           5'h3:        txsz = ch3_txsz;
773
           5'h4:        txsz = ch4_txsz;
774
           5'h5:        txsz = ch5_txsz;
775
           5'h6:        txsz = ch6_txsz;
776
           5'h7:        txsz = ch7_txsz;
777
           5'h8:        txsz = ch8_txsz;
778
           5'h9:        txsz = ch9_txsz;
779
           5'ha:        txsz = ch10_txsz;
780
           5'hb:        txsz = ch11_txsz;
781
           5'hc:        txsz = ch12_txsz;
782
           5'hd:        txsz = ch13_txsz;
783
           5'he:        txsz = ch14_txsz;
784
           5'hf:        txsz = ch15_txsz;
785
           5'h10:       txsz = ch16_txsz;
786
           5'h11:       txsz = ch17_txsz;
787
           5'h12:       txsz = ch18_txsz;
788
           5'h13:       txsz = ch19_txsz;
789
           5'h14:       txsz = ch20_txsz;
790
           5'h15:       txsz = ch21_txsz;
791
           5'h16:       txsz = ch22_txsz;
792
           5'h17:       txsz = ch23_txsz;
793
           5'h18:       txsz = ch24_txsz;
794
           5'h19:       txsz = ch25_txsz;
795
           5'h1a:       txsz = ch26_txsz;
796
           5'h1b:       txsz = ch27_txsz;
797
           5'h1c:       txsz = ch28_txsz;
798
           5'h1d:       txsz = ch29_txsz;
799
           5'h1e:       txsz = ch30_txsz;
800
        endcase
801
 
802
always @(ch_sel or ch0_adr0 or ch1_adr0 or ch2_adr0 or ch3_adr0 or ch4_adr0
803
                or ch5_adr0 or ch6_adr0 or ch7_adr0 or ch8_adr0 or ch9_adr0
804
                or ch10_adr0 or ch11_adr0 or ch12_adr0 or ch13_adr0 or ch14_adr0
805
                or ch15_adr0 or ch16_adr0 or ch17_adr0 or ch18_adr0 or ch19_adr0
806
                or ch20_adr0 or ch21_adr0 or ch22_adr0 or ch23_adr0 or ch24_adr0
807
                or ch25_adr0 or ch26_adr0 or ch27_adr0 or ch28_adr0 or ch29_adr0
808
                or ch30_adr0 )
809
        case(ch_sel)            // synopsys parallel_case full_case
810
           5'h0:        adr0 = ch0_adr0;
811
           5'h1:        adr0 = ch1_adr0;
812
           5'h2:        adr0 = ch2_adr0;
813
           5'h3:        adr0 = ch3_adr0;
814
           5'h4:        adr0 = ch4_adr0;
815
           5'h5:        adr0 = ch5_adr0;
816
           5'h6:        adr0 = ch6_adr0;
817
           5'h7:        adr0 = ch7_adr0;
818
           5'h8:        adr0 = ch8_adr0;
819
           5'h9:        adr0 = ch9_adr0;
820
           5'ha:        adr0 = ch10_adr0;
821
           5'hb:        adr0 = ch11_adr0;
822
           5'hc:        adr0 = ch12_adr0;
823
           5'hd:        adr0 = ch13_adr0;
824
           5'he:        adr0 = ch14_adr0;
825
           5'hf:        adr0 = ch15_adr0;
826
           5'h10:       adr0 = ch16_adr0;
827
           5'h11:       adr0 = ch17_adr0;
828
           5'h12:       adr0 = ch18_adr0;
829
           5'h13:       adr0 = ch19_adr0;
830
           5'h14:       adr0 = ch20_adr0;
831
           5'h15:       adr0 = ch21_adr0;
832
           5'h16:       adr0 = ch22_adr0;
833
           5'h17:       adr0 = ch23_adr0;
834
           5'h18:       adr0 = ch24_adr0;
835
           5'h19:       adr0 = ch25_adr0;
836
           5'h1a:       adr0 = ch26_adr0;
837
           5'h1b:       adr0 = ch27_adr0;
838
           5'h1c:       adr0 = ch28_adr0;
839
           5'h1d:       adr0 = ch29_adr0;
840
           5'h1e:       adr0 = ch30_adr0;
841
        endcase
842
 
843
always @(ch_sel or ch0_adr1 or ch1_adr1 or ch2_adr1 or ch3_adr1 or ch4_adr1
844
                or ch5_adr1 or ch6_adr1 or ch7_adr1 or ch8_adr1 or ch9_adr1
845
                or ch10_adr1 or ch11_adr1 or ch12_adr1 or ch13_adr1 or ch14_adr1
846
                or ch15_adr1 or ch16_adr1 or ch17_adr1 or ch18_adr1 or ch19_adr1
847
                or ch20_adr1 or ch21_adr1 or ch22_adr1 or ch23_adr1 or ch24_adr1
848
                or ch25_adr1 or ch26_adr1 or ch27_adr1 or ch28_adr1 or ch29_adr1
849
                or ch30_adr1 )
850
        case(ch_sel)            // synopsys parallel_case full_case
851
           5'h0:        adr1 = ch0_adr1;
852
           5'h1:        adr1 = ch1_adr1;
853
           5'h2:        adr1 = ch2_adr1;
854
           5'h3:        adr1 = ch3_adr1;
855
           5'h4:        adr1 = ch4_adr1;
856
           5'h5:        adr1 = ch5_adr1;
857
           5'h6:        adr1 = ch6_adr1;
858
           5'h7:        adr1 = ch7_adr1;
859
           5'h8:        adr1 = ch8_adr1;
860
           5'h9:        adr1 = ch9_adr1;
861
           5'ha:        adr1 = ch10_adr1;
862
           5'hb:        adr1 = ch11_adr1;
863
           5'hc:        adr1 = ch12_adr1;
864
           5'hd:        adr1 = ch13_adr1;
865
           5'he:        adr1 = ch14_adr1;
866
           5'hf:        adr1 = ch15_adr1;
867
           5'h10:       adr1 = ch16_adr1;
868
           5'h11:       adr1 = ch17_adr1;
869
           5'h12:       adr1 = ch18_adr1;
870
           5'h13:       adr1 = ch19_adr1;
871
           5'h14:       adr1 = ch20_adr1;
872
           5'h15:       adr1 = ch21_adr1;
873
           5'h16:       adr1 = ch22_adr1;
874
           5'h17:       adr1 = ch23_adr1;
875
           5'h18:       adr1 = ch24_adr1;
876
           5'h19:       adr1 = ch25_adr1;
877
           5'h1a:       adr1 = ch26_adr1;
878
           5'h1b:       adr1 = ch27_adr1;
879
           5'h1c:       adr1 = ch28_adr1;
880
           5'h1d:       adr1 = ch29_adr1;
881
           5'h1e:       adr1 = ch30_adr1;
882
        endcase
883
 
884
always @(ch_sel or ch0_am0 or ch1_am0 or ch2_am0 or ch3_am0 or ch4_am0
885
                or ch5_am0 or ch6_am0 or ch7_am0 or ch8_am0 or ch9_am0
886
                or ch10_am0 or ch11_am0 or ch12_am0 or ch13_am0 or ch14_am0
887
                or ch15_am0 or ch16_am0 or ch17_am0 or ch18_am0 or ch19_am0
888
                or ch20_am0 or ch21_am0 or ch22_am0 or ch23_am0 or ch24_am0
889
                or ch25_am0 or ch26_am0 or ch27_am0 or ch28_am0 or ch29_am0
890
                or ch30_am0 )
891
        case(ch_sel)            // synopsys parallel_case full_case
892
           5'h0:        am0 = ch0_am0;
893
           5'h1:        am0 = ch1_am0;
894
           5'h2:        am0 = ch2_am0;
895
           5'h3:        am0 = ch3_am0;
896
           5'h4:        am0 = ch4_am0;
897
           5'h5:        am0 = ch5_am0;
898
           5'h6:        am0 = ch6_am0;
899
           5'h7:        am0 = ch7_am0;
900
           5'h8:        am0 = ch8_am0;
901
           5'h9:        am0 = ch9_am0;
902
           5'ha:        am0 = ch10_am0;
903
           5'hb:        am0 = ch11_am0;
904
           5'hc:        am0 = ch12_am0;
905
           5'hd:        am0 = ch13_am0;
906
           5'he:        am0 = ch14_am0;
907
           5'hf:        am0 = ch15_am0;
908
           5'h10:       am0 = ch16_am0;
909
           5'h11:       am0 = ch17_am0;
910
           5'h12:       am0 = ch18_am0;
911
           5'h13:       am0 = ch19_am0;
912
           5'h14:       am0 = ch20_am0;
913
           5'h15:       am0 = ch21_am0;
914
           5'h16:       am0 = ch22_am0;
915
           5'h17:       am0 = ch23_am0;
916
           5'h18:       am0 = ch24_am0;
917
           5'h19:       am0 = ch25_am0;
918
           5'h1a:       am0 = ch26_am0;
919
           5'h1b:       am0 = ch27_am0;
920
           5'h1c:       am0 = ch28_am0;
921
           5'h1d:       am0 = ch29_am0;
922
           5'h1e:       am0 = ch30_am0;
923
        endcase
924
 
925
always @(ch_sel or ch0_am1 or ch1_am1 or ch2_am1 or ch3_am1 or ch4_am1
926
                or ch5_am1 or ch6_am1 or ch7_am1 or ch8_am1 or ch9_am1
927
                or ch10_am1 or ch11_am1 or ch12_am1 or ch13_am1 or ch14_am1
928
                or ch15_am1 or ch16_am1 or ch17_am1 or ch18_am1 or ch19_am1
929
                or ch20_am1 or ch21_am1 or ch22_am1 or ch23_am1 or ch24_am1
930
                or ch25_am1 or ch26_am1 or ch27_am1 or ch28_am1 or ch29_am1
931
                or ch30_am1 )
932
        case(ch_sel)            // synopsys parallel_case full_case
933
           5'h0:        am1 = ch0_am1;
934
           5'h1:        am1 = ch1_am1;
935
           5'h2:        am1 = ch2_am1;
936
           5'h3:        am1 = ch3_am1;
937
           5'h4:        am1 = ch4_am1;
938
           5'h5:        am1 = ch5_am1;
939
           5'h6:        am1 = ch6_am1;
940
           5'h7:        am1 = ch7_am1;
941
           5'h8:        am1 = ch8_am1;
942
           5'h9:        am1 = ch9_am1;
943
           5'ha:        am1 = ch10_am1;
944
           5'hb:        am1 = ch11_am1;
945
           5'hc:        am1 = ch12_am1;
946
           5'hd:        am1 = ch13_am1;
947
           5'he:        am1 = ch14_am1;
948
           5'hf:        am1 = ch15_am1;
949
           5'h10:       am1 = ch16_am1;
950
           5'h11:       am1 = ch17_am1;
951
           5'h12:       am1 = ch18_am1;
952
           5'h13:       am1 = ch19_am1;
953
           5'h14:       am1 = ch20_am1;
954
           5'h15:       am1 = ch21_am1;
955
           5'h16:       am1 = ch22_am1;
956
           5'h17:       am1 = ch23_am1;
957
           5'h18:       am1 = ch24_am1;
958
           5'h19:       am1 = ch25_am1;
959
           5'h1a:       am1 = ch26_am1;
960
           5'h1b:       am1 = ch27_am1;
961
           5'h1c:       am1 = ch28_am1;
962
           5'h1d:       am1 = ch29_am1;
963
           5'h1e:       am1 = ch30_am1;
964
        endcase
965
 
966
////////////////////////////////////////////////////////////////////
967
//
968
// Actual Chanel Arbiter and Priority Encoder
969
//
970
 
971
// Select the arbiter for current highest priority
972
always @(pri_out or gnt_p0 or gnt_p1 or gnt_p2 or gnt_p3 or gnt_p4
973
                or gnt_p5 or gnt_p6 or gnt_p7 )
974
        case(pri_out)           // synopsys parallel_case full_case
975
           3'h0:        ch_sel_d = gnt_p0;
976
           3'h1:        ch_sel_d = gnt_p1;
977
           3'h2:        ch_sel_d = gnt_p2;
978
           3'h3:        ch_sel_d = gnt_p3;
979
           3'h4:        ch_sel_d = gnt_p4;
980
           3'h5:        ch_sel_d = gnt_p5;
981
           3'h6:        ch_sel_d = gnt_p6;
982
           3'h7:        ch_sel_d = gnt_p7;
983
        endcase
984
 
985
 
986
// Priority Encoder
987
wb_dma_ch_pri_enc
988
        #(      pri_sel,
989
                ch0_conf,
990
                ch1_conf,
991
                ch2_conf,
992
                ch3_conf,
993
                ch4_conf,
994
                ch5_conf,
995
                ch6_conf,
996
                ch7_conf,
997
                ch8_conf,
998
                ch9_conf,
999
                ch10_conf,
1000
                ch11_conf,
1001
                ch12_conf,
1002
                ch13_conf,
1003
                ch14_conf,
1004
                ch15_conf,
1005
                ch16_conf,
1006
                ch17_conf,
1007
                ch18_conf,
1008
                ch19_conf,
1009
                ch20_conf,
1010
                ch21_conf,
1011
                ch22_conf,
1012
                ch23_conf,
1013
                ch24_conf,
1014
                ch25_conf,
1015
                ch26_conf,
1016
                ch27_conf,
1017
                ch28_conf,
1018
                ch29_conf,
1019
                ch30_conf)
1020
                u0(
1021
                .clk(           clk             ),
1022
                .valid(         valid           ),
1023
                .pri0(          pri0            ),
1024
                .pri1(          pri1            ),
1025
                .pri2(          pri2            ),
1026
                .pri3(          pri3            ),
1027
                .pri4(          pri4            ),
1028
                .pri5(          pri5            ),
1029
                .pri6(          pri6            ),
1030
                .pri7(          pri7            ),
1031
                .pri8(          pri8            ),
1032
                .pri9(          pri9            ),
1033
                .pri10(         pri10           ),
1034
                .pri11(         pri11           ),
1035
                .pri12(         pri12           ),
1036
                .pri13(         pri13           ),
1037
                .pri14(         pri14           ),
1038
                .pri15(         pri15           ),
1039
                .pri16(         pri16           ),
1040
                .pri17(         pri17           ),
1041
                .pri18(         pri18           ),
1042
                .pri19(         pri19           ),
1043
                .pri20(         pri20           ),
1044
                .pri21(         pri21           ),
1045
                .pri22(         pri22           ),
1046
                .pri23(         pri23           ),
1047
                .pri24(         pri24           ),
1048
                .pri25(         pri25           ),
1049
                .pri26(         pri26           ),
1050
                .pri27(         pri27           ),
1051
                .pri28(         pri28           ),
1052
                .pri29(         pri29           ),
1053
                .pri30(         pri30           ),
1054
                .pri_out(       pri_out         )
1055
                );
1056
 
1057
// Arbiter request lines
1058
// Generate request depending on priority and valid bits
1059
 
1060
assign req_p0[0] = valid[0] & (pri0==3'h0);
1061
assign req_p0[1] = valid[1] & (pri1==3'h0);
1062
assign req_p0[2] = valid[2] & (pri2==3'h0);
1063
assign req_p0[3] = valid[3] & (pri3==3'h0);
1064
assign req_p0[4] = valid[4] & (pri4==3'h0);
1065
assign req_p0[5] = valid[5] & (pri5==3'h0);
1066
assign req_p0[6] = valid[6] & (pri6==3'h0);
1067
assign req_p0[7] = valid[7] & (pri7==3'h0);
1068
assign req_p0[8] = valid[8] & (pri8==3'h0);
1069
assign req_p0[9] = valid[9] & (pri9==3'h0);
1070
assign req_p0[10] = valid[10] & (pri10==3'h0);
1071
assign req_p0[11] = valid[11] & (pri11==3'h0);
1072
assign req_p0[12] = valid[12] & (pri12==3'h0);
1073
assign req_p0[13] = valid[13] & (pri13==3'h0);
1074
assign req_p0[14] = valid[14] & (pri14==3'h0);
1075
assign req_p0[15] = valid[15] & (pri15==3'h0);
1076
assign req_p0[16] = valid[16] & (pri16==3'h0);
1077
assign req_p0[17] = valid[17] & (pri17==3'h0);
1078
assign req_p0[18] = valid[18] & (pri18==3'h0);
1079
assign req_p0[19] = valid[19] & (pri19==3'h0);
1080
assign req_p0[20] = valid[20] & (pri20==3'h0);
1081
assign req_p0[21] = valid[21] & (pri21==3'h0);
1082
assign req_p0[22] = valid[22] & (pri22==3'h0);
1083
assign req_p0[23] = valid[23] & (pri23==3'h0);
1084
assign req_p0[24] = valid[24] & (pri24==3'h0);
1085
assign req_p0[25] = valid[25] & (pri25==3'h0);
1086
assign req_p0[26] = valid[26] & (pri26==3'h0);
1087
assign req_p0[27] = valid[27] & (pri27==3'h0);
1088
assign req_p0[28] = valid[28] & (pri28==3'h0);
1089
assign req_p0[29] = valid[29] & (pri29==3'h0);
1090
assign req_p0[30] = valid[30] & (pri30==3'h0);
1091
 
1092
assign req_p1[0] = valid[0] & (pri0==3'h1);
1093
assign req_p1[1] = valid[1] & (pri1==3'h1);
1094
assign req_p1[2] = valid[2] & (pri2==3'h1);
1095
assign req_p1[3] = valid[3] & (pri3==3'h1);
1096
assign req_p1[4] = valid[4] & (pri4==3'h1);
1097
assign req_p1[5] = valid[5] & (pri5==3'h1);
1098
assign req_p1[6] = valid[6] & (pri6==3'h1);
1099
assign req_p1[7] = valid[7] & (pri7==3'h1);
1100
assign req_p1[8] = valid[8] & (pri8==3'h1);
1101
assign req_p1[9] = valid[9] & (pri9==3'h1);
1102
assign req_p1[10] = valid[10] & (pri10==3'h1);
1103
assign req_p1[11] = valid[11] & (pri11==3'h1);
1104
assign req_p1[12] = valid[12] & (pri12==3'h1);
1105
assign req_p1[13] = valid[13] & (pri13==3'h1);
1106
assign req_p1[14] = valid[14] & (pri14==3'h1);
1107
assign req_p1[15] = valid[15] & (pri15==3'h1);
1108
assign req_p1[16] = valid[16] & (pri16==3'h1);
1109
assign req_p1[17] = valid[17] & (pri17==3'h1);
1110
assign req_p1[18] = valid[18] & (pri18==3'h1);
1111
assign req_p1[19] = valid[19] & (pri19==3'h1);
1112
assign req_p1[20] = valid[20] & (pri20==3'h1);
1113
assign req_p1[21] = valid[21] & (pri21==3'h1);
1114
assign req_p1[22] = valid[22] & (pri22==3'h1);
1115
assign req_p1[23] = valid[23] & (pri23==3'h1);
1116
assign req_p1[24] = valid[24] & (pri24==3'h1);
1117
assign req_p1[25] = valid[25] & (pri25==3'h1);
1118
assign req_p1[26] = valid[26] & (pri26==3'h1);
1119
assign req_p1[27] = valid[27] & (pri27==3'h1);
1120
assign req_p1[28] = valid[28] & (pri28==3'h1);
1121
assign req_p1[29] = valid[29] & (pri29==3'h1);
1122
assign req_p1[30] = valid[30] & (pri30==3'h1);
1123
 
1124
assign req_p2[0] = valid[0] & (pri0==3'h2);
1125
assign req_p2[1] = valid[1] & (pri1==3'h2);
1126
assign req_p2[2] = valid[2] & (pri2==3'h2);
1127
assign req_p2[3] = valid[3] & (pri3==3'h2);
1128
assign req_p2[4] = valid[4] & (pri4==3'h2);
1129
assign req_p2[5] = valid[5] & (pri5==3'h2);
1130
assign req_p2[6] = valid[6] & (pri6==3'h2);
1131
assign req_p2[7] = valid[7] & (pri7==3'h2);
1132
assign req_p2[8] = valid[8] & (pri8==3'h2);
1133
assign req_p2[9] = valid[9] & (pri9==3'h2);
1134
assign req_p2[10] = valid[10] & (pri10==3'h2);
1135
assign req_p2[11] = valid[11] & (pri11==3'h2);
1136
assign req_p2[12] = valid[12] & (pri12==3'h2);
1137
assign req_p2[13] = valid[13] & (pri13==3'h2);
1138
assign req_p2[14] = valid[14] & (pri14==3'h2);
1139
assign req_p2[15] = valid[15] & (pri15==3'h2);
1140
assign req_p2[16] = valid[16] & (pri16==3'h2);
1141
assign req_p2[17] = valid[17] & (pri17==3'h2);
1142
assign req_p2[18] = valid[18] & (pri18==3'h2);
1143
assign req_p2[19] = valid[19] & (pri19==3'h2);
1144
assign req_p2[20] = valid[20] & (pri20==3'h2);
1145
assign req_p2[21] = valid[21] & (pri21==3'h2);
1146
assign req_p2[22] = valid[22] & (pri22==3'h2);
1147
assign req_p2[23] = valid[23] & (pri23==3'h2);
1148
assign req_p2[24] = valid[24] & (pri24==3'h2);
1149
assign req_p2[25] = valid[25] & (pri25==3'h2);
1150
assign req_p2[26] = valid[26] & (pri26==3'h2);
1151
assign req_p2[27] = valid[27] & (pri27==3'h2);
1152
assign req_p2[28] = valid[28] & (pri28==3'h2);
1153
assign req_p2[29] = valid[29] & (pri29==3'h2);
1154
assign req_p2[30] = valid[30] & (pri30==3'h2);
1155
 
1156
assign req_p3[0] = valid[0] & (pri0==3'h3);
1157
assign req_p3[1] = valid[1] & (pri1==3'h3);
1158
assign req_p3[2] = valid[2] & (pri2==3'h3);
1159
assign req_p3[3] = valid[3] & (pri3==3'h3);
1160
assign req_p3[4] = valid[4] & (pri4==3'h3);
1161
assign req_p3[5] = valid[5] & (pri5==3'h3);
1162
assign req_p3[6] = valid[6] & (pri6==3'h3);
1163
assign req_p3[7] = valid[7] & (pri7==3'h3);
1164
assign req_p3[8] = valid[8] & (pri8==3'h3);
1165
assign req_p3[9] = valid[9] & (pri9==3'h3);
1166
assign req_p3[10] = valid[10] & (pri10==3'h3);
1167
assign req_p3[11] = valid[11] & (pri11==3'h3);
1168
assign req_p3[12] = valid[12] & (pri12==3'h3);
1169
assign req_p3[13] = valid[13] & (pri13==3'h3);
1170
assign req_p3[14] = valid[14] & (pri14==3'h3);
1171
assign req_p3[15] = valid[15] & (pri15==3'h3);
1172
assign req_p3[16] = valid[16] & (pri16==3'h3);
1173
assign req_p3[17] = valid[17] & (pri17==3'h3);
1174
assign req_p3[18] = valid[18] & (pri18==3'h3);
1175
assign req_p3[19] = valid[19] & (pri19==3'h3);
1176
assign req_p3[20] = valid[20] & (pri20==3'h3);
1177
assign req_p3[21] = valid[21] & (pri21==3'h3);
1178
assign req_p3[22] = valid[22] & (pri22==3'h3);
1179
assign req_p3[23] = valid[23] & (pri23==3'h3);
1180
assign req_p3[24] = valid[24] & (pri24==3'h3);
1181
assign req_p3[25] = valid[25] & (pri25==3'h3);
1182
assign req_p3[26] = valid[26] & (pri26==3'h3);
1183
assign req_p3[27] = valid[27] & (pri27==3'h3);
1184
assign req_p3[28] = valid[28] & (pri28==3'h3);
1185
assign req_p3[29] = valid[29] & (pri29==3'h3);
1186
assign req_p3[30] = valid[30] & (pri30==3'h3);
1187
 
1188
assign req_p4[0] = valid[0] & (pri0==3'h4);
1189
assign req_p4[1] = valid[1] & (pri1==3'h4);
1190
assign req_p4[2] = valid[2] & (pri2==3'h4);
1191
assign req_p4[3] = valid[3] & (pri3==3'h4);
1192
assign req_p4[4] = valid[4] & (pri4==3'h4);
1193
assign req_p4[5] = valid[5] & (pri5==3'h4);
1194
assign req_p4[6] = valid[6] & (pri6==3'h4);
1195
assign req_p4[7] = valid[7] & (pri7==3'h4);
1196
assign req_p4[8] = valid[8] & (pri8==3'h4);
1197
assign req_p4[9] = valid[9] & (pri9==3'h4);
1198
assign req_p4[10] = valid[10] & (pri10==3'h4);
1199
assign req_p4[11] = valid[11] & (pri11==3'h4);
1200
assign req_p4[12] = valid[12] & (pri12==3'h4);
1201
assign req_p4[13] = valid[13] & (pri13==3'h4);
1202
assign req_p4[14] = valid[14] & (pri14==3'h4);
1203
assign req_p4[15] = valid[15] & (pri15==3'h4);
1204
assign req_p4[16] = valid[16] & (pri16==3'h4);
1205
assign req_p4[17] = valid[17] & (pri17==3'h4);
1206
assign req_p4[18] = valid[18] & (pri18==3'h4);
1207
assign req_p4[19] = valid[19] & (pri19==3'h4);
1208
assign req_p4[20] = valid[20] & (pri20==3'h4);
1209
assign req_p4[21] = valid[21] & (pri21==3'h4);
1210
assign req_p4[22] = valid[22] & (pri22==3'h4);
1211
assign req_p4[23] = valid[23] & (pri23==3'h4);
1212
assign req_p4[24] = valid[24] & (pri24==3'h4);
1213
assign req_p4[25] = valid[25] & (pri25==3'h4);
1214
assign req_p4[26] = valid[26] & (pri26==3'h4);
1215
assign req_p4[27] = valid[27] & (pri27==3'h4);
1216
assign req_p4[28] = valid[28] & (pri28==3'h4);
1217
assign req_p4[29] = valid[29] & (pri29==3'h4);
1218
assign req_p4[30] = valid[30] & (pri30==3'h4);
1219
 
1220
assign req_p5[0] = valid[0] & (pri0==3'h5);
1221
assign req_p5[1] = valid[1] & (pri1==3'h5);
1222
assign req_p5[2] = valid[2] & (pri2==3'h5);
1223
assign req_p5[3] = valid[3] & (pri3==3'h5);
1224
assign req_p5[4] = valid[4] & (pri4==3'h5);
1225
assign req_p5[5] = valid[5] & (pri5==3'h5);
1226
assign req_p5[6] = valid[6] & (pri6==3'h5);
1227
assign req_p5[7] = valid[7] & (pri7==3'h5);
1228
assign req_p5[8] = valid[8] & (pri8==3'h5);
1229
assign req_p5[9] = valid[9] & (pri9==3'h5);
1230
assign req_p5[10] = valid[10] & (pri10==3'h5);
1231
assign req_p5[11] = valid[11] & (pri11==3'h5);
1232
assign req_p5[12] = valid[12] & (pri12==3'h5);
1233
assign req_p5[13] = valid[13] & (pri13==3'h5);
1234
assign req_p5[14] = valid[14] & (pri14==3'h5);
1235
assign req_p5[15] = valid[15] & (pri15==3'h5);
1236
assign req_p5[16] = valid[16] & (pri16==3'h5);
1237
assign req_p5[17] = valid[17] & (pri17==3'h5);
1238
assign req_p5[18] = valid[18] & (pri18==3'h5);
1239
assign req_p5[19] = valid[19] & (pri19==3'h5);
1240
assign req_p5[20] = valid[20] & (pri20==3'h5);
1241
assign req_p5[21] = valid[21] & (pri21==3'h5);
1242
assign req_p5[22] = valid[22] & (pri22==3'h5);
1243
assign req_p5[23] = valid[23] & (pri23==3'h5);
1244
assign req_p5[24] = valid[24] & (pri24==3'h5);
1245
assign req_p5[25] = valid[25] & (pri25==3'h5);
1246
assign req_p5[26] = valid[26] & (pri26==3'h5);
1247
assign req_p5[27] = valid[27] & (pri27==3'h5);
1248
assign req_p5[28] = valid[28] & (pri28==3'h5);
1249
assign req_p5[29] = valid[29] & (pri29==3'h5);
1250
assign req_p5[30] = valid[30] & (pri30==3'h5);
1251
 
1252
assign req_p6[0] = valid[0] & (pri0==3'h6);
1253
assign req_p6[1] = valid[1] & (pri1==3'h6);
1254
assign req_p6[2] = valid[2] & (pri2==3'h6);
1255
assign req_p6[3] = valid[3] & (pri3==3'h6);
1256
assign req_p6[4] = valid[4] & (pri4==3'h6);
1257
assign req_p6[5] = valid[5] & (pri5==3'h6);
1258
assign req_p6[6] = valid[6] & (pri6==3'h6);
1259
assign req_p6[7] = valid[7] & (pri7==3'h6);
1260
assign req_p6[8] = valid[8] & (pri8==3'h6);
1261
assign req_p6[9] = valid[9] & (pri9==3'h6);
1262
assign req_p6[10] = valid[10] & (pri10==3'h6);
1263
assign req_p6[11] = valid[11] & (pri11==3'h6);
1264
assign req_p6[12] = valid[12] & (pri12==3'h6);
1265
assign req_p6[13] = valid[13] & (pri13==3'h6);
1266
assign req_p6[14] = valid[14] & (pri14==3'h6);
1267
assign req_p6[15] = valid[15] & (pri15==3'h6);
1268
assign req_p6[16] = valid[16] & (pri16==3'h6);
1269
assign req_p6[17] = valid[17] & (pri17==3'h6);
1270
assign req_p6[18] = valid[18] & (pri18==3'h6);
1271
assign req_p6[19] = valid[19] & (pri19==3'h6);
1272
assign req_p6[20] = valid[20] & (pri20==3'h6);
1273
assign req_p6[21] = valid[21] & (pri21==3'h6);
1274
assign req_p6[22] = valid[22] & (pri22==3'h6);
1275
assign req_p6[23] = valid[23] & (pri23==3'h6);
1276
assign req_p6[24] = valid[24] & (pri24==3'h6);
1277
assign req_p6[25] = valid[25] & (pri25==3'h6);
1278
assign req_p6[26] = valid[26] & (pri26==3'h6);
1279
assign req_p6[27] = valid[27] & (pri27==3'h6);
1280
assign req_p6[28] = valid[28] & (pri28==3'h6);
1281
assign req_p6[29] = valid[29] & (pri29==3'h6);
1282
assign req_p6[30] = valid[30] & (pri30==3'h6);
1283
 
1284
assign req_p7[0] = valid[0] & (pri0==3'h7);
1285
assign req_p7[1] = valid[1] & (pri1==3'h7);
1286
assign req_p7[2] = valid[2] & (pri2==3'h7);
1287
assign req_p7[3] = valid[3] & (pri3==3'h7);
1288
assign req_p7[4] = valid[4] & (pri4==3'h7);
1289
assign req_p7[5] = valid[5] & (pri5==3'h7);
1290
assign req_p7[6] = valid[6] & (pri6==3'h7);
1291
assign req_p7[7] = valid[7] & (pri7==3'h7);
1292
assign req_p7[8] = valid[8] & (pri8==3'h7);
1293
assign req_p7[9] = valid[9] & (pri9==3'h7);
1294
assign req_p7[10] = valid[10] & (pri10==3'h7);
1295
assign req_p7[11] = valid[11] & (pri11==3'h7);
1296
assign req_p7[12] = valid[12] & (pri12==3'h7);
1297
assign req_p7[13] = valid[13] & (pri13==3'h7);
1298
assign req_p7[14] = valid[14] & (pri14==3'h7);
1299
assign req_p7[15] = valid[15] & (pri15==3'h7);
1300
assign req_p7[16] = valid[16] & (pri16==3'h7);
1301
assign req_p7[17] = valid[17] & (pri17==3'h7);
1302
assign req_p7[18] = valid[18] & (pri18==3'h7);
1303
assign req_p7[19] = valid[19] & (pri19==3'h7);
1304
assign req_p7[20] = valid[20] & (pri20==3'h7);
1305
assign req_p7[21] = valid[21] & (pri21==3'h7);
1306
assign req_p7[22] = valid[22] & (pri22==3'h7);
1307
assign req_p7[23] = valid[23] & (pri23==3'h7);
1308
assign req_p7[24] = valid[24] & (pri24==3'h7);
1309
assign req_p7[25] = valid[25] & (pri25==3'h7);
1310
assign req_p7[26] = valid[26] & (pri26==3'h7);
1311
assign req_p7[27] = valid[27] & (pri27==3'h7);
1312
assign req_p7[28] = valid[28] & (pri28==3'h7);
1313
assign req_p7[29] = valid[29] & (pri29==3'h7);
1314
assign req_p7[30] = valid[30] & (pri30==3'h7);
1315
 
1316
// RR Arbiter for priority 0
1317
wb_dma_ch_arb u1(
1318
        .clk(           clk             ),
1319
        .rst(           rst             ),
1320
        .req(           req_p0          ),
1321
        .gnt(           gnt_p0_d        ),
1322
        .advance(       next_ch         )
1323
        );
1324
// RR Arbiter for priority 1
1325
wb_dma_ch_arb u2(
1326
        .clk(           clk             ),
1327
        .rst(           rst             ),
1328
        .req(           req_p1          ),
1329
        .gnt(           gnt_p1_d        ),
1330
        .advance(       next_ch         )
1331
        );
1332
 
1333
// RR Arbiter for priority 2
1334
wb_dma_ch_arb u3(
1335
        .clk(           clk             ),
1336
        .rst(           rst             ),
1337
        .req(           req_p2          ),
1338
        .gnt(           gnt_p2_d        ),
1339
        .advance(       next_ch         )
1340
        );
1341
// RR Arbiter for priority 3
1342
wb_dma_ch_arb u4(
1343
        .clk(           clk             ),
1344
        .rst(           rst             ),
1345
        .req(           req_p3          ),
1346
        .gnt(           gnt_p3_d        ),
1347
        .advance(       next_ch         )
1348
        );
1349
// RR Arbiter for priority 4
1350
wb_dma_ch_arb u5(
1351
        .clk(           clk             ),
1352
        .rst(           rst             ),
1353
        .req(           req_p4          ),
1354
        .gnt(           gnt_p4_d        ),
1355
        .advance(       next_ch         )
1356
        );
1357
// RR Arbiter for priority 5
1358
wb_dma_ch_arb u6(
1359
        .clk(           clk             ),
1360
        .rst(           rst             ),
1361
        .req(           req_p5          ),
1362
        .gnt(           gnt_p5_d        ),
1363
        .advance(       next_ch         )
1364
        );
1365
// RR Arbiter for priority 6
1366
wb_dma_ch_arb u7(
1367
        .clk(           clk             ),
1368
        .rst(           rst             ),
1369
        .req(           req_p6          ),
1370
        .gnt(           gnt_p6_d        ),
1371
        .advance(       next_ch         )
1372
        );
1373
// RR Arbiter for priority 7
1374
wb_dma_ch_arb u8(
1375
        .clk(           clk             ),
1376
        .rst(           rst             ),
1377
        .req(           req_p7          ),
1378
        .gnt(           gnt_p7_d        ),
1379
        .advance(       next_ch         )
1380
        );
1381
 
1382
// Select grant based on number of priorities
1383
assign gnt_p0 = gnt_p0_d;
1384
assign gnt_p1 = gnt_p1_d;
1385
assign gnt_p2 = (pri_sel==2'd0) ? 5'h0 : gnt_p2_d;
1386
assign gnt_p3 = (pri_sel==2'd0) ? 5'h0 : gnt_p3_d;
1387
assign gnt_p4 = (pri_sel==2'd2) ? gnt_p4_d : 5'h0;
1388
assign gnt_p5 = (pri_sel==2'd2) ? gnt_p5_d : 5'h0;
1389
assign gnt_p6 = (pri_sel==2'd2) ? gnt_p6_d : 5'h0;
1390
assign gnt_p7 = (pri_sel==2'd2) ? gnt_p7_d : 5'h0;
1391
 
1392
endmodule

powered by: WebSVN 2.1.0

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