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

Subversion Repositories async_sdm_noc

[/] [async_sdm_noc/] [branches/] [init/] [vc/] [src/] [router.v] - Blame information for rev 40

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

Line No. Rev Author Line
1 40 wsong0210
/*
2
 Asynchronous SDM NoC
3
 (C)2011 Wei Song
4
 Advanced Processor Technologies Group
5
 Computer Science, the Univ. of Manchester, UK
6
 
7
 Authors:
8
 Wei Song     wsong83@gmail.com
9
 
10
 License: LGPL 3.0 or later
11
 
12
 Asynchronous VC router.
13
 
14
 History:
15
 05/04/2010  Initial version. <wsong83@gmail.com>
16
 02/06/2011  Clean up for opensource. <wsong83@gmail.com>
17
 
18
*/
19
 
20
module router (/*AUTOARG*/
21
   // Outputs
22
   sia, wia, nia, eia, lia, sic, wic, nic, eic, lic, so0, so1, so2,
23
   so3, wo0, wo1, wo2, wo3, no0, no1, no2, no3, eo0, eo1, eo2, eo3,
24
   lo0, lo1, lo2, lo3, soft, woft, noft, eoft, loft, sovc, wovc, novc,
25
   eovc, lovc, soca, woca, noca, eoca, loca,
26
   // Inputs
27
   si0, si1, si2, si3, wi0, wi1, wi2, wi3, ni0, ni1, ni2, ni3, ei0,
28
   ei1, ei2, ei3, li0, li1, li2, li3, sift, wift, nift, eift, lift,
29
   sivc, wivc, nivc, eivc, livc, sica, wica, nica, eica, lica, soa,
30
   woa, noa, eoa, loa, soc, woc, noc, eoc, loc, addrx, addry, rstn
31
   );
32
 
33
   parameter VCN = 2;           // number of VCs per direction
34
   parameter DW = 32;           // data width of an input port
35
   parameter PD = 1;            // the depth of a input VC buffer
36
   parameter FT = 3;            // the number of flit types, currently 3 (HD, DATA, TAIL)
37
 
38
   parameter FCPD = PD;
39
   parameter SCN = DW/2;
40
 
41
   // input ports
42
   input [SCN-1:0]    si0, si1, si2, si3;
43
   input [SCN-1:0]    wi0, wi1, wi2, wi3;
44
   input [SCN-1:0]    ni0, ni1, ni2, ni3;
45
   input [SCN-1:0]    ei0, ei1, ei2, ei3;
46
   input [SCN-1:0]    li0, li1, li2, li3;
47
   input [FT-1:0]     sift, wift, nift, eift, lift;
48
   input [VCN-1:0]    sivc, wivc, nivc, eivc, livc;
49
   output             sia, wia, nia, eia, lia;
50
   output [VCN-1:0]   sic, wic, nic, eic, lic;
51
   input [VCN-1:0]    sica, wica, nica, eica, lica;
52
 
53
   // output ports
54
   output [SCN-1:0]   so0, so1, so2, so3;
55
   output [SCN-1:0]   wo0, wo1, wo2, wo3;
56
   output [SCN-1:0]   no0, no1, no2, no3;
57
   output [SCN-1:0]   eo0, eo1, eo2, eo3;
58
   output [SCN-1:0]   lo0, lo1, lo2, lo3;
59
   output [FT-1:0]    soft, woft, noft, eoft, loft;
60
   output [VCN-1:0]   sovc, wovc, novc, eovc, lovc;
61
   input              soa, woa, noa, eoa, loa;
62
   input [VCN-1:0]    soc, woc, noc, eoc, loc;
63
   output [VCN-1:0]   soca, woca, noca, eoca, loca;
64
 
65
   // local address, in 1-of-4 format
66
   input [7:0]         addrx, addry;
67
   // active-low reset
68
   input              rstn;
69
 
70
   //----------------------------------
71
   // input to crossbar
72
   wire [VCN-1:0][SCN-1:0]     s2cb0, s2cb1, s2cb2, s2cb3;
73
   wire [VCN-1:0][SCN-1:0]     w2cb0, w2cb1, w2cb2, w2cb3;
74
   wire [VCN-1:0][SCN-1:0]     n2cb0, n2cb1, n2cb2, n2cb3;
75
   wire [VCN-1:0][SCN-1:0]     e2cb0, e2cb1, e2cb2, e2cb3;
76
   wire [VCN-1:0][SCN-1:0]     l2cb0, l2cb1, l2cb2, l2cb3;
77
   wire [VCN-1:0][FT-1:0]      s2cbt, w2cbt, n2cbt, e2cbt, l2cbt;
78
   wire [VCN-1:0][3:0]           s2cbrtg, n2cbrtg, l2cbrtg;
79
   wire [VCN-1:0][1:0]           w2cbrtg, e2cbrtg;
80
   wire [VCN-1:0]               s2cba, w2cba, n2cba, e2cba, l2cba;
81
 
82
   // VC requests
83
   wire [VCN-1:0][3:0] svcr, nvcr, lvcr;
84
   wire [VCN-1:0]      svcra, nvcra, lvcra;
85
   wire [VCN-1:0][1:0] wvcr, evcr;
86
   wire [VCN-1:0]      wvcra, evcra;
87
 
88
   // SW requests
89
   wire [VCN-1:0][1:0] siswr, wiswr, niswr, eiswr, liswr;
90
   wire [VCN-1:0][3:0] siswrt, niswrt, liswrt;
91
   wire [VCN-1:0][1:0] wiswrt, eiswrt;
92
 
93
   // crossbar to output
94
   wire [SCN-1:0]      cb2s0, cb2s1, cb2s2, cb2s3;
95
   wire [SCN-1:0]      cb2w0, cb2w1, cb2w2, cb2w3;
96
   wire [SCN-1:0]      cb2n0, cb2n1, cb2n2, cb2n3;
97
   wire [SCN-1:0]      cb2e0, cb2e1, cb2e2, cb2e3;
98
   wire [SCN-1:0]      cb2l0, cb2l1, cb2l2, cb2l3;
99
   wire [FT-1:0]       cb2st, cb2wt, cb2nt, cb2et, cb2lt;
100
   wire                cb2sa, cb2wa, cb2na, cb2ea, cb2la;
101
 
102
   // SW requests to VC arbiters in output buffers
103
   wire [VCN-1:0]      soswr, woswr, noswr, eoswr, loswr;
104
   wire [VCN-1:0]      soswa, woswa, noswa, eoswa, loswa;
105
 
106
   //-------------------------------------
107
   // south input buffer
108
   inpbuf #(.DW(DW), .VCN(VCN), .DIR(0), .SN(4), .PD(PD), .FT(FT))
109
   SIB (
110
        .dia   ( sia     ),
111
        .cor   ( sic     ),
112
        .do0   ( s2cb0   ),
113
        .do1   ( s2cb1   ),
114
        .do2   ( s2cb2   ),
115
        .do3   ( s2cb3   ),
116
        .dot   ( s2cbt   ),
117
        .dortg ( s2cbrtg ),
118
        .vcr   ( svcr    ),
119
        .swr   ( siswr   ),
120
        .di0   ( si0     ),
121
        .di1   ( si1     ),
122
        .di2   ( si2     ),
123
        .di3   ( si3     ),
124
        .dit   ( sift    ),
125
        .divc  ( sivc    ),
126
        .coa   ( sica    ),
127
        .doa   ( s2cba   ),
128
        .vcra  ( svcra   ),
129
        .swrt  ( siswrt  ),
130
        .addrx ( addrx   ),
131
        .addry ( addry   ),
132
        .rstn  ( rstn    )
133
        );
134
 
135
   // west input buffer
136
   inpbuf #(.DW(DW), .VCN(VCN), .DIR(1), .SN(2), .PD(PD), .FT(FT))
137
   WIB (
138
        .dia   ( wia     ),
139
        .cor   ( wic     ),
140
        .do0   ( w2cb0   ),
141
        .do1   ( w2cb1   ),
142
        .do2   ( w2cb2   ),
143
        .do3   ( w2cb3   ),
144
        .dot   ( w2cbt   ),
145
        .dortg ( w2cbrtg ),
146
        .vcr   ( wvcr    ),
147
        .swr   ( wiswr   ),
148
        .di0   ( wi0     ),
149
        .di1   ( wi1     ),
150
        .di2   ( wi2     ),
151
        .di3   ( wi3     ),
152
        .dit   ( wift    ),
153
        .divc  ( wivc    ),
154
        .coa   ( wica    ),
155
        .doa   ( w2cba   ),
156
        .vcra  ( wvcra   ),
157
        .swrt  ( wiswrt  ),
158
        .addrx ( addrx   ),
159
        .addry ( addry   ),
160
        .rstn  ( rstn    )
161
        );
162
 
163
   // north input buffer
164
   inpbuf #(.DW(DW), .VCN(VCN), .DIR(2), .SN(4), .PD(PD), .FT(FT))
165
   NIB (
166
        .dia   ( nia     ),
167
        .cor   ( nic     ),
168
        .do0   ( n2cb0   ),
169
        .do1   ( n2cb1   ),
170
        .do2   ( n2cb2   ),
171
        .do3   ( n2cb3   ),
172
        .dot   ( n2cbt   ),
173
        .dortg ( n2cbrtg ),
174
        .vcr   ( nvcr    ),
175
        .swr   ( niswr   ),
176
        .di0   ( ni0     ),
177
        .di1   ( ni1     ),
178
        .di2   ( ni2     ),
179
        .di3   ( ni3     ),
180
        .dit   ( nift    ),
181
        .divc  ( nivc    ),
182
        .coa   ( nica    ),
183
        .doa   ( n2cba   ),
184
        .vcra  ( nvcra   ),
185
        .swrt  ( niswrt  ),
186
        .addrx ( addrx   ),
187
        .addry ( addry   ),
188
        .rstn  ( rstn    )
189
        );
190
 
191
   // east input buffer
192
   inpbuf #(.DW(DW), .VCN(VCN), .DIR(3), .SN(2), .PD(PD), .FT(FT))
193
   EIB (
194
        .dia   ( eia     ),
195
        .cor   ( eic     ),
196
        .do0   ( e2cb0   ),
197
        .do1   ( e2cb1   ),
198
        .do2   ( e2cb2   ),
199
        .do3   ( e2cb3   ),
200
        .dot   ( e2cbt   ),
201
        .dortg ( e2cbrtg ),
202
        .vcr   ( evcr    ),
203
        .swr   ( eiswr   ),
204
        .di0   ( ei0     ),
205
        .di1   ( ei1     ),
206
        .di2   ( ei2     ),
207
        .di3   ( ei3     ),
208
        .dit   ( eift    ),
209
        .divc  ( eivc    ),
210
        .coa   ( eica    ),
211
        .doa   ( e2cba   ),
212
        .vcra  ( evcra   ),
213
        .swrt  ( eiswrt  ),
214
        .addrx ( addrx   ),
215
        .addry ( addry   ),
216
        .rstn  ( rstn    )
217
        );
218
 
219
   // local input buffer
220
   inpbuf #(.DW(DW), .VCN(VCN), .DIR(4), .SN(4), .PD(PD), .FT(FT))
221
   LIB (
222
        .dia   ( lia     ),
223
        .cor   ( lic     ),
224
        .do0   ( l2cb0   ),
225
        .do1   ( l2cb1   ),
226
        .do2   ( l2cb2   ),
227
        .do3   ( l2cb3   ),
228
        .dot   ( l2cbt   ),
229
        .dortg ( l2cbrtg ),
230
        .vcr   ( lvcr    ),
231
        .swr   ( liswr   ),
232
        .di0   ( li0     ),
233
        .di1   ( li1     ),
234
        .di2   ( li2     ),
235
        .di3   ( li3     ),
236
        .dit   ( lift    ),
237
        .divc  ( livc    ),
238
        .coa   ( lica    ),
239
        .doa   ( l2cba   ),
240
        .vcra  ( lvcra   ),
241
        .swrt  ( liswrt  ),
242
        .addrx ( addrx   ),
243
        .addry ( addry   ),
244
        .rstn  ( rstn    )
245
        );
246
 
247
   // south output buffer
248
   outpbuf #(.DW(DW), .VCN(VCN), .FT(FT), .FCPD(FCPD))
249
   SOB (
250
        .dia   ( cb2sa   ),
251
        .do0   ( so0     ),
252
        .do1   ( so1     ),
253
        .do2   ( so2     ),
254
        .do3   ( so3     ),
255
        .dot   ( soft    ),
256
        .dovc  ( sovc    ),
257
        .afc   ( soca    ),
258
        .vca   ( soswa   ),
259
        .di0   ( cb2s0   ),
260
        .di1   ( cb2s1   ),
261
        .di2   ( cb2s2   ),
262
        .di3   ( cb2s3   ),
263
        .dit   ( cb2st   ),
264
        .doa   ( soa     ),
265
        .credit( soc     ),
266
        .vcr   ( soswr   ),
267
        .rstn  ( rstn    )
268
        );
269
 
270
   // west output buffer
271
   outpbuf #(.DW(DW), .VCN(VCN), .FT(FT), .FCPD(FCPD))
272
   WOB (
273
        .dia   ( cb2wa   ),
274
        .do0   ( wo0     ),
275
        .do1   ( wo1     ),
276
        .do2   ( wo2     ),
277
        .do3   ( wo3     ),
278
        .dot   ( woft    ),
279
        .dovc  ( wovc    ),
280
        .afc   ( woca    ),
281
        .vca   ( woswa   ),
282
        .di0   ( cb2w0   ),
283
        .di1   ( cb2w1   ),
284
        .di2   ( cb2w2   ),
285
        .di3   ( cb2w3   ),
286
        .dit   ( cb2wt   ),
287
        .doa   ( woa     ),
288
        .credit( woc     ),
289
        .vcr   ( woswr   ),
290
        .rstn  ( rstn    )
291
        );
292
 
293
   // north output buffer
294
   outpbuf #(.DW(DW), .VCN(VCN), .FT(FT), .FCPD(FCPD))
295
   NOB (
296
        .dia   ( cb2na   ),
297
        .do0   ( no0     ),
298
        .do1   ( no1     ),
299
        .do2   ( no2     ),
300
        .do3   ( no3     ),
301
        .dot   ( noft    ),
302
        .dovc  ( novc    ),
303
        .afc   ( noca    ),
304
        .vca   ( noswa   ),
305
        .di0   ( cb2n0   ),
306
        .di1   ( cb2n1   ),
307
        .di2   ( cb2n2   ),
308
        .di3   ( cb2n3   ),
309
        .dit   ( cb2nt   ),
310
        .doa   ( noa     ),
311
        .credit( noc     ),
312
        .vcr   ( noswr   ),
313
        .rstn  ( rstn    )
314
        );
315
 
316
   // east output buffer
317
   outpbuf #(.DW(DW), .VCN(VCN), .FT(FT), .FCPD(FCPD))
318
   EOB (
319
        .dia   ( cb2ea   ),
320
        .do0   ( eo0     ),
321
        .do1   ( eo1     ),
322
        .do2   ( eo2     ),
323
        .do3   ( eo3     ),
324
        .dot   ( eoft    ),
325
        .dovc  ( eovc    ),
326
        .afc   ( eoca    ),
327
        .vca   ( eoswa   ),
328
        .di0   ( cb2e0   ),
329
        .di1   ( cb2e1   ),
330
        .di2   ( cb2e2   ),
331
        .di3   ( cb2e3   ),
332
        .dit   ( cb2et   ),
333
        .doa   ( eoa     ),
334
        .credit( eoc     ),
335
        .vcr   ( eoswr   ),
336
        .rstn  ( rstn    )
337
        );
338
 
339
   // east output buffer
340
   outpbuf #(.DW(DW), .VCN(VCN), .FT(FT), .FCPD(FCPD))
341
   LOB (
342
        .dia   ( cb2la   ),
343
        .do0   ( lo0     ),
344
        .do1   ( lo1     ),
345
        .do2   ( lo2     ),
346
        .do3   ( lo3     ),
347
        .dot   ( loft    ),
348
        .dovc  ( lovc    ),
349
        .afc   ( loca    ),
350
        .vca   ( loswa   ),
351
        .di0   ( cb2l0   ),
352
        .di1   ( cb2l1   ),
353
        .di2   ( cb2l2   ),
354
        .di3   ( cb2l3   ),
355
        .dit   ( cb2lt   ),
356
        .doa   ( loa     ),
357
        .credit( loc     ),
358
        .vcr   ( loswr   ),
359
        .rstn  ( rstn    )
360
        );
361
 
362
   // VC allocator
363
   vcalloc #(.VCN(VCN))
364
   VCA (
365
        .svcra   ( svcra   ),
366
        .wvcra   ( wvcra   ),
367
        .nvcra   ( nvcra   ),
368
        .evcra   ( evcra   ),
369
        .lvcra   ( lvcra   ),
370
        .sswa    ( siswrt  ),
371
        .wswa    ( wiswrt  ),
372
        .nswa    ( niswrt  ),
373
        .eswa    ( eiswrt  ),
374
        .lswa    ( liswrt  ),
375
        .sosr    ( soswr   ),
376
        .wosr    ( woswr   ),
377
        .nosr    ( noswr   ),
378
        .eosr    ( eoswr   ),
379
        .losr    ( loswr   ),
380
        .svcr    ( svcr    ),
381
        .nvcr    ( nvcr    ),
382
        .lvcr    ( lvcr    ),
383
        .wvcr    ( wvcr    ),
384
        .evcr    ( evcr    ),
385
        .sswr    ( siswr   ),
386
        .wswr    ( wiswr   ),
387
        .nswr    ( niswr   ),
388
        .eswr    ( eiswr   ),
389
        .lswr    ( liswr   ),
390
        .sosa    ( soswa   ),
391
        .wosa    ( woswa   ),
392
        .nosa    ( noswa   ),
393
        .eosa    ( eoswa   ),
394
        .losa    ( loswa   ),
395
        .rstn    ( rstn    )
396
        );
397
 
398
   // crossbar
399
   dcb_vc #(.DW(DW), .FT(FT), .VCN(VCN))
400
   CB (
401
       .dia   ( {l2cba, e2cba, n2cba, w2cba, s2cba} ),
402
       .do0   ( {cb2l0, cb2e0, cb2n0, cb2w0, cb2s0} ),
403
       .do1   ( {cb2l1, cb2e1, cb2n1, cb2w1, cb2s1} ),
404
       .do2   ( {cb2l2, cb2e2, cb2n2, cb2w2, cb2s2} ),
405
       .do3   ( {cb2l3, cb2e3, cb2n3, cb2w3, cb2s3} ),
406
       .dot   ( {cb2lt, cb2et, cb2nt, cb2wt, cb2st} ),
407
       .di0   ( {l2cb0, e2cb0, n2cb0, w2cb0, s2cb0} ),
408
       .di1   ( {l2cb1, e2cb1, n2cb1, w2cb1, s2cb1} ),
409
       .di2   ( {l2cb2, e2cb2, n2cb2, w2cb2, s2cb2} ),
410
       .di3   ( {l2cb3, e2cb3, n2cb3, w2cb3, s2cb3} ),
411
       .dit   ( {l2cbt, e2cbt, n2cbt, w2cbt, s2cbt} ),
412
       .srtg  ( s2cbrtg                             ),
413
       .nrtg  ( n2cbrtg                             ),
414
       .lrtg  ( l2cbrtg                             ),
415
       .wrtg  ( w2cbrtg                             ),
416
       .ertg  ( e2cbrtg                             ),
417
       .doa   ( {cb2la, cb2ea, cb2na, cb2wa, cb2sa} )
418
       );
419
 
420
endmodule // router
421
 
422
 
423
 
424
 

powered by: WebSVN 2.1.0

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