OpenCores
URL https://opencores.org/ocsvn/fpga-cf/fpga-cf/trunk

Subversion Repositories fpga-cf

[/] [fpga-cf/] [trunk/] [hdl/] [topv5_proto.v] - Blame information for rev 10

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

Line No. Rev Author Line
1 3 peteralieb
// Top Module
2
 
3
module top
4
(
5
   // SGMII Interface - EMAC0
6
   TXP_0,
7
   TXN_0,
8
   RXP_0,
9
   RXN_0,
10
 
11
   // SGMII MGT Clock buffer inputs 
12
   MGTCLK_N,
13
   MGTCLK_P,
14
 
15
   // reset for ethernet phy
16
   PHY_RESET_0,
17
 
18
   // GTP link status
19
   GTP_READY,
20
 
21
   // Asynchronous Reset
22
   RESET,
23
 
24
        // LED Status
25
        LEDS,
26
 
27
        // DIP Switch
28
        DIP,
29
 
30
        // CPU RESET
31
        RESET_CPU
32
);
33
 
34
//-----------------------------------------------------------------------------
35
// Port Declarations 
36
//-----------------------------------------------------------------------------
37
 
38
   // SGMII Interface - EMAC0
39
   output          TXP_0;
40
   output          TXN_0;
41
   input           RXP_0;
42
   input           RXN_0;
43
 
44
   // SGMII MGT Clock buffer inputs 
45
   input           MGTCLK_N;
46
   input           MGTCLK_P;
47
 
48
   // reset for ethernet phy
49
   output          PHY_RESET_0;
50
 
51
   // GTP link status
52
   output          GTP_READY;
53
 
54
   // Asynchronous Reset
55
   input           RESET;
56
 
57
        // LED Status
58
        output  [7:0]            LEDS;
59
 
60
        // DIP Switches
61
        input   [7:0]            DIP;
62
 
63
        // CPU RESET
64
        input                           RESET_CPU;
65
 
66
//-----------------------------------------------------------------------------
67
 
68
 
69
//-------------------------------------------------------------------------------------
70
//-------------------------------------------------------------------------------------
71
//                                                       User Signals
72
//-------------------------------------------------------------------------------------
73
//-------------------------------------------------------------------------------------
74
 
75
reg [7:0] DIP_r;
76
wire reset_cpu_p;
77
wire reset_cpu_i;
78
reg [7:0] LEDr;
79
 
80
IBUF cpu_reset_ibuf (.I(RESET_CPU), .O(reset_cpu_i));
81
 
82
assign reset_cpu_p = ~reset_cpu_i;
83
 
84
 
85
//-----------------------------------------------------------------------------
86
// Ethernet Platform Instance
87
//-----------------------------------------------------------------------------
88
 
89
wire in_src_rdy_usr;
90
wire out_dst_rdy_usr;
91
wire [7:0] in_data_usr;
92
wire in_sof_usr;
93
wire in_eof_usr;
94
wire in_dst_rdy_usr;
95
wire out_src_rdy_usr;
96
wire [7:0] out_data_usr;
97
wire out_sof_usr;
98
wire out_eof_usr;
99
wire [3:0] outport_usr;
100
wire [3:0] inport_usr;
101
wire clk_local;
102
wire rst_local;
103
 
104
 
105
enetplatform enet_inst
106
(
107
   .TXP_0(TXP_0),
108
   .TXN_0(TXN_0),
109
   .RXP_0(RXP_0),
110
   .RXN_0(RXN_0),
111
   .MGTCLK_N(MGTCLK_N),
112
   .MGTCLK_P(MGTCLK_P),
113
   .PHY_RESET_0(PHY_RESET_0),
114
   .GTP_READY(GTP_READY),
115
   .RESET(RESET),
116
        .RESET_CPU(reset_cpu_p),
117
        .in_src_rdy_usr(in_src_rdy_usr),
118
        .out_dst_rdy_usr(out_dst_rdy_usr),
119
        .in_data_usr(in_data_usr),
120
        .in_sof_usr(in_sof_usr),
121
        .in_eof_usr(in_eof_usr),
122
        .in_dst_rdy_usr(in_dst_rdy_usr),
123
        .out_src_rdy_usr(out_src_rdy_usr),
124
        .out_data_usr(out_data_usr),
125
        .out_sof_usr(out_sof_usr),
126
        .out_eof_usr(out_eof_usr),
127
        .outport_usr(outport_usr),
128
        .inport_usr(inport_usr),
129
        .clk_local(clk_local),
130
        .rst_local(rst_local)
131
);
132
 
133
//-------------------------------------------------------------------------------------
134
//-------------------------------------------------------------------------------------
135
 
136
 
137
//-------------------------------------------------------------------------------------
138
//-------------------------------------------------------------------------------------
139
//                                                       ICAP Logic
140
//-------------------------------------------------------------------------------------
141
//-------------------------------------------------------------------------------------
142
 
143
wire icap_en_wr;
144
wire icap_en_rd;
145
wire icap_out_src_rdy;
146
wire icap_out_dst_rdy;
147
wire icap_in_src_rdy;
148
wire icap_in_dst_rdy;
149
wire icap_out_sof;
150
wire icap_out_eof;
151
wire icap_in_sof;
152
wire icap_in_eof;
153
wire [7:0] icap_dataout;
154
wire [7:0] icap_datain;
155
 
156
port_icap_buf the_picap
157
(
158
        .clk(clk_local),
159
        .rst(rst_local),
160
        .en_wr(icap_en_wr),
161
        .en_rd(icap_en_rd),
162
        .in_data(icap_datain),
163
        .in_sof(icap_in_sof),
164
        .in_eof(icap_in_eof),
165
        .in_src_rdy(icap_in_src_rdy),
166
        .out_dst_rdy(icap_out_dst_rdy),
167
        .out_data(icap_dataout),
168
        .out_sof(icap_out_sof),
169
        .out_eof(icap_out_eof),
170
        .out_src_rdy(icap_out_src_rdy),
171
        .in_dst_rdy(icap_in_dst_rdy)
172
);
173
 
174
assign icap_en_wr = ((outport_usr == 3 && out_src_rdy_usr == 1) || (inport_usr == 3 && in_dst_rdy_usr == 1)) ? 1 : 0;
175
assign icap_en_rd = ((outport_usr == 4 && out_src_rdy_usr == 1) || (inport_usr == 4 && in_dst_rdy_usr == 1)) ? 1 : 0;
176
 
177
 
178
//-------------------------------------------------------------------------------------
179
//-------------------------------------------------------------------------------------
180
//                                                       Channel Routing
181
//-------------------------------------------------------------------------------------
182
//-------------------------------------------------------------------------------------
183
 
184
wire ch1_in_sof;
185
wire ch1_in_eof;
186
wire ch1_in_src_rdy;
187
wire ch1_in_dst_rdy;
188
wire [7:0] ch1_in_data;
189
wire ch1_out_sof;
190
wire ch1_out_eof;
191
wire ch1_out_src_rdy;
192
wire ch1_out_dst_rdy;
193
wire [7:0] ch1_out_data;
194
wire ch1_wen;
195
wire ch1_ren;
196
 
197
wire ch2_in_sof;
198
wire ch2_in_eof;
199
wire ch2_in_src_rdy;
200
wire ch2_in_dst_rdy;
201
wire [7:0] ch2_in_data;
202
wire ch2_out_sof;
203
wire ch2_out_eof;
204
wire ch2_out_src_rdy;
205
wire ch2_out_dst_rdy;
206
wire [7:0] ch2_out_data;
207
wire ch2_wen;
208
wire ch2_ren;
209
 
210
wire ch3_in_sof;
211
wire ch3_in_eof;
212
wire ch3_in_src_rdy;
213
wire ch3_in_dst_rdy;
214
wire [7:0] ch3_in_data;
215
wire ch3_out_sof;
216
wire ch3_out_eof;
217
wire ch3_out_src_rdy;
218
wire ch3_out_dst_rdy;
219
wire [7:0] ch3_out_data;
220
wire ch3_wen;
221
wire ch3_ren;
222
 
223
wire ch4_in_sof;
224
wire ch4_in_eof;
225
wire ch4_in_src_rdy;
226
wire ch4_in_dst_rdy;
227
wire [7:0] ch4_in_data;
228
wire ch4_out_sof;
229
wire ch4_out_eof;
230
wire ch4_out_src_rdy;
231
wire ch4_out_dst_rdy;
232
wire [7:0] ch4_out_data;
233
wire ch4_wen;
234
wire ch4_ren;
235
 
236
wire ch5_in_sof;
237
wire ch5_in_eof;
238
wire ch5_in_src_rdy;
239
wire ch5_in_dst_rdy;
240
wire [7:0] ch5_in_data;
241
wire ch5_out_sof;
242
wire ch5_out_eof;
243
wire ch5_out_src_rdy;
244
wire ch5_out_dst_rdy;
245
wire [7:0] ch5_out_data;
246
wire ch5_wen;
247
wire ch5_ren;
248
 
249
wire ch6_in_sof;
250
wire ch6_in_eof;
251
wire ch6_in_src_rdy;
252
wire ch6_in_dst_rdy;
253
wire [7:0] ch6_in_data;
254
wire ch6_out_sof;
255
wire ch6_out_eof;
256
wire ch6_out_src_rdy;
257
wire ch6_out_dst_rdy;
258
wire [7:0] ch6_out_data;
259
wire ch6_wen;
260
wire ch6_ren;
261
 
262
channelif6 channelif_inst
263
(
264
        .in_sof(out_sof_usr),
265
        .in_eof(out_eof_usr),
266
        .in_src_rdy(out_src_rdy_usr),
267
        .in_dst_rdy(out_dst_rdy_usr),
268
        .in_data(out_data_usr),
269
        .inport_addr(outport_usr),
270
        .out_sof(in_sof_usr),
271
        .out_eof(in_eof_usr),
272
        .out_src_rdy(in_src_rdy_usr),
273
        .out_dst_rdy(in_dst_rdy_usr),
274
        .out_data(in_data_usr),
275
        .outport_addr(inport_usr),
276
        .wenables(),
277
        .renables(),
278
 
279
        .ch1_in_sof(ch1_in_sof),
280
        .ch1_in_eof(ch1_in_eof),
281
        .ch1_in_src_rdy(ch1_in_src_rdy),
282
        .ch1_in_dst_rdy(ch1_in_dst_rdy),
283
        .ch1_in_data(ch1_in_data),
284
        .ch1_out_sof(ch1_out_sof),
285
        .ch1_out_eof(ch1_out_eof),
286
        .ch1_out_src_rdy(ch1_out_src_rdy),
287
        .ch1_out_dst_rdy(ch1_out_dst_rdy),
288
        .ch1_out_data(ch1_out_data),
289
        .ch1_wen(ch1_wen),
290
        .ch1_ren(ch1_ren),
291
 
292
        .ch2_in_sof(ch2_in_sof),
293
        .ch2_in_eof(ch2_in_eof),
294
        .ch2_in_src_rdy(ch2_in_src_rdy),
295
        .ch2_in_dst_rdy(ch2_in_dst_rdy),
296
        .ch2_in_data(ch2_in_data),
297
        .ch2_out_sof(ch2_out_sof),
298
        .ch2_out_eof(ch2_out_eof),
299
        .ch2_out_src_rdy(ch2_out_src_rdy),
300
        .ch2_out_dst_rdy(ch2_out_dst_rdy),
301
        .ch2_out_data(ch2_out_data),
302
        .ch2_wen(ch2_wen),
303
        .ch2_ren(ch2_ren),
304
 
305
        .ch3_in_sof(ch3_in_sof),
306
        .ch3_in_eof(ch3_in_eof),
307
        .ch3_in_src_rdy(ch3_in_src_rdy),
308
        .ch3_in_dst_rdy(ch3_in_dst_rdy),
309
        .ch3_in_data(ch3_in_data),
310
        .ch3_out_sof(ch3_out_sof),
311
        .ch3_out_eof(ch3_out_eof),
312
        .ch3_out_src_rdy(ch3_out_src_rdy),
313
        .ch3_out_dst_rdy(ch3_out_dst_rdy),
314
        .ch3_out_data(ch3_out_data),
315
        .ch3_wen(ch3_wen),
316
        .ch3_ren(ch3_ren),
317
 
318
        .ch4_in_sof(ch4_in_sof),
319
        .ch4_in_eof(ch4_in_eof),
320
        .ch4_in_src_rdy(ch4_in_src_rdy),
321
        .ch4_in_dst_rdy(ch4_in_dst_rdy),
322
        .ch4_in_data(ch4_in_data),
323
        .ch4_out_sof(ch4_out_sof),
324
        .ch4_out_eof(ch4_out_eof),
325
        .ch4_out_src_rdy(ch4_out_src_rdy),
326
        .ch4_out_dst_rdy(ch4_out_dst_rdy),
327
        .ch4_out_data(ch4_out_data),
328
        .ch4_wen(ch4_wen),
329
        .ch4_ren(ch4_ren),
330
 
331
        .ch5_in_sof(ch5_in_sof),
332
        .ch5_in_eof(ch5_in_eof),
333
        .ch5_in_src_rdy(ch5_in_src_rdy),
334
        .ch5_in_dst_rdy(ch5_in_dst_rdy),
335
        .ch5_in_data(ch5_in_data),
336
        .ch5_out_sof(ch5_out_sof),
337
        .ch5_out_eof(ch5_out_eof),
338
        .ch5_out_src_rdy(ch5_out_src_rdy),
339
        .ch5_out_dst_rdy(ch5_out_dst_rdy),
340
        .ch5_out_data(ch5_out_data),
341
        .ch5_wen(ch5_wen),
342
        .ch5_ren(ch5_ren),
343
 
344
        .ch6_in_sof(ch6_in_sof),
345
        .ch6_in_eof(ch6_in_eof),
346
        .ch6_in_src_rdy(ch6_in_src_rdy),
347
        .ch6_in_dst_rdy(ch6_in_dst_rdy),
348
        .ch6_in_data(ch6_in_data),
349
        .ch6_out_sof(ch6_out_sof),
350
        .ch6_out_eof(ch6_out_eof),
351
        .ch6_out_src_rdy(ch6_out_src_rdy),
352
        .ch6_out_dst_rdy(ch6_out_dst_rdy),
353
        .ch6_out_data(ch6_out_data),
354
        .ch6_wen(ch6_wen),
355
        .ch6_ren(ch6_ren)
356
);
357
 
358
 
359
//-------------------------------------------------------------------------------------
360
//-------------------------------------------------------------------------------------
361
//                                                       User Logic
362
//-------------------------------------------------------------------------------------
363
//-------------------------------------------------------------------------------------
364
 
365
wire [7:0] LEDnext;
366
 
367
assign LEDS = LEDr;
368
 
369
wire clk_controlled;
370 8 peteralieb
wire usr_rst;
371 3 peteralieb
 
372
always @(posedge clk_local)
373
begin
374
        DIP_r <= DIP;
375
end
376
 
377
always @(posedge clk_local)
378
begin
379
        if (rst_local)
380
                LEDr <= 0;
381
        else if (ch1_wen & ch1_out_src_rdy)
382
                LEDr <= LEDnext;
383
end
384
 
385
port_clkcntl clkcontrol (
386
        .clk(clk_local),
387 8 peteralieb
        .rst(rst_local),
388 3 peteralieb
        .en(ch2_wen),
389
        .in_data(ch2_out_data),
390
        .in_sof(ch2_out_sof),
391
        .in_eof(ch2_out_eof),
392
        .in_src_rdy(ch2_out_src_rdy),
393
        .out_dst_rdy(ch2_in_dst_rdy),
394
        .usr_clk_in(clk_local),
395
        .out_data(),
396
        .out_sof(),
397
        .out_eof(),
398
        .out_src_rdy(),
399
        .in_dst_rdy(ch2_out_dst_rdy),
400 8 peteralieb
        .usr_clk_out(clk_controlled),
401
        .usr_rst_out(usr_rst)
402 3 peteralieb
);
403
 
404
 
405
//-------------------------------------------------------------------------------------
406
//-------------------------------------------------------------------------------------
407
//                                                       Sand Box Areas
408
//-------------------------------------------------------------------------------------
409
//-------------------------------------------------------------------------------------
410
 
411 8 peteralieb
wire channel_rst;
412
assign channel_rst = rst_local & usr_rst;
413
 
414
channel5 pr_channel_5 (
415
        .clk(clk_controlled),
416
        .rst(channel_rst),
417
        .wen ( 1 ),
418
        .ren ( 1 ),
419
        .in_data ( ch5_out_data_l ),    // Inport
420
        .in_sof ( ch5_out_sof_l ),      // Inport
421
        .in_eof ( ch5_out_eof_l ),      // Inport
422
        .in_src_rdy ( ch5_out_src_rdy_l ),      // Inport
423
        .out_dst_rdy ( ch5_in_dst_rdy_l ),      // Outport
424
 
425
        // Outputs:
426
        .out_data ( ch5_in_data_l ),    // Outport
427
        .out_sof ( ch5_in_sof_l ),      // Outport
428
        .out_eof ( ch5_in_eof_l ),      // Outport
429
        .out_src_rdy ( ch5_in_src_rdy_l ),      // Outport
430
        .in_dst_rdy ( ch5_out_dst_rdy_l )       // Inport
431
);
432
 
433
port_fifo pf_channel_5_to_interface (
434
        .rst(channel_rst),
435
        .in_clk(clk_controlled),
436
        .out_clk(clk_local),
437
        .in_data ( ch5_in_data_l ),     // Inport
438
        .in_sof ( ch5_in_sof_l ),       // Inport
439
        .in_eof ( ch5_in_eof_l ),       // Inport
440
        .in_src_rdy ( ch5_in_src_rdy_l ),       // Inport
441 3 peteralieb
        .out_dst_rdy ( ch5_in_dst_rdy ),        // Outport
442
 
443
        // Outputs:
444
        .out_data ( ch5_in_data ),      // Outport
445
        .out_sof ( ch5_in_sof ),        // Outport
446
        .out_eof ( ch5_in_eof ),        // Outport
447
        .out_src_rdy ( ch5_in_src_rdy ),        // Outport
448 8 peteralieb
        .in_dst_rdy ( ch5_in_dst_rdy_l )        // Inport
449
);
450
 
451
port_fifo pf_channel_5_from_interface (
452
        .rst(channel_rst),
453
        .in_clk(clk_local),
454
        .out_clk(clk_controlled),
455
        .in_data ( ch5_out_data ),      // Inport
456
        .in_sof ( ch5_out_sof ),        // Inport
457
        .in_eof ( ch5_out_eof ),        // Inport
458
        .in_src_rdy ( ch5_out_src_rdy ),        // Inport
459
        .out_dst_rdy ( ch5_out_dst_rdy_l ),     // Outport
460
 
461
        // Outputs:
462
        .out_data ( ch5_out_data_l ),   // Outport
463
        .out_sof ( ch5_out_sof_l ),     // Outport
464
        .out_eof ( ch5_out_eof_l ),     // Outport
465
        .out_src_rdy ( ch5_out_src_rdy_l ),     // Outport
466 3 peteralieb
        .in_dst_rdy ( ch5_out_dst_rdy ) // Inport
467
);
468
 
469 8 peteralieb
 
470
channel6 pr_channel_6 (
471 3 peteralieb
        .clk(clk_local),
472 8 peteralieb
        .rst(channel_rst),
473 3 peteralieb
        .wen ( ch6_wen ),
474
        .ren ( ch6_ren ),
475
        .in_data ( ch6_out_data ),      // Inport
476
        .in_sof ( ch6_out_sof ),        // Inport
477
        .in_eof ( ch6_out_eof ),        // Inport
478
        .in_src_rdy ( ch6_out_src_rdy ),        // Inport
479
        .out_dst_rdy ( ch6_in_dst_rdy ),        // Outport
480
 
481
        // Outputs:
482
        .out_data ( ch6_in_data ),      // Outport
483
        .out_sof ( ch6_in_sof ),        // Outport
484
        .out_eof ( ch6_in_eof ),        // Outport
485
        .out_src_rdy ( ch6_in_src_rdy ),        // Outport
486
        .in_dst_rdy ( ch6_out_dst_rdy ) // Inport
487
);
488
 
489
//-------------------------------------------------------------------------------------
490
//-------------------------------------------------------------------------------------
491
//                                                       Channel Assignments
492
//-------------------------------------------------------------------------------------
493
//-------------------------------------------------------------------------------------
494
 
495
assign ch3_in_sof = icap_out_sof;
496
assign ch3_in_eof = icap_out_eof;
497
assign ch3_in_src_rdy = icap_out_src_rdy;
498
assign ch3_in_data = icap_dataout;
499
assign ch3_out_dst_rdy = icap_in_dst_rdy;
500
assign icap_datain = ch3_out_data | ch4_out_data;
501
assign icap_out_dst_rdy = ch3_in_dst_rdy | ch4_in_dst_rdy;
502
assign icap_in_src_rdy = ch3_out_src_rdy | ch4_out_src_rdy;
503
assign icap_in_sof = ch3_out_sof | ch4_out_sof;
504
assign icap_in_eof = ch3_out_eof | ch4_out_eof;
505
 
506
assign ch4_in_sof = icap_out_sof;
507
assign ch4_in_eof = icap_out_eof;
508
assign ch4_in_src_rdy = icap_out_src_rdy;
509
assign ch4_in_data = icap_dataout;
510
assign ch4_out_dst_rdy = icap_in_dst_rdy;
511
 
512
assign ch1_in_sof = 1;
513
assign ch1_in_eof = 1;
514
assign ch1_in_src_rdy = 1;
515
assign ch1_out_dst_rdy = 1;
516
assign ch1_in_data = DIP_r;
517
assign LEDnext = ch1_out_data;
518
 
519
 
520
endmodule

powered by: WebSVN 2.1.0

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