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

Subversion Repositories async_sdm_noc

[/] [async_sdm_noc/] [branches/] [clos_opt/] [clos_opt/] [src/] [clos_buf.v] - Blame information for rev 75

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

Line No. Rev Author Line
1 71 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
 Buffered Clos switch for SDM-Clos routers
13
 *** SystemVerilog is used ***
14
 
15
 History:
16
 09/07/2011  Initial version. <wsong83@gmail.com>
17
 
18
*/
19
 
20
// the router structure definitions
21
`include "define.v"
22
 
23 74 wsong0210
module clos (/*AUTOARG*/
24
   // Outputs
25
   so0, so1, so2, so3, wo0, wo1, wo2, wo3, no0, no1, no2, no3, eo0,
26
   eo1, eo2, eo3, lo0, lo1, lo2, lo3, so4, wo4, no4, eo4, lo4, sia,
27
   wia, nia, eia, lia,
28
   // Inputs
29
   si0, si1, si2, si3, wi0, wi1, wi2, wi3, ni0, ni1, ni2, ni3, ei0,
30
   ei1, ei2, ei3, li0, li1, li2, li3, si4, wi4, ni4, ei4, li4, soa,
31
   woa, noa, eoa, loa, soa4, woa4, noa4, eoa4, loa4, sdec, ndec, ldec,
32 75 wsong0210
   wdec, edec, rst_n
33 74 wsong0210
   );
34 71 wsong0210
 
35
   parameter MN = 2;            // number of CMs
36
   parameter NN = 2;            // number of ports in an IM or OM, equ. to number of virtual circuits
37
   parameter DW = 8;            // datawidth of a single virtual circuit/port
38
   parameter SCN = DW/2;        // number of 1-of-4 sub-channels in one port
39
 
40
   input [NN-1:0][SCN-1:0]     si0, si1, si2, si3; // south input [0], X+1
41
   input [NN-1:0][SCN-1:0]     wi0, wi1, wi2, wi3; // west input [1], Y-1
42
   input [NN-1:0][SCN-1:0]     ni0, ni1, ni2, ni3; // north input [2], X-1
43
   input [NN-1:0][SCN-1:0]     ei0, ei1, ei2, ei3; // east input [3], Y+1
44
   input [NN-1:0][SCN-1:0]     li0, li1, li2, li3; // local input
45
   output [NN-1:0][SCN-1:0]    so0, so1, so2, so3; // south output
46
   output [NN-1:0][SCN-1:0]    wo0, wo1, wo2, wo3; // west output
47
   output [NN-1:0][SCN-1:0]    no0, no1, no2, no3; // north output
48
   output [NN-1:0][SCN-1:0]    eo0, eo1, eo2, eo3; // east output
49
   output [NN-1:0][SCN-1:0]    lo0, lo1, lo2, lo3; // local output
50
 
51
   // eof bits and ack lines
52
`ifdef ENABLE_CHANNEL_SLICING
53
   input [NN-1:0][SCN-1:0]     si4, wi4, ni4, ei4, li4;
54
   output [NN-1:0][SCN-1:0]    so4, wo4, no4, eo4, lo4;
55
   output [NN-1:0][SCN-1:0]    sia, wia, nia, eia, lia;
56
   input [NN-1:0][SCN-1:0]     soa, woa, noa, eoa, loa;
57 74 wsong0210
// `ifdef ENABLE_BUFFERED_CLOS
58 71 wsong0210
   input [NN-1:0][SCN-1:0]     soa4, woa4, noa4, eoa4, loa4; // the eof ack from output buffers
59 74 wsong0210
// `endif
60 71 wsong0210
`else
61
   input [NN-1:0]               si4, wi4, ni4, ei4, li4;
62
   output [NN-1:0]              so4, wo4, no4, eo4, lo4;
63
   output [NN-1:0]              sia, wia, nia, eia, lia;
64
   input [NN-1:0]               soa, woa, noa, eoa, loa;
65 74 wsong0210
// `ifdef ENABLE_BUFFERED_CLOS
66 71 wsong0210
   input [NN-1:0]               soa4, woa4, noa4, eoa4, loa4; // the eof ack from output buffers
67 74 wsong0210
// `endif
68 71 wsong0210
`endif // !`ifdef ENABLE_CHANNEL_SLICING
69
 
70
   input [NN-1:0][3:0]           sdec, ndec, ldec; // the routing requests
71
   input [NN-1:0][1:0]         wdec, edec;         // the routing requests
72
 
73 75 wsong0210
   input                       rst_n; // global active low reset
74
 
75 71 wsong0210
   genvar                      i,j;
76
 
77
 
78
   // the IMs
79
   im #(.MN(MN), .NN(NN), .DW(DW), .SN(4))
80
   SIM (
81
        .do0   ( sim0   ),
82
        .do1   ( sim1   ),
83
        .do2   ( sim2   ),
84
        .do3   ( sim3   ),
85
        .deco  ( simdec ),
86
        .dia   ( sia    ),
87
        .do4   ( sim4   ),
88
        .di0   ( si0    ),
89
        .di1   ( si1    ),
90
        .di2   ( si2    ),
91
        .di3   ( si3    ),
92
        .deci  ( sdec   ),
93
        .di4   ( si4    ),
94
        .doa   ( sima   ),
95
`ifndef ENABLE_CRRD
96
        .cms   ( sims   ),
97
`endif
98
        .rst_n ( rst_n  )
99
        );
100
 
101
   im #(.MN(MN), .NN(NN), .DW(DW), .SN(2))
102
   WIM (
103
        .do0   ( wim0   ),
104
        .do1   ( wim1   ),
105
        .do2   ( wim2   ),
106
        .do3   ( wim3   ),
107
        .deco  ( wimdec ),
108
        .dia   ( wia    ),
109
        .do4   ( wim4   ),
110
        .di0   ( wi0    ),
111
        .di1   ( wi1    ),
112
        .di2   ( wi2    ),
113
        .di3   ( wi3    ),
114
        .deci  ( wdec   ),
115
        .di4   ( wi4    ),
116
        .doa   ( wima   ),
117
`ifndef ENABLE_CRRD
118
        .cms   ( wims   ),
119
`endif
120
        .rst_n ( rst_n  )
121
        );
122
 
123
   im #(.MN(MN), .NN(NN), .DW(DW), .SN(4))
124
   NIM (
125
        .do0   ( nim0   ),
126
        .do1   ( nim1   ),
127
        .do2   ( nim2   ),
128
        .do3   ( nim3   ),
129
        .deco  ( nimdec ),
130
        .dia   ( nia    ),
131
        .do4   ( nim4   ),
132
        .di0   ( ni0    ),
133
        .di1   ( ni1    ),
134
        .di2   ( ni2    ),
135
        .di3   ( ni3    ),
136
        .deci  ( ndec   ),
137
        .di4   ( ni4    ),
138
        .doa   ( nima   ),
139
`ifndef ENABLE_CRRD
140
        .cms   ( nims   ),
141
`endif
142
        .rst_n ( rst_n  )
143
        );
144
 
145
   im #(.MN(MN), .NN(NN), .DW(DW), .SN(2))
146
   EIM (
147
        .do0   ( eim0   ),
148
        .do1   ( eim1   ),
149
        .do2   ( eim2   ),
150
        .do3   ( eim3   ),
151
        .deco  ( eimdec ),
152
        .dia   ( eia    ),
153
        .do4   ( eim4   ),
154
        .di0   ( ei0    ),
155
        .di1   ( ei1    ),
156
        .di2   ( ei2    ),
157
        .di3   ( ei3    ),
158
        .deci  ( edec   ),
159
        .di4   ( ei4    ),
160
        .doa   ( eima   ),
161
`ifndef ENABLE_CRRD
162
        .cms   ( eims   ),
163
`endif
164
        .rst_n ( rst_n  )
165
        );
166
 
167
   im #(.MN(MN), .NN(NN), .DW(DW), .SN(4))
168
   LIM (
169
        .do0   ( lim0   ),
170
        .do1   ( lim1   ),
171
        .do2   ( lim2   ),
172
        .do3   ( lim3   ),
173
        .deco  ( limdec ),
174
        .dia   ( lia    ),
175
        .do4   ( lim4   ),
176
        .di0   ( li0    ),
177
        .di1   ( li1    ),
178
        .di2   ( li2    ),
179
        .di3   ( li3    ),
180
        .deci  ( ldec   ),
181
        .di4   ( li4    ),
182
        .doa   ( lima   ),
183
`ifndef ENABLE_CRRD
184
        .cms   ( lims   ),
185
`endif
186
        .rst_n ( rst_n  )
187
        );
188
 
189
   // data wire shuffle
190
   // the CMs
191
   generate
192
      for(i=0; i<MN; i++) begin:CMSH
193
         assign cmi0[i][0] = sim0[i];
194
         assign cmi1[i][0] = sim1[i];
195
         assign cmi2[i][0] = sim2[i];
196
         assign cmi3[i][0] = sim3[i];
197
         assign sima[i] = cmia[i][0];
198
         assign sima4[i] = cmia[i][0];
199
 
200
         assign cmi0[i][1] = wim0[i];
201
         assign cmi1[i][1] = wim1[i];
202
         assign cmi2[i][1] = wim2[i];
203
         assign cmi3[i][1] = wim3[i];
204
         assign wima[i] = cmia[i][1];
205
         assign wima4[i] = cmia[i][1];
206
 
207
         assign cmi0[i][2] = nim0[i];
208
         assign cmi1[i][2] = nim1[i];
209
         assign cmi2[i][2] = nim2[i];
210
         assign cmi3[i][2] = nim3[i];
211
         assign nima[i] = cmia[i][2];
212
         assign nima4[i] = cmia[i][2];
213
 
214
         assign cmi0[i][3] = eim0[i];
215
         assign cmi1[i][3] = eim1[i];
216
         assign cmi2[i][3] = eim2[i];
217
         assign cmi3[i][3] = eim3[i];
218
         assign eima[i] = cmia[i][3];
219
         assign eima4[i] = cmia[i][3];
220
 
221
         assign cmi0[i][4] = lim0[i];
222
         assign cmi1[i][4] = lim1[i];
223
         assign cmi2[i][4] = lim2[i];
224
         assign cmi3[i][4] = lim3[i];
225
         assign lima[i] = cmia[i][4];
226
         assign lima4[i] = cmia[i][4];
227
 
228
         cm #(.KN(5), .DW(DW))
229
         CMSW (
230
               .do0   ( cmo0[i]  ),
231
               .do1   ( cmo1[i]  ),
232
               .do2   ( cmo2[i]  ),
233
               .do3   ( cmo3[i]  ),
234
               .dia   ( cmia[i]  ),
235
               .do4   ( cmo4[i]  ),
236
               .di0   ( cmi0[i]  ),
237
               .di1   ( cmi1[i]  ),
238
               .di2   ( cmi2[i]  ),
239
               .di3   ( cmi3[i]  ),
240
               .sdec  ( sdec[i]  ),
241
               .ndec  ( ndec[i]  ),
242
               .ldec  ( ldec[i]  ),
243
               .wdec  ( wdec[i]  ),
244
               .edec  ( edec[i]  ),
245
               .di4   ( cmi4[i]  ),
246
               .doa   ( cmoa[i]  ),
247
               .doa4  ( cmoa4[i] ),
248
`ifndef ENABLE_CRRD
249
               .cms   ( cms[i]   ),
250
`endif
251
               .rst_n ( rst_n    )
252
               );
253
 
254 72 wsong0210
         assign so0[i] = cmo0[i][0];
255
         assign so1[i] = cmo1[i][0];
256
         assign so2[i] = cmo2[i][0];
257
         assign so3[i] = cmo3[i][0];
258
         assign cmoa[i][0] = soa[i];
259
         assign cmoa[i][0] = soa4[i];
260
 
261
         assign wo0[i] = cmo0[i][1];
262
         assign wo1[i] = cmo1[i][1];
263
         assign wo2[i] = cmo2[i][1];
264
         assign wo3[i] = cmo3[i][1];
265
         assign cmoa[i][1] = woa[i];
266
         assign cmoa[i][1] = woa4[i];
267
 
268
         assign no0[i] = cmo0[i][2];
269
         assign no1[i] = cmo1[i][2];
270
         assign no2[i] = cmo2[i][2];
271
         assign no3[i] = cmo3[i][2];
272
         assign cmoa[i][2] = noa[i];
273
         assign cmoa[i][2] = noa4[i];
274
 
275
         assign eo0[i] = cmo0[i][3];
276
         assign eo1[i] = cmo1[i][3];
277
         assign eo2[i] = cmo2[i][3];
278
         assign eo3[i] = cmo3[i][3];
279
         assign cmoa[i][3] = eoa[i];
280
         assign cmoa[i][3] = eoa4[i];
281
 
282
         assign lo0[i] = cmo0[i][4];
283
         assign lo1[i] = cmo1[i][4];
284
         assign lo2[i] = cmo2[i][4];
285
         assign lo3[i] = cmo3[i][4];
286
         assign cmoa[i][4] = loa[i];
287
         assign cmoa[i][4] = loa4[i];
288
 
289
      end
290
   endgenerate
291 71 wsong0210
 
292 72 wsong0210
 
293
endmodule // clos

powered by: WebSVN 2.1.0

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