OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [rtl/] [src_topolgy/] [custom1/] [Tcustom1Rcustom_look_ahead_routing.v] - Blame information for rev 56

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
 
2
/**************************************************************************
3
**      WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
4
**      OVERWRITTEN AND LOST. Rename this file if you wish to do any modification.
5
****************************************************************************/
6
 
7
 
8
/**********************************************************************
9 56 alirezamon
**      File: /home/alireza/work/git/pronoc/mpsoc/rtl/src_topolgy/custom1/Tcustom1Rcustom_look_ahead_routing.v
10 48 alirezamon
**
11 54 alirezamon
**      Copyright (C) 2014-2021  Alireza Monemi
12 48 alirezamon
**
13 56 alirezamon
**      This file is part of ProNoC 2.1.0
14 48 alirezamon
**
15
**      ProNoC ( stands for Prototype Network-on-chip)  is free software:
16
**      you can redistribute it and/or modify it under the terms of the GNU
17
**      Lesser General Public License as published by the Free Software Foundation,
18
**      either version 2 of the License, or (at your option) any later version.
19
**
20
**      ProNoC is distributed in the hope that it will be useful, but WITHOUT
21
**      ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
22
**      or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
23
**      Public License for more details.
24
**
25
**      You should have received a copy of the GNU Lesser General Public
26
**      License along with ProNoC. If not, see <http:**www.gnu.org/licenses/>.
27
******************************************************************************/
28
 
29 54 alirezamon
 
30
 `include "pronoc_def.v"
31 48 alirezamon
/*******************
32
*  Tcustom1Rcustom_look_ahead_routing
33
*******************/
34
module Tcustom1Rcustom_look_ahead_routing  #(
35
        parameter RAw = 3,
36
        parameter EAw = 3,
37
        parameter DSTPw=4
38
)
39
(
40
        reset,
41
        clk,
42
        current_r_addr,
43
        dest_e_addr,
44
        src_e_addr,
45
        destport
46
);
47
 
48
        input   [RAw-1   :0] current_r_addr;
49
        input   [EAw-1   :0] dest_e_addr;
50
        input   [EAw-1   :0] src_e_addr;
51
        output  [DSTPw-1 :0] destport;
52
        input reset,clk;
53
 
54
        reg [EAw-1   :0] dest_e_addr_delay;
55
        reg [EAw-1   :0] src_e_addr_delay;
56
 
57 54 alirezamon
        always @ (`pronoc_clk_reset_edge )begin
58
        if(`pronoc_reset)begin
59 48 alirezamon
                        dest_e_addr_delay<={EAw{1'b0}};
60
                        src_e_addr_delay<={EAw{1'b0}};
61
                end else begin
62
                        dest_e_addr_delay<=dest_e_addr;
63
                        src_e_addr_delay<=src_e_addr;
64
                end
65
        end
66
 
67
        Tcustom1Rcustom_look_ahead_routing_comb  #(
68
                .RAw(RAw),
69
                .EAw(EAw),
70
                .DSTPw(DSTPw)
71
        )
72
        lkp_cmb
73
        (
74
                .current_r_addr(current_r_addr),
75
                .dest_e_addr(dest_e_addr_delay),
76
                .src_e_addr(src_e_addr_delay),
77
                .destport(destport)
78
        );
79
 
80
 
81
 
82
endmodule
83
 
84
/*******************
85
*  Tcustom1Rcustom_look_ahead_routing_comb
86
*******************/
87
 
88
 module Tcustom1Rcustom_look_ahead_routing_comb  #(
89
        parameter RAw = 3,
90
        parameter EAw = 3,
91
        parameter DSTPw=4
92
)
93
(
94
        current_r_addr,
95
        dest_e_addr,
96
        src_e_addr,
97
        destport
98
);
99
 
100
        input   [RAw-1   :0] current_r_addr;
101
        input   [EAw-1   :0] dest_e_addr;
102
        input   [EAw-1   :0] src_e_addr;
103
        output reg [DSTPw-1 :0] destport;
104
 
105
localparam [EAw-1 : 0]   E0=0;
106
localparam [EAw-1 : 0]   E1=1;
107
localparam [EAw-1 : 0]   E2=2;
108
localparam [EAw-1 : 0]   E3=3;
109
localparam [EAw-1 : 0]   E4=4;
110
localparam [EAw-1 : 0]   E5=5;
111
localparam [EAw-1 : 0]   E6=6;
112
localparam [EAw-1 : 0]   E7=7;
113
localparam [EAw-1 : 0]   E8=8;
114
localparam [EAw-1 : 0]   E9=9;
115
localparam [EAw-1 : 0]   E10=10;
116
localparam [EAw-1 : 0]   E11=11;
117
localparam [EAw-1 : 0]   E12=12;
118
localparam [EAw-1 : 0]   E13=13;
119
localparam [EAw-1 : 0]   E14=14;
120
localparam [EAw-1 : 0]   E15=15;
121
 
122
 
123
        always@(*)begin
124
                destport=0;
125
                case(current_r_addr) //current_r_addr of each individual router is fixed. So this CASE will be optimized by the synthesizer for each router. 
126
                0: begin
127
                        case({src_e_addr,dest_e_addr})
128
                        {E0,E9},{E0,E10}: begin
129
                                destport= 0;
130
                        end
131
                        {E0,E2},{E0,E3},{E0,E8},{E0,E11},{E0,E12}: begin
132
                                destport= 1;
133
                        end
134
                        {E0,E1},{E0,E4},{E0,E5},{E0,E6},{E0,E7},{E0,E13},{E0,E14},{E0,E15}: begin
135
                                destport= 2;
136
                        end
137
                        default: begin
138
                                destport= {DSTPw{1'bX}};
139
                        end
140
                        endcase
141
                end//0
142
                1: begin
143
                        case({src_e_addr,dest_e_addr})
144
                        {E1,E2},{E1,E7},{E2,E7}: begin
145
                                destport= 0;
146
                        end
147
                        {E1,E3},{E1,E4},{E1,E5},{E1,E6},{E1,E8},{E1,E9},{E1,E11},{E1,E12},{E1,E13},{E1,E14},{E1,E15},{E2,E9},{E2,E12}: begin
148
                                destport= 1;
149
                        end
150
                        {E1,E0},{E1,E10},{E2,E0},{E2,E10}: begin
151
                                destport= 2;
152
                        end
153
                        default: begin
154
                                destport= {DSTPw{1'bX}};
155
                        end
156
                        endcase
157
                end//1
158
                2: begin
159
                        case({src_e_addr,dest_e_addr})
160
                        {E1,E11},{E2,E1},{E2,E11}: begin
161
                                destport= 0;
162
                        end
163
                        {E1,E5},{E1,E6},{E1,E13},{E1,E14},{E2,E0},{E2,E4},{E2,E5},{E2,E6},{E2,E7},{E2,E8},{E2,E9},{E2,E10},{E2,E12},{E2,E13},{E2,E14},{E2,E15}: begin
164
                                destport= 1;
165
                        end
166
                        {E1,E3},{E2,E3}: begin
167
                                destport= 3;
168
                        end
169
                        default: begin
170
                                destport= {DSTPw{1'bX}};
171
                        end
172
                        endcase
173
                end//2
174
                3: begin
175
                        case({src_e_addr,dest_e_addr})
176
                        {E3,E4},{E3,E11}: begin
177
                                destport= 0;
178
                        end
179
                        {E3,E1},{E3,E6},{E3,E7},{E3,E8},{E3,E10},{E3,E12},{E3,E13},{E3,E14}: begin
180
                                destport= 1;
181
                        end
182
                        {E3,E2}: begin
183
                                destport= 2;
184
                        end
185
                        {E3,E0},{E3,E5},{E3,E9},{E3,E15}: begin
186
                                destport= 3;
187
                        end
188
                        default: begin
189
                                destport= {DSTPw{1'bX}};
190
                        end
191
                        endcase
192
                end//3
193
                4: begin
194
                        case({src_e_addr,dest_e_addr})
195
                        {E3,E13},{E4,E3},{E4,E13},{E5,E3},{E6,E3},{E7,E3},{E8,E3},{E9,E3},{E10,E3},{E12,E3},{E13,E3},{E14,E3},{E15,E3}: begin
196
                                destport= 0;
197
                        end
198
                        {E4,E2},{E4,E11},{E4,E14}: begin
199
                                destport= 1;
200
                        end
201
                        {E3,E0},{E3,E5},{E3,E9},{E3,E15},{E4,E0},{E4,E5},{E4,E9},{E4,E12},{E4,E15}: begin
202
                                destport= 2;
203
                        end
204
                        {E3,E6},{E4,E6}: begin
205
                                destport= 3;
206
                        end
207
                        {E3,E1},{E3,E7},{E3,E8},{E3,E14},{E4,E1},{E4,E7},{E4,E8},{E4,E10}: begin
208
                                destport= 4;
209
                        end
210
                        default: begin
211
                                destport= {DSTPw{1'bX}};
212
                        end
213
                        endcase
214
                end//4
215
                5: begin
216
                        case({src_e_addr,dest_e_addr})
217
                        {E0,E6},{E0,E15},{E3,E9},{E3,E15},{E4,E9},{E4,E15},{E5,E6},{E5,E9},{E5,E15},{E6,E9},{E6,E15},{E9,E6},{E9,E15},{E13,E9},{E14,E9},{E15,E9}: begin
218
                                destport= 0;
219
                        end
220
                        {E0,E4},{E0,E13},{E4,E12},{E5,E1},{E5,E2},{E5,E3},{E5,E4},{E5,E7},{E5,E8},{E5,E10},{E5,E12},{E5,E13},{E5,E14},{E6,E1},{E6,E7},{E6,E8},{E6,E10},{E6,E12},{E9,E3},{E9,E4},{E9,E13},{E9,E14}: begin
221
                                destport= 1;
222
                        end
223
                        {E0,E14},{E5,E11},{E6,E2},{E6,E11},{E6,E14},{E9,E2},{E9,E11}: begin
224
                                destport= 2;
225
                        end
226
                        {E3,E0},{E4,E0},{E5,E0},{E6,E0},{E11,E0},{E13,E0},{E15,E0}: begin
227
                                destport= 3;
228
                        end
229
                        default: begin
230
                                destport= {DSTPw{1'bX}};
231
                        end
232
                        endcase
233
                end//5
234
                6: begin
235
                        case({src_e_addr,dest_e_addr})
236
                        {E0,E13},{E3,E5},{E4,E5},{E5,E13},{E6,E5},{E6,E13},{E9,E13}: begin
237
                                destport= 0;
238
                        end
239
                        {E3,E15},{E4,E12},{E4,E15},{E6,E1},{E6,E2},{E6,E7},{E6,E8},{E6,E10},{E6,E11},{E6,E12},{E6,E14},{E6,E15}: begin
240
                                destport= 1;
241
                        end
242
                        {E0,E4},{E5,E3},{E5,E4},{E6,E3},{E6,E4},{E9,E3},{E9,E4}: begin
243
                                destport= 2;
244
                        end
245
                        {E3,E0},{E3,E9},{E4,E0},{E4,E9},{E6,E0},{E6,E9}: begin
246
                                destport= 3;
247
                        end
248
                        {E4,E2},{E4,E11},{E4,E14},{E5,E2},{E5,E14},{E9,E14}: begin
249
                                destport= 4;
250
                        end
251
                        default: begin
252
                                destport= {DSTPw{1'bX}};
253
                        end
254
                        endcase
255
                end//6
256
                7: begin
257
                        case({src_e_addr,dest_e_addr})
258
                        {E0,E1},{E1,E8},{E1,E10},{E2,E10},{E3,E1},{E3,E10},{E4,E1},{E4,E10},{E5,E1},{E6,E1},{E7,E1},{E7,E8},{E7,E10},{E8,E1},{E9,E1},{E10,E1},{E11,E1},{E11,E10},{E12,E1},{E13,E1},{E13,E10},{E14,E1},{E14,E10},{E15,E1}: begin
259
                                destport= 0;
260
                        end
261
                        {E1,E9},{E1,E12},{E1,E15},{E2,E9},{E2,E12},{E7,E9},{E7,E12}: begin
262
                                destport= 1;
263
                        end
264
                        {E1,E4},{E7,E2},{E7,E3},{E7,E4},{E7,E5},{E7,E6},{E7,E11},{E7,E13},{E7,E14},{E7,E15}: begin
265
                                destport= 2;
266
                        end
267
                        {E1,E0},{E2,E0},{E7,E0},{E14,E0}: begin
268
                                destport= 3;
269
                        end
270
                        default: begin
271
                                destport= {DSTPw{1'bX}};
272
                        end
273
                        endcase
274
                end//7
275
                8: begin
276
                        case({src_e_addr,dest_e_addr})
277
                        {E1,E12},{E2,E12},{E3,E7},{E4,E7},{E7,E12},{E7,E14},{E8,E7},{E8,E12},{E8,E14},{E9,E7},{E11,E7},{E13,E7},{E14,E7}: begin
278
                                destport= 0;
279
                        end
280
                        {E1,E15},{E7,E5},{E7,E15},{E8,E4},{E8,E5},{E8,E15}: begin
281
                                destport= 1;
282
                        end
283
                        {E1,E4},{E1,E9},{E2,E9},{E3,E10},{E4,E10},{E7,E3},{E7,E4},{E7,E6},{E7,E9},{E7,E13},{E8,E0},{E8,E3},{E8,E6},{E8,E9},{E8,E13},{E11,E10},{E13,E10},{E14,E0},{E14,E10}: begin
284
                                destport= 2;
285
                        end
286
                        {E3,E1},{E4,E1},{E8,E1},{E8,E10},{E9,E1},{E11,E1},{E13,E1},{E14,E1}: begin
287
                                destport= 3;
288
                        end
289
                        {E7,E2},{E7,E11},{E8,E2},{E8,E11}: begin
290
                                destport= 4;
291
                        end
292
                        default: begin
293
                                destport= {DSTPw{1'bX}};
294
                        end
295
                        endcase
296
                end//8
297
                9: begin
298
                        case({src_e_addr,dest_e_addr})
299
                        {E0,E5},{E0,E12},{E3,E0},{E4,E0},{E5,E0},{E6,E0},{E8,E0},{E9,E0},{E9,E5},{E9,E12},{E11,E0},{E12,E0},{E13,E0},{E15,E0}: begin
300
                                destport= 0;
301
                        end
302
                        {E0,E11},{E0,E14},{E0,E15},{E9,E2},{E9,E11},{E9,E15}: begin
303
                                destport= 1;
304
                        end
305
                        {E0,E4},{E0,E6},{E0,E13},{E9,E3},{E9,E4},{E9,E6},{E9,E13},{E9,E14}: begin
306
                                destport= 2;
307
                        end
308
                        {E9,E10}: begin
309
                                destport= 3;
310
                        end
311
                        {E0,E8},{E9,E1},{E9,E7},{E9,E8}: begin
312
                                destport= 4;
313
                        end
314
                        default: begin
315
                                destport= {DSTPw{1'bX}};
316
                        end
317
                        endcase
318
                end//9
319
                10: begin
320
                        case({src_e_addr,dest_e_addr})
321
                        {E0,E7},{E1,E0},{E2,E0},{E5,E7},{E6,E7},{E7,E0},{E10,E0},{E10,E7},{E10,E12},{E12,E7},{E14,E0},{E15,E7}: begin
322
                                destport= 0;
323
                        end
324
                        {E0,E2},{E0,E3},{E10,E2},{E10,E3},{E10,E4},{E10,E5},{E10,E6},{E10,E11},{E10,E13},{E10,E14},{E10,E15}: begin
325
                                destport= 1;
326
                        end
327
                        {E10,E9}: begin
328
                                destport= 2;
329
                        end
330
                        {E0,E1},{E5,E1},{E6,E1},{E10,E1},{E12,E1},{E15,E1}: begin
331
                                destport= 3;
332
                        end
333
                        {E10,E8}: begin
334
                                destport= 4;
335
                        end
336
                        default: begin
337
                                destport= {DSTPw{1'bX}};
338
                        end
339
                        endcase
340
                end//10
341
                11: begin
342
                        case({src_e_addr,dest_e_addr})
343
                        {E0,E2},{E0,E3},{E1,E3},{E1,E14},{E2,E3},{E2,E14},{E3,E2},{E4,E2},{E5,E2},{E6,E2},{E7,E2},{E8,E2},{E9,E2},{E10,E2},{E11,E2},{E11,E3},{E11,E14},{E12,E2},{E13,E2},{E14,E2},{E15,E2}: begin
344
                                destport= 0;
345
                        end
346
                        {E1,E5},{E1,E13},{E2,E5},{E2,E15},{E3,E12},{E11,E0},{E11,E5},{E11,E9},{E11,E12},{E11,E15}: begin
347
                                destport= 1;
348
                        end
349
                        {E1,E6},{E2,E4},{E2,E6},{E2,E13},{E11,E4},{E11,E6},{E11,E13}: begin
350
                                destport= 2;
351
                        end
352
                        {E2,E8},{E3,E10},{E11,E1},{E11,E7},{E11,E8},{E11,E10}: begin
353
                                destport= 3;
354
                        end
355
                        default: begin
356
                                destport= {DSTPw{1'bX}};
357
                        end
358
                        endcase
359
                end//11
360
                12: begin
361
                        case({src_e_addr,dest_e_addr})
362
                        {E0,E8},{E1,E9},{E1,E15},{E2,E9},{E5,E8},{E5,E10},{E6,E8},{E6,E10},{E7,E9},{E8,E9},{E8,E10},{E9,E8},{E9,E10},{E10,E8},{E10,E9},{E10,E15},{E11,E9},{E12,E8},{E12,E9},{E12,E10},{E12,E15},{E15,E8},{E15,E10}: begin
363
                                destport= 0;
364
                        end
365
                        {E0,E2},{E0,E3},{E0,E11},{E5,E1},{E5,E7},{E6,E1},{E6,E7},{E10,E2},{E10,E11},{E10,E14},{E12,E1},{E12,E2},{E12,E7},{E12,E11},{E12,E14},{E15,E1},{E15,E7}: begin
366
                                destport= 2;
367
                        end
368
                        {E8,E0},{E8,E4},{E9,E1},{E9,E7},{E10,E3},{E10,E4},{E10,E6},{E10,E13},{E12,E0},{E12,E3},{E12,E4},{E12,E6},{E12,E13}: begin
369
                                destport= 3;
370
                        end
371
                        {E8,E5},{E10,E5},{E12,E5}: begin
372
                                destport= 4;
373
                        end
374
                        default: begin
375
                                destport= {DSTPw{1'bX}};
376
                        end
377
                        endcase
378
                end//12
379
                13: begin
380
                        case({src_e_addr,dest_e_addr})
381
                        {E0,E4},{E1,E4},{E1,E6},{E2,E4},{E2,E6},{E3,E6},{E3,E14},{E4,E6},{E4,E14},{E5,E4},{E5,E14},{E6,E4},{E7,E4},{E7,E6},{E8,E4},{E8,E6},{E9,E4},{E9,E14},{E10,E4},{E10,E6},{E11,E4},{E11,E6},{E12,E4},{E12,E6},{E13,E4},{E13,E6},{E13,E14},{E14,E4},{E14,E6},{E15,E4},{E15,E6}: begin
382
                                destport= 0;
383
                        end
384
                        {E13,E0},{E13,E5},{E13,E9},{E13,E12},{E13,E15}: begin
385
                                destport= 1;
386
                        end
387
                        {E5,E3},{E6,E3},{E7,E3},{E8,E3},{E9,E3},{E10,E3},{E12,E3},{E13,E3},{E14,E3},{E15,E3}: begin
388
                                destport= 2;
389
                        end
390
                        {E3,E1},{E3,E7},{E3,E8},{E4,E1},{E4,E7},{E4,E8},{E4,E10},{E13,E1},{E13,E7},{E13,E8},{E13,E10}: begin
391
                                destport= 3;
392
                        end
393
                        {E4,E2},{E4,E11},{E5,E2},{E13,E2},{E13,E11}: begin
394
                                destport= 4;
395
                        end
396
                        default: begin
397
                                destport= {DSTPw{1'bX}};
398
                        end
399
                        endcase
400
                end//13
401
                14: begin
402
                        case({src_e_addr,dest_e_addr})
403
                        {E0,E11},{E2,E8},{E2,E13},{E2,E15},{E3,E8},{E4,E8},{E4,E11},{E5,E11},{E6,E11},{E7,E11},{E7,E13},{E7,E15},{E8,E11},{E8,E13},{E8,E15},{E9,E11},{E10,E11},{E11,E8},{E11,E13},{E11,E15},{E12,E11},{E13,E8},{E13,E11},{E13,E15},{E14,E8},{E14,E11},{E14,E13},{E14,E15},{E15,E11}: begin
404
                                destport= 0;
405
                        end
406
                        {E3,E12},{E11,E9},{E11,E12},{E13,E12},{E14,E12}: begin
407
                                destport= 1;
408
                        end
409
                        {E0,E2},{E1,E4},{E2,E4},{E4,E2},{E5,E2},{E6,E2},{E7,E2},{E7,E3},{E7,E4},{E8,E2},{E8,E3},{E9,E2},{E10,E2},{E11,E4},{E12,E2},{E13,E2},{E14,E2},{E14,E3},{E14,E4},{E15,E2}: begin
410
                                destport= 2;
411
                        end
412
                        {E0,E3},{E1,E6},{E1,E13},{E2,E6},{E3,E1},{E3,E7},{E3,E10},{E4,E1},{E4,E7},{E4,E10},{E7,E6},{E8,E6},{E11,E1},{E11,E6},{E11,E7},{E11,E10},{E13,E1},{E13,E7},{E13,E10},{E14,E0},{E14,E1},{E14,E6},{E14,E7},{E14,E10}: begin
413
                                destport= 3;
414
                        end
415
                        {E1,E5},{E2,E5},{E7,E5},{E11,E0},{E11,E5},{E13,E0},{E13,E5},{E13,E9},{E14,E5},{E14,E9}: begin
416
                                destport= 4;
417
                        end
418
                        default: begin
419
                                destport= {DSTPw{1'bX}};
420
                        end
421
                        endcase
422
                end//14
423
                15: begin
424
                        case({src_e_addr,dest_e_addr})
425
                        {E0,E14},{E1,E5},{E1,E13},{E2,E5},{E3,E12},{E4,E12},{E5,E12},{E6,E12},{E6,E14},{E7,E5},{E8,E5},{E10,E5},{E10,E13},{E10,E14},{E11,E5},{E11,E12},{E12,E5},{E12,E13},{E12,E14},{E13,E5},{E13,E12},{E14,E5},{E14,E12},{E15,E5},{E15,E12},{E15,E13},{E15,E14}: begin
426
                                destport= 0;
427
                        end
428
                        {E8,E4},{E10,E3},{E10,E4},{E11,E9},{E12,E3},{E12,E4},{E15,E3},{E15,E4}: begin
429
                                destport= 2;
430
                        end
431
                        {E5,E1},{E5,E7},{E5,E10},{E6,E1},{E6,E7},{E6,E10},{E10,E6},{E11,E0},{E12,E6},{E13,E0},{E13,E9},{E14,E9},{E15,E0},{E15,E1},{E15,E6},{E15,E7},{E15,E9},{E15,E10}: begin
432
                                destport= 3;
433
                        end
434
                        {E0,E2},{E0,E3},{E0,E11},{E5,E8},{E5,E11},{E6,E2},{E6,E8},{E6,E11},{E9,E2},{E9,E11},{E10,E2},{E10,E11},{E12,E2},{E12,E11},{E15,E2},{E15,E8},{E15,E11}: begin
435
                                destport= 4;
436
                        end
437
                        default: begin
438
                                destport= {DSTPw{1'bX}};
439
                        end
440
                        endcase
441
                end//15
442
                default: begin
443
                        destport= {DSTPw{1'bX}};
444
                end
445
                endcase
446
        end
447
 
448
 
449
 
450
endmodule
451
 
452
 

powered by: WebSVN 2.1.0

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