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

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [orp/] [orp_soc/] [rtl/] [verilog/] [tc_top.v] - Blame information for rev 796

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

Line No. Rev Author Line
1 746 lampret
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  Xess Traffic Cop                                            ////
4
////                                                              ////
5
////  This file is part of the OR1K test application              ////
6
////  http://www.opencores.org/cores/or1k/                        ////
7
////                                                              ////
8
////  Description                                                 ////
9
////  This block connectes the RISC and peripheral controller     ////
10
////  cores together.                                             ////
11
////                                                              ////
12
////  To Do:                                                      ////
13
////   - nothing really                                           ////
14
////                                                              ////
15
////  Author(s):                                                  ////
16
////      - Damjan Lampret, lampret@opencores.org                 ////
17
////                                                              ////
18
//////////////////////////////////////////////////////////////////////
19
////                                                              ////
20
//// Copyright (C) 2002 OpenCores                                 ////
21
////                                                              ////
22
//// This source file may be used and distributed without         ////
23
//// restriction provided that this copyright statement is not    ////
24
//// removed from the file and that any derivative work contains  ////
25
//// the original copyright notice and the associated disclaimer. ////
26
////                                                              ////
27
//// This source file is free software; you can redistribute it   ////
28
//// and/or modify it under the terms of the GNU Lesser General   ////
29
//// Public License as published by the Free Software Foundation; ////
30
//// either version 2.1 of the License, or (at your option) any   ////
31
//// later version.                                               ////
32
////                                                              ////
33
//// This source is distributed in the hope that it will be       ////
34
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
35
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
36
//// PURPOSE.  See the GNU Lesser General Public License for more ////
37
//// details.                                                     ////
38
////                                                              ////
39
//// You should have received a copy of the GNU Lesser General    ////
40
//// Public License along with this source; if not, download it   ////
41
//// from http://www.opencores.org/lgpl.shtml                     ////
42
////                                                              ////
43
//////////////////////////////////////////////////////////////////////
44
//
45
// CVS Revision History
46
//
47
// $Log: not supported by cvs2svn $
48 796 lampret
// Revision 1.1.1.1  2002/03/21 16:55:44  lampret
49
// First import of the "new" XESS XSV environment.
50 746 lampret
//
51 796 lampret
//
52
//
53 746 lampret
 
54
// synopsys translate_off
55
`include "timescale.v"
56
// synopsys translate_on
57
 
58
//
59
// Width of address bus
60
//
61
`define TC_AW           32
62
 
63
//
64
// Width of data bus
65
//
66
`define TC_DW           32
67
 
68
//
69
// Width of byte select bus
70
//
71
`define TC_BSW          4
72
 
73
//
74
// Width of WB target inputs (coming from WB slave)
75
//
76
// data bus width + ack + err
77
//
78
`define TC_TIN_W        `TC_DW+1+1
79
 
80
//
81
// Width of WB initiator inputs (coming from WB masters)
82
//
83
// cyc + stb + cab + address bus width +
84
// byte select bus width + we + data bus width
85
//
86
`define TC_IIN_W        1+1+1+`TC_AW+`TC_BSW+1+`TC_DW
87
 
88
//
89
// Traffic Cop Top
90
//
91
module tc_top (
92
        wb_clk_i,
93
        wb_rst_i,
94
 
95
        i0_wb_cyc_i,
96
        i0_wb_stb_i,
97
        i0_wb_cab_i,
98
        i0_wb_adr_i,
99
        i0_wb_sel_i,
100
        i0_wb_we_i,
101
        i0_wb_dat_i,
102
        i0_wb_dat_o,
103
        i0_wb_ack_o,
104
        i0_wb_err_o,
105
 
106
        i1_wb_cyc_i,
107
        i1_wb_stb_i,
108
        i1_wb_cab_i,
109
        i1_wb_adr_i,
110
        i1_wb_sel_i,
111
        i1_wb_we_i,
112
        i1_wb_dat_i,
113
        i1_wb_dat_o,
114
        i1_wb_ack_o,
115
        i1_wb_err_o,
116
 
117
        i2_wb_cyc_i,
118
        i2_wb_stb_i,
119
        i2_wb_cab_i,
120
        i2_wb_adr_i,
121
        i2_wb_sel_i,
122
        i2_wb_we_i,
123
        i2_wb_dat_i,
124
        i2_wb_dat_o,
125
        i2_wb_ack_o,
126
        i2_wb_err_o,
127
 
128
        i3_wb_cyc_i,
129
        i3_wb_stb_i,
130
        i3_wb_cab_i,
131
        i3_wb_adr_i,
132
        i3_wb_sel_i,
133
        i3_wb_we_i,
134
        i3_wb_dat_i,
135
        i3_wb_dat_o,
136
        i3_wb_ack_o,
137
        i3_wb_err_o,
138
 
139
        i4_wb_cyc_i,
140
        i4_wb_stb_i,
141
        i4_wb_cab_i,
142
        i4_wb_adr_i,
143
        i4_wb_sel_i,
144
        i4_wb_we_i,
145
        i4_wb_dat_i,
146
        i4_wb_dat_o,
147
        i4_wb_ack_o,
148
        i4_wb_err_o,
149
 
150
        i5_wb_cyc_i,
151
        i5_wb_stb_i,
152
        i5_wb_cab_i,
153
        i5_wb_adr_i,
154
        i5_wb_sel_i,
155
        i5_wb_we_i,
156
        i5_wb_dat_i,
157
        i5_wb_dat_o,
158
        i5_wb_ack_o,
159
        i5_wb_err_o,
160
 
161
        i6_wb_cyc_i,
162
        i6_wb_stb_i,
163
        i6_wb_cab_i,
164
        i6_wb_adr_i,
165
        i6_wb_sel_i,
166
        i6_wb_we_i,
167
        i6_wb_dat_i,
168
        i6_wb_dat_o,
169
        i6_wb_ack_o,
170
        i6_wb_err_o,
171
 
172
        i7_wb_cyc_i,
173
        i7_wb_stb_i,
174
        i7_wb_cab_i,
175
        i7_wb_adr_i,
176
        i7_wb_sel_i,
177
        i7_wb_we_i,
178
        i7_wb_dat_i,
179
        i7_wb_dat_o,
180
        i7_wb_ack_o,
181
        i7_wb_err_o,
182
 
183
        t0_wb_cyc_o,
184
        t0_wb_stb_o,
185
        t0_wb_cab_o,
186
        t0_wb_adr_o,
187
        t0_wb_sel_o,
188
        t0_wb_we_o,
189
        t0_wb_dat_o,
190
        t0_wb_dat_i,
191
        t0_wb_ack_i,
192
        t0_wb_err_i,
193
 
194
        t1_wb_cyc_o,
195
        t1_wb_stb_o,
196
        t1_wb_cab_o,
197
        t1_wb_adr_o,
198
        t1_wb_sel_o,
199
        t1_wb_we_o,
200
        t1_wb_dat_o,
201
        t1_wb_dat_i,
202
        t1_wb_ack_i,
203
        t1_wb_err_i,
204
 
205
        t2_wb_cyc_o,
206
        t2_wb_stb_o,
207
        t2_wb_cab_o,
208
        t2_wb_adr_o,
209
        t2_wb_sel_o,
210
        t2_wb_we_o,
211
        t2_wb_dat_o,
212
        t2_wb_dat_i,
213
        t2_wb_ack_i,
214
        t2_wb_err_i,
215
 
216
        t3_wb_cyc_o,
217
        t3_wb_stb_o,
218
        t3_wb_cab_o,
219
        t3_wb_adr_o,
220
        t3_wb_sel_o,
221
        t3_wb_we_o,
222
        t3_wb_dat_o,
223
        t3_wb_dat_i,
224
        t3_wb_ack_i,
225
        t3_wb_err_i,
226
 
227
        t4_wb_cyc_o,
228
        t4_wb_stb_o,
229
        t4_wb_cab_o,
230
        t4_wb_adr_o,
231
        t4_wb_sel_o,
232
        t4_wb_we_o,
233
        t4_wb_dat_o,
234
        t4_wb_dat_i,
235
        t4_wb_ack_i,
236
        t4_wb_err_i,
237
 
238
        t5_wb_cyc_o,
239
        t5_wb_stb_o,
240
        t5_wb_cab_o,
241
        t5_wb_adr_o,
242
        t5_wb_sel_o,
243
        t5_wb_we_o,
244
        t5_wb_dat_o,
245
        t5_wb_dat_i,
246
        t5_wb_ack_i,
247
        t5_wb_err_i,
248
 
249
        t6_wb_cyc_o,
250
        t6_wb_stb_o,
251
        t6_wb_cab_o,
252
        t6_wb_adr_o,
253
        t6_wb_sel_o,
254
        t6_wb_we_o,
255
        t6_wb_dat_o,
256
        t6_wb_dat_i,
257
        t6_wb_ack_i,
258
        t6_wb_err_i,
259
 
260
        t7_wb_cyc_o,
261
        t7_wb_stb_o,
262
        t7_wb_cab_o,
263
        t7_wb_adr_o,
264
        t7_wb_sel_o,
265
        t7_wb_we_o,
266
        t7_wb_dat_o,
267
        t7_wb_dat_i,
268
        t7_wb_ack_i,
269
        t7_wb_err_i,
270
 
271
        t8_wb_cyc_o,
272
        t8_wb_stb_o,
273
        t8_wb_cab_o,
274
        t8_wb_adr_o,
275
        t8_wb_sel_o,
276
        t8_wb_we_o,
277
        t8_wb_dat_o,
278
        t8_wb_dat_i,
279
        t8_wb_ack_i,
280
        t8_wb_err_i
281
 
282
);
283
 
284
//
285
// Parameters
286
//
287
parameter               t0_addr_w = 4;
288
parameter               t0_addr = 4'd8;
289
parameter               t1_addr_w = 4;
290
parameter               t1_addr = 4'd0;
291
parameter               t28c_addr_w = 4;
292
parameter               t28_addr = 4'd0;
293
parameter               t28i_addr_w = 4;
294
parameter               t2_addr = 4'd1;
295
parameter               t3_addr = 4'd2;
296
parameter               t4_addr = 4'd3;
297
parameter               t5_addr = 4'd4;
298
parameter               t6_addr = 4'd5;
299
parameter               t7_addr = 4'd6;
300
parameter               t8_addr = 4'd7;
301
 
302
//
303
// I/O Ports
304
//
305
input                   wb_clk_i;
306
input                   wb_rst_i;
307
 
308
//
309
// WB slave i/f connecting initiator 0
310
//
311
input                   i0_wb_cyc_i;
312
input                   i0_wb_stb_i;
313
input                   i0_wb_cab_i;
314
input   [`TC_AW-1:0]     i0_wb_adr_i;
315
input   [`TC_BSW-1:0]    i0_wb_sel_i;
316
input                   i0_wb_we_i;
317
input   [`TC_DW-1:0]     i0_wb_dat_i;
318
output  [`TC_DW-1:0]     i0_wb_dat_o;
319
output                  i0_wb_ack_o;
320
output                  i0_wb_err_o;
321
 
322
//
323
// WB slave i/f connecting initiator 1
324
//
325
input                   i1_wb_cyc_i;
326
input                   i1_wb_stb_i;
327
input                   i1_wb_cab_i;
328
input   [`TC_AW-1:0]     i1_wb_adr_i;
329
input   [`TC_BSW-1:0]    i1_wb_sel_i;
330
input                   i1_wb_we_i;
331
input   [`TC_DW-1:0]     i1_wb_dat_i;
332
output  [`TC_DW-1:0]     i1_wb_dat_o;
333
output                  i1_wb_ack_o;
334
output                  i1_wb_err_o;
335
 
336
//
337
// WB slave i/f connecting initiator 2
338
//
339
input                   i2_wb_cyc_i;
340
input                   i2_wb_stb_i;
341
input                   i2_wb_cab_i;
342
input   [`TC_AW-1:0]     i2_wb_adr_i;
343
input   [`TC_BSW-1:0]    i2_wb_sel_i;
344
input                   i2_wb_we_i;
345
input   [`TC_DW-1:0]     i2_wb_dat_i;
346
output  [`TC_DW-1:0]     i2_wb_dat_o;
347
output                  i2_wb_ack_o;
348
output                  i2_wb_err_o;
349
 
350
//
351
// WB slave i/f connecting initiator 3
352
//
353
input                   i3_wb_cyc_i;
354
input                   i3_wb_stb_i;
355
input                   i3_wb_cab_i;
356
input   [`TC_AW-1:0]     i3_wb_adr_i;
357
input   [`TC_BSW-1:0]    i3_wb_sel_i;
358
input                   i3_wb_we_i;
359
input   [`TC_DW-1:0]     i3_wb_dat_i;
360
output  [`TC_DW-1:0]     i3_wb_dat_o;
361
output                  i3_wb_ack_o;
362
output                  i3_wb_err_o;
363
 
364
//
365
// WB slave i/f connecting initiator 4
366
//
367
input                   i4_wb_cyc_i;
368
input                   i4_wb_stb_i;
369
input                   i4_wb_cab_i;
370
input   [`TC_AW-1:0]     i4_wb_adr_i;
371
input   [`TC_BSW-1:0]    i4_wb_sel_i;
372
input                   i4_wb_we_i;
373
input   [`TC_DW-1:0]     i4_wb_dat_i;
374
output  [`TC_DW-1:0]     i4_wb_dat_o;
375
output                  i4_wb_ack_o;
376
output                  i4_wb_err_o;
377
 
378
//
379
// WB slave i/f connecting initiator 5
380
//
381
input                   i5_wb_cyc_i;
382
input                   i5_wb_stb_i;
383
input                   i5_wb_cab_i;
384
input   [`TC_AW-1:0]     i5_wb_adr_i;
385
input   [`TC_BSW-1:0]    i5_wb_sel_i;
386
input                   i5_wb_we_i;
387
input   [`TC_DW-1:0]     i5_wb_dat_i;
388
output  [`TC_DW-1:0]     i5_wb_dat_o;
389
output                  i5_wb_ack_o;
390
output                  i5_wb_err_o;
391
 
392
//
393
// WB slave i/f connecting initiator 6
394
//
395
input                   i6_wb_cyc_i;
396
input                   i6_wb_stb_i;
397
input                   i6_wb_cab_i;
398
input   [`TC_AW-1:0]     i6_wb_adr_i;
399
input   [`TC_BSW-1:0]    i6_wb_sel_i;
400
input                   i6_wb_we_i;
401
input   [`TC_DW-1:0]     i6_wb_dat_i;
402
output  [`TC_DW-1:0]     i6_wb_dat_o;
403
output                  i6_wb_ack_o;
404
output                  i6_wb_err_o;
405
 
406
//
407
// WB slave i/f connecting initiator 7
408
//
409
input                   i7_wb_cyc_i;
410
input                   i7_wb_stb_i;
411
input                   i7_wb_cab_i;
412
input   [`TC_AW-1:0]     i7_wb_adr_i;
413
input   [`TC_BSW-1:0]    i7_wb_sel_i;
414
input                   i7_wb_we_i;
415
input   [`TC_DW-1:0]     i7_wb_dat_i;
416
output  [`TC_DW-1:0]     i7_wb_dat_o;
417
output                  i7_wb_ack_o;
418
output                  i7_wb_err_o;
419
 
420
//
421
// WB master i/f connecting target 0
422
//
423
output                  t0_wb_cyc_o;
424
output                  t0_wb_stb_o;
425
output                  t0_wb_cab_o;
426
output  [`TC_AW-1:0]     t0_wb_adr_o;
427
output  [`TC_BSW-1:0]    t0_wb_sel_o;
428
output                  t0_wb_we_o;
429
output  [`TC_DW-1:0]     t0_wb_dat_o;
430
input   [`TC_DW-1:0]     t0_wb_dat_i;
431
input                   t0_wb_ack_i;
432
input                   t0_wb_err_i;
433
 
434
//
435
// WB master i/f connecting target 1
436
//
437
output                  t1_wb_cyc_o;
438
output                  t1_wb_stb_o;
439
output                  t1_wb_cab_o;
440
output  [`TC_AW-1:0]     t1_wb_adr_o;
441
output  [`TC_BSW-1:0]    t1_wb_sel_o;
442
output                  t1_wb_we_o;
443
output  [`TC_DW-1:0]     t1_wb_dat_o;
444
input   [`TC_DW-1:0]     t1_wb_dat_i;
445
input                   t1_wb_ack_i;
446
input                   t1_wb_err_i;
447
 
448
//
449
// WB master i/f connecting target 2
450
//
451
output                  t2_wb_cyc_o;
452
output                  t2_wb_stb_o;
453
output                  t2_wb_cab_o;
454
output  [`TC_AW-1:0]     t2_wb_adr_o;
455
output  [`TC_BSW-1:0]    t2_wb_sel_o;
456
output                  t2_wb_we_o;
457
output  [`TC_DW-1:0]     t2_wb_dat_o;
458
input   [`TC_DW-1:0]     t2_wb_dat_i;
459
input                   t2_wb_ack_i;
460
input                   t2_wb_err_i;
461
 
462
//
463
// WB master i/f connecting target 3
464
//
465
output                  t3_wb_cyc_o;
466
output                  t3_wb_stb_o;
467
output                  t3_wb_cab_o;
468
output  [`TC_AW-1:0]     t3_wb_adr_o;
469
output  [`TC_BSW-1:0]    t3_wb_sel_o;
470
output                  t3_wb_we_o;
471
output  [`TC_DW-1:0]     t3_wb_dat_o;
472
input   [`TC_DW-1:0]     t3_wb_dat_i;
473
input                   t3_wb_ack_i;
474
input                   t3_wb_err_i;
475
 
476
//
477
// WB master i/f connecting target 4
478
//
479
output                  t4_wb_cyc_o;
480
output                  t4_wb_stb_o;
481
output                  t4_wb_cab_o;
482
output  [`TC_AW-1:0]     t4_wb_adr_o;
483
output  [`TC_BSW-1:0]    t4_wb_sel_o;
484
output                  t4_wb_we_o;
485
output  [`TC_DW-1:0]     t4_wb_dat_o;
486
input   [`TC_DW-1:0]     t4_wb_dat_i;
487
input                   t4_wb_ack_i;
488
input                   t4_wb_err_i;
489
 
490
//
491
// WB master i/f connecting target 5
492
//
493
output                  t5_wb_cyc_o;
494
output                  t5_wb_stb_o;
495
output                  t5_wb_cab_o;
496
output  [`TC_AW-1:0]     t5_wb_adr_o;
497
output  [`TC_BSW-1:0]    t5_wb_sel_o;
498
output                  t5_wb_we_o;
499
output  [`TC_DW-1:0]     t5_wb_dat_o;
500
input   [`TC_DW-1:0]     t5_wb_dat_i;
501
input                   t5_wb_ack_i;
502
input                   t5_wb_err_i;
503
 
504
//
505
// WB master i/f connecting target 6
506
//
507
output                  t6_wb_cyc_o;
508
output                  t6_wb_stb_o;
509
output                  t6_wb_cab_o;
510
output  [`TC_AW-1:0]     t6_wb_adr_o;
511
output  [`TC_BSW-1:0]    t6_wb_sel_o;
512
output                  t6_wb_we_o;
513
output  [`TC_DW-1:0]     t6_wb_dat_o;
514
input   [`TC_DW-1:0]     t6_wb_dat_i;
515
input                   t6_wb_ack_i;
516
input                   t6_wb_err_i;
517
 
518
//
519
// WB master i/f connecting target 7
520
//
521
output                  t7_wb_cyc_o;
522
output                  t7_wb_stb_o;
523
output                  t7_wb_cab_o;
524
output  [`TC_AW-1:0]     t7_wb_adr_o;
525
output  [`TC_BSW-1:0]    t7_wb_sel_o;
526
output                  t7_wb_we_o;
527
output  [`TC_DW-1:0]     t7_wb_dat_o;
528
input   [`TC_DW-1:0]     t7_wb_dat_i;
529
input                   t7_wb_ack_i;
530
input                   t7_wb_err_i;
531
 
532
//
533
// WB master i/f connecting target 8
534
//
535
output                  t8_wb_cyc_o;
536
output                  t8_wb_stb_o;
537
output                  t8_wb_cab_o;
538
output  [`TC_AW-1:0]     t8_wb_adr_o;
539
output  [`TC_BSW-1:0]    t8_wb_sel_o;
540
output                  t8_wb_we_o;
541
output  [`TC_DW-1:0]     t8_wb_dat_o;
542
input   [`TC_DW-1:0]     t8_wb_dat_i;
543
input                   t8_wb_ack_i;
544
input                   t8_wb_err_i;
545
 
546
//
547
// Internal wires & registers
548
//
549
 
550
//
551
// Outputs for initiators from both mi_to_st blocks
552
//
553
wire    [`TC_DW-1:0]     xi0_wb_dat_o;
554
wire                    xi0_wb_ack_o;
555
wire                    xi0_wb_err_o;
556
wire    [`TC_DW-1:0]     xi1_wb_dat_o;
557
wire                    xi1_wb_ack_o;
558
wire                    xi1_wb_err_o;
559
wire    [`TC_DW-1:0]     xi2_wb_dat_o;
560
wire                    xi2_wb_ack_o;
561
wire                    xi2_wb_err_o;
562
wire    [`TC_DW-1:0]     xi3_wb_dat_o;
563
wire                    xi3_wb_ack_o;
564
wire                    xi3_wb_err_o;
565
wire    [`TC_DW-1:0]     xi4_wb_dat_o;
566
wire                    xi4_wb_ack_o;
567
wire                    xi4_wb_err_o;
568
wire    [`TC_DW-1:0]     xi5_wb_dat_o;
569
wire                    xi5_wb_ack_o;
570
wire                    xi5_wb_err_o;
571
wire    [`TC_DW-1:0]     xi6_wb_dat_o;
572
wire                    xi6_wb_ack_o;
573
wire                    xi6_wb_err_o;
574
wire    [`TC_DW-1:0]     xi7_wb_dat_o;
575
wire                    xi7_wb_ack_o;
576
wire                    xi7_wb_err_o;
577
wire    [`TC_DW-1:0]     yi0_wb_dat_o;
578
wire                    yi0_wb_ack_o;
579
wire                    yi0_wb_err_o;
580
wire    [`TC_DW-1:0]     yi1_wb_dat_o;
581
wire                    yi1_wb_ack_o;
582
wire                    yi1_wb_err_o;
583
wire    [`TC_DW-1:0]     yi2_wb_dat_o;
584
wire                    yi2_wb_ack_o;
585
wire                    yi2_wb_err_o;
586
wire    [`TC_DW-1:0]     yi3_wb_dat_o;
587
wire                    yi3_wb_ack_o;
588
wire                    yi3_wb_err_o;
589
wire    [`TC_DW-1:0]     yi4_wb_dat_o;
590
wire                    yi4_wb_ack_o;
591
wire                    yi4_wb_err_o;
592
wire    [`TC_DW-1:0]     yi5_wb_dat_o;
593
wire                    yi5_wb_ack_o;
594
wire                    yi5_wb_err_o;
595
wire    [`TC_DW-1:0]     yi6_wb_dat_o;
596
wire                    yi6_wb_ack_o;
597
wire                    yi6_wb_err_o;
598
wire    [`TC_DW-1:0]     yi7_wb_dat_o;
599
wire                    yi7_wb_ack_o;
600
wire                    yi7_wb_err_o;
601
 
602
//
603
// Intermediate signals connecting peripheral channel's
604
// mi_to_st and si_to_mt blocks.
605
//
606
wire                    z_wb_cyc_i;
607
wire                    z_wb_stb_i;
608
wire                    z_wb_cab_i;
609
wire    [`TC_AW-1:0]     z_wb_adr_i;
610
wire    [`TC_BSW-1:0]    z_wb_sel_i;
611
wire                    z_wb_we_i;
612
wire    [`TC_DW-1:0]     z_wb_dat_i;
613
wire    [`TC_DW-1:0]     z_wb_dat_t;
614
wire                    z_wb_ack_t;
615
wire                    z_wb_err_t;
616
 
617
//
618
// Outputs for initiators are ORed from both mi_to_st blocks
619
//
620
assign i0_wb_dat_o = xi0_wb_dat_o | yi0_wb_dat_o;
621
assign i0_wb_ack_o = xi0_wb_ack_o | yi0_wb_ack_o;
622
assign i0_wb_err_o = xi0_wb_err_o | yi0_wb_err_o;
623
assign i1_wb_dat_o = xi1_wb_dat_o | yi1_wb_dat_o;
624
assign i1_wb_ack_o = xi1_wb_ack_o | yi1_wb_ack_o;
625
assign i1_wb_err_o = xi1_wb_err_o | yi1_wb_err_o;
626
assign i2_wb_dat_o = xi2_wb_dat_o | yi2_wb_dat_o;
627
assign i2_wb_ack_o = xi2_wb_ack_o | yi2_wb_ack_o;
628
assign i2_wb_err_o = xi2_wb_err_o | yi2_wb_err_o;
629
assign i3_wb_dat_o = xi3_wb_dat_o | yi3_wb_dat_o;
630
assign i3_wb_ack_o = xi3_wb_ack_o | yi3_wb_ack_o;
631
assign i3_wb_err_o = xi3_wb_err_o | yi3_wb_err_o;
632
assign i4_wb_dat_o = xi4_wb_dat_o | yi4_wb_dat_o;
633
assign i4_wb_ack_o = xi4_wb_ack_o | yi4_wb_ack_o;
634
assign i4_wb_err_o = xi4_wb_err_o | yi4_wb_err_o;
635
assign i5_wb_dat_o = xi5_wb_dat_o | yi5_wb_dat_o;
636
assign i5_wb_ack_o = xi5_wb_ack_o | yi5_wb_ack_o;
637
assign i5_wb_err_o = xi5_wb_err_o | yi5_wb_err_o;
638
assign i6_wb_dat_o = xi6_wb_dat_o | yi6_wb_dat_o;
639
assign i6_wb_ack_o = xi6_wb_ack_o | yi6_wb_ack_o;
640
assign i6_wb_err_o = xi6_wb_err_o | yi6_wb_err_o;
641
assign i7_wb_dat_o = xi7_wb_dat_o | yi7_wb_dat_o;
642
assign i7_wb_ack_o = xi7_wb_ack_o | yi7_wb_ack_o;
643
assign i7_wb_err_o = xi7_wb_err_o | yi7_wb_err_o;
644
 
645
//
646
// From initiators to target 0
647
//
648
tc_mi_to_st #(t0_addr_w, t0_addr,
649
        0, t0_addr_w, t0_addr) t0_ch(
650
        .wb_clk_i(wb_clk_i),
651
        .wb_rst_i(wb_rst_i),
652
 
653
        .i0_wb_cyc_i(i0_wb_cyc_i),
654
        .i0_wb_stb_i(i0_wb_stb_i),
655
        .i0_wb_cab_i(i0_wb_cab_i),
656
        .i0_wb_adr_i(i0_wb_adr_i),
657
        .i0_wb_sel_i(i0_wb_sel_i),
658
        .i0_wb_we_i(i0_wb_we_i),
659
        .i0_wb_dat_i(i0_wb_dat_i),
660
        .i0_wb_dat_o(xi0_wb_dat_o),
661
        .i0_wb_ack_o(xi0_wb_ack_o),
662
        .i0_wb_err_o(xi0_wb_err_o),
663
 
664
        .i1_wb_cyc_i(i1_wb_cyc_i),
665
        .i1_wb_stb_i(i1_wb_stb_i),
666
        .i1_wb_cab_i(i1_wb_cab_i),
667
        .i1_wb_adr_i(i1_wb_adr_i),
668
        .i1_wb_sel_i(i1_wb_sel_i),
669
        .i1_wb_we_i(i1_wb_we_i),
670
        .i1_wb_dat_i(i1_wb_dat_i),
671
        .i1_wb_dat_o(xi1_wb_dat_o),
672
        .i1_wb_ack_o(xi1_wb_ack_o),
673
        .i1_wb_err_o(xi1_wb_err_o),
674
 
675
        .i2_wb_cyc_i(i2_wb_cyc_i),
676
        .i2_wb_stb_i(i2_wb_stb_i),
677
        .i2_wb_cab_i(i2_wb_cab_i),
678
        .i2_wb_adr_i(i2_wb_adr_i),
679
        .i2_wb_sel_i(i2_wb_sel_i),
680
        .i2_wb_we_i(i2_wb_we_i),
681
        .i2_wb_dat_i(i2_wb_dat_i),
682
        .i2_wb_dat_o(xi2_wb_dat_o),
683
        .i2_wb_ack_o(xi2_wb_ack_o),
684
        .i2_wb_err_o(xi2_wb_err_o),
685
 
686
        .i3_wb_cyc_i(i3_wb_cyc_i),
687
        .i3_wb_stb_i(i3_wb_stb_i),
688
        .i3_wb_cab_i(i3_wb_cab_i),
689
        .i3_wb_adr_i(i3_wb_adr_i),
690
        .i3_wb_sel_i(i3_wb_sel_i),
691
        .i3_wb_we_i(i3_wb_we_i),
692
        .i3_wb_dat_i(i3_wb_dat_i),
693
        .i3_wb_dat_o(xi3_wb_dat_o),
694
        .i3_wb_ack_o(xi3_wb_ack_o),
695
        .i3_wb_err_o(xi3_wb_err_o),
696
 
697
        .i4_wb_cyc_i(i4_wb_cyc_i),
698
        .i4_wb_stb_i(i4_wb_stb_i),
699
        .i4_wb_cab_i(i4_wb_cab_i),
700
        .i4_wb_adr_i(i4_wb_adr_i),
701
        .i4_wb_sel_i(i4_wb_sel_i),
702
        .i4_wb_we_i(i4_wb_we_i),
703
        .i4_wb_dat_i(i4_wb_dat_i),
704
        .i4_wb_dat_o(xi4_wb_dat_o),
705
        .i4_wb_ack_o(xi4_wb_ack_o),
706
        .i4_wb_err_o(xi4_wb_err_o),
707
 
708
        .i5_wb_cyc_i(i5_wb_cyc_i),
709
        .i5_wb_stb_i(i5_wb_stb_i),
710
        .i5_wb_cab_i(i5_wb_cab_i),
711
        .i5_wb_adr_i(i5_wb_adr_i),
712
        .i5_wb_sel_i(i5_wb_sel_i),
713
        .i5_wb_we_i(i5_wb_we_i),
714
        .i5_wb_dat_i(i5_wb_dat_i),
715
        .i5_wb_dat_o(xi5_wb_dat_o),
716
        .i5_wb_ack_o(xi5_wb_ack_o),
717
        .i5_wb_err_o(xi5_wb_err_o),
718
 
719
        .i6_wb_cyc_i(i6_wb_cyc_i),
720
        .i6_wb_stb_i(i6_wb_stb_i),
721
        .i6_wb_cab_i(i6_wb_cab_i),
722
        .i6_wb_adr_i(i6_wb_adr_i),
723
        .i6_wb_sel_i(i6_wb_sel_i),
724
        .i6_wb_we_i(i6_wb_we_i),
725
        .i6_wb_dat_i(i6_wb_dat_i),
726
        .i6_wb_dat_o(xi6_wb_dat_o),
727
        .i6_wb_ack_o(xi6_wb_ack_o),
728
        .i6_wb_err_o(xi6_wb_err_o),
729
 
730
        .i7_wb_cyc_i(i7_wb_cyc_i),
731
        .i7_wb_stb_i(i7_wb_stb_i),
732
        .i7_wb_cab_i(i7_wb_cab_i),
733
        .i7_wb_adr_i(i7_wb_adr_i),
734
        .i7_wb_sel_i(i7_wb_sel_i),
735
        .i7_wb_we_i(i7_wb_we_i),
736
        .i7_wb_dat_i(i7_wb_dat_i),
737
        .i7_wb_dat_o(xi7_wb_dat_o),
738
        .i7_wb_ack_o(xi7_wb_ack_o),
739
        .i7_wb_err_o(xi7_wb_err_o),
740
 
741
        .t0_wb_cyc_o(t0_wb_cyc_o),
742
        .t0_wb_stb_o(t0_wb_stb_o),
743
        .t0_wb_cab_o(t0_wb_cab_o),
744
        .t0_wb_adr_o(t0_wb_adr_o),
745
        .t0_wb_sel_o(t0_wb_sel_o),
746
        .t0_wb_we_o(t0_wb_we_o),
747
        .t0_wb_dat_o(t0_wb_dat_o),
748
        .t0_wb_dat_i(t0_wb_dat_i),
749
        .t0_wb_ack_i(t0_wb_ack_i),
750
        .t0_wb_err_i(t0_wb_err_i)
751
 
752
);
753
 
754
//
755
// From initiators to targets 1-8 (upper part)
756
//
757
tc_mi_to_st #(t1_addr_w, t1_addr,
758
        1, t28c_addr_w, t28_addr) t18_ch_upper(
759
        .wb_clk_i(wb_clk_i),
760
        .wb_rst_i(wb_rst_i),
761
 
762
        .i0_wb_cyc_i(i0_wb_cyc_i),
763
        .i0_wb_stb_i(i0_wb_stb_i),
764
        .i0_wb_cab_i(i0_wb_cab_i),
765
        .i0_wb_adr_i(i0_wb_adr_i),
766
        .i0_wb_sel_i(i0_wb_sel_i),
767
        .i0_wb_we_i(i0_wb_we_i),
768
        .i0_wb_dat_i(i0_wb_dat_i),
769
        .i0_wb_dat_o(yi0_wb_dat_o),
770
        .i0_wb_ack_o(yi0_wb_ack_o),
771
        .i0_wb_err_o(yi0_wb_err_o),
772
 
773
        .i1_wb_cyc_i(i1_wb_cyc_i),
774
        .i1_wb_stb_i(i1_wb_stb_i),
775
        .i1_wb_cab_i(i1_wb_cab_i),
776
        .i1_wb_adr_i(i1_wb_adr_i),
777
        .i1_wb_sel_i(i1_wb_sel_i),
778
        .i1_wb_we_i(i1_wb_we_i),
779
        .i1_wb_dat_i(i1_wb_dat_i),
780
        .i1_wb_dat_o(yi1_wb_dat_o),
781
        .i1_wb_ack_o(yi1_wb_ack_o),
782
        .i1_wb_err_o(yi1_wb_err_o),
783
 
784
        .i2_wb_cyc_i(i2_wb_cyc_i),
785
        .i2_wb_stb_i(i2_wb_stb_i),
786
        .i2_wb_cab_i(i2_wb_cab_i),
787
        .i2_wb_adr_i(i2_wb_adr_i),
788
        .i2_wb_sel_i(i2_wb_sel_i),
789
        .i2_wb_we_i(i2_wb_we_i),
790
        .i2_wb_dat_i(i2_wb_dat_i),
791
        .i2_wb_dat_o(yi2_wb_dat_o),
792
        .i2_wb_ack_o(yi2_wb_ack_o),
793
        .i2_wb_err_o(yi2_wb_err_o),
794
 
795
        .i3_wb_cyc_i(i3_wb_cyc_i),
796
        .i3_wb_stb_i(i3_wb_stb_i),
797
        .i3_wb_cab_i(i3_wb_cab_i),
798
        .i3_wb_adr_i(i3_wb_adr_i),
799
        .i3_wb_sel_i(i3_wb_sel_i),
800
        .i3_wb_we_i(i3_wb_we_i),
801
        .i3_wb_dat_i(i3_wb_dat_i),
802
        .i3_wb_dat_o(yi3_wb_dat_o),
803
        .i3_wb_ack_o(yi3_wb_ack_o),
804
        .i3_wb_err_o(yi3_wb_err_o),
805
 
806
        .i4_wb_cyc_i(i4_wb_cyc_i),
807
        .i4_wb_stb_i(i4_wb_stb_i),
808
        .i4_wb_cab_i(i4_wb_cab_i),
809
        .i4_wb_adr_i(i4_wb_adr_i),
810
        .i4_wb_sel_i(i4_wb_sel_i),
811
        .i4_wb_we_i(i4_wb_we_i),
812
        .i4_wb_dat_i(i4_wb_dat_i),
813
        .i4_wb_dat_o(yi4_wb_dat_o),
814
        .i4_wb_ack_o(yi4_wb_ack_o),
815
        .i4_wb_err_o(yi4_wb_err_o),
816
 
817
        .i5_wb_cyc_i(i5_wb_cyc_i),
818
        .i5_wb_stb_i(i5_wb_stb_i),
819
        .i5_wb_cab_i(i5_wb_cab_i),
820
        .i5_wb_adr_i(i5_wb_adr_i),
821
        .i5_wb_sel_i(i5_wb_sel_i),
822
        .i5_wb_we_i(i5_wb_we_i),
823
        .i5_wb_dat_i(i5_wb_dat_i),
824
        .i5_wb_dat_o(yi5_wb_dat_o),
825
        .i5_wb_ack_o(yi5_wb_ack_o),
826
        .i5_wb_err_o(yi5_wb_err_o),
827
 
828
        .i6_wb_cyc_i(i6_wb_cyc_i),
829
        .i6_wb_stb_i(i6_wb_stb_i),
830
        .i6_wb_cab_i(i6_wb_cab_i),
831
        .i6_wb_adr_i(i6_wb_adr_i),
832
        .i6_wb_sel_i(i6_wb_sel_i),
833
        .i6_wb_we_i(i6_wb_we_i),
834
        .i6_wb_dat_i(i6_wb_dat_i),
835
        .i6_wb_dat_o(yi6_wb_dat_o),
836
        .i6_wb_ack_o(yi6_wb_ack_o),
837
        .i6_wb_err_o(yi6_wb_err_o),
838
 
839
        .i7_wb_cyc_i(i7_wb_cyc_i),
840
        .i7_wb_stb_i(i7_wb_stb_i),
841
        .i7_wb_cab_i(i7_wb_cab_i),
842
        .i7_wb_adr_i(i7_wb_adr_i),
843
        .i7_wb_sel_i(i7_wb_sel_i),
844
        .i7_wb_we_i(i7_wb_we_i),
845
        .i7_wb_dat_i(i7_wb_dat_i),
846
        .i7_wb_dat_o(yi7_wb_dat_o),
847
        .i7_wb_ack_o(yi7_wb_ack_o),
848
        .i7_wb_err_o(yi7_wb_err_o),
849
 
850
        .t0_wb_cyc_o(z_wb_cyc_i),
851
        .t0_wb_stb_o(z_wb_stb_i),
852
        .t0_wb_cab_o(z_wb_cab_i),
853
        .t0_wb_adr_o(z_wb_adr_i),
854
        .t0_wb_sel_o(z_wb_sel_i),
855
        .t0_wb_we_o(z_wb_we_i),
856
        .t0_wb_dat_o(z_wb_dat_i),
857
        .t0_wb_dat_i(z_wb_dat_t),
858
        .t0_wb_ack_i(z_wb_ack_t),
859
        .t0_wb_err_i(z_wb_err_t)
860
 
861
);
862
 
863
//
864
// From initiators to targets 1-8 (lower part)
865
//
866
tc_si_to_mt #(t1_addr_w, t1_addr, t28i_addr_w, t2_addr, t3_addr,
867
        t4_addr, t5_addr, t6_addr, t7_addr, t8_addr) t18_ch_lower(
868
 
869
        .i0_wb_cyc_i(z_wb_cyc_i),
870
        .i0_wb_stb_i(z_wb_stb_i),
871
        .i0_wb_cab_i(z_wb_cab_i),
872
        .i0_wb_adr_i(z_wb_adr_i),
873
        .i0_wb_sel_i(z_wb_sel_i),
874
        .i0_wb_we_i(z_wb_we_i),
875
        .i0_wb_dat_i(z_wb_dat_i),
876
        .i0_wb_dat_o(z_wb_dat_t),
877
        .i0_wb_ack_o(z_wb_ack_t),
878
        .i0_wb_err_o(z_wb_err_t),
879
 
880
        .t0_wb_cyc_o(t1_wb_cyc_o),
881
        .t0_wb_stb_o(t1_wb_stb_o),
882
        .t0_wb_cab_o(t1_wb_cab_o),
883
        .t0_wb_adr_o(t1_wb_adr_o),
884
        .t0_wb_sel_o(t1_wb_sel_o),
885
        .t0_wb_we_o(t1_wb_we_o),
886
        .t0_wb_dat_o(t1_wb_dat_o),
887
        .t0_wb_dat_i(t1_wb_dat_i),
888
        .t0_wb_ack_i(t1_wb_ack_i),
889
        .t0_wb_err_i(t1_wb_err_i),
890
 
891
        .t1_wb_cyc_o(t2_wb_cyc_o),
892
        .t1_wb_stb_o(t2_wb_stb_o),
893
        .t1_wb_cab_o(t2_wb_cab_o),
894
        .t1_wb_adr_o(t2_wb_adr_o),
895
        .t1_wb_sel_o(t2_wb_sel_o),
896
        .t1_wb_we_o(t2_wb_we_o),
897
        .t1_wb_dat_o(t2_wb_dat_o),
898
        .t1_wb_dat_i(t2_wb_dat_i),
899
        .t1_wb_ack_i(t2_wb_ack_i),
900
        .t1_wb_err_i(t2_wb_err_i),
901
 
902
        .t2_wb_cyc_o(t3_wb_cyc_o),
903
        .t2_wb_stb_o(t3_wb_stb_o),
904
        .t2_wb_cab_o(t3_wb_cab_o),
905
        .t2_wb_adr_o(t3_wb_adr_o),
906
        .t2_wb_sel_o(t3_wb_sel_o),
907
        .t2_wb_we_o(t3_wb_we_o),
908
        .t2_wb_dat_o(t3_wb_dat_o),
909
        .t2_wb_dat_i(t3_wb_dat_i),
910
        .t2_wb_ack_i(t3_wb_ack_i),
911
        .t2_wb_err_i(t3_wb_err_i),
912
 
913
        .t3_wb_cyc_o(t4_wb_cyc_o),
914
        .t3_wb_stb_o(t4_wb_stb_o),
915
        .t3_wb_cab_o(t4_wb_cab_o),
916
        .t3_wb_adr_o(t4_wb_adr_o),
917
        .t3_wb_sel_o(t4_wb_sel_o),
918
        .t3_wb_we_o(t4_wb_we_o),
919
        .t3_wb_dat_o(t4_wb_dat_o),
920
        .t3_wb_dat_i(t4_wb_dat_i),
921
        .t3_wb_ack_i(t4_wb_ack_i),
922
        .t3_wb_err_i(t4_wb_err_i),
923
 
924
        .t4_wb_cyc_o(t5_wb_cyc_o),
925
        .t4_wb_stb_o(t5_wb_stb_o),
926
        .t4_wb_cab_o(t5_wb_cab_o),
927
        .t4_wb_adr_o(t5_wb_adr_o),
928
        .t4_wb_sel_o(t5_wb_sel_o),
929
        .t4_wb_we_o(t5_wb_we_o),
930
        .t4_wb_dat_o(t5_wb_dat_o),
931
        .t4_wb_dat_i(t5_wb_dat_i),
932
        .t4_wb_ack_i(t5_wb_ack_i),
933
        .t4_wb_err_i(t5_wb_err_i),
934
 
935
        .t5_wb_cyc_o(t6_wb_cyc_o),
936
        .t5_wb_stb_o(t6_wb_stb_o),
937
        .t5_wb_cab_o(t6_wb_cab_o),
938
        .t5_wb_adr_o(t6_wb_adr_o),
939
        .t5_wb_sel_o(t6_wb_sel_o),
940
        .t5_wb_we_o(t6_wb_we_o),
941
        .t5_wb_dat_o(t6_wb_dat_o),
942
        .t5_wb_dat_i(t6_wb_dat_i),
943
        .t5_wb_ack_i(t6_wb_ack_i),
944
        .t5_wb_err_i(t6_wb_err_i),
945
 
946
        .t6_wb_cyc_o(t7_wb_cyc_o),
947
        .t6_wb_stb_o(t7_wb_stb_o),
948
        .t6_wb_cab_o(t7_wb_cab_o),
949
        .t6_wb_adr_o(t7_wb_adr_o),
950
        .t6_wb_sel_o(t7_wb_sel_o),
951
        .t6_wb_we_o(t7_wb_we_o),
952
        .t6_wb_dat_o(t7_wb_dat_o),
953
        .t6_wb_dat_i(t7_wb_dat_i),
954
        .t6_wb_ack_i(t7_wb_ack_i),
955
        .t6_wb_err_i(t7_wb_err_i),
956
 
957
        .t7_wb_cyc_o(t8_wb_cyc_o),
958
        .t7_wb_stb_o(t8_wb_stb_o),
959
        .t7_wb_cab_o(t8_wb_cab_o),
960
        .t7_wb_adr_o(t8_wb_adr_o),
961
        .t7_wb_sel_o(t8_wb_sel_o),
962
        .t7_wb_we_o(t8_wb_we_o),
963
        .t7_wb_dat_o(t8_wb_dat_o),
964
        .t7_wb_dat_i(t8_wb_dat_i),
965
        .t7_wb_ack_i(t8_wb_ack_i),
966
        .t7_wb_err_i(t8_wb_err_i)
967
 
968
);
969
 
970
endmodule
971
 
972
//
973
// Multiple initiator to single target
974
//
975
module tc_mi_to_st (
976
        wb_clk_i,
977
        wb_rst_i,
978
 
979
        i0_wb_cyc_i,
980
        i0_wb_stb_i,
981
        i0_wb_cab_i,
982
        i0_wb_adr_i,
983
        i0_wb_sel_i,
984
        i0_wb_we_i,
985
        i0_wb_dat_i,
986
        i0_wb_dat_o,
987
        i0_wb_ack_o,
988
        i0_wb_err_o,
989
 
990
        i1_wb_cyc_i,
991
        i1_wb_stb_i,
992
        i1_wb_cab_i,
993
        i1_wb_adr_i,
994
        i1_wb_sel_i,
995
        i1_wb_we_i,
996
        i1_wb_dat_i,
997
        i1_wb_dat_o,
998
        i1_wb_ack_o,
999
        i1_wb_err_o,
1000
 
1001
        i2_wb_cyc_i,
1002
        i2_wb_stb_i,
1003
        i2_wb_cab_i,
1004
        i2_wb_adr_i,
1005
        i2_wb_sel_i,
1006
        i2_wb_we_i,
1007
        i2_wb_dat_i,
1008
        i2_wb_dat_o,
1009
        i2_wb_ack_o,
1010
        i2_wb_err_o,
1011
 
1012
        i3_wb_cyc_i,
1013
        i3_wb_stb_i,
1014
        i3_wb_cab_i,
1015
        i3_wb_adr_i,
1016
        i3_wb_sel_i,
1017
        i3_wb_we_i,
1018
        i3_wb_dat_i,
1019
        i3_wb_dat_o,
1020
        i3_wb_ack_o,
1021
        i3_wb_err_o,
1022
 
1023
        i4_wb_cyc_i,
1024
        i4_wb_stb_i,
1025
        i4_wb_cab_i,
1026
        i4_wb_adr_i,
1027
        i4_wb_sel_i,
1028
        i4_wb_we_i,
1029
        i4_wb_dat_i,
1030
        i4_wb_dat_o,
1031
        i4_wb_ack_o,
1032
        i4_wb_err_o,
1033
 
1034
        i5_wb_cyc_i,
1035
        i5_wb_stb_i,
1036
        i5_wb_cab_i,
1037
        i5_wb_adr_i,
1038
        i5_wb_sel_i,
1039
        i5_wb_we_i,
1040
        i5_wb_dat_i,
1041
        i5_wb_dat_o,
1042
        i5_wb_ack_o,
1043
        i5_wb_err_o,
1044
 
1045
        i6_wb_cyc_i,
1046
        i6_wb_stb_i,
1047
        i6_wb_cab_i,
1048
        i6_wb_adr_i,
1049
        i6_wb_sel_i,
1050
        i6_wb_we_i,
1051
        i6_wb_dat_i,
1052
        i6_wb_dat_o,
1053
        i6_wb_ack_o,
1054
        i6_wb_err_o,
1055
 
1056
        i7_wb_cyc_i,
1057
        i7_wb_stb_i,
1058
        i7_wb_cab_i,
1059
        i7_wb_adr_i,
1060
        i7_wb_sel_i,
1061
        i7_wb_we_i,
1062
        i7_wb_dat_i,
1063
        i7_wb_dat_o,
1064
        i7_wb_ack_o,
1065
        i7_wb_err_o,
1066
 
1067
        t0_wb_cyc_o,
1068
        t0_wb_stb_o,
1069
        t0_wb_cab_o,
1070
        t0_wb_adr_o,
1071
        t0_wb_sel_o,
1072
        t0_wb_we_o,
1073
        t0_wb_dat_o,
1074
        t0_wb_dat_i,
1075
        t0_wb_ack_i,
1076
        t0_wb_err_i
1077
 
1078
);
1079
 
1080
//
1081
// Parameters
1082
//
1083
parameter               t0_addr_w = 2;
1084
parameter               t0_addr = 2'b00;
1085
parameter               multitarg = 1'b0;
1086
parameter               t17_addr_w = 2;
1087
parameter               t17_addr = 2'b00;
1088
 
1089
//
1090
// I/O Ports
1091
//
1092
input                   wb_clk_i;
1093
input                   wb_rst_i;
1094
 
1095
//
1096
// WB slave i/f connecting initiator 0
1097
//
1098
input                   i0_wb_cyc_i;
1099
input                   i0_wb_stb_i;
1100
input                   i0_wb_cab_i;
1101
input   [`TC_AW-1:0]     i0_wb_adr_i;
1102
input   [`TC_BSW-1:0]    i0_wb_sel_i;
1103
input                   i0_wb_we_i;
1104
input   [`TC_DW-1:0]     i0_wb_dat_i;
1105
output  [`TC_DW-1:0]     i0_wb_dat_o;
1106
output                  i0_wb_ack_o;
1107
output                  i0_wb_err_o;
1108
 
1109
//
1110
// WB slave i/f connecting initiator 1
1111
//
1112
input                   i1_wb_cyc_i;
1113
input                   i1_wb_stb_i;
1114
input                   i1_wb_cab_i;
1115
input   [`TC_AW-1:0]     i1_wb_adr_i;
1116
input   [`TC_BSW-1:0]    i1_wb_sel_i;
1117
input                   i1_wb_we_i;
1118
input   [`TC_DW-1:0]     i1_wb_dat_i;
1119
output  [`TC_DW-1:0]     i1_wb_dat_o;
1120
output                  i1_wb_ack_o;
1121
output                  i1_wb_err_o;
1122
 
1123
//
1124
// WB slave i/f connecting initiator 2
1125
//
1126
input                   i2_wb_cyc_i;
1127
input                   i2_wb_stb_i;
1128
input                   i2_wb_cab_i;
1129
input   [`TC_AW-1:0]     i2_wb_adr_i;
1130
input   [`TC_BSW-1:0]    i2_wb_sel_i;
1131
input                   i2_wb_we_i;
1132
input   [`TC_DW-1:0]     i2_wb_dat_i;
1133
output  [`TC_DW-1:0]     i2_wb_dat_o;
1134
output                  i2_wb_ack_o;
1135
output                  i2_wb_err_o;
1136
 
1137
//
1138
// WB slave i/f connecting initiator 3
1139
//
1140
input                   i3_wb_cyc_i;
1141
input                   i3_wb_stb_i;
1142
input                   i3_wb_cab_i;
1143
input   [`TC_AW-1:0]     i3_wb_adr_i;
1144
input   [`TC_BSW-1:0]    i3_wb_sel_i;
1145
input                   i3_wb_we_i;
1146
input   [`TC_DW-1:0]     i3_wb_dat_i;
1147
output  [`TC_DW-1:0]     i3_wb_dat_o;
1148
output                  i3_wb_ack_o;
1149
output                  i3_wb_err_o;
1150
 
1151
//
1152
// WB slave i/f connecting initiator 4
1153
//
1154
input                   i4_wb_cyc_i;
1155
input                   i4_wb_stb_i;
1156
input                   i4_wb_cab_i;
1157
input   [`TC_AW-1:0]     i4_wb_adr_i;
1158
input   [`TC_BSW-1:0]    i4_wb_sel_i;
1159
input                   i4_wb_we_i;
1160
input   [`TC_DW-1:0]     i4_wb_dat_i;
1161
output  [`TC_DW-1:0]     i4_wb_dat_o;
1162
output                  i4_wb_ack_o;
1163
output                  i4_wb_err_o;
1164
 
1165
//
1166
// WB slave i/f connecting initiator 5
1167
//
1168
input                   i5_wb_cyc_i;
1169
input                   i5_wb_stb_i;
1170
input                   i5_wb_cab_i;
1171
input   [`TC_AW-1:0]     i5_wb_adr_i;
1172
input   [`TC_BSW-1:0]    i5_wb_sel_i;
1173
input                   i5_wb_we_i;
1174
input   [`TC_DW-1:0]     i5_wb_dat_i;
1175
output  [`TC_DW-1:0]     i5_wb_dat_o;
1176
output                  i5_wb_ack_o;
1177
output                  i5_wb_err_o;
1178
 
1179
//
1180
// WB slave i/f connecting initiator 6
1181
//
1182
input                   i6_wb_cyc_i;
1183
input                   i6_wb_stb_i;
1184
input                   i6_wb_cab_i;
1185
input   [`TC_AW-1:0]     i6_wb_adr_i;
1186
input   [`TC_BSW-1:0]    i6_wb_sel_i;
1187
input                   i6_wb_we_i;
1188
input   [`TC_DW-1:0]     i6_wb_dat_i;
1189
output  [`TC_DW-1:0]     i6_wb_dat_o;
1190
output                  i6_wb_ack_o;
1191
output                  i6_wb_err_o;
1192
 
1193
//
1194
// WB slave i/f connecting initiator 7
1195
//
1196
input                   i7_wb_cyc_i;
1197
input                   i7_wb_stb_i;
1198
input                   i7_wb_cab_i;
1199
input   [`TC_AW-1:0]     i7_wb_adr_i;
1200
input   [`TC_BSW-1:0]    i7_wb_sel_i;
1201
input                   i7_wb_we_i;
1202
input   [`TC_DW-1:0]     i7_wb_dat_i;
1203
output  [`TC_DW-1:0]     i7_wb_dat_o;
1204
output                  i7_wb_ack_o;
1205
output                  i7_wb_err_o;
1206
 
1207
//
1208
// WB master i/f connecting target
1209
//
1210
output                  t0_wb_cyc_o;
1211
output                  t0_wb_stb_o;
1212
output                  t0_wb_cab_o;
1213
output  [`TC_AW-1:0]     t0_wb_adr_o;
1214
output  [`TC_BSW-1:0]    t0_wb_sel_o;
1215
output                  t0_wb_we_o;
1216
output  [`TC_DW-1:0]     t0_wb_dat_o;
1217
input   [`TC_DW-1:0]     t0_wb_dat_i;
1218
input                   t0_wb_ack_i;
1219
input                   t0_wb_err_i;
1220
 
1221
//
1222
// Internal wires & registers
1223
//
1224
wire    [`TC_IIN_W-1:0]  i0_in, i1_in,
1225
                        i2_in, i3_in,
1226
                        i4_in, i5_in,
1227
                        i6_in, i7_in;
1228
wire    [`TC_TIN_W-1:0]  i0_out, i1_out,
1229
                        i2_out, i3_out,
1230
                        i4_out, i5_out,
1231
                        i6_out, i7_out;
1232
wire    [`TC_IIN_W-1:0]  t0_out;
1233
wire    [`TC_TIN_W-1:0]  t0_in;
1234
wire    [7:0]            req_i;
1235
wire    [2:0]            req_won;
1236
reg                     req_cont;
1237
reg     [2:0]            req_r;
1238
 
1239
//
1240
// Group WB initiator 0 i/f inputs and outputs
1241
//
1242
assign i0_in = {i0_wb_cyc_i, i0_wb_stb_i, i0_wb_cab_i, i0_wb_adr_i,
1243
                i0_wb_sel_i, i0_wb_we_i, i0_wb_dat_i};
1244
assign {i0_wb_dat_o, i0_wb_ack_o, i0_wb_err_o} = i0_out;
1245
 
1246
//
1247
// Group WB initiator 1 i/f inputs and outputs
1248
//
1249
assign i1_in = {i1_wb_cyc_i, i1_wb_stb_i, i1_wb_cab_i, i1_wb_adr_i,
1250
                i1_wb_sel_i, i1_wb_we_i, i1_wb_dat_i};
1251
assign {i1_wb_dat_o, i1_wb_ack_o, i1_wb_err_o} = i1_out;
1252
 
1253
//
1254
// Group WB initiator 2 i/f inputs and outputs
1255
//
1256
assign i2_in = {i2_wb_cyc_i, i2_wb_stb_i, i2_wb_cab_i, i2_wb_adr_i,
1257
                i2_wb_sel_i, i2_wb_we_i, i2_wb_dat_i};
1258
assign {i2_wb_dat_o, i2_wb_ack_o, i2_wb_err_o} = i2_out;
1259
 
1260
//
1261
// Group WB initiator 3 i/f inputs and outputs
1262
//
1263
assign i3_in = {i3_wb_cyc_i, i3_wb_stb_i, i3_wb_cab_i, i3_wb_adr_i,
1264
                i3_wb_sel_i, i3_wb_we_i, i3_wb_dat_i};
1265
assign {i3_wb_dat_o, i3_wb_ack_o, i3_wb_err_o} = i3_out;
1266
 
1267
//
1268
// Group WB initiator 4 i/f inputs and outputs
1269
//
1270
assign i4_in = {i4_wb_cyc_i, i4_wb_stb_i, i4_wb_cab_i, i4_wb_adr_i,
1271
                i4_wb_sel_i, i4_wb_we_i, i4_wb_dat_i};
1272
assign {i4_wb_dat_o, i4_wb_ack_o, i4_wb_err_o} = i4_out;
1273
 
1274
//
1275
// Group WB initiator 5 i/f inputs and outputs
1276
//
1277
assign i5_in = {i5_wb_cyc_i, i5_wb_stb_i, i5_wb_cab_i, i5_wb_adr_i,
1278
                i5_wb_sel_i, i5_wb_we_i, i5_wb_dat_i};
1279
assign {i5_wb_dat_o, i5_wb_ack_o, i5_wb_err_o} = i5_out;
1280
 
1281
//
1282
// Group WB initiator 6 i/f inputs and outputs
1283
//
1284
assign i6_in = {i6_wb_cyc_i, i6_wb_stb_i, i6_wb_cab_i, i6_wb_adr_i,
1285
                i6_wb_sel_i, i6_wb_we_i, i6_wb_dat_i};
1286
assign {i6_wb_dat_o, i6_wb_ack_o, i6_wb_err_o} = i6_out;
1287
 
1288
//
1289
// Group WB initiator 7 i/f inputs and outputs
1290
//
1291
assign i7_in = {i7_wb_cyc_i, i7_wb_stb_i, i7_wb_cab_i, i7_wb_adr_i,
1292
                i7_wb_sel_i, i7_wb_we_i, i7_wb_dat_i};
1293
assign {i7_wb_dat_o, i7_wb_ack_o, i7_wb_err_o} = i7_out;
1294
 
1295
//
1296
// Group WB target 0 i/f inputs and outputs
1297
//
1298
assign {t0_wb_cyc_o, t0_wb_stb_o, t0_wb_cab_o, t0_wb_adr_o,
1299
                t0_wb_sel_o, t0_wb_we_o, t0_wb_dat_o} = t0_out;
1300
assign t0_in = {t0_wb_dat_i, t0_wb_ack_i, t0_wb_err_i};
1301
 
1302
//
1303
// Assign to WB initiator i/f outputs
1304
//
1305
// Either inputs from the target are assigned or zeros.
1306
//
1307
assign i0_out = (req_won == 3'd0) ? t0_in : {`TC_TIN_W{1'b0}};
1308
assign i1_out = (req_won == 3'd1) ? t0_in : {`TC_TIN_W{1'b0}};
1309
assign i2_out = (req_won == 3'd2) ? t0_in : {`TC_TIN_W{1'b0}};
1310
assign i3_out = (req_won == 3'd3) ? t0_in : {`TC_TIN_W{1'b0}};
1311
assign i4_out = (req_won == 3'd4) ? t0_in : {`TC_TIN_W{1'b0}};
1312
assign i5_out = (req_won == 3'd5) ? t0_in : {`TC_TIN_W{1'b0}};
1313
assign i6_out = (req_won == 3'd6) ? t0_in : {`TC_TIN_W{1'b0}};
1314
assign i7_out = (req_won == 3'd7) ? t0_in : {`TC_TIN_W{1'b0}};
1315
 
1316
//
1317
// Assign to WB target i/f outputs
1318
//
1319
// Assign inputs from initiator to target outputs according to
1320
// which initiator has won. If there is no request for the target,
1321
// assign zeros.
1322
//
1323
assign t0_out = (req_won == 3'd0) ? i0_in :
1324
                (req_won == 3'd1) ? i1_in :
1325
                (req_won == 3'd2) ? i2_in :
1326
                (req_won == 3'd3) ? i3_in :
1327
                (req_won == 3'd4) ? i4_in :
1328
                (req_won == 3'd5) ? i5_in :
1329
                (req_won == 3'd6) ? i6_in :
1330
                (req_won == 3'd7) ? i7_in : {`TC_IIN_W{1'b0}};
1331
 
1332
//
1333
// Determine if an initiator has address of the target.
1334
//
1335
assign req_i[0] = i0_wb_cyc_i &
1336
        ((i0_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr) |
1337
         multitarg & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t17_addr));
1338
assign req_i[1] = i1_wb_cyc_i &
1339
        ((i1_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr) |
1340
         multitarg & (i1_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t17_addr));
1341
assign req_i[2] = i2_wb_cyc_i &
1342
        ((i2_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr) |
1343
         multitarg & (i2_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t17_addr));
1344
assign req_i[3] = i3_wb_cyc_i &
1345
        ((i3_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr) |
1346
         multitarg & (i3_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t17_addr));
1347
assign req_i[4] = i4_wb_cyc_i &
1348
        ((i4_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr) |
1349
         multitarg & (i4_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t17_addr));
1350
assign req_i[5] = i5_wb_cyc_i &
1351
        ((i5_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr) |
1352
         multitarg & (i5_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t17_addr));
1353
assign req_i[6] = i6_wb_cyc_i &
1354
        ((i6_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr) |
1355
         multitarg & (i6_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t17_addr));
1356
assign req_i[7] = i7_wb_cyc_i &
1357
        ((i7_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr) |
1358
         multitarg & (i7_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t17_addr));
1359
 
1360
//
1361
// Determine who gets current access to the target.
1362
//
1363
// If current initiator still asserts request, do nothing
1364
// (keep current initiator).
1365
// Otherwise check each initiator's request, starting from initiator 0
1366
// (highest priority).
1367
// If there is no requests from initiators, park initiator 0.
1368
//
1369
assign req_won = req_cont ? req_r :
1370
                 req_i[0] ? 3'd0 :
1371
                 req_i[1] ? 3'd1 :
1372
                 req_i[2] ? 3'd2 :
1373
                 req_i[3] ? 3'd3 :
1374
                 req_i[4] ? 3'd4 :
1375
                 req_i[5] ? 3'd5 :
1376
                 req_i[6] ? 3'd6 :
1377
                 req_i[7] ? 3'd7 : 3'd0;
1378
 
1379
//
1380
// Check if current initiator still wants access to the target and if
1381
// it does, assert req_cont.
1382
//
1383
always @(req_r or req_i)
1384
        case (req_r)    // synopsys parallel_case
1385
                3'd0: req_cont = req_i[0];
1386
                3'd1: req_cont = req_i[1];
1387
                3'd2: req_cont = req_i[2];
1388
                3'd3: req_cont = req_i[3];
1389
                3'd4: req_cont = req_i[4];
1390
                3'd5: req_cont = req_i[5];
1391
                3'd6: req_cont = req_i[6];
1392
                3'd7: req_cont = req_i[7];
1393
        endcase
1394
 
1395
//
1396
// Register who has current access to the target.
1397
//
1398
always @(posedge wb_clk_i or posedge wb_rst_i)
1399
        if (wb_rst_i)
1400
                req_r <= #1 3'd0;
1401
        else
1402
                req_r <= #1 req_won;
1403
 
1404
endmodule
1405
 
1406
//
1407
// Single initiator to multiple targets
1408
//
1409
module tc_si_to_mt (
1410
 
1411
        i0_wb_cyc_i,
1412
        i0_wb_stb_i,
1413
        i0_wb_cab_i,
1414
        i0_wb_adr_i,
1415
        i0_wb_sel_i,
1416
        i0_wb_we_i,
1417
        i0_wb_dat_i,
1418
        i0_wb_dat_o,
1419
        i0_wb_ack_o,
1420
        i0_wb_err_o,
1421
 
1422
        t0_wb_cyc_o,
1423
        t0_wb_stb_o,
1424
        t0_wb_cab_o,
1425
        t0_wb_adr_o,
1426
        t0_wb_sel_o,
1427
        t0_wb_we_o,
1428
        t0_wb_dat_o,
1429
        t0_wb_dat_i,
1430
        t0_wb_ack_i,
1431
        t0_wb_err_i,
1432
 
1433
        t1_wb_cyc_o,
1434
        t1_wb_stb_o,
1435
        t1_wb_cab_o,
1436
        t1_wb_adr_o,
1437
        t1_wb_sel_o,
1438
        t1_wb_we_o,
1439
        t1_wb_dat_o,
1440
        t1_wb_dat_i,
1441
        t1_wb_ack_i,
1442
        t1_wb_err_i,
1443
 
1444
        t2_wb_cyc_o,
1445
        t2_wb_stb_o,
1446
        t2_wb_cab_o,
1447
        t2_wb_adr_o,
1448
        t2_wb_sel_o,
1449
        t2_wb_we_o,
1450
        t2_wb_dat_o,
1451
        t2_wb_dat_i,
1452
        t2_wb_ack_i,
1453
        t2_wb_err_i,
1454
 
1455
        t3_wb_cyc_o,
1456
        t3_wb_stb_o,
1457
        t3_wb_cab_o,
1458
        t3_wb_adr_o,
1459
        t3_wb_sel_o,
1460
        t3_wb_we_o,
1461
        t3_wb_dat_o,
1462
        t3_wb_dat_i,
1463
        t3_wb_ack_i,
1464
        t3_wb_err_i,
1465
 
1466
        t4_wb_cyc_o,
1467
        t4_wb_stb_o,
1468
        t4_wb_cab_o,
1469
        t4_wb_adr_o,
1470
        t4_wb_sel_o,
1471
        t4_wb_we_o,
1472
        t4_wb_dat_o,
1473
        t4_wb_dat_i,
1474
        t4_wb_ack_i,
1475
        t4_wb_err_i,
1476
 
1477
        t5_wb_cyc_o,
1478
        t5_wb_stb_o,
1479
        t5_wb_cab_o,
1480
        t5_wb_adr_o,
1481
        t5_wb_sel_o,
1482
        t5_wb_we_o,
1483
        t5_wb_dat_o,
1484
        t5_wb_dat_i,
1485
        t5_wb_ack_i,
1486
        t5_wb_err_i,
1487
 
1488
        t6_wb_cyc_o,
1489
        t6_wb_stb_o,
1490
        t6_wb_cab_o,
1491
        t6_wb_adr_o,
1492
        t6_wb_sel_o,
1493
        t6_wb_we_o,
1494
        t6_wb_dat_o,
1495
        t6_wb_dat_i,
1496
        t6_wb_ack_i,
1497
        t6_wb_err_i,
1498
 
1499
        t7_wb_cyc_o,
1500
        t7_wb_stb_o,
1501
        t7_wb_cab_o,
1502
        t7_wb_adr_o,
1503
        t7_wb_sel_o,
1504
        t7_wb_we_o,
1505
        t7_wb_dat_o,
1506
        t7_wb_dat_i,
1507
        t7_wb_ack_i,
1508
        t7_wb_err_i
1509
 
1510
);
1511
 
1512
//
1513
// Parameters
1514
//
1515
parameter               t0_addr_w = 3;
1516
parameter               t0_addr = 3'd0;
1517
parameter               t17_addr_w = 3;
1518
parameter               t1_addr = 3'd1;
1519
parameter               t2_addr = 3'd2;
1520
parameter               t3_addr = 3'd3;
1521
parameter               t4_addr = 3'd4;
1522
parameter               t5_addr = 3'd5;
1523
parameter               t6_addr = 3'd6;
1524
parameter               t7_addr = 3'd7;
1525
 
1526
//
1527
// I/O Ports
1528
//
1529
 
1530
//
1531
// WB slave i/f connecting initiator 0
1532
//
1533
input                   i0_wb_cyc_i;
1534
input                   i0_wb_stb_i;
1535
input                   i0_wb_cab_i;
1536
input   [`TC_AW-1:0]     i0_wb_adr_i;
1537
input   [`TC_BSW-1:0]    i0_wb_sel_i;
1538
input                   i0_wb_we_i;
1539
input   [`TC_DW-1:0]     i0_wb_dat_i;
1540
output  [`TC_DW-1:0]     i0_wb_dat_o;
1541
output                  i0_wb_ack_o;
1542
output                  i0_wb_err_o;
1543
 
1544
//
1545
// WB master i/f connecting target 0
1546
//
1547
output                  t0_wb_cyc_o;
1548
output                  t0_wb_stb_o;
1549
output                  t0_wb_cab_o;
1550
output  [`TC_AW-1:0]     t0_wb_adr_o;
1551
output  [`TC_BSW-1:0]    t0_wb_sel_o;
1552
output                  t0_wb_we_o;
1553
output  [`TC_DW-1:0]     t0_wb_dat_o;
1554
input   [`TC_DW-1:0]     t0_wb_dat_i;
1555
input                   t0_wb_ack_i;
1556
input                   t0_wb_err_i;
1557
 
1558
//
1559
// WB master i/f connecting target 1
1560
//
1561
output                  t1_wb_cyc_o;
1562
output                  t1_wb_stb_o;
1563
output                  t1_wb_cab_o;
1564
output  [`TC_AW-1:0]     t1_wb_adr_o;
1565
output  [`TC_BSW-1:0]    t1_wb_sel_o;
1566
output                  t1_wb_we_o;
1567
output  [`TC_DW-1:0]     t1_wb_dat_o;
1568
input   [`TC_DW-1:0]     t1_wb_dat_i;
1569
input                   t1_wb_ack_i;
1570
input                   t1_wb_err_i;
1571
 
1572
//
1573
// WB master i/f connecting target 2
1574
//
1575
output                  t2_wb_cyc_o;
1576
output                  t2_wb_stb_o;
1577
output                  t2_wb_cab_o;
1578
output  [`TC_AW-1:0]     t2_wb_adr_o;
1579
output  [`TC_BSW-1:0]    t2_wb_sel_o;
1580
output                  t2_wb_we_o;
1581
output  [`TC_DW-1:0]     t2_wb_dat_o;
1582
input   [`TC_DW-1:0]     t2_wb_dat_i;
1583
input                   t2_wb_ack_i;
1584
input                   t2_wb_err_i;
1585
 
1586
//
1587
// WB master i/f connecting target 3
1588
//
1589
output                  t3_wb_cyc_o;
1590
output                  t3_wb_stb_o;
1591
output                  t3_wb_cab_o;
1592
output  [`TC_AW-1:0]     t3_wb_adr_o;
1593
output  [`TC_BSW-1:0]    t3_wb_sel_o;
1594
output                  t3_wb_we_o;
1595
output  [`TC_DW-1:0]     t3_wb_dat_o;
1596
input   [`TC_DW-1:0]     t3_wb_dat_i;
1597
input                   t3_wb_ack_i;
1598
input                   t3_wb_err_i;
1599
 
1600
//
1601
// WB master i/f connecting target 4
1602
//
1603
output                  t4_wb_cyc_o;
1604
output                  t4_wb_stb_o;
1605
output                  t4_wb_cab_o;
1606
output  [`TC_AW-1:0]     t4_wb_adr_o;
1607
output  [`TC_BSW-1:0]    t4_wb_sel_o;
1608
output                  t4_wb_we_o;
1609
output  [`TC_DW-1:0]     t4_wb_dat_o;
1610
input   [`TC_DW-1:0]     t4_wb_dat_i;
1611
input                   t4_wb_ack_i;
1612
input                   t4_wb_err_i;
1613
 
1614
//
1615
// WB master i/f connecting target 5
1616
//
1617
output                  t5_wb_cyc_o;
1618
output                  t5_wb_stb_o;
1619
output                  t5_wb_cab_o;
1620
output  [`TC_AW-1:0]     t5_wb_adr_o;
1621
output  [`TC_BSW-1:0]    t5_wb_sel_o;
1622
output                  t5_wb_we_o;
1623
output  [`TC_DW-1:0]     t5_wb_dat_o;
1624
input   [`TC_DW-1:0]     t5_wb_dat_i;
1625
input                   t5_wb_ack_i;
1626
input                   t5_wb_err_i;
1627
 
1628
//
1629
// WB master i/f connecting target 6
1630
//
1631
output                  t6_wb_cyc_o;
1632
output                  t6_wb_stb_o;
1633
output                  t6_wb_cab_o;
1634
output  [`TC_AW-1:0]     t6_wb_adr_o;
1635
output  [`TC_BSW-1:0]    t6_wb_sel_o;
1636
output                  t6_wb_we_o;
1637
output  [`TC_DW-1:0]     t6_wb_dat_o;
1638
input   [`TC_DW-1:0]     t6_wb_dat_i;
1639
input                   t6_wb_ack_i;
1640
input                   t6_wb_err_i;
1641
 
1642
//
1643
// WB master i/f connecting target 7
1644
//
1645
output                  t7_wb_cyc_o;
1646
output                  t7_wb_stb_o;
1647
output                  t7_wb_cab_o;
1648
output  [`TC_AW-1:0]     t7_wb_adr_o;
1649
output  [`TC_BSW-1:0]    t7_wb_sel_o;
1650
output                  t7_wb_we_o;
1651
output  [`TC_DW-1:0]     t7_wb_dat_o;
1652
input   [`TC_DW-1:0]     t7_wb_dat_i;
1653
input                   t7_wb_ack_i;
1654
input                   t7_wb_err_i;
1655
 
1656
//
1657
// Internal wires & registers
1658
//
1659
wire    [`TC_IIN_W-1:0]  i0_in;
1660
wire    [`TC_TIN_W-1:0]  i0_out;
1661
wire    [`TC_IIN_W-1:0]  t0_out, t1_out,
1662
                        t2_out, t3_out,
1663
                        t4_out, t5_out,
1664
                        t6_out, t7_out;
1665
wire    [`TC_TIN_W-1:0]  t0_in, t1_in,
1666
                        t2_in, t3_in,
1667
                        t4_in, t5_in,
1668
                        t6_in, t7_in;
1669
wire    [7:0]            req_t;
1670
 
1671
//
1672
// Group WB initiator 0 i/f inputs and outputs
1673
//
1674
assign i0_in = {i0_wb_cyc_i, i0_wb_stb_i, i0_wb_cab_i, i0_wb_adr_i,
1675
                i0_wb_sel_i, i0_wb_we_i, i0_wb_dat_i};
1676
assign {i0_wb_dat_o, i0_wb_ack_o, i0_wb_err_o} = i0_out;
1677
 
1678
//
1679
// Group WB target 0 i/f inputs and outputs
1680
//
1681
assign {t0_wb_cyc_o, t0_wb_stb_o, t0_wb_cab_o, t0_wb_adr_o,
1682
                t0_wb_sel_o, t0_wb_we_o, t0_wb_dat_o} = t0_out;
1683
assign t0_in = {t0_wb_dat_i, t0_wb_ack_i, t0_wb_err_i};
1684
 
1685
//
1686
// Group WB target 1 i/f inputs and outputs
1687
//
1688
assign {t1_wb_cyc_o, t1_wb_stb_o, t1_wb_cab_o, t1_wb_adr_o,
1689
                t1_wb_sel_o, t1_wb_we_o, t1_wb_dat_o} = t1_out;
1690
assign t1_in = {t1_wb_dat_i, t1_wb_ack_i, t1_wb_err_i};
1691
 
1692
//
1693
// Group WB target 2 i/f inputs and outputs
1694
//
1695
assign {t2_wb_cyc_o, t2_wb_stb_o, t2_wb_cab_o, t2_wb_adr_o,
1696
                t2_wb_sel_o, t2_wb_we_o, t2_wb_dat_o} = t2_out;
1697
assign t2_in = {t2_wb_dat_i, t2_wb_ack_i, t2_wb_err_i};
1698
 
1699
//
1700
// Group WB target 3 i/f inputs and outputs
1701
//
1702
assign {t3_wb_cyc_o, t3_wb_stb_o, t3_wb_cab_o, t3_wb_adr_o,
1703
                t3_wb_sel_o, t3_wb_we_o, t3_wb_dat_o} = t3_out;
1704
assign t3_in = {t3_wb_dat_i, t3_wb_ack_i, t3_wb_err_i};
1705
 
1706
//
1707
// Group WB target 4 i/f inputs and outputs
1708
//
1709
assign {t4_wb_cyc_o, t4_wb_stb_o, t4_wb_cab_o, t4_wb_adr_o,
1710
                t4_wb_sel_o, t4_wb_we_o, t4_wb_dat_o} = t4_out;
1711
assign t4_in = {t4_wb_dat_i, t4_wb_ack_i, t4_wb_err_i};
1712
 
1713
//
1714
// Group WB target 5 i/f inputs and outputs
1715
//
1716
assign {t5_wb_cyc_o, t5_wb_stb_o, t5_wb_cab_o, t5_wb_adr_o,
1717
                t5_wb_sel_o, t5_wb_we_o, t5_wb_dat_o} = t5_out;
1718
assign t5_in = {t5_wb_dat_i, t5_wb_ack_i, t5_wb_err_i};
1719
 
1720
//
1721
// Group WB target 6 i/f inputs and outputs
1722
//
1723
assign {t6_wb_cyc_o, t6_wb_stb_o, t6_wb_cab_o, t6_wb_adr_o,
1724
                t6_wb_sel_o, t6_wb_we_o, t6_wb_dat_o} = t6_out;
1725
assign t6_in = {t6_wb_dat_i, t6_wb_ack_i, t6_wb_err_i};
1726
 
1727
//
1728
// Group WB target 7 i/f inputs and outputs
1729
//
1730
assign {t7_wb_cyc_o, t7_wb_stb_o, t7_wb_cab_o, t7_wb_adr_o,
1731
                t7_wb_sel_o, t7_wb_we_o, t7_wb_dat_o} = t7_out;
1732
assign t7_in = {t7_wb_dat_i, t7_wb_ack_i, t7_wb_err_i};
1733
 
1734
//
1735
// Assign to WB target i/f outputs
1736
//
1737
// Either inputs from the initiator are assigned or zeros.
1738
//
1739
assign t0_out = req_t[0] ? i0_in : {`TC_IIN_W{1'b0}};
1740
assign t1_out = req_t[1] ? i0_in : {`TC_IIN_W{1'b0}};
1741
assign t2_out = req_t[2] ? i0_in : {`TC_IIN_W{1'b0}};
1742
assign t3_out = req_t[3] ? i0_in : {`TC_IIN_W{1'b0}};
1743
assign t4_out = req_t[4] ? i0_in : {`TC_IIN_W{1'b0}};
1744
assign t5_out = req_t[5] ? i0_in : {`TC_IIN_W{1'b0}};
1745
assign t6_out = req_t[6] ? i0_in : {`TC_IIN_W{1'b0}};
1746
assign t7_out = req_t[7] ? i0_in : {`TC_IIN_W{1'b0}};
1747
 
1748
//
1749
// Assign to WB initiator i/f outputs
1750
//
1751
// Assign inputs from target to initiator outputs according to
1752
// which target is accessed. If there is no request for a target,
1753
// assign zeros.
1754
//
1755
assign i0_out = req_t[0] ? t0_in :
1756
                req_t[1] ? t1_in :
1757
                req_t[2] ? t2_in :
1758
                req_t[3] ? t3_in :
1759
                req_t[4] ? t4_in :
1760
                req_t[5] ? t5_in :
1761
                req_t[6] ? t6_in :
1762
                req_t[7] ? t7_in : {`TC_TIN_W{1'b0}};
1763
 
1764
//
1765
// Determine which target is being accessed.
1766
//
1767
assign req_t[0] = i0_wb_cyc_i & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t0_addr_w] == t0_addr);
1768
assign req_t[1] = i0_wb_cyc_i & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t1_addr);
1769
assign req_t[2] = i0_wb_cyc_i & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t2_addr);
1770
assign req_t[3] = i0_wb_cyc_i & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t3_addr);
1771
assign req_t[4] = i0_wb_cyc_i & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t4_addr);
1772
assign req_t[5] = i0_wb_cyc_i & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t5_addr);
1773
assign req_t[6] = i0_wb_cyc_i & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t6_addr);
1774
assign req_t[7] = i0_wb_cyc_i & (i0_wb_adr_i[`TC_AW-1:`TC_AW-t17_addr_w] == t7_addr);
1775
 
1776
endmodule

powered by: WebSVN 2.1.0

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