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_genvar.v] - Blame information for rev 48

Go to most recent revision | 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
**      File: /home/alireza/work/git/hca_git/ProNoC/mpsoc/rtl/src_topolgy/custom1/Tcustom1Rcustom_look_ahead_routing_genvar.v
10
**
11
**      Copyright (C) 2014-2019  Alireza Monemi
12
**
13
**      This file is part of ProNoC 1.9.1
14
**
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
/*****************************
30
*       Tcustom1Rcustom_look_ahead_routing_genvar
31
******************************/
32
module Tcustom1Rcustom_look_ahead_routing_genvar  #(
33
        parameter RAw = 3,
34
        parameter EAw = 3,
35
        parameter DSTPw=4,
36
        parameter CURRENT_R_ADDR=0
37
)
38
(
39
        dest_e_addr,
40
        src_e_addr,
41
        destport,
42
        reset,
43
        clk
44
);
45
 
46
        input   [EAw-1   :0] dest_e_addr;
47
        input   [EAw-1   :0] src_e_addr;
48
        output  [DSTPw-1 :0] destport;
49
        input reset,clk;
50
 
51
        reg [EAw-1   :0] dest_e_addr_delay;
52
        reg [EAw-1   :0] src_e_addr_delay;
53
 
54
        always @(posedge clk)begin
55
                if(reset)begin
56
                        dest_e_addr_delay<={EAw{1'b0}};
57
                        src_e_addr_delay<={EAw{1'b0}};
58
                end else begin
59
                        dest_e_addr_delay<=dest_e_addr;
60
                        src_e_addr_delay<=src_e_addr;
61
                end
62
        end
63
 
64
        custom1_look_ahead_routing_genvar_comb  #(
65
                .RAw(RAw),
66
                .EAw(EAw),
67
                .DSTPw(DSTPw),
68
                .CURRENT_R_ADDR(CURRENT_R_ADDR)
69
        )
70
        lkp_cmb
71
        (
72
 
73
                .dest_e_addr(dest_e_addr_delay),
74
                .src_e_addr(src_e_addr_delay),
75
                .destport(destport)
76
        );
77
 
78
 
79
 
80
endmodule
81
 
82
/*******************
83
* Tcustom1Rcustom_look_ahead_routing_genvar_comb
84
********************/
85
 
86
 
87
 module Tcustom1Rcustom_look_ahead_routing_genvar_comb  #(
88
        parameter RAw = 3,
89
        parameter EAw = 3,
90
        parameter DSTPw=4,
91
        parameter CURRENT_R_ADDR=0
92
)
93
(
94
        dest_e_addr,
95
        src_e_addr,
96
        destport
97
);
98
 
99
        input   [EAw-1   :0] dest_e_addr;
100
        input   [EAw-1   :0] src_e_addr;
101
        output  reg [DSTPw-1 :0] destport;
102
 
103
localparam [EAw-1 : 0]   E0=0;
104
localparam [EAw-1 : 0]   E1=1;
105
localparam [EAw-1 : 0]   E2=2;
106
localparam [EAw-1 : 0]   E3=3;
107
localparam [EAw-1 : 0]   E4=4;
108
localparam [EAw-1 : 0]   E5=5;
109
localparam [EAw-1 : 0]   E6=6;
110
localparam [EAw-1 : 0]   E7=7;
111
localparam [EAw-1 : 0]   E8=8;
112
localparam [EAw-1 : 0]   E9=9;
113
localparam [EAw-1 : 0]   E10=10;
114
localparam [EAw-1 : 0]   E11=11;
115
localparam [EAw-1 : 0]   E12=12;
116
localparam [EAw-1 : 0]   E13=13;
117
localparam [EAw-1 : 0]   E14=14;
118
localparam [EAw-1 : 0]   E15=15;
119
 
120
 
121
        generate
122
        if(CURRENT_R_ADDR == 0) begin :R0
123
                always@(*)begin
124
                        destport= 0;
125
                        case({src_e_addr,dest_e_addr})
126
                        {E0,E9},{E0,E10}: begin
127
                                destport= 0;
128
                        end
129
                        {E0,E2},{E0,E3},{E0,E8},{E0,E11},{E0,E12}: begin
130
                                destport= 1;
131
                        end
132
                        {E0,E1},{E0,E4},{E0,E5},{E0,E6},{E0,E7},{E0,E13},{E0,E14},{E0,E15}: begin
133
                                destport= 2;
134
                        end
135
                        endcase
136
                end
137
        end//R0
138
 
139
        if(CURRENT_R_ADDR == 1) begin :R1
140
                always@(*)begin
141
                        destport= 0;
142
                        case({src_e_addr,dest_e_addr})
143
                        {E1,E2},{E1,E7},{E2,E7}: begin
144
                                destport= 0;
145
                        end
146
                        {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
147
                                destport= 1;
148
                        end
149
                        {E1,E0},{E1,E10},{E2,E0},{E2,E10}: begin
150
                                destport= 2;
151
                        end
152
                        endcase
153
                end
154
        end//R1
155
 
156
        if(CURRENT_R_ADDR == 2) begin :R2
157
                always@(*)begin
158
                        destport= 0;
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
                        endcase
170
                end
171
        end//R2
172
 
173
        if(CURRENT_R_ADDR == 3) begin :R3
174
                always@(*)begin
175
                        destport= 0;
176
                        case({src_e_addr,dest_e_addr})
177
                        {E3,E4},{E3,E11}: begin
178
                                destport= 0;
179
                        end
180
                        {E3,E1},{E3,E6},{E3,E7},{E3,E8},{E3,E10},{E3,E12},{E3,E13},{E3,E14}: begin
181
                                destport= 1;
182
                        end
183
                        {E3,E2}: begin
184
                                destport= 2;
185
                        end
186
                        {E3,E0},{E3,E5},{E3,E9},{E3,E15}: begin
187
                                destport= 3;
188
                        end
189
                        endcase
190
                end
191
        end//R3
192
 
193
        if(CURRENT_R_ADDR == 4) begin :R4
194
                always@(*)begin
195
                        destport= 0;
196
                        case({src_e_addr,dest_e_addr})
197
                        {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
198
                                destport= 0;
199
                        end
200
                        {E4,E2},{E4,E11},{E4,E14}: begin
201
                                destport= 1;
202
                        end
203
                        {E3,E0},{E3,E5},{E3,E9},{E3,E15},{E4,E0},{E4,E5},{E4,E9},{E4,E12},{E4,E15}: begin
204
                                destport= 2;
205
                        end
206
                        {E3,E6},{E4,E6}: begin
207
                                destport= 3;
208
                        end
209
                        {E3,E1},{E3,E7},{E3,E8},{E3,E14},{E4,E1},{E4,E7},{E4,E8},{E4,E10}: begin
210
                                destport= 4;
211
                        end
212
                        endcase
213
                end
214
        end//R4
215
 
216
        if(CURRENT_R_ADDR == 5) begin :R5
217
                always@(*)begin
218
                        destport= 0;
219
                        case({src_e_addr,dest_e_addr})
220
                        {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
221
                                destport= 0;
222
                        end
223
                        {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
224
                                destport= 1;
225
                        end
226
                        {E0,E14},{E5,E11},{E6,E2},{E6,E11},{E6,E14},{E9,E2},{E9,E11}: begin
227
                                destport= 2;
228
                        end
229
                        {E3,E0},{E4,E0},{E5,E0},{E6,E0},{E11,E0},{E13,E0},{E15,E0}: begin
230
                                destport= 3;
231
                        end
232
                        endcase
233
                end
234
        end//R5
235
 
236
        if(CURRENT_R_ADDR == 6) begin :R6
237
                always@(*)begin
238
                        destport= 0;
239
                        case({src_e_addr,dest_e_addr})
240
                        {E0,E13},{E3,E5},{E4,E5},{E5,E13},{E6,E5},{E6,E13},{E9,E13}: begin
241
                                destport= 0;
242
                        end
243
                        {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
244
                                destport= 1;
245
                        end
246
                        {E0,E4},{E5,E3},{E5,E4},{E6,E3},{E6,E4},{E9,E3},{E9,E4}: begin
247
                                destport= 2;
248
                        end
249
                        {E3,E0},{E3,E9},{E4,E0},{E4,E9},{E6,E0},{E6,E9}: begin
250
                                destport= 3;
251
                        end
252
                        {E4,E2},{E4,E11},{E4,E14},{E5,E2},{E5,E14},{E9,E14}: begin
253
                                destport= 4;
254
                        end
255
                        endcase
256
                end
257
        end//R6
258
 
259
        if(CURRENT_R_ADDR == 7) begin :R7
260
                always@(*)begin
261
                        destport= 0;
262
                        case({src_e_addr,dest_e_addr})
263
                        {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
264
                                destport= 0;
265
                        end
266
                        {E1,E9},{E1,E12},{E1,E15},{E2,E9},{E2,E12},{E7,E9},{E7,E12}: begin
267
                                destport= 1;
268
                        end
269
                        {E1,E4},{E7,E2},{E7,E3},{E7,E4},{E7,E5},{E7,E6},{E7,E11},{E7,E13},{E7,E14},{E7,E15}: begin
270
                                destport= 2;
271
                        end
272
                        {E1,E0},{E2,E0},{E7,E0},{E14,E0}: begin
273
                                destport= 3;
274
                        end
275
                        endcase
276
                end
277
        end//R7
278
 
279
        if(CURRENT_R_ADDR == 8) begin :R8
280
                always@(*)begin
281
                        destport= 0;
282
                        case({src_e_addr,dest_e_addr})
283
                        {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
284
                                destport= 0;
285
                        end
286
                        {E1,E15},{E7,E5},{E7,E15},{E8,E4},{E8,E5},{E8,E15}: begin
287
                                destport= 1;
288
                        end
289
                        {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
290
                                destport= 2;
291
                        end
292
                        {E3,E1},{E4,E1},{E8,E1},{E8,E10},{E9,E1},{E11,E1},{E13,E1},{E14,E1}: begin
293
                                destport= 3;
294
                        end
295
                        {E7,E2},{E7,E11},{E8,E2},{E8,E11}: begin
296
                                destport= 4;
297
                        end
298
                        endcase
299
                end
300
        end//R8
301
 
302
        if(CURRENT_R_ADDR == 9) begin :R9
303
                always@(*)begin
304
                        destport= 0;
305
                        case({src_e_addr,dest_e_addr})
306
                        {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
307
                                destport= 0;
308
                        end
309
                        {E0,E11},{E0,E14},{E0,E15},{E9,E2},{E9,E11},{E9,E15}: begin
310
                                destport= 1;
311
                        end
312
                        {E0,E4},{E0,E6},{E0,E13},{E9,E3},{E9,E4},{E9,E6},{E9,E13},{E9,E14}: begin
313
                                destport= 2;
314
                        end
315
                        {E9,E10}: begin
316
                                destport= 3;
317
                        end
318
                        {E0,E8},{E9,E1},{E9,E7},{E9,E8}: begin
319
                                destport= 4;
320
                        end
321
                        endcase
322
                end
323
        end//R9
324
 
325
        if(CURRENT_R_ADDR == 10) begin :R10
326
                always@(*)begin
327
                        destport= 0;
328
                        case({src_e_addr,dest_e_addr})
329
                        {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
330
                                destport= 0;
331
                        end
332
                        {E0,E2},{E0,E3},{E10,E2},{E10,E3},{E10,E4},{E10,E5},{E10,E6},{E10,E11},{E10,E13},{E10,E14},{E10,E15}: begin
333
                                destport= 1;
334
                        end
335
                        {E10,E9}: begin
336
                                destport= 2;
337
                        end
338
                        {E0,E1},{E5,E1},{E6,E1},{E10,E1},{E12,E1},{E15,E1}: begin
339
                                destport= 3;
340
                        end
341
                        {E10,E8}: begin
342
                                destport= 4;
343
                        end
344
                        endcase
345
                end
346
        end//R10
347
 
348
        if(CURRENT_R_ADDR == 11) begin :R11
349
                always@(*)begin
350
                        destport= 0;
351
                        case({src_e_addr,dest_e_addr})
352
                        {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
353
                                destport= 0;
354
                        end
355
                        {E1,E5},{E1,E13},{E2,E5},{E2,E15},{E3,E12},{E11,E0},{E11,E5},{E11,E9},{E11,E12},{E11,E15}: begin
356
                                destport= 1;
357
                        end
358
                        {E1,E6},{E2,E4},{E2,E6},{E2,E13},{E11,E4},{E11,E6},{E11,E13}: begin
359
                                destport= 2;
360
                        end
361
                        {E2,E8},{E3,E10},{E11,E1},{E11,E7},{E11,E8},{E11,E10}: begin
362
                                destport= 3;
363
                        end
364
                        endcase
365
                end
366
        end//R11
367
 
368
        if(CURRENT_R_ADDR == 12) begin :R12
369
                always@(*)begin
370
                        destport= 0;
371
                        case({src_e_addr,dest_e_addr})
372
                        {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
373
                                destport= 0;
374
                        end
375
                        {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
376
                                destport= 2;
377
                        end
378
                        {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
379
                                destport= 3;
380
                        end
381
                        {E8,E5},{E10,E5},{E12,E5}: begin
382
                                destport= 4;
383
                        end
384
                        endcase
385
                end
386
        end//R12
387
 
388
        if(CURRENT_R_ADDR == 13) begin :R13
389
                always@(*)begin
390
                        destport= 0;
391
                        case({src_e_addr,dest_e_addr})
392
                        {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
393
                                destport= 0;
394
                        end
395
                        {E13,E0},{E13,E5},{E13,E9},{E13,E12},{E13,E15}: begin
396
                                destport= 1;
397
                        end
398
                        {E5,E3},{E6,E3},{E7,E3},{E8,E3},{E9,E3},{E10,E3},{E12,E3},{E13,E3},{E14,E3},{E15,E3}: begin
399
                                destport= 2;
400
                        end
401
                        {E3,E1},{E3,E7},{E3,E8},{E4,E1},{E4,E7},{E4,E8},{E4,E10},{E13,E1},{E13,E7},{E13,E8},{E13,E10}: begin
402
                                destport= 3;
403
                        end
404
                        {E4,E2},{E4,E11},{E5,E2},{E13,E2},{E13,E11}: begin
405
                                destport= 4;
406
                        end
407
                        endcase
408
                end
409
        end//R13
410
 
411
        if(CURRENT_R_ADDR == 14) begin :R14
412
                always@(*)begin
413
                        destport= 0;
414
                        case({src_e_addr,dest_e_addr})
415
                        {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
416
                                destport= 0;
417
                        end
418
                        {E3,E12},{E11,E9},{E11,E12},{E13,E12},{E14,E12}: begin
419
                                destport= 1;
420
                        end
421
                        {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
422
                                destport= 2;
423
                        end
424
                        {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
425
                                destport= 3;
426
                        end
427
                        {E1,E5},{E2,E5},{E7,E5},{E11,E0},{E11,E5},{E13,E0},{E13,E5},{E13,E9},{E14,E5},{E14,E9}: begin
428
                                destport= 4;
429
                        end
430
                        endcase
431
                end
432
        end//R14
433
 
434
        if(CURRENT_R_ADDR == 15) begin :R15
435
                always@(*)begin
436
                        destport= 0;
437
                        case({src_e_addr,dest_e_addr})
438
                        {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
439
                                destport= 0;
440
                        end
441
                        {E8,E4},{E10,E3},{E10,E4},{E11,E9},{E12,E3},{E12,E4},{E15,E3},{E15,E4}: begin
442
                                destport= 2;
443
                        end
444
                        {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
445
                                destport= 3;
446
                        end
447
                        {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
448
                                destport= 4;
449
                        end
450
                        endcase
451
                end
452
        end//R15
453
 
454
        endgenerate
455
 
456
 
457
 
458
endmodule
459
 
460
 

powered by: WebSVN 2.1.0

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