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

Subversion Repositories amber

[/] [amber/] [trunk/] [hw/] [vlog/] [system/] [system.v] - Blame information for rev 61

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

Line No. Rev Author Line
1 2 csantifort
//////////////////////////////////////////////////////////////////
2
//                                                              //
3
//  Top-level module instantiating the entire Amber 2 system.   //
4
//                                                              //
5
//  This file is part of the Amber project                      //
6
//  http://www.opencores.org/project,amber                      //
7
//                                                              //
8
//  Description                                                 //
9
//  This is the highest level synthesizable module in the       //
10
//  project. The ports in this module represent pins on the     //
11
//  FPGA.                                                       //
12
//                                                              //
13
//  Author(s):                                                  //
14
//      - Conor Santifort, csantifort.amber@gmail.com           //
15
//                                                              //
16
//////////////////////////////////////////////////////////////////
17
//                                                              //
18
// Copyright (C) 2010 Authors and OPENCORES.ORG                 //
19
//                                                              //
20
// This source file may be used and distributed without         //
21
// restriction provided that this copyright statement is not    //
22
// removed from the file and that any derivative work contains  //
23
// the original copyright notice and the associated disclaimer. //
24
//                                                              //
25
// This source file is free software; you can redistribute it   //
26
// and/or modify it under the terms of the GNU Lesser General   //
27
// Public License as published by the Free Software Foundation; //
28
// either version 2.1 of the License, or (at your option) any   //
29
// later version.                                               //
30
//                                                              //
31
// This source is distributed in the hope that it will be       //
32
// useful, but WITHOUT ANY WARRANTY; without even the implied   //
33
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //
34
// PURPOSE.  See the GNU Lesser General Public License for more //
35
// details.                                                     //
36
//                                                              //
37
// You should have received a copy of the GNU Lesser General    //
38
// Public License along with this source; if not, download it   //
39
// from http://www.opencores.org/lgpl.shtml                     //
40
//                                                              //
41
//////////////////////////////////////////////////////////////////
42
 
43
 
44
module system
45
(
46
input                       brd_rst,
47
input                       brd_clk_n,
48
input                       brd_clk_p,
49
 
50
`ifdef XILINX_VIRTEX6_FPGA
51
input                       sys_clk_p,
52
input                       sys_clk_n,
53
`endif
54
 
55
// UART 0 Interface
56
input                       i_uart0_rts,
57
output                      o_uart0_rx,
58
output                      o_uart0_cts,
59
input                       i_uart0_tx,
60
 
61
// Xilinx Spartan 6 MCB DDR3 Interface
62
inout  [15:0]               ddr3_dq,
63
output [12:0]               ddr3_addr,
64
output [2:0]                ddr3_ba,
65
output                      ddr3_ras_n,
66
output                      ddr3_cas_n,
67
output                      ddr3_we_n,
68
output                      ddr3_odt,
69
output                      ddr3_reset_n,
70
output                      ddr3_cke,
71
output [1:0]                ddr3_dm,
72
inout  [1:0]                ddr3_dqs_p,
73
inout  [1:0]                ddr3_dqs_n,
74
output                      ddr3_ck_p,
75
output                      ddr3_ck_n,
76
`ifdef XILINX_VIRTEX6_FPGA
77
output                      ddr3_cs_n,
78
`endif
79
`ifdef XILINX_SPARTAN6_FPGA
80
inout                       mcb3_rzq,
81
inout                       mcb3_zio,
82
`endif
83
 
84
 
85
// Ethmac B100 MAC to PHY Interface
86
input                       mtx_clk_pad_i,
87
output  [3:0]               mtxd_pad_o,
88
output                      mtxen_pad_o,
89
output                      mtxerr_pad_o,
90
input                       mrx_clk_pad_i,
91
input   [3:0]               mrxd_pad_i,
92
input                       mrxdv_pad_i,
93
input                       mrxerr_pad_i,
94
input                       mcoll_pad_i,
95
input                       mcrs_pad_i,
96
inout                       md_pad_io,
97
output                      mdc_pad_o,
98 61 csantifort
output                      phy_reset_n,
99
 
100
output  [3:0]               led
101 2 csantifort
);
102
 
103
 
104
wire            sys_clk;    // System clock
105
wire            sys_rst;    // Active low reset, synchronous to sys_clk
106
wire            clk_200;    // 200MHz from board
107
 
108
 
109
// ======================================
110
// Xilinx MCB DDR3 Controller connections
111
// ======================================
112
`ifdef XILINX_SPARTAN6_FPGA
113
wire            c3_p0_cmd_en;
114
wire  [2:0]     c3_p0_cmd_instr;
115
wire  [29:0]    c3_p0_cmd_byte_addr;
116
wire            c3_p0_wr_en;
117
wire  [15:0]    c3_p0_wr_mask;
118
wire  [127:0]   c3_p0_wr_data;
119
wire  [127:0]   c3_p0_rd_data;
120
wire            c3_p0_rd_empty;
121
wire            c3_p0_cmd_full;
122
wire            c3_p0_wr_full;
123
`endif
124
 
125
wire            phy_init_done;
126 11 csantifort
wire            test_mem_ctrl;
127 15 csantifort
wire            system_rdy;
128 2 csantifort
 
129
// ======================================
130
// Xilinx Virtex-6 DDR3 Controller connections
131
// ======================================
132
`ifdef XILINX_VIRTEX6_FPGA
133
wire            phy_init_done1;
134
wire            xv6_cmd_en;
135
wire  [2:0]     xv6_cmd_instr;
136
wire  [26:0]    xv6_cmd_byte_addr;
137
wire            xv6_cmd_full;
138
wire            xv6_wr_full;
139
wire            xv6_wr_en;
140
wire            xv6_wr_end;
141
wire  [7:0]     xv6_wr_mask;
142
wire  [63:0]    xv6_wr_data;
143
wire  [63:0]    xv6_rd_data;
144
wire            xv6_rd_data_valid;
145
wire            xv6_ddr3_clk;
146
`endif
147
 
148
// ======================================
149
// Ethmac MII
150
// ======================================
151
wire            md_pad_i;
152
wire            md_pad_o;
153
wire            md_padoe_o;
154
 
155
// ======================================
156
// Wishbone Buses
157
// ======================================
158
 
159
localparam WB_MASTERS = 2;
160
localparam WB_SLAVES  = 9;
161
 
162 35 csantifort
`ifdef AMBER_A25_CORE
163
localparam WB_DWIDTH  = 128;
164
localparam WB_SWIDTH  = 16;
165
`else
166
localparam WB_DWIDTH  = 32;
167
localparam WB_SWIDTH  = 4;
168
`endif
169 2 csantifort
 
170 35 csantifort
 
171 2 csantifort
// Wishbone Master Buses
172
wire      [31:0]            m_wb_adr      [WB_MASTERS-1:0];
173 35 csantifort
wire      [WB_SWIDTH-1:0]   m_wb_sel      [WB_MASTERS-1:0];
174 2 csantifort
wire      [WB_MASTERS-1:0]  m_wb_we                       ;
175 35 csantifort
wire      [WB_DWIDTH-1:0]   m_wb_dat_w    [WB_MASTERS-1:0];
176
wire      [WB_DWIDTH-1:0]   m_wb_dat_r    [WB_MASTERS-1:0];
177 2 csantifort
wire      [WB_MASTERS-1:0]  m_wb_cyc                      ;
178
wire      [WB_MASTERS-1:0]  m_wb_stb                      ;
179
wire      [WB_MASTERS-1:0]  m_wb_ack                      ;
180
wire      [WB_MASTERS-1:0]  m_wb_err                      ;
181
 
182
 
183
// Wishbone Slave Buses
184
wire      [31:0]            s_wb_adr      [WB_SLAVES-1:0];
185 35 csantifort
wire      [WB_SWIDTH-1:0]   s_wb_sel      [WB_SLAVES-1:0];
186 2 csantifort
wire      [WB_SLAVES-1:0]   s_wb_we                      ;
187 35 csantifort
wire      [WB_DWIDTH-1:0]   s_wb_dat_w    [WB_SLAVES-1:0];
188
wire      [WB_DWIDTH-1:0]   s_wb_dat_r    [WB_SLAVES-1:0];
189 2 csantifort
wire      [WB_SLAVES-1:0]   s_wb_cyc                     ;
190
wire      [WB_SLAVES-1:0]   s_wb_stb                     ;
191
wire      [WB_SLAVES-1:0]   s_wb_ack                     ;
192
wire      [WB_SLAVES-1:0]   s_wb_err                     ;
193
 
194 35 csantifort
wire      [31:0]            emm_wb_adr;
195
wire      [3:0]             emm_wb_sel;
196
wire                        emm_wb_we;
197
wire      [31:0]            emm_wb_rdat;
198
wire      [31:0]            emm_wb_wdat;
199
wire                        emm_wb_cyc;
200
wire                        emm_wb_stb;
201
wire                        emm_wb_ack;
202
wire                        emm_wb_err;
203 2 csantifort
 
204 35 csantifort
wire      [31:0]            ems_wb_adr;
205
wire      [3:0]             ems_wb_sel;
206
wire                        ems_wb_we;
207
wire      [31:0]            ems_wb_rdat;
208
wire      [31:0]            ems_wb_wdat;
209
wire                        ems_wb_cyc;
210
wire                        ems_wb_stb;
211
wire                        ems_wb_ack;
212
wire                        ems_wb_err;
213
 
214
 
215 2 csantifort
// ======================================
216
// Interrupts
217
// ======================================
218
wire                        amber_irq;
219
wire                        amber_firq;
220
wire                        ethmac_int;
221
wire                        test_reg_irq;
222
wire                        test_reg_firq;
223
wire                        uart0_int;
224
wire                        uart1_int;
225
wire      [2:0]             timer_int;
226
 
227
 
228
// ======================================
229
// Clocks and Resets Module
230
// ======================================
231
clocks_resets u_clocks_resets (
232
    .i_brd_rst          ( brd_rst           ),
233
    .i_brd_clk_n        ( brd_clk_n         ),
234
    .i_brd_clk_p        ( brd_clk_p         ),
235
    .i_ddr_calib_done   ( phy_init_done     ),
236
    .o_sys_rst          ( sys_rst           ),
237
    .o_sys_clk          ( sys_clk           ),
238
    .o_clk_200          ( clk_200           )
239
);
240
 
241
 
242
// -------------------------------------------------------------
243
// Instantiate Amber Processor Core
244
// -------------------------------------------------------------
245 15 csantifort
`ifdef AMBER_A25_CORE
246
a25_core u_amber (
247
`else
248
a23_core u_amber (
249
`endif
250 2 csantifort
    .i_clk          ( sys_clk         ),
251
 
252
    .i_irq          ( amber_irq       ),
253
    .i_firq         ( amber_firq      ),
254
 
255 15 csantifort
    .i_system_rdy   ( system_rdy      ),
256 2 csantifort
 
257
    .o_wb_adr       ( m_wb_adr  [1]   ),
258
    .o_wb_sel       ( m_wb_sel  [1]   ),
259
    .o_wb_we        ( m_wb_we   [1]   ),
260
    .i_wb_dat       ( m_wb_dat_r[1]   ),
261
    .o_wb_dat       ( m_wb_dat_w[1]   ),
262
    .o_wb_cyc       ( m_wb_cyc  [1]   ),
263
    .o_wb_stb       ( m_wb_stb  [1]   ),
264
    .i_wb_ack       ( m_wb_ack  [1]   ),
265
    .i_wb_err       ( m_wb_err  [1]   )
266
);
267
 
268
 
269
// -------------------------------------------------------------
270
// Instantiate B100 Ethernet MAC
271
// -------------------------------------------------------------
272 35 csantifort
 
273 2 csantifort
eth_top u_eth_top (
274
    .wb_clk_i                   ( sys_clk                ),
275
    .wb_rst_i                   ( sys_rst                ),
276
 
277
    // WISHBONE slave
278 35 csantifort
    .wb_adr_i                   ( ems_wb_adr [11:2]      ),
279
    .wb_sel_i                   ( ems_wb_sel             ),
280
    .wb_we_i                    ( ems_wb_we              ),
281
    .wb_cyc_i                   ( ems_wb_cyc             ),
282
    .wb_stb_i                   ( ems_wb_stb             ),
283
    .wb_ack_o                   ( ems_wb_ack             ),
284
    .wb_dat_i                   ( ems_wb_wdat            ),
285
    .wb_dat_o                   ( ems_wb_rdat            ),
286
    .wb_err_o                   ( ems_wb_err             ),
287 2 csantifort
 
288
    // WISHBONE master
289 35 csantifort
    .m_wb_adr_o                 ( emm_wb_adr             ),
290
    .m_wb_sel_o                 ( emm_wb_sel             ),
291
    .m_wb_we_o                  ( emm_wb_we              ),
292
    .m_wb_dat_i                 ( emm_wb_rdat            ),
293
    .m_wb_dat_o                 ( emm_wb_wdat            ),
294
    .m_wb_cyc_o                 ( emm_wb_cyc             ),
295
    .m_wb_stb_o                 ( emm_wb_stb             ),
296
    .m_wb_ack_i                 ( emm_wb_ack             ),
297
    .m_wb_err_i                 ( emm_wb_err             ),
298 2 csantifort
 
299
    // MAC to PHY I/F
300
    .mtx_clk_pad_i              ( mtx_clk_pad_i          ),
301
    .mtxd_pad_o                 ( mtxd_pad_o             ),
302
    .mtxen_pad_o                ( mtxen_pad_o            ),
303
    .mtxerr_pad_o               ( mtxerr_pad_o           ),
304
    .mrx_clk_pad_i              ( mrx_clk_pad_i          ),
305
    .mrxd_pad_i                 ( mrxd_pad_i             ),
306
    .mrxdv_pad_i                ( mrxdv_pad_i            ),
307
    .mrxerr_pad_i               ( mrxerr_pad_i           ),
308
    .mcoll_pad_i                ( mcoll_pad_i            ),
309
    .mcrs_pad_i                 ( mcrs_pad_i             ),
310
    .md_pad_i                   ( md_pad_i               ),
311
    .mdc_pad_o                  ( mdc_pad_o              ),
312
    .md_pad_o                   ( md_pad_o               ),
313
    .md_padoe_o                 ( md_padoe_o             ),
314
 
315
    // Interrupt
316
    .int_o                      ( ethmac_int             )
317
);
318
 
319
 
320
// -------------------------------------------------------------
321
// Instantiate Ethernet Control Interface tri-state buffer
322
// -------------------------------------------------------------
323
`ifdef XILINX_FPGA
324
IOBUF u_iobuf (
325
`else
326
generic_iobuf u_iobuf (
327
`endif
328
    .O                          ( md_pad_i              ),
329
    .IO                         ( md_pad_io             ),
330
    .I                          ( md_pad_o              ),
331
    // T is high for tri-state output
332
    .T                          ( ~md_padoe_o           )
333
);
334
 
335
// Ethernet MII PHY reset
336 61 csantifort
//assign phy_reset_n = !sys_rst;
337 2 csantifort
 
338 15 csantifort
// Halt core until system is ready
339
assign system_rdy = phy_init_done && !sys_rst;
340 2 csantifort
 
341
// -------------------------------------------------------------
342
// Instantiate Boot Memory - 8KBytes of Embedded SRAM
343
// -------------------------------------------------------------
344
 
345 36 csantifort
generate
346
if (WB_DWIDTH == 32) begin : boot_mem32
347
    boot_mem32 u_boot_mem (
348
        .i_wb_clk               ( sys_clk         ),
349
        .i_wb_adr               ( s_wb_adr  [1]   ),
350
        .i_wb_sel               ( s_wb_sel  [1]   ),
351
        .i_wb_we                ( s_wb_we   [1]   ),
352
        .o_wb_dat               ( s_wb_dat_r[1]   ),
353
        .i_wb_dat               ( s_wb_dat_w[1]   ),
354
        .i_wb_cyc               ( s_wb_cyc  [1]   ),
355
        .i_wb_stb               ( s_wb_stb  [1]   ),
356
        .o_wb_ack               ( s_wb_ack  [1]   ),
357
        .o_wb_err               ( s_wb_err  [1]   )
358
    );
359
end
360
else begin : boot_mem128
361
    boot_mem128 u_boot_mem (
362
        .i_wb_clk               ( sys_clk         ),
363
        .i_wb_adr               ( s_wb_adr  [1]   ),
364
        .i_wb_sel               ( s_wb_sel  [1]   ),
365
        .i_wb_we                ( s_wb_we   [1]   ),
366
        .o_wb_dat               ( s_wb_dat_r[1]   ),
367
        .i_wb_dat               ( s_wb_dat_w[1]   ),
368
        .i_wb_cyc               ( s_wb_cyc  [1]   ),
369
        .i_wb_stb               ( s_wb_stb  [1]   ),
370
        .o_wb_ack               ( s_wb_ack  [1]   ),
371
        .o_wb_err               ( s_wb_err  [1]   )
372
    );
373
end
374
endgenerate
375 2 csantifort
 
376
 
377
// -------------------------------------------------------------
378
// Instantiate UART0
379
// -------------------------------------------------------------
380 35 csantifort
uart  #(
381
    .WB_DWIDTH              ( WB_DWIDTH       ),
382
    .WB_SWIDTH              ( WB_SWIDTH       )
383
    )
384
u_uart0 (
385 2 csantifort
    .i_clk                  ( sys_clk        ),
386
 
387
    .o_uart_int             ( uart0_int      ),
388
 
389
    .i_uart_cts_n           ( i_uart0_rts    ),
390
    .o_uart_txd             ( o_uart0_rx     ),
391
    .o_uart_rts_n           ( o_uart0_cts    ),
392
    .i_uart_rxd             ( i_uart0_tx     ),
393
 
394
    .i_wb_adr               ( s_wb_adr  [3]  ),
395
    .i_wb_sel               ( s_wb_sel  [3]  ),
396
    .i_wb_we                ( s_wb_we   [3]  ),
397
    .o_wb_dat               ( s_wb_dat_r[3]  ),
398
    .i_wb_dat               ( s_wb_dat_w[3]  ),
399
    .i_wb_cyc               ( s_wb_cyc  [3]  ),
400
    .i_wb_stb               ( s_wb_stb  [3]  ),
401
    .o_wb_ack               ( s_wb_ack  [3]  ),
402
    .o_wb_err               ( s_wb_err  [3]  )
403
);
404
 
405
 
406
// -------------------------------------------------------------
407
// Instantiate UART1
408
// -------------------------------------------------------------
409 35 csantifort
uart  #(
410
    .WB_DWIDTH              ( WB_DWIDTH       ),
411
    .WB_SWIDTH              ( WB_SWIDTH       )
412
    )
413
u_uart1 (
414 2 csantifort
    .i_clk                  ( sys_clk        ),
415
 
416
    .o_uart_int             ( uart1_int      ),
417
 
418
    // These are not connected. ONly pins for 1 UART
419
    // on my development board
420
    .i_uart_cts_n           ( 1'd1           ),
421
    .o_uart_txd             (                ),
422
    .o_uart_rts_n           (                ),
423
    .i_uart_rxd             ( 1'd1           ),
424
 
425
    .i_wb_adr               ( s_wb_adr  [4]  ),
426
    .i_wb_sel               ( s_wb_sel  [4]  ),
427
    .i_wb_we                ( s_wb_we   [4]  ),
428
    .o_wb_dat               ( s_wb_dat_r[4]  ),
429
    .i_wb_dat               ( s_wb_dat_w[4]  ),
430
    .i_wb_cyc               ( s_wb_cyc  [4]  ),
431
    .i_wb_stb               ( s_wb_stb  [4]  ),
432
    .o_wb_ack               ( s_wb_ack  [4]  ),
433
    .o_wb_err               ( s_wb_err  [4]  )
434
);
435
 
436
 
437
// -------------------------------------------------------------
438
// Instantiate Test Module
439
//   - includes register used to terminate tests
440
// -------------------------------------------------------------
441 35 csantifort
test_module #(
442
    .WB_DWIDTH              ( WB_DWIDTH      ),
443
    .WB_SWIDTH              ( WB_SWIDTH      )
444
    )
445
u_test_module (
446 2 csantifort
    .i_clk                  ( sys_clk        ),
447
 
448
    .o_irq                  ( test_reg_irq   ),
449
    .o_firq                 ( test_reg_firq  ),
450 11 csantifort
    .o_mem_ctrl             ( test_mem_ctrl  ),
451 2 csantifort
    .i_wb_adr               ( s_wb_adr  [5]  ),
452
    .i_wb_sel               ( s_wb_sel  [5]  ),
453
    .i_wb_we                ( s_wb_we   [5]  ),
454
    .o_wb_dat               ( s_wb_dat_r[5]  ),
455
    .i_wb_dat               ( s_wb_dat_w[5]  ),
456
    .i_wb_cyc               ( s_wb_cyc  [5]  ),
457
    .i_wb_stb               ( s_wb_stb  [5]  ),
458
    .o_wb_ack               ( s_wb_ack  [5]  ),
459 61 csantifort
    .o_wb_err               ( s_wb_err  [5]  ),
460
    .o_led                  ( led            ),
461
    .o_phy_rst_n            ( phy_reset_n    )
462 2 csantifort
);
463
 
464
 
465
// -------------------------------------------------------------
466
// Instantiate Timer Module
467
// -------------------------------------------------------------
468 35 csantifort
timer_module  #(
469
    .WB_DWIDTH              ( WB_DWIDTH      ),
470
    .WB_SWIDTH              ( WB_SWIDTH      )
471
    )
472
u_timer_module (
473 2 csantifort
    .i_clk                  ( sys_clk        ),
474
 
475
    // Interrupt outputs
476
    .o_timer_int            ( timer_int      ),
477
 
478
    // Wishbone interface
479
    .i_wb_adr               ( s_wb_adr  [6]  ),
480
    .i_wb_sel               ( s_wb_sel  [6]  ),
481
    .i_wb_we                ( s_wb_we   [6]  ),
482
    .o_wb_dat               ( s_wb_dat_r[6]  ),
483
    .i_wb_dat               ( s_wb_dat_w[6]  ),
484
    .i_wb_cyc               ( s_wb_cyc  [6]  ),
485
    .i_wb_stb               ( s_wb_stb  [6]  ),
486
    .o_wb_ack               ( s_wb_ack  [6]  ),
487
    .o_wb_err               ( s_wb_err  [6]  )
488
);
489
 
490
 
491
// -------------------------------------------------------------
492
// Instantiate Interrupt Controller Module
493
// -------------------------------------------------------------
494 35 csantifort
interrupt_controller  #(
495
    .WB_DWIDTH              ( WB_DWIDTH      ),
496
    .WB_SWIDTH              ( WB_SWIDTH      )
497
    )
498
u_interrupt_controller (
499 2 csantifort
    .i_clk                  ( sys_clk        ),
500
 
501
    // Interrupt outputs
502
    .o_irq                  ( amber_irq      ),
503
    .o_firq                 ( amber_firq     ),
504
 
505
    // Interrupt inputs
506
    .i_uart0_int            ( uart0_int      ),
507
    .i_uart1_int            ( uart1_int      ),
508
    .i_ethmac_int           ( ethmac_int     ),
509
    .i_test_reg_irq         ( test_reg_irq   ),
510
    .i_test_reg_firq        ( test_reg_firq  ),
511
    .i_tm_timer_int         ( timer_int      ),
512
 
513
    // Wishbone interface
514
    .i_wb_adr               ( s_wb_adr  [7]  ),
515
    .i_wb_sel               ( s_wb_sel  [7]  ),
516
    .i_wb_we                ( s_wb_we   [7]  ),
517
    .o_wb_dat               ( s_wb_dat_r[7]  ),
518
    .i_wb_dat               ( s_wb_dat_w[7]  ),
519
    .i_wb_cyc               ( s_wb_cyc  [7]  ),
520
    .i_wb_stb               ( s_wb_stb  [7]  ),
521
    .o_wb_ack               ( s_wb_ack  [7]  ),
522
    .o_wb_err               ( s_wb_err  [7]  )
523
);
524
 
525
 
526
 
527
 
528
`ifndef XILINX_FPGA
529
    // ======================================
530
    // Instantiate non-synthesizable main memory model
531
    // ======================================
532
 
533
    assign phy_init_done = 1'd1;
534
 
535 35 csantifort
    main_mem #(
536
                .WB_DWIDTH             ( WB_DWIDTH             ),
537
                .WB_SWIDTH             ( WB_SWIDTH             )
538
                )
539
    u_main_mem (
540 2 csantifort
               .i_clk                  ( sys_clk               ),
541 11 csantifort
               .i_mem_ctrl             ( test_mem_ctrl         ),
542 2 csantifort
               .i_wb_adr               ( s_wb_adr  [2]         ),
543
               .i_wb_sel               ( s_wb_sel  [2]         ),
544
               .i_wb_we                ( s_wb_we   [2]         ),
545
               .o_wb_dat               ( s_wb_dat_r[2]         ),
546
               .i_wb_dat               ( s_wb_dat_w[2]         ),
547
               .i_wb_cyc               ( s_wb_cyc  [2]         ),
548
               .i_wb_stb               ( s_wb_stb  [2]         ),
549
               .o_wb_ack               ( s_wb_ack  [2]         ),
550
               .o_wb_err               ( s_wb_err  [2]         )
551
            );
552
 
553
`endif
554
 
555
 
556
`ifdef XILINX_SPARTAN6_FPGA
557
    // -------------------------------------------------------------
558
    // Instantiate Wishbone to Xilinx Spartan-6 DDR3 Bridge
559
    // -------------------------------------------------------------
560
    // The clock crossing fifo for spartan-6 is build into the mcb
561 36 csantifort
    wb_xs6_ddr3_bridge   #(
562
        .WB_DWIDTH              ( WB_DWIDTH             ),
563
        .WB_SWIDTH              ( WB_SWIDTH             )
564
        )
565
    u_wb_xs6_ddr3_bridge(
566 2 csantifort
        .i_clk                  ( sys_clk               ),
567
 
568
        .o_cmd_en               ( c3_p0_cmd_en          ),
569
        .o_cmd_instr            ( c3_p0_cmd_instr       ),
570
        .o_cmd_byte_addr        ( c3_p0_cmd_byte_addr   ),
571
        .i_cmd_full             ( c3_p0_cmd_full        ),
572
        .i_wr_full              ( c3_p0_wr_full         ),
573
        .o_wr_en                ( c3_p0_wr_en           ),
574
        .o_wr_mask              ( c3_p0_wr_mask         ),
575
        .o_wr_data              ( c3_p0_wr_data         ),
576
        .i_rd_data              ( c3_p0_rd_data         ),
577
        .i_rd_empty             ( c3_p0_rd_empty        ),
578
 
579 11 csantifort
        .i_mem_ctrl             ( test_mem_ctrl         ),
580 2 csantifort
        .i_wb_adr               ( s_wb_adr  [2]         ),
581
        .i_wb_sel               ( s_wb_sel  [2]         ),
582
        .i_wb_we                ( s_wb_we   [2]         ),
583
        .o_wb_dat               ( s_wb_dat_r[2]         ),
584
        .i_wb_dat               ( s_wb_dat_w[2]         ),
585
        .i_wb_cyc               ( s_wb_cyc  [2]         ),
586
        .i_wb_stb               ( s_wb_stb  [2]         ),
587
        .o_wb_ack               ( s_wb_ack  [2]         ),
588
        .o_wb_err               ( s_wb_err  [2]         )
589
    );
590
 
591
 
592
    // -------------------------------------------------------------
593
    // Instantiate Xilinx Spartan-6 FPGA MCB-DDR3 Controller
594
    // -------------------------------------------------------------
595
    mcb_ddr3 u_mcb_ddr3  (
596
 
597
                // DDR3 signals
598
               .mcb3_dram_dq            ( ddr3_dq               ),
599
               .mcb3_dram_a             ( ddr3_addr             ),
600
               .mcb3_dram_ba            ( ddr3_ba               ),
601
               .mcb3_dram_ras_n         ( ddr3_ras_n            ),
602
               .mcb3_dram_cas_n         ( ddr3_cas_n            ),
603
               .mcb3_dram_we_n          ( ddr3_we_n             ),
604
               .mcb3_dram_odt           ( ddr3_odt              ),
605
               .mcb3_dram_reset_n       ( ddr3_reset_n          ),
606
               .mcb3_dram_cke           ( ddr3_cke              ),
607
               .mcb3_dram_udm           ( ddr3_dm[1]            ),
608
               .mcb3_dram_dm            ( ddr3_dm[0]            ),
609
               .mcb3_rzq                ( mcb3_rzq              ),
610
               .mcb3_zio                ( mcb3_zio              ),
611
               .mcb3_dram_udqs          ( ddr3_dqs_p[1]         ),
612
               .mcb3_dram_dqs           ( ddr3_dqs_p[0]         ),
613
               .mcb3_dram_udqs_n        ( ddr3_dqs_n[1]         ),
614
               .mcb3_dram_dqs_n         ( ddr3_dqs_n[0]         ),
615
               .mcb3_dram_ck            ( ddr3_ck_p             ),
616
               .mcb3_dram_ck_n          ( ddr3_ck_n             ),
617
 
618
               .sys_clk_ibufg           ( clk_200               ),
619
               .c3_sys_rst_n            ( brd_rst               ),
620
 
621
               .c3_calib_done           ( phy_init_done         ),
622
 
623
               .c3_p0_cmd_clk           ( sys_clk               ),
624
 
625
               .c3_p0_cmd_en            ( c3_p0_cmd_en          ),
626
               .c3_p0_cmd_instr         ( c3_p0_cmd_instr       ),
627
               .c3_p0_cmd_bl            ( 6'd0                  ),
628
               .c3_p0_cmd_byte_addr     ( c3_p0_cmd_byte_addr   ),
629
               .c3_p0_cmd_empty         (                       ),
630
               .c3_p0_cmd_full          ( c3_p0_cmd_full        ),
631
 
632
               .c3_p0_wr_clk            ( sys_clk               ),
633
 
634
               .c3_p0_wr_en             ( c3_p0_wr_en           ),
635
               .c3_p0_wr_mask           ( c3_p0_wr_mask         ),
636
               .c3_p0_wr_data           ( c3_p0_wr_data         ),
637
               .c3_p0_wr_full           ( c3_p0_wr_full         ),
638
               .c3_p0_wr_empty          (                       ),
639
               .c3_p0_wr_count          (                       ),
640
               .c3_p0_wr_underrun       (                       ),
641
               .c3_p0_wr_error          (                       ),
642
 
643
               .c3_p0_rd_clk            ( sys_clk               ),
644
 
645
               .c3_p0_rd_en             ( 1'd1                  ),
646
               .c3_p0_rd_data           ( c3_p0_rd_data         ),
647
               .c3_p0_rd_full           (                       ),
648
               .c3_p0_rd_empty          ( c3_p0_rd_empty        ),
649
               .c3_p0_rd_count          (                       ),
650
               .c3_p0_rd_overflow       (                       ),
651
               .c3_p0_rd_error          (                       )
652
       );
653
`endif
654
 
655
 
656
`ifdef XILINX_VIRTEX6_FPGA
657
    // -------------------------------------------------------------
658
    // Instantiate Wishbone to Xilinx Spartan-6 DDR3 Bridge
659
    // -------------------------------------------------------------
660
    // The clock crossing fifo for virtex-6 is insode the bridge
661
    // module
662 38 csantifort
    wb_xv6_ddr3_bridge    #(
663
        .WB_DWIDTH              ( WB_DWIDTH             ),
664
        .WB_SWIDTH              ( WB_SWIDTH             )
665
        )
666
    u_wb_xv6_ddr3_bridge (
667 2 csantifort
        .i_sys_clk              ( sys_clk               ),
668
        .i_ddr_clk              ( xv6_ddr3_clk          ),
669
 
670
        .o_ddr_cmd_en           ( xv6_cmd_en            ),
671
        .o_ddr_cmd_instr        ( xv6_cmd_instr         ),
672
        .o_ddr_cmd_byte_addr    ( xv6_cmd_byte_addr     ),
673
        .i_ddr_cmd_full         ( xv6_cmd_full          ),
674
 
675
        .i_ddr_wr_full          ( xv6_wr_full           ),
676
        .o_ddr_wr_en            ( xv6_wr_en             ),
677
        .o_ddr_wr_end           ( xv6_wr_end            ),
678
        .o_ddr_wr_mask          ( xv6_wr_mask           ),
679
        .o_ddr_wr_data          ( xv6_wr_data           ),
680
 
681
        .i_ddr_rd_data          ( xv6_rd_data           ),
682
        .i_ddr_rd_valid         ( xv6_rd_data_valid     ),
683
 
684
        .i_phy_init_done        ( phy_init_done1        ),
685
        .o_phy_init_done        ( phy_init_done         ),  // delayed version
686
 
687 11 csantifort
        .i_mem_ctrl             ( test_mem_ctrl         ),
688 2 csantifort
        .i_wb_adr               ( s_wb_adr  [2]         ),
689
        .i_wb_sel               ( s_wb_sel  [2]         ),
690
        .i_wb_we                ( s_wb_we   [2]         ),
691
        .o_wb_dat               ( s_wb_dat_r[2]         ),
692
        .i_wb_dat               ( s_wb_dat_w[2]         ),
693
        .i_wb_cyc               ( s_wb_cyc  [2]         ),
694
        .i_wb_stb               ( s_wb_stb  [2]         ),
695
        .o_wb_ack               ( s_wb_ack  [2]         ),
696
        .o_wb_err               ( s_wb_err  [2]         )
697
    );
698
 
699
 
700
    // -------------------------------------------------------------
701
    // Instantiate Xilinx Virtex-6 FPGA DDR3 Controller
702
    // -------------------------------------------------------------
703
    xv6_ddr3
704
    #(          // - Skip the memory initilization sequence,
705
                .SIM_INIT_OPTION        ("SKIP_PU_DLY"              ),
706
                // - Skip the delay Calibration process
707
                .SIM_CAL_OPTION         ("FAST_CAL"                 ),
708
                .RST_ACT_LOW            ( 0                         )
709
                )
710
    u_xv6_ddr3  (
711
                // DDR3 signals
712
                .ddr3_dq                ( ddr3_dq                   ),
713
                .ddr3_addr              ( ddr3_addr                 ),
714
                .ddr3_ba                ( ddr3_ba                   ),
715
                .ddr3_ras_n             ( ddr3_ras_n                ),
716
                .ddr3_cas_n             ( ddr3_cas_n                ),
717
                .ddr3_we_n              ( ddr3_we_n                 ),
718
                .ddr3_odt               ( ddr3_odt                  ),
719
                .ddr3_reset_n           ( ddr3_reset_n              ),
720
                .ddr3_cke               ( ddr3_cke                  ),
721
                .ddr3_dm                ( ddr3_dm                   ),
722
                .ddr3_dqs_p             ( ddr3_dqs_p                ),
723
                .ddr3_dqs_n             ( ddr3_dqs_n                ),
724
                .ddr3_ck_p              ( ddr3_ck_p                 ),
725
                .ddr3_ck_n              ( ddr3_ck_n                 ),
726
                .ddr3_cs_n              ( ddr3_cs_n                 ),
727
 
728
                // DDR clock
729
                .sys_clk_p              ( sys_clk_p                 ),
730
                .sys_clk_n              ( sys_clk_n                 ),
731
                .clk_ref                ( clk_200                   ),
732
                .sys_rst                ( brd_rst                   ),
733
                .tb_rst                 (                           ),
734
                .tb_clk                 ( xv6_ddr3_clk              ),
735
                .phy_init_done          ( phy_init_done1             ),
736
 
737
                .app_en                 ( xv6_cmd_en                ),
738
                .app_cmd                ( xv6_cmd_instr             ),
739
                .tg_addr                ( xv6_cmd_byte_addr         ),
740
                .app_full               ( xv6_cmd_full              ),
741
 
742
                .app_wdf_wren           ( xv6_wr_en                 ),
743
                .app_wdf_mask           ( xv6_wr_mask               ),
744
                .app_wdf_data           ( xv6_wr_data               ),
745
                .app_wdf_end            ( xv6_wr_end                ),
746
                .app_wdf_full           ( xv6_wr_full               ),
747
 
748
                .app_rd_data            ( xv6_rd_data               ),
749
                .app_rd_data_valid      ( xv6_rd_data_valid         )
750
                );
751
 
752
`endif
753
 
754
 
755
 
756
// -------------------------------------------------------------
757
// Instantiate Wishbone Arbiter
758
// -------------------------------------------------------------
759 35 csantifort
wishbone_arbiter #(
760
    .WB_DWIDTH              ( WB_DWIDTH         ),
761
    .WB_SWIDTH              ( WB_SWIDTH         )
762
    )
763
u_wishbone_arbiter (
764 2 csantifort
    .i_wb_clk               ( sys_clk           ),
765
 
766
    // WISHBONE master 0 - Ethmac
767
    .i_m0_wb_adr            ( m_wb_adr   [0]    ),
768
    .i_m0_wb_sel            ( m_wb_sel   [0]    ),
769
    .i_m0_wb_we             ( m_wb_we    [0]    ),
770
    .o_m0_wb_dat            ( m_wb_dat_r [0]    ),
771
    .i_m0_wb_dat            ( m_wb_dat_w [0]    ),
772
    .i_m0_wb_cyc            ( m_wb_cyc   [0]    ),
773
    .i_m0_wb_stb            ( m_wb_stb   [0]    ),
774
    .o_m0_wb_ack            ( m_wb_ack   [0]    ),
775
    .o_m0_wb_err            ( m_wb_err   [0]    ),
776
 
777
 
778
    // WISHBONE master 1 - Amber Process or
779
    .i_m1_wb_adr            ( m_wb_adr   [1]    ),
780
    .i_m1_wb_sel            ( m_wb_sel   [1]    ),
781
    .i_m1_wb_we             ( m_wb_we    [1]    ),
782
    .o_m1_wb_dat            ( m_wb_dat_r [1]    ),
783
    .i_m1_wb_dat            ( m_wb_dat_w [1]    ),
784
    .i_m1_wb_cyc            ( m_wb_cyc   [1]    ),
785
    .i_m1_wb_stb            ( m_wb_stb   [1]    ),
786
    .o_m1_wb_ack            ( m_wb_ack   [1]    ),
787
    .o_m1_wb_err            ( m_wb_err   [1]    ),
788
 
789
 
790
    // WISHBONE slave 0 - Ethmac
791
    .o_s0_wb_adr            ( s_wb_adr   [0]    ),
792
    .o_s0_wb_sel            ( s_wb_sel   [0]    ),
793
    .o_s0_wb_we             ( s_wb_we    [0]    ),
794
    .i_s0_wb_dat            ( s_wb_dat_r [0]    ),
795
    .o_s0_wb_dat            ( s_wb_dat_w [0]    ),
796
    .o_s0_wb_cyc            ( s_wb_cyc   [0]    ),
797
    .o_s0_wb_stb            ( s_wb_stb   [0]    ),
798
    .i_s0_wb_ack            ( s_wb_ack   [0]    ),
799
    .i_s0_wb_err            ( s_wb_err   [0]    ),
800
 
801
 
802
    // WISHBONE slave 1 - Boot Memory
803
    .o_s1_wb_adr            ( s_wb_adr   [1]    ),
804
    .o_s1_wb_sel            ( s_wb_sel   [1]    ),
805
    .o_s1_wb_we             ( s_wb_we    [1]    ),
806
    .i_s1_wb_dat            ( s_wb_dat_r [1]    ),
807
    .o_s1_wb_dat            ( s_wb_dat_w [1]    ),
808
    .o_s1_wb_cyc            ( s_wb_cyc   [1]    ),
809
    .o_s1_wb_stb            ( s_wb_stb   [1]    ),
810
    .i_s1_wb_ack            ( s_wb_ack   [1]    ),
811
    .i_s1_wb_err            ( s_wb_err   [1]    ),
812
 
813
 
814
    // WISHBONE slave 2 - Main Memory
815
    .o_s2_wb_adr            ( s_wb_adr   [2]    ),
816
    .o_s2_wb_sel            ( s_wb_sel   [2]    ),
817
    .o_s2_wb_we             ( s_wb_we    [2]    ),
818
    .i_s2_wb_dat            ( s_wb_dat_r [2]    ),
819
    .o_s2_wb_dat            ( s_wb_dat_w [2]    ),
820
    .o_s2_wb_cyc            ( s_wb_cyc   [2]    ),
821
    .o_s2_wb_stb            ( s_wb_stb   [2]    ),
822
    .i_s2_wb_ack            ( s_wb_ack   [2]    ),
823
    .i_s2_wb_err            ( s_wb_err   [2]    ),
824
 
825
 
826
    // WISHBONE slave 3 - UART 0
827
    .o_s3_wb_adr            ( s_wb_adr   [3]    ),
828
    .o_s3_wb_sel            ( s_wb_sel   [3]    ),
829
    .o_s3_wb_we             ( s_wb_we    [3]    ),
830
    .i_s3_wb_dat            ( s_wb_dat_r [3]    ),
831
    .o_s3_wb_dat            ( s_wb_dat_w [3]    ),
832
    .o_s3_wb_cyc            ( s_wb_cyc   [3]    ),
833
    .o_s3_wb_stb            ( s_wb_stb   [3]    ),
834
    .i_s3_wb_ack            ( s_wb_ack   [3]    ),
835
    .i_s3_wb_err            ( s_wb_err   [3]    ),
836
 
837
 
838
    // WISHBONE slave 4 - UART 1
839
    .o_s4_wb_adr            ( s_wb_adr   [4]    ),
840
    .o_s4_wb_sel            ( s_wb_sel   [4]    ),
841
    .o_s4_wb_we             ( s_wb_we    [4]    ),
842
    .i_s4_wb_dat            ( s_wb_dat_r [4]    ),
843
    .o_s4_wb_dat            ( s_wb_dat_w [4]    ),
844
    .o_s4_wb_cyc            ( s_wb_cyc   [4]    ),
845
    .o_s4_wb_stb            ( s_wb_stb   [4]    ),
846
    .i_s4_wb_ack            ( s_wb_ack   [4]    ),
847
    .i_s4_wb_err            ( s_wb_err   [4]    ),
848
 
849
 
850
    // WISHBONE slave 5 - Test Module
851
    .o_s5_wb_adr            ( s_wb_adr   [5]    ),
852
    .o_s5_wb_sel            ( s_wb_sel   [5]    ),
853
    .o_s5_wb_we             ( s_wb_we    [5]    ),
854
    .i_s5_wb_dat            ( s_wb_dat_r [5]    ),
855
    .o_s5_wb_dat            ( s_wb_dat_w [5]    ),
856
    .o_s5_wb_cyc            ( s_wb_cyc   [5]    ),
857
    .o_s5_wb_stb            ( s_wb_stb   [5]    ),
858
    .i_s5_wb_ack            ( s_wb_ack   [5]    ),
859
    .i_s5_wb_err            ( s_wb_err   [5]    ),
860
 
861
 
862
    // WISHBONE slave 6 - Timer Module
863
    .o_s6_wb_adr            ( s_wb_adr   [6]    ),
864
    .o_s6_wb_sel            ( s_wb_sel   [6]    ),
865
    .o_s6_wb_we             ( s_wb_we    [6]    ),
866
    .i_s6_wb_dat            ( s_wb_dat_r [6]    ),
867
    .o_s6_wb_dat            ( s_wb_dat_w [6]    ),
868
    .o_s6_wb_cyc            ( s_wb_cyc   [6]    ),
869
    .o_s6_wb_stb            ( s_wb_stb   [6]    ),
870
    .i_s6_wb_ack            ( s_wb_ack   [6]    ),
871
    .i_s6_wb_err            ( s_wb_err   [6]    ),
872
 
873
 
874
    // WISHBONE slave 7 - Interrupt Controller
875
    .o_s7_wb_adr            ( s_wb_adr   [7]    ),
876
    .o_s7_wb_sel            ( s_wb_sel   [7]    ),
877
    .o_s7_wb_we             ( s_wb_we    [7]    ),
878
    .i_s7_wb_dat            ( s_wb_dat_r [7]    ),
879
    .o_s7_wb_dat            ( s_wb_dat_w [7]    ),
880
    .o_s7_wb_cyc            ( s_wb_cyc   [7]    ),
881
    .o_s7_wb_stb            ( s_wb_stb   [7]    ),
882
    .i_s7_wb_ack            ( s_wb_ack   [7]    ),
883
    .i_s7_wb_err            ( s_wb_err   [7]    )
884
    );
885
 
886
 
887 35 csantifort
ethmac_wb #(
888
    .WB_DWIDTH              ( WB_DWIDTH         ),
889
    .WB_SWIDTH              ( WB_SWIDTH         )
890
    )
891
u_ethmac_wb (
892
    // Wishbone arbiter side
893
    .o_m_wb_adr             ( m_wb_adr   [0]    ),
894
    .o_m_wb_sel             ( m_wb_sel   [0]    ),
895
    .o_m_wb_we              ( m_wb_we    [0]    ),
896
    .i_m_wb_rdat            ( m_wb_dat_r [0]    ),
897
    .o_m_wb_wdat            ( m_wb_dat_w [0]    ),
898
    .o_m_wb_cyc             ( m_wb_cyc   [0]    ),
899
    .o_m_wb_stb             ( m_wb_stb   [0]    ),
900
    .i_m_wb_ack             ( m_wb_ack   [0]    ),
901
    .i_m_wb_err             ( m_wb_err   [0]    ),
902 2 csantifort
 
903 35 csantifort
    // Wishbone arbiter side
904
    .i_s_wb_adr             ( s_wb_adr   [0]    ),
905
    .i_s_wb_sel             ( s_wb_sel   [0]    ),
906
    .i_s_wb_we              ( s_wb_we    [0]    ),
907
    .i_s_wb_cyc             ( s_wb_cyc   [0]    ),
908
    .i_s_wb_stb             ( s_wb_stb   [0]    ),
909
    .o_s_wb_ack             ( s_wb_ack   [0]    ),
910
    .i_s_wb_wdat            ( s_wb_dat_w [0]    ),
911
    .o_s_wb_rdat            ( s_wb_dat_r [0]    ),
912
    .o_s_wb_err             ( s_wb_err   [0]    ),
913
 
914
    // Ethmac side
915
    .i_m_wb_adr             ( emm_wb_adr        ),
916
    .i_m_wb_sel             ( emm_wb_sel        ),
917
    .i_m_wb_we              ( emm_wb_we         ),
918
    .o_m_wb_rdat            ( emm_wb_rdat       ),
919
    .i_m_wb_wdat            ( emm_wb_wdat       ),
920
    .i_m_wb_cyc             ( emm_wb_cyc        ),
921
    .i_m_wb_stb             ( emm_wb_stb        ),
922
    .o_m_wb_ack             ( emm_wb_ack        ),
923
    .o_m_wb_err             ( emm_wb_err        ),
924
 
925
    // Ethmac side
926
    .o_s_wb_adr             ( ems_wb_adr        ),
927
    .o_s_wb_sel             ( ems_wb_sel        ),
928
    .o_s_wb_we              ( ems_wb_we         ),
929
    .i_s_wb_rdat            ( ems_wb_rdat       ),
930
    .o_s_wb_wdat            ( ems_wb_wdat       ),
931
    .o_s_wb_cyc             ( ems_wb_cyc        ),
932
    .o_s_wb_stb             ( ems_wb_stb        ),
933
    .i_s_wb_ack             ( ems_wb_ack        ),
934
    .i_s_wb_err             ( ems_wb_err        )
935
);
936
 
937
 
938
 
939
 
940 2 csantifort
endmodule
941
 
942 35 csantifort
 

powered by: WebSVN 2.1.0

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