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

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [soc/] [rtl/] [or1k_soc_top.v] - Blame information for rev 17

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 xianfeng
//===============================================================================
2
//
3
//          FILE:  or1k_sco_top.v
4
// 
5
//         USAGE:  ./or1k_sco_top.v 
6
// 
7
//   DESCRIPTION:  Top of the soc
8
// 
9
//       OPTIONS:  ---
10
//  REQUIREMENTS:  ---
11
//          BUGS:  ---
12
//         NOTES:  ---
13
//        AUTHOR:  Xianfeng Zeng (ZXF), xianfeng.zeng@gmail.com
14
//                                      Xianfeng.zeng@SierraAtlantic.com
15
//       COMPANY:  
16
//       VERSION:  1.0
17
//       CREATED:  04/05/2009 12:59:12 PM HKT
18
//      REVISION:  ---
19
//===============================================================================
20
 
21
 
22
 
23
// synopsys translate_off
24
// `include "timescale.v"
25
// synopsys translate_on
26
`include "or1200/rtl/verilog/or1200_defines.v"
27
`include "or1k_soc_defines.v"
28
 
29
module or1k_soc_top(
30
        // CLK and RESET
31
        wb_clk_pad_i,           // 50 MHz to pll for cpu and other logic
32
        ddr_pll_clk_pad_i,      // 50 Mhz to ddr core
33
 
34
        rst_n_pad_i,            // to ddr core that will generate out globle reset
35
/*
36
        // Flash chip
37
        flash_rstn, flash_cen, flash_oen, flash_wen,
38
        flash_rdy, flash_d, flash_a, flash_clk_pad_i,
39
 
40
        // SDRAM
41
        mc_clk_pad_i,
42
        mem_dat_pad_io,
43
        mem_adr_pad_o,
44
        mem_dqm_pad_o,
45
        mem_ba_pad_o,
46
        mem_cs_pad_o,
47
        mem_ras_pad_o,
48
        mem_cas_pad_o,
49
        mem_we_pad_o,
50
        mem_cke_pad_o,
51
*/
52
 
53
        //DDR SDRAM
54
        ddr_mem_cs_n_o,
55
        ddr_mem_cke_o,
56
        ddr_mem_addr_o,
57
        ddr_mem_ba_o,
58
        ddr_mem_ras_n_o,
59
        ddr_mem_cas_n_o,
60
        ddr_mem_we_n_o,
61
        ddr_mem_dm_o,
62
        ddr_mem_clk_io,
63
        ddr_mem_clk_n_io,
64
        ddr_mem_dq_io,
65
        ddr_mem_dqs_io,
66
 
67
        // Ethernet
68
        eth_reset_n_pad_o,
69
        eth_tx_er_pad_o,
70
        eth_tx_clk_pad_i,
71
        eth_tx_en_pad_o,
72
        eth_txd_pad_o,
73
        eth_rx_er_pad_i,
74
        eth_rx_clk_pad_i,
75
        eth_rx_dv_pad_i,
76
        eth_rxd_pad_i,
77
        eth_col_pad_i,
78
        eth_crs_pad_i,
79
        eth_mdio_pad_io,
80
        eth_mdc_pad_o,
81
 
82
        // UART
83
        uart_stx_pad_o,
84
        uart_srx_pad_i,
85
 
86
        // GPIO
87
        gpio_a_pad_io,
88
/*
89
        // SPI_FLASH
90
        spi_flash_sclk_pad_o,
91
        spi_flash_ss_pad_o,
92
        spi_flash_miso_pad_i,
93
        spi_flash_mosi_pad_o,
94
        spi_flash_w_n_pad_o,
95
        spi_flash_hold_n_pad_o
96
*/
97
        // MMC/SD Card 
98
        sd_card_clk_pad_o,
99
        sd_card_data_pad_i,
100
        sd_card_data_pad_o,
101
        sd_card_cs_n_pad_o,
102
 
103
        // LEDs
104
        led3_pad_o
105
);
106
 
107
// System pads
108
input   wb_clk_pad_i;
109
input   ddr_pll_clk_pad_i;
110
input   rst_n_pad_i;
111
 
112
/*
113
//
114
// Flash
115
//
116
input   flash_clk_pad_i;
117
output          flash_rstn;
118
output          flash_cen;
119
output          flash_oen;
120
output          flash_wen;
121
input           flash_rdy;
122
inout   [7:0]   flash_d;
123
inout   [20:0]  flash_a;
124
 
125
// Memory controller pads
126
input           mc_clk_pad_i;
127
 
128
//
129
// SDR SDRAM
130
//
131
inout   [31:0]  mem_dat_pad_io;
132
output  [12:0]  mem_adr_pad_o;
133
output  [3:0]   mem_dqm_pad_o;
134
output  [1:0]   mem_ba_pad_o;
135
output          mem_cs_pad_o;
136
output          mem_ras_pad_o;
137
output          mem_cas_pad_o;
138
output          mem_we_pad_o;
139
output          mem_cke_pad_o;
140
*/
141
 
142
//DDR SDRAM
143
output  [0:0]     ddr_mem_cs_n_o;
144
output  [0:0]     ddr_mem_cke_o;
145
output  [12:0]   ddr_mem_addr_o;
146
output  [1:0]    ddr_mem_ba_o;
147
output          ddr_mem_ras_n_o;
148
output          ddr_mem_cas_n_o;
149
output          ddr_mem_we_n_o;
150
output  [1:0]    ddr_mem_dm_o;
151
inout   [0:0]     ddr_mem_clk_io;
152
inout   [0:0]     ddr_mem_clk_n_io;
153
inout   [15:0]   ddr_mem_dq_io;
154
inout   [1:0]    ddr_mem_dqs_io;
155
 
156
//
157
// Ethernet
158
//
159
output          eth_reset_n_pad_o;
160
output          eth_tx_er_pad_o;
161
input           eth_tx_clk_pad_i;
162
output          eth_tx_en_pad_o;
163
output  [3:0]    eth_txd_pad_o;
164
input           eth_rx_er_pad_i;
165
input           eth_rx_clk_pad_i;
166
input           eth_rx_dv_pad_i;
167
input   [3:0]    eth_rxd_pad_i;
168
input           eth_col_pad_i;
169
input           eth_crs_pad_i;
170
inout           eth_mdio_pad_io;
171
output          eth_mdc_pad_o;
172
 
173
//
174
// UART external i/f wires
175
//
176
output          uart_stx_pad_o;
177
input           uart_srx_pad_i;
178
 
179
// GPIO
180
inout [31:0]     gpio_a_pad_io;
181
 
182
/*
183
// SPI_FLASH
184
output          spi_flash_sclk_pad_o;
185
output          spi_flash_ss_pad_o;
186
input           spi_flash_miso_pad_i;
187
output          spi_flash_mosi_pad_o;
188
output          spi_flash_w_n_pad_o;
189
output          spi_flash_hold_n_pad_o;
190
*/
191
 
192
 
193
//
194
// spiMaster for MMC/SD Card
195
output sd_card_clk_pad_o;
196
input  sd_card_data_pad_i;
197
output sd_card_data_pad_o;
198
output sd_card_cs_n_pad_o;
199
 
200
//
201
// LEDs output
202
//
203
output led3_pad_o;
204
 
205
 
206
//
207
//---------------------------------------
208
// Internal Signals
209
//---------------------------------------
210
//
211
 
212
parameter dw = `OR1200_OPERAND_WIDTH;
213
parameter aw = `OR1200_OPERAND_WIDTH;
214
parameter ppic_ints = `OR1200_PIC_INTS;
215
 
216
//
217
// Signals for OR1200
218
//
219
wire    [1:0]            or1k_clmode_i = 2'd0;   // 00 WB=RISC, 01 WB=RISC/2, 10 N/A, 11 WB=RISC/4
220
 
221
//
222
// RISC misc
223
//
224
wire    [ppic_ints-1:0]  pic_ints;
225
 
226
//
227
// Instruction WISHBONE interface for OR1200
228
//
229
wire                    or1k_iwb_clk_i; // clock input
230
wire                    or1k_iwb_rst_i; // reset input
231
wire                    or1k_iwb_ack_i; // normal termination
232
wire                    or1k_iwb_err_i; // termination w/ error
233
wire                    or1k_iwb_rty_i; // termination w/ retry
234
wire    [dw-1:0] or1k_iwb_dat_i; // input data bus
235
wire                    or1k_iwb_cyc_o; // cycle valid output
236
wire    [aw-1:0] or1k_iwb_adr_o; // address bus outputs
237
wire                    or1k_iwb_stb_o; // strobe output
238
wire                    or1k_iwb_we_o;  // indicates write transfer
239
wire    [3:0]            or1k_iwb_sel_o; // byte select outputs
240
wire    [dw-1:0] or1k_iwb_dat_o; // output data bus
241
`ifdef OR1200_WB_CAB
242
wire                    or1k_iwb_cab_o; // indicates consecutive address burst
243
`endif
244
`ifdef OR1200_WB_B3
245
wire    [2:0]            or1k_iwb_cti_o; // cycle type identifier
246
wire    [1:0]            or1k_iwb_bte_o; // burst type extension
247
`endif
248
 
249
//
250
// Data WISHBONE interface for OR1200
251
//
252
wire                    or1k_dwb_clk_i; // clock input
253
wire                    or1k_dwb_rst_i; // reset input
254
wire                    or1k_dwb_ack_i; // normal termination
255
wire                    or1k_dwb_err_i; // termination w/ error
256
wire                    or1k_dwb_rty_i; // termination w/ retry
257
wire    [dw-1:0] or1k_dwb_dat_i; // input data bus
258
wire                    or1k_dwb_cyc_o; // cycle valid output
259
wire    [aw-1:0] or1k_dwb_adr_o; // address bus outputs
260
wire                    or1k_dwb_stb_o; // strobe output
261
wire                    or1k_dwb_we_o;  // indicates write transfer
262
wire    [3:0]            or1k_dwb_sel_o; // byte select outputs
263
wire    [dw-1:0] or1k_dwb_dat_o; // output data bus
264
`ifdef OR1200_WB_CAB
265
wire                    or1k_dwb_cab_o; // indicates consecutive address burst
266
`endif
267
`ifdef OR1200_WB_B3
268
wire    [2:0]            or1k_dwb_cti_o; // cycle type identifier
269
wire    [1:0]            or1k_dwb_bte_o; // burst type extension
270
`endif
271
 
272
/*
273
// MEM_IF_WB_SLAVE
274
wire    [31:0]  mem_if_wb_data_i;
275
wire    [31:0]  mem_if_wb_data_o;
276
wire    [31:0]  mem_if_wb_addr_i;
277
wire    [3:0]   mem_if_wb_sel_i;
278
wire            mem_if_wb_we_i;
279
wire            mem_if_wb_cyc_i;
280
wire            mem_if_wb_stb_i;
281
wire            mem_if_wb_ack_o;
282
wire            mem_if_wb_err_o;
283
 
284
//
285
// Flash controller slave i/f wires
286
//
287
wire    [31:0]          wb_fs_dat_i;
288
wire    [31:0]          wb_fs_dat_o;
289
wire    [31:0]          wb_fs_adr_i;
290
wire    [3:0]           wb_fs_sel_i;
291
wire                    wb_fs_we_i;
292
wire                    wb_fs_cyc_i;
293
wire                    wb_fs_stb_i;
294
wire                    wb_fs_ack_o;
295
wire                    wb_fs_err_o;
296
*/
297
 
298
//
299
// UART16550 core slave i/f wires
300
//
301
wire    [31:0]           wb_us_dat_i;
302
wire    [31:0]           wb_us_dat_o;
303
wire    [31:0]           wb_us_adr_i;
304
wire    [3:0]            wb_us_sel_i;
305
wire                    wb_us_we_i;
306
wire                    wb_us_cyc_i;
307
wire                    wb_us_stb_i;
308
wire                    wb_us_ack_o;
309
//wire                  wb_us_err_o;
310
 
311
// CPU signals for advanced debug interface
312
wire    [31:0]   dbg_cpu0_addr_o;
313
wire    [31:0]   dbg_cpu0_data_i;
314
wire    [31:0]   dbg_cpu0_data_o;
315
wire            dbg_cpu0_bp_i;
316
wire            dbg_cpu0_stall_o;
317
wire            dbg_cpu0_stb_o;
318
wire            dbg_cpu0_we_o;
319
wire            dbg_cpu0_ack_i;
320
 
321
wire            dbg_cpu0_rst_o;
322
 
323
 
324
//
325
// reset_request output from DDR core
326
//
327
wire    reset_request_n;
328
 
329
//
330
// for internal clk
331
//
332
wire    clk_cpu_25;     // cpu clk
333
wire    spiSysClk;      // spiMaster logic clock
334
 
335
//
336
// SD Loader
337
//
338
//wire        sd_loader_rst_o;
339
//wire        sd_loader_done_o;
340
 
341
//---------------------------------------
342
//
343
// Assign wires to pads
344
//
345
wire wb_rst_pad_i;
346
reg [1:0] count;
347
 
348
//
349
// generate wb_rst_pad_i by sd_loader_rst_o that is 
350
// from SD Loader 
351
//
352
/*
353
always @(posedge clk_cpu_25 or negedge reset_request_n)
354
begin
355
        if (~reset_request_n) begin
356
                wb_rst_pad_i <= 1'b1;
357
                count <= 2'b00;
358
        end
359
        else if (count != 2'b11) begin
360
                count <= count + 1;
361
        end
362
        else
363
                wb_rst_pad_i <= 1'b0;
364
end
365
*/
366
assign wb_rst_pad_i = ~reset_request_n; // ~rst_n_pad_i;
367
assign eth_reset_n_pad_o = ~wb_rst_pad_i;
368
 
369
//
370
// Unused interrupts
371
//
372
assign pic_ints[`APP_INT_RES1] = 'b0;
373
assign pic_ints[`APP_INT_RES3] = 'b0;
374
 
375
//
376
//---------------------------------------
377
// Compoments
378
//---------------------------------------
379
//
380
 
381
//
382
// Altera PLL
383
//
384
altera_pll pll (
385
        .inclk0 (wb_clk_pad_i),
386
        .c0     (),             // 25MHz for wb
387
        .c1     (clk_cpu_25),   // 30MHz 
388
        .c2     (),             // 35Mhz
389
        .c3     (spiSysClk),    // 50Mhz
390
        .locked ()
391
);
392
 
393
//
394
// OR1K CPU
395
//
396
 
397
or1200_top cpu(
398
        // System
399
        .clk_i          (clk_cpu_25),
400
        .rst_i          (wb_rst_pad_i | dbg_cpu0_rst_o),
401
 
402
        .clmode_i       (or1k_clmode_i),
403
 
404
        // Interrupts
405
        .pic_ints_i     (pic_ints),
406
 
407
        // Instruction WISHBONE INTERFACE
408
        .iwb_clk_i      (clk_cpu_25),
409
        .iwb_rst_i      (wb_rst_pad_i),
410
        .iwb_ack_i      (or1k_iwb_ack_i),
411
        .iwb_err_i      (or1k_iwb_err_i),
412
        .iwb_rty_i      (or1k_iwb_rty_i),
413
        .iwb_dat_i      (or1k_iwb_dat_i),
414
        .iwb_cyc_o      (or1k_iwb_cyc_o),
415
        .iwb_adr_o      (or1k_iwb_adr_o),
416
        .iwb_stb_o      (or1k_iwb_stb_o),
417
        .iwb_we_o       (or1k_iwb_we_o),
418
        .iwb_sel_o      (or1k_iwb_sel_o),
419
        .iwb_dat_o      (or1k_iwb_dat_o),
420
 
421
`ifdef NO_USED_CURRENTLY
422
 
423
`ifdef OR1200_WB_CAB
424
        iwb_cab_o,
425
`endif
426
`ifdef OR1200_WB_B3
427
        iwb_cti_o, iwb_bte_o,
428
`endif
429
`endif // NO_USED_CURRENTLY
430
 
431
        // Data WISHBONE INTERFACE
432
        .dwb_clk_i      (clk_cpu_25),
433
        .dwb_rst_i      (wb_rst_pad_i),
434
        .dwb_ack_i      (or1k_dwb_ack_i),
435
        .dwb_err_i      (or1k_dwb_err_i),
436
        .dwb_rty_i      (or1k_dwb_rty_i),
437
        .dwb_dat_i      (or1k_dwb_dat_i),
438
        .dwb_cyc_o      (or1k_dwb_cyc_o),
439
        .dwb_adr_o      (or1k_dwb_adr_o),
440
        .dwb_stb_o      (or1k_dwb_stb_o),
441
        .dwb_we_o       (or1k_dwb_we_o),
442
        .dwb_sel_o      (or1k_dwb_sel_o),
443
        .dwb_dat_o      (or1k_dwb_dat_o),
444
 
445
`ifdef OR1200_WB_CAB
446
        .dwb_cab_o      (),
447
`endif
448
 
449
`ifdef OR1200_WB_B3
450
        .dwb_cti_o      (),
451
        .dwb_bte_o      (),
452
`endif
453
 
454
        // External Debug Interface
455
        .dbg_stall_i    (dbg_cpu0_stall_o),
456
        .dbg_ewt_i      (1'b0),
457
        .dbg_lss_o      (),
458
        .dbg_is_o       (),
459
        .dbg_wp_o       (),
460
        .dbg_bp_o       (dbg_cpu0_bp_i),
461
        .dbg_stb_i      (dbg_cpu0_stb_o),
462
        .dbg_we_i       (dbg_cpu0_we_o),
463
        .dbg_adr_i      (dbg_cpu0_addr_o),
464
        .dbg_dat_i      (dbg_cpu0_data_o),
465
        .dbg_dat_o      (dbg_cpu0_data_i),
466
        .dbg_ack_o      (dbg_cpu0_ack_i),
467
 
468
        // Power Management
469
        .pm_cpustall_i  (1'b0),
470
        .pm_clksd_o     (),
471
        .pm_dc_gate_o   (),
472
        .pm_ic_gate_o   (),
473
        .pm_dmmu_gate_o (),
474
        .pm_immu_gate_o (),
475
        .pm_tt_gate_o   (),
476
        .pm_cpu_gate_o  (),
477
        .pm_wakeup_o    (),
478
        .pm_lvolt_o     ()
479
);
480
 
481
/*
482
flash_top flash_top (
483
 
484
        // WISHBONE common
485
        .wb_clk_i       ( wb_clk_pad_i ),
486
        .wb_rst_i       ( wb_rst_pad_i ),
487
 
488
        // WISHBONE slave
489
        .wb_dat_i       ( wb_fs_dat_i ),
490
        .wb_dat_o       ( wb_fs_dat_o ),
491
        .wb_adr_i       ( wb_fs_adr_i ),
492
        .wb_sel_i       ( wb_fs_sel_i ),
493
        .wb_we_i        ( wb_fs_we_i  ),
494
        .wb_cyc_i       ( wb_fs_cyc_i ),
495
        .wb_stb_i       ( wb_fs_stb_i ),
496
        .wb_ack_o       ( wb_fs_ack_o ),
497
        .wb_err_o       ( wb_fs_err_o ),
498
 
499
        // Flash external
500
        .flash_rstn     ( flash_rstn ),
501
        .cen            ( flash_cen ),
502
        .oen            ( flash_oen ),
503
        .wen            ( flash_wen ),
504
        .rdy            ( flash_rdy ),
505
        .d              ( flash_d ),
506
        .a              ( flash_a ),
507
        .a_oe           ( )
508
);
509
*/
510
 
511
`ifdef CONFIG_USE_SRAM
512
//
513
// SRAM controller slave i/f wires
514
//
515
wire    [31:0]          wb_ss_dat_i;
516
wire    [31:0]          wb_ss_dat_o;
517
wire    [31:0]          wb_ss_adr_i;
518
wire    [3:0]           wb_ss_sel_i;
519
wire                    wb_ss_we_i;
520
wire                    wb_ss_cyc_i;
521
wire                    wb_ss_stb_i;
522
wire                    wb_ss_ack_o;
523
wire                    wb_ss_err_o;
524
altera_ram_top     sram_top (
525
 
526
        // WISHBONE common
527
        .wb_clk_i       ( clk_cpu_25 ),
528
        .wb_rst_i       ( wb_rst_pad_i ),
529
 
530
        // WISHBONE slave
531
        .wb_dat_i       ( wb_ss_dat_i ),
532
        .wb_dat_o       ( wb_ss_dat_o ),
533
        .wb_adr_i       ( wb_ss_adr_i ),
534
        .wb_sel_i       ( wb_ss_sel_i ),
535
        .wb_we_i        ( wb_ss_we_i  ),
536
        .wb_cyc_i       ( wb_ss_cyc_i ),
537
        .wb_stb_i       ( wb_ss_stb_i ),
538
        .wb_ack_o       ( wb_ss_ack_o ),
539
        .wb_err_o       ( wb_ss_err_o )
540
);
541
 
542
`else
543
 
544
//
545
// memory controller
546
//
547
wire            mem_dat_pad_oe,mem_con_pad_oe;
548
wire [23:0]      mc_addr_wire_o;
549
wire [31:0]      mem_dat_pad_i, mem_dat_pad_o;// mem_dat_pad_oe is now declared lower! - Julius
550
//wire [1:0]    mem_dqm_pad_oe;
551
wire [12:0]      mem_adr_pad_oe;
552
//wire [1:0]    mem_ba_pad_oe;
553
wire [7:0]       mem_csi_pad_o;
554
wire [7:0]       mem_csi_pad_oe;
555
wire            mem_ras_pad_oe, mem_cas_pad_oe, mem_we_pad_oe, mem_cke_pad_oe;
556
 
557
mc_top mem_if(
558
        .clk_i          (clk_cpu_25),
559
        .rst_i          (wb_rst_pad_i), // The reset is asynchronous and an active low signal
560
 
561
        .wb_data_i      (mem_if_wb_data_i),
562
        .wb_data_o      (mem_if_wb_data_o),
563
        .wb_addr_i      (mem_if_wb_addr_i),
564
        .wb_sel_i       (mem_if_wb_sel_i),
565
        .wb_we_i        (mem_if_wb_we_i),
566
        .wb_cyc_i       (mem_if_wb_cyc_i),
567
        .wb_stb_i       (mem_if_wb_stb_i),
568
        .wb_ack_o       (mem_if_wb_ack_o),
569
        .wb_err_o       (mem_if_wb_err_o),
570
 
571
        .suspended_o            (),
572
        .poc_o                  (),
573
        .mc_bg_pad_o            (),
574
        .mc_addr_pad_o          (mc_addr_wire_o),
575
        .mc_data_pad_o          (mem_dat_pad_o),
576
        .mc_dp_pad_o            (),
577
        .mc_doe_pad_doe_o       (mem_dat_pad_oe),
578
        .mc_dqm_pad_o           (mem_dqm_pad_o),
579
        .mc_oe_pad_o_           (mem_oe_pad_o_),
580
        .mc_we_pad_o_           (mem_we_pad_o),
581
        .mc_cas_pad_o_          (mem_cas_pad_o),
582
        .mc_ras_pad_o_          (mem_ras_pad_o),
583
        .mc_cke_pad_o_          (mem_cke_pad_o),
584
        .mc_cs_pad_o_           (mem_csi_pad_o),
585
        .mc_rp_pad_o_           (),
586
        .mc_vpen_pad_o          (),
587
        .mc_adsc_pad_o_         (),
588
        .mc_adv_pad_o_          (),
589
        .mc_zz_pad_o            (),
590
        .mc_coe_pad_coe_o       (mem_con_pad_oe),
591
        .susp_req_i             (1'b0),
592
        .resume_req_i           (1'b0),
593
        .mc_clk_i               (mc_clk_pad_i),
594
        .mc_br_pad_i            (1'b0),
595
        .mc_ack_pad_i           (1'b0),
596
        .mc_data_pad_i          (mem_dat_pad_i),
597
        .mc_dp_pad_i            (4'h0),
598
        .mc_sts_pad_i           (1'b0)
599
);
600
 
601
   assign        mem_dat_pad_io = (wb_rst_pad_i) ? 32'h0000_0000 :  (mem_dat_pad_oe) ? mem_dat_pad_o : {32{1'bz}};
602
   assign        mem_dat_pad_i = mem_dat_pad_io;
603
   assign        mem_cs_pad_o = mem_csi_pad_o[0];
604
 
605
   assign        mem_adr_pad_o = (mem_con_pad_oe) ? mc_addr_wire_o[12:0] : {13{1'bz}};
606
   assign        mem_ba_pad_o = (mem_con_pad_oe) ? mc_addr_wire_o[14:13] : {2{1'bz}};
607
 
608
`endif
609
 
610
//
611
// DDR SDRAM
612
//
613
wire    [31:0]           ddr_wb_dat_i;
614
wire    [31:0]           ddr_wb_dat_o;
615
wire    [31:0]           ddr_wb_adr_i;
616
wire    [3:0]            ddr_wb_sel_i;
617
wire                    ddr_wb_we_i;
618
wire                    ddr_wb_cyc_i;
619
wire                    ddr_wb_stb_i;
620
wire                    ddr_wb_ack_o;
621
wire                    ddr_wb_err_o;
622
 
623
altera_ddr_top ddr_sdram (
624
  // Wishbine interface
625
        .wb_clk_i       (clk_cpu_25),   // 25MHz
626
        .wb_rst_i       (wb_rst_pad_i), // for soft_reset
627
 
628
        .wb_dat_i       (ddr_wb_dat_i),
629
        .wb_dat_o       (ddr_wb_dat_o),
630
        .wb_adr_i       (ddr_wb_adr_i),
631
        .wb_sel_i       (ddr_wb_sel_i),
632
        .wb_we_i        (ddr_wb_we_i),
633
        .wb_cyc_i       (ddr_wb_cyc_i),
634
        .wb_stb_i       (ddr_wb_stb_i),
635
        .wb_ack_o       (ddr_wb_ack_o),
636
        .wb_err_o       (ddr_wb_err_o),
637
 
638
        // reset to ddr core
639
        .global_reset_n_i(rst_n_pad_i),
640
 
641
        // global output
642
        .reset_request_n_o(reset_request_n),
643
 
644
        // to DDR SDRAM
645
        .ddr_pll_clk_i  (ddr_pll_clk_pad_i),    // 50 MHz
646
 
647
        .mem_cs_n_o     (ddr_mem_cs_n_o),
648
        .mem_cke_o      (ddr_mem_cke_o),
649
        .mem_addr_o     (ddr_mem_addr_o),
650
        .mem_ba_o       (ddr_mem_ba_o),
651
        .mem_ras_n_o    (ddr_mem_ras_n_o),
652
        .mem_cas_n_o    (ddr_mem_cas_n_o),
653
        .mem_we_n_o     (ddr_mem_we_n_o),
654
        .mem_dm_o       (ddr_mem_dm_o),
655
        .mem_clk_io     (ddr_mem_clk_io),
656
        .mem_clk_n_io   (ddr_mem_clk_n_io),
657
        .mem_dq_io      (ddr_mem_dq_io),
658
        .mem_dqs_io     (ddr_mem_dqs_io)
659
);
660
 
661
//
662
// Instantiation of the UART16550
663
//
664
uart_top uart_top (
665
 
666
        // WISHBONE common
667
        .wb_clk_i       ( clk_cpu_25 ),
668
        .wb_rst_i       ( wb_rst_pad_i ),
669
 
670
        // WISHBONE slave
671
        .wb_adr_i       ( wb_us_adr_i[4:0] ),
672
        .wb_dat_i       ( wb_us_dat_i ),
673
        .wb_dat_o       ( wb_us_dat_o ),
674
        .wb_we_i        ( wb_us_we_i  ),
675
        .wb_stb_i       ( wb_us_stb_i ),
676
        .wb_cyc_i       ( wb_us_cyc_i ),
677
        .wb_ack_o       ( wb_us_ack_o ),
678
        .wb_sel_i       ( wb_us_sel_i ),
679
 
680
        // Interrupt request
681
        .int_o          ( pic_ints[`APP_INT_UART] ),
682
 
683
        // UART signals
684
        // serial input/output
685
        .stx_pad_o      ( uart_stx_pad_o ),
686
        .srx_pad_i      ( uart_srx_pad_i ),
687
 
688
        // modem signals
689
        .rts_pad_o      ( ),
690
        .cts_pad_i      ( 1'b0 ),
691
        .dtr_pad_o      ( ),
692
        .dsr_pad_i      ( 1'b0 ),
693
        .ri_pad_i       ( 1'b0 ),
694
        .dcd_pad_i      ( 1'b0 )
695
);
696
 
697
 
698
   // GPIO
699
// wbs_gpio_led
700
wire [31:0] wbs_gpio_dat_o;
701
wire [31:0] wbs_gpio_dat_i;
702
wire [31:0] wbs_gpio_adr_i;
703
wire [3:0] wbs_gpio_sel_i;
704
wire wbs_gpio_stb_i;
705
wire wbs_gpio_cyc_i;
706
wire wbs_gpio_ack_o;
707
wire wbs_gpio_err_o;
708
 
709
 
710
   // GPIO_0
711
   wire [31:0]    gpio_a_o, gpio_a_oe, gpio_a_i;
712
 
713
   gpio_top i_gpio_a_top (
714
                          .wb_dat_o     (wbs_gpio_dat_o),
715
                          .wb_dat_i     (wbs_gpio_dat_i),
716
                          .wb_sel_i     (wbs_gpio_sel_i),
717
                          .wb_adr_i     (wbs_gpio_adr_i[7:0]),
718
                          .wb_we_i      (wbs_gpio_we_i),
719
                          .wb_stb_i     (wbs_gpio_stb_i),
720
                          .wb_cyc_i     (wbs_gpio_cyc_i),
721
                          .wb_ack_o     (wbs_gpio_ack_o),
722
                          .wb_err_o     (wbs_gpio_err_o),
723
                          .wb_clk_i     (clk_cpu_25),
724
                          .wb_rst_i     (wb_rst_pad_i),
725
                          .wb_inta_o    (pic_ints[`APP_INT_GPIO]),
726
 
727
                          .ext_pad_i    (gpio_a_i),
728
                          .ext_pad_o    (gpio_a_o),
729
                          .ext_padoe_o  (gpio_a_oe)
730
                          );
731
 
732
   assign        gpio_a_pad_io[ 0] = (gpio_a_oe[ 0]) ? gpio_a_o[ 0] : 1'bz;
733
   assign        gpio_a_pad_io[ 1] = (gpio_a_oe[ 1]) ? gpio_a_o[ 1] : 1'bz;
734
   assign        gpio_a_pad_io[ 2] = (gpio_a_oe[ 2]) ? gpio_a_o[ 2] : 1'bz;
735
   assign        gpio_a_pad_io[ 3] = (gpio_a_oe[ 3]) ? gpio_a_o[ 3] : 1'bz;
736
   assign        gpio_a_pad_io[ 4] = (gpio_a_oe[ 4]) ? gpio_a_o[ 4] : 1'bz;
737
   assign        gpio_a_pad_io[ 5] = (gpio_a_oe[ 5]) ? gpio_a_o[ 5] : 1'bz;
738
   assign        gpio_a_pad_io[ 6] = (gpio_a_oe[ 6]) ? gpio_a_o[ 6] : 1'bz;
739
   assign        gpio_a_pad_io[ 7] = (gpio_a_oe[ 7]) ? gpio_a_o[ 7] : 1'bz;
740
   assign        gpio_a_pad_io[ 8] = (gpio_a_oe[ 8]) ? gpio_a_o[ 8] : 1'bz;
741
   assign        gpio_a_pad_io[ 9] = (gpio_a_oe[ 9]) ? gpio_a_o[ 9] : 1'bz;
742
   assign        gpio_a_pad_io[10] = (gpio_a_oe[10]) ? gpio_a_o[10] : 1'bz;
743
   assign        gpio_a_pad_io[11] = (gpio_a_oe[11]) ? gpio_a_o[11] : 1'bz;
744
   assign        gpio_a_pad_io[12] = (gpio_a_oe[12]) ? gpio_a_o[12] : 1'bz;
745
   assign        gpio_a_pad_io[13] = (gpio_a_oe[13]) ? gpio_a_o[13] : 1'bz;
746
   assign        gpio_a_pad_io[14] = (gpio_a_oe[14]) ? gpio_a_o[14] : 1'bz;
747
   assign        gpio_a_pad_io[15] = (gpio_a_oe[15]) ? gpio_a_o[15] : 1'bz;
748
   assign        gpio_a_pad_io[16] = (gpio_a_oe[16]) ? gpio_a_o[16] : 1'bz;
749
   assign        gpio_a_pad_io[17] = (gpio_a_oe[17]) ? gpio_a_o[17] : 1'bz;
750
   assign        gpio_a_pad_io[18] = (gpio_a_oe[18]) ? gpio_a_o[18] : 1'bz;
751
   assign        gpio_a_pad_io[19] = (gpio_a_oe[19]) ? gpio_a_o[19] : 1'bz;
752
   assign        gpio_a_pad_io[20] = (gpio_a_oe[20]) ? gpio_a_o[20] : 1'bz;
753
   assign        gpio_a_pad_io[21] = (gpio_a_oe[21]) ? gpio_a_o[21] : 1'bz;
754
   assign        gpio_a_pad_io[22] = (gpio_a_oe[22]) ? gpio_a_o[22] : 1'bz;
755
   assign        gpio_a_pad_io[23] = (gpio_a_oe[23]) ? gpio_a_o[23] : 1'bz;
756
   assign        gpio_a_pad_io[24] = (gpio_a_oe[24]) ? gpio_a_o[24] : 1'bz;
757
   assign        gpio_a_pad_io[25] = (gpio_a_oe[25]) ? gpio_a_o[25] : 1'bz;
758
   assign        gpio_a_pad_io[26] = (gpio_a_oe[26]) ? gpio_a_o[26] : 1'bz;
759
   assign        gpio_a_pad_io[27] = (gpio_a_oe[27]) ? gpio_a_o[27] : 1'bz;
760
   assign        gpio_a_pad_io[28] = (gpio_a_oe[28]) ? gpio_a_o[28] : 1'bz;
761
   assign        gpio_a_pad_io[29] = (gpio_a_oe[29]) ? gpio_a_o[29] : 1'bz;
762
   assign        gpio_a_pad_io[30] = (gpio_a_oe[30]) ? gpio_a_o[30] : 1'bz;
763
   assign        gpio_a_pad_io[31] = (gpio_a_oe[31]) ? gpio_a_o[31] : 1'bz;
764
   assign        gpio_a_i = gpio_a_pad_io;
765
 
766
/* Disbale first to do the test on FPGA
767
   // SPI_Flash
768
wire [31:0] wbs_spi_0_dat_o;
769
wire [31:0] wbs_spi_0_dat_i;
770
wire [31:0] wbs_spi_0_adr_i;
771
wire [3:0] wbs_spi_0_sel_i;
772
wire [1:0] wbs_spi_0_bte_i;
773
wire [2:0] wbs_spi_0_cti_i;
774
wire [7:0] spi_flash_ss_o;
775
wire wbs_spi_0_we_i;
776
wire wbs_spi_0_stb_i;
777
wire wbs_spi_0_cyc_i;
778
wire wbs_spi_0_ack_o;
779
wire wbs_spi_0_err_o;
780
   spi_top #(1) i_spi_0_top (
781
                             .wb_dat_o   (wbs_spi_0_dat_o),
782
                             .wb_dat_i   (wbs_spi_0_dat_i),
783
                             .wb_sel_i   (wbs_spi_0_sel_i),
784
                             .wb_adr_i   (wbs_spi_0_adr_i[4:0]),
785
                             .wb_we_i    (wbs_spi_0_we_i),
786
                             .wb_stb_i   (wbs_spi_0_stb_i),
787
                             .wb_cyc_i   (wbs_spi_0_cyc_i),
788
                             .wb_ack_o   (wbs_spi_0_ack_o),
789
                             .wb_err_o   (wbs_spi_0_err_o),
790
                             .wb_clk_i   (wb_clk_pad_i),
791
                             .wb_rst_i   (wb_rst_pad_i),
792
                             .wb_int_o   (pic_ints[`APP_INT_SPI0]),
793
 
794
                             .miso_pad_i (spi_flash_miso_pad_i),
795
                             .mosi_pad_o (spi_flash_mosi_pad_o),
796
                             .ss_pad_o   (spi_flash_ss_o),
797
                             .sclk_pad_o (spi_flash_sclk_pad_o)
798
                             );
799
   assign       spi_flash_w_n_pad_o    = 1'b1;
800
   assign       spi_flash_hold_n_pad_o = 1'b1;
801
   assign       spi_flash_ss_o = spi_flash_ss_o[0];
802
*/
803
 
804
//
805
// Instantiation of the Ethernet 10/100 MAC
806
//
807
 
808
// Ethernet core master i/f wires
809
wire    [31:0]           wb_em_adr_o;
810
wire    [31:0]           wb_em_dat_i;
811
wire    [31:0]           wb_em_dat_o;
812
wire    [3:0]            wb_em_sel_o;
813
wire                    wb_em_we_o;
814
wire                    wb_em_stb_o;
815
wire                    wb_em_cyc_o;
816
wire                    wb_em_cab_o;
817
wire                    wb_em_ack_i;
818
wire                    wb_em_err_i;
819
 
820
// Ethernet core slave i/f wires
821
wire    [31:0]           wb_es_dat_i;
822
wire    [31:0]           wb_es_dat_o;
823
wire    [31:0]           wb_es_adr_i;
824
wire    [3:0]            wb_es_sel_i;
825
wire                    wb_es_we_i;
826
wire                    wb_es_cyc_i;
827
wire                    wb_es_stb_i;
828
wire                    wb_es_ack_o;
829
wire                    wb_es_err_o;
830
 
831
wire    eth_mdo;
832
wire    eth_mdoe;
833
 
834
eth_top eth_top (
835
 
836
        // WISHBONE common
837
        .wb_clk_i       ( clk_cpu_25 ),
838
        .wb_rst_i       ( wb_rst_pad_i ),
839
 
840
        // WISHBONE slave
841
        .wb_dat_i       ( wb_es_dat_i ),
842
        .wb_dat_o       ( wb_es_dat_o ),
843
        .wb_adr_i       ( wb_es_adr_i[11:2] ),
844
        .wb_sel_i       ( wb_es_sel_i ),
845
        .wb_we_i        ( wb_es_we_i  ),
846
        .wb_cyc_i       ( wb_es_cyc_i ),
847
        .wb_stb_i       ( wb_es_stb_i ),
848
        .wb_ack_o       ( wb_es_ack_o ),
849
        .wb_err_o       ( wb_es_err_o ),
850
 
851
        // WISHBONE master
852
        .m_wb_adr_o     ( wb_em_adr_o ),
853
        .m_wb_sel_o     ( wb_em_sel_o ),
854
        .m_wb_we_o      ( wb_em_we_o  ),
855
        .m_wb_dat_o     ( wb_em_dat_o ),
856
        .m_wb_dat_i     ( wb_em_dat_i ),
857
        .m_wb_cyc_o     ( wb_em_cyc_o ),
858
        .m_wb_stb_o     ( wb_em_stb_o ),
859
        .m_wb_ack_i     ( wb_em_ack_i ),
860
        .m_wb_err_i     ( wb_em_err_i ),
861
 
862
        // TX
863
        .mtx_clk_pad_i  ( eth_tx_clk_pad_i ),
864
        .mtxd_pad_o     ( eth_txd_pad_o ),
865
        .mtxen_pad_o    ( eth_tx_en_pad_o ),
866
        .mtxerr_pad_o   ( eth_tx_er_pad_o ),
867
 
868
        // RX
869
        .mrx_clk_pad_i  ( eth_rx_clk_pad_i ),
870
        .mrxd_pad_i     ( eth_rxd_pad_i ),
871
        .mrxdv_pad_i    ( eth_rx_dv_pad_i ),
872
        .mrxerr_pad_i   ( eth_rx_er_pad_i ),
873
        .mcoll_pad_i    ( eth_col_pad_i ),
874
        .mcrs_pad_i     ( eth_crs_pad_i ),
875
 
876
        // MIIM
877
        .mdc_pad_o      ( eth_mdc_pad_o ),
878
        .md_pad_i       ( eth_mdio_pad_i ),
879
        .md_pad_o       ( eth_mdo ),
880
        .md_padoe_o     ( eth_mdoe ),
881
 
882
        // Interrupt
883
        .int_o          ( pic_ints[`APP_INT_ETH] )
884
);
885
 
886
//
887
// Ethernet tri-state
888
//
889
assign eth_mdio_pad_io = eth_mdoe ? eth_mdo : 1'bz;
890
 
891
 
892
//
893
// spiMaster for SD card
894
//
895
wire [7:0] wb_sd_card_adr_i;
896
wire [7:0] wb_sd_card_dat_i;
897
wire [7:0] wb_sd_card_dat_o;
898
wire [31:0] wb_sd_card_dat32_i;
899
wire [31:0] wb_sd_card_dat32_o;
900
wire [3:0]  wb_sd_sel_i;
901
wire wb_sd_card_stb_i;
902
wire wb_sd_card_we_i;
903
wire wb_sd_card_ack_o;
904
 
905
spiMaster sd_card(
906
        .clk_i          (clk_cpu_25),
907
        .rst_i          (wb_rst_pad_i),
908
        .address_i      (wb_sd_card_adr_i),
909
        .data_i         (wb_sd_card_dat_i),
910
        .data_o         (wb_sd_card_dat_o),
911
        .strobe_i       (wb_sd_card_stb_i),
912
        .we_i           (wb_sd_card_we_i),
913
        .ack_o          (wb_sd_card_ack_o),
914
 
915
        // SPI logic clock
916 17 xianfeng
        .spiSysClk      (clk_cpu_25),//(spiSysClk),
917 12 xianfeng
 
918
        //SPI bus
919
        .spiClkOut      (sd_card_clk_pad_o),
920
        .spiDataIn      (sd_card_data_pad_i),
921
        .spiDataOut     (sd_card_data_pad_o),
922
        .spiCS_n        (sd_card_cs_n_pad_o)
923
);
924
 
925
assign wb_sd_card_dat32_o[7:0]   = (wb_sd_sel_i[0] == 1'b1) ? wb_sd_card_dat_o : 8'h0;
926
assign wb_sd_card_dat32_o[15:8]  = (wb_sd_sel_i[1] == 1'b1) ? wb_sd_card_dat_o : 8'h0;
927
assign wb_sd_card_dat32_o[23:16] = (wb_sd_sel_i[2] == 1'b1) ? wb_sd_card_dat_o : 8'h0;
928
assign wb_sd_card_dat32_o[31:24] = (wb_sd_sel_i[3] == 1'b1) ? wb_sd_card_dat_o : 8'h0;
929
 
930
assign wb_sd_card_dat_i = wb_sd_card_dat32_i[7:0];
931
        //(wb_sd_sel_i[0]) ? wb_sd_card_dat32_i[7:0] : 
932
        //                (wb_sd_sel_i[1]) ? wb_sd_card_dat32_i[15:8] :
933
        //                (wb_sd_sel_i[2]) ? wb_sd_card_dat32_i[24:16] :
934
        //                (wb_sd_sel_i[3]) ? wb_sd_card_dat32_i[31:23] : 8'h0;
935
 
936
 
937
//
938
// Advanced Debug Interface
939
//
940
// JTAG signals
941
wire            dbg_tck_i;
942
wire            dbg_tdi_i;
943
wire            dbg_tdo_o;
944
wire            dbg_rst_i;
945
// TAP states
946
wire            dbg_shift_dr_i;
947
wire            dbg_pause_dr_i;
948
wire            dbg_update_dr_i;
949
wire            dbg_capture_dr_i;
950
// Module select from TAP
951
wire            dbg_debug_select_i;
952
 
953
wire    [31:0]   dbg_wb_adr_o;
954
wire    [31:0]   dbg_wb_dat_o;
955
wire    [31:0]   dbg_wb_dat_i;
956
wire            dbg_wb_cyc_o;
957
wire            dbg_wb_stb_o;
958
wire    [3:0]    dbg_wb_sel_o;
959
wire            dbg_wb_we_o;
960
wire            dbg_wb_ack_i;
961
//wire          dbg_wb_cab_o;
962
wire            dbg_wb_err_i;
963
//wire  [2:0]   dbg_wb_cti_o;
964
//wire  [1:0]   dbg_wb_bte_o;
965
 
966
 
967
adbg_top adbg_if(
968
        // JTAG signals
969
        .tck_i          (dbg_tck_i),
970
        .tdi_i          (dbg_tdi_i),
971
        .tdo_o          (dbg_tdo_o),
972
        .rst_i          (dbg_rst_i),
973
 
974
        // TAP states
975
        .shift_dr_i     (dbg_shift_dr_i),
976
        .pause_dr_i     (dbg_pause_dr_i),
977
        .update_dr_i    (dbg_update_dr_i),
978
        .capture_dr_i   (dbg_capture_dr_i),
979
 
980
        // Instructions
981
        .debug_select_i (dbg_debug_select_i),
982
 
983
        // WISHBONE common signals
984
        .wb_clk_i       (clk_cpu_25),
985
 
986
        // WISHBONE master interface
987
        .wb_adr_o       (dbg_wb_adr_o),
988
        .wb_dat_o       (dbg_wb_dat_o),
989
        .wb_dat_i       (dbg_wb_dat_i),
990
        .wb_cyc_o       (dbg_wb_cyc_o),
991
        .wb_stb_o       (dbg_wb_stb_o),
992
        .wb_sel_o       (dbg_wb_sel_o),
993
        .wb_we_o        (dbg_wb_we_o),
994
        .wb_ack_i       (dbg_wb_ack_i),
995
        .wb_cab_o       (),
996
        .wb_err_i       (dbg_wb_err_i),
997
        .wb_cti_o       (),
998
        .wb_bte_o       (),
999
 
1000
        // CPU signals
1001
        .cpu0_clk_i     (clk_cpu_25),
1002
        .cpu0_addr_o    (dbg_cpu0_addr_o),
1003
        .cpu0_data_i    (dbg_cpu0_data_i),
1004
        .cpu0_data_o    (dbg_cpu0_data_o),
1005
        .cpu0_bp_i      (dbg_cpu0_bp_i),
1006
        .cpu0_stall_o   (dbg_cpu0_stall_o),
1007
        .cpu0_stb_o     (dbg_cpu0_stb_o),
1008
        .cpu0_we_o      (dbg_cpu0_we_o),
1009
        .cpu0_ack_i     (dbg_cpu0_ack_i),
1010
        .cpu0_rst_o     (dbg_cpu0_rst_o)
1011
);
1012
 
1013
altera_virtual_jtag altera_vjtag(
1014
        .tck_o                  (dbg_tck_i),
1015
        .debug_tdo_o            (dbg_tdo_o),
1016
        .tdi_o                  (dbg_tdi_i),
1017
        .test_logic_reset_o     (dbg_rst_i),
1018
        .run_test_idle_o        (),
1019
        .shift_dr_o             (dbg_shift_dr_i),
1020
        .capture_dr_o           (dbg_capture_dr_i),
1021
        .pause_dr_o             (dbg_pause_dr_i),
1022
        .update_dr_o            (dbg_update_dr_i),
1023
        .debug_select_o         (dbg_debug_select_i)
1024
);
1025
 
1026
assign led3_pad_o = ~dbg_cpu0_stall_o;
1027
 
1028
//
1029
// Work around for GDB access 0xc0000000 after MMU enabled
1030
//
1031
wire [31:0] s0_data_i;
1032
wire [31:0] s0_data_o;
1033
wire [31:0] s0_addr_o;
1034
wire [3:0]  s0_sel_o;
1035
wire        s0_we_o;
1036
wire        s0_cyc_o;
1037
wire        s0_stb_o;
1038
wire        s0_ack_i;
1039
wire        s0_err_i;
1040
 
1041
 
1042
wire [31:0] s12_data_i;
1043
wire [31:0] s12_data_o;
1044
wire [31:0] s12_addr_o;
1045
wire [3:0]  s12_sel_o;
1046
wire        s12_we_o;
1047
wire        s12_cyc_o;
1048
wire        s12_stb_o;
1049
wire        s12_ack_i;
1050
wire        s12_err_i;
1051
 
1052
 
1053
assign s0_data_i  = ddr_wb_dat_o;
1054
assign s12_data_i =  (dbg_cpu0_stall_o) ? ddr_wb_dat_o : 32'h0000_0000;
1055
 
1056
assign s0_ack_i   = ddr_wb_ack_o;
1057
assign s12_ack_i  = (dbg_cpu0_stall_o) ? ddr_wb_ack_o  : 1'b0;
1058
 
1059
assign s0_err_i   = ddr_wb_err_o;
1060
assign s12_err_i  = (dbg_cpu0_stall_o) ?  ddr_wb_err_o : 1'b1;
1061
 
1062
assign ddr_wb_dat_i = (dbg_cpu0_stall_o && s12_cyc_o && s12_stb_o) ? s12_data_o : s0_data_o;
1063
assign ddr_wb_adr_i = (dbg_cpu0_stall_o && s12_cyc_o && s12_stb_o) ? s12_addr_o : s0_addr_o;
1064
assign ddr_wb_sel_i = (dbg_cpu0_stall_o && s12_cyc_o && s12_stb_o) ? s12_sel_o  : s0_sel_o;
1065
assign ddr_wb_we_i  = (dbg_cpu0_stall_o && s12_cyc_o && s12_stb_o) ? s12_we_o   : s0_we_o;
1066
assign ddr_wb_cyc_i = (dbg_cpu0_stall_o && s12_cyc_o && s12_stb_o) ? s12_cyc_o  : s0_cyc_o;
1067
assign ddr_wb_stb_i = (dbg_cpu0_stall_o && s12_cyc_o && s12_stb_o) ? s12_stb_o  : s0_stb_o;
1068
 
1069
 
1070
/*
1071
//
1072
// SD Loader
1073
//
1074
wire [31:0] sd_loader_adr_o;
1075
wire [31:0] sd_loader_dat_o;
1076
wire [31:0] sd_loader_dat_i;
1077
wire        sd_loader_cyc_o;
1078
wire        sd_loader_stb_o;
1079
wire [3:0]  sd_loader_sel_o;
1080
wire        sd_loader_we_o;
1081
wire        sd_loader_ack_i;
1082
 
1083
sd_loader_top sd_loasder(
1084
                .wb_clk_i       (clk_cpu_25),
1085
                .wb_rst_i       (wb_rst_pad_i),
1086
 
1087
                .done_o         (sd_loader_done_o),
1088
 
1089
                .wb_rst_o       (sd_loader_rst_o), // Control CPU reset pin
1090
 
1091
                // WISHBONE master interface
1092
                .wb_adr_o       (sd_loader_adr_o),
1093
                .wb_dat_o       (sd_loader_dat_o),
1094
                .wb_dat_i       (sd_loader_dat_i),
1095
                .wb_cyc_o       (sd_loader_cyc_o),
1096
                .wb_stb_o       (sd_loader_stb_o),
1097
                .wb_sel_o       (sd_loader_sel_o),
1098
                .wb_we_o        (sd_loader_we_o),
1099
                .wb_ack_i       (sd_loader_ack_i),
1100
                .wb_err_i       (1'b0)
1101
);
1102
*/
1103
 
1104
//
1105
// inter connect
1106
//
1107
wb_conmax_top #(
1108
        32,     // Dada Bus width
1109
        32,     // Address Bus width
1110
        4'hf,   // Registerr File Address
1111
        2'h1,   // Number of priorities for Slave 0
1112
        2'h1    // Number of priorities for Slave 1
1113
        //Priorities for Slave 2 through 15 will default to 2’h2
1114
        ) intcon0 (
1115
 
1116
        .clk_i          (clk_cpu_25),
1117
        .rst_i          (wb_rst_pad_i),
1118
 
1119
        // Master 0 Interface.  Connect to or32 IWB
1120
        .m0_data_i      (or1k_iwb_dat_o),
1121
        .m0_data_o      (or1k_iwb_dat_i),
1122
        .m0_addr_i      (or1k_iwb_adr_o),
1123
        .m0_sel_i       (or1k_iwb_sel_o),
1124
        .m0_we_i        (or1k_iwb_we_o),
1125
        .m0_cyc_i       (or1k_iwb_cyc_o),
1126
        .m0_stb_i       (or1k_iwb_stb_o),
1127
        .m0_ack_o       (or1k_iwb_ack_i),
1128
        .m0_err_o       (or1k_iwb_err_i),
1129
        .m0_rty_o       (or1k_iwb_rty_i),
1130
 
1131
        // Master 1 Interface. Connect to or32 DWB
1132
        .m1_data_i      (or1k_dwb_dat_o),
1133
        .m1_data_o      (or1k_dwb_dat_i),
1134
        .m1_addr_i      (or1k_dwb_adr_o),
1135
        .m1_sel_i       (or1k_dwb_sel_o),
1136
        .m1_we_i        (or1k_dwb_we_o),
1137
        .m1_cyc_i       (or1k_dwb_cyc_o),
1138
        .m1_stb_i       (or1k_dwb_stb_o),
1139
        .m1_ack_o       (or1k_dwb_ack_i),
1140
        .m1_err_o       (or1k_dwb_err_i),
1141
        .m1_rty_o       (or1k_dwb_rty_i),
1142
 
1143
        // Master 2 Interface. For Ethernet Master Port
1144
        .m2_data_i      (wb_em_dat_o),
1145
        .m2_data_o      (wb_em_dat_i),
1146
        .m2_addr_i      (wb_em_adr_o),
1147
        .m2_sel_i       (wb_em_sel_o),
1148
        .m2_we_i        (wb_em_we_o),
1149
        .m2_cyc_i       (wb_em_cyc_o),
1150
        .m2_stb_i       (wb_em_stb_o),
1151
        .m2_ack_o       (wb_em_ack_i),
1152
        .m2_err_o       (wb_em_err_i),
1153
        .m2_rty_o       (),
1154
 
1155
        // Master 3 Interface. for Advanced Debug Interface
1156
        .m3_data_i      (dbg_wb_dat_o),
1157
        .m3_data_o      (dbg_wb_dat_i),
1158
        .m3_addr_i      (dbg_wb_adr_o),
1159
        .m3_sel_i       (dbg_wb_sel_o),
1160
        .m3_we_i        (dbg_wb_we_o),
1161
        .m3_cyc_i       (dbg_wb_cyc_o),
1162
        .m3_stb_i       (dbg_wb_stb_o),
1163
        .m3_ack_o       (dbg_wb_ack_i),
1164
        .m3_err_o       (dbg_wb_err_i),
1165
        .m3_rty_o       (),
1166
/*
1167
        // Master 4 Interface
1168
        m4_data_i, m4_data_o, m4_addr_i, m4_sel_i, m4_we_i, m4_cyc_i,
1169
        m4_stb_i, m4_ack_o, m4_err_o, m4_rty_o,
1170
 
1171
        // Master 5 Interface
1172
        m5_data_i, m5_data_o, m5_addr_i, m5_sel_i, m5_we_i, m5_cyc_i,
1173
        m5_stb_i, m5_ack_o, m5_err_o, m5_rty_o,
1174
 
1175
        // Master 6 Interface
1176
        m6_data_i, m6_data_o, m6_addr_i, m6_sel_i, m6_we_i, m6_cyc_i,
1177
        m6_stb_i, m6_ack_o, m6_err_o, m6_rty_o,
1178
 
1179
        // Master 7 Interface. For SD Loader
1180
        .m7_data_i      (sd_loader_dat_o),
1181
        .m7_data_o      (sd_loader_dat_i),
1182
        .m7_addr_i      (sd_loader_adr_o),
1183
        .m7_sel_i       (sd_loader_sel_o),
1184
        .m7_we_i        (sd_loader_we_o),
1185
        .m7_cyc_i       (sd_loader_cyc_o),
1186
        .m7_stb_i       (sd_loader_stb_o),
1187
        .m7_ack_o       (sd_loader_ack_i),
1188
        .m7_err_o       (),
1189
        .m7_rty_o       (),
1190
*/
1191
 
1192
`ifdef CONFIG_USE_SRAM
1193
        // Slave 0 Interface. DDR SDRAM Contronller
1194
        .s0_data_i      (s0_data_i),
1195
        .s0_data_o      (s0_data_o),
1196
        .s0_addr_o      (s0_addr_o),
1197
        .s0_sel_o       (s0_sel_o),
1198
        .s0_we_o        (s0_we_o),
1199
        .s0_cyc_o       (s0_cyc_o),
1200
        .s0_stb_o       (s0_stb_o),
1201
        .s0_ack_i       (s0_ack_i),
1202
        .s0_err_i       (s0_err_i),
1203
        .s0_rty_i       (1'b0),
1204
/*
1205
        .s0_data_i      (ddr_wb_dat_o),
1206
        .s0_data_o      (ddr_wb_dat_i),
1207
        .s0_addr_o      (ddr_wb_adr_i),
1208
        .s0_sel_o       (ddr_wb_sel_i),
1209
        .s0_we_o        (ddr_wb_we_i),
1210
        .s0_cyc_o       (ddr_wb_cyc_i),
1211
        .s0_stb_o       (ddr_wb_stb_i),
1212
        .s0_ack_i       (ddr_wb_ack_o),
1213
        .s0_err_i       (ddr_wb_err_o),
1214
        .s0_rty_i       (1'b0),
1215
*/
1216
 
1217
`else
1218
        // Slave 0 Interface. connect to memory controller
1219
        .s0_data_i      (mem_if_wb_data_o),
1220
        .s0_data_o      (mem_if_wb_data_i),
1221
        .s0_addr_o      (mem_if_wb_addr_i),
1222
        .s0_sel_o       (mem_if_wb_sel_i),
1223
        .s0_we_o        (mem_if_wb_we_i),
1224
        .s0_cyc_o       (mem_if_wb_cyc_i),
1225
        .s0_stb_o       (mem_if_wb_stb_i),
1226
        .s0_ack_i       (mem_if_wb_ack_o),
1227
        .s0_err_i       (mem_if_wb_err_o),
1228
        .s0_rty_i       (1'b0),
1229
`endif
1230
 
1231
/* Disbale first to do the test on FPGA
1232
        // Slave 1 Interface. SPI0 for flash
1233
        (wbs_spi_0_dat_o),
1234
        .s1_data_o      (wbs_spi_0_dat_i),
1235
        .s1_addr_o      (wbs_spi_0_adr_i),
1236
        .s1_sel_o       (wbs_spi_0_sel_i),
1237
        .s1_we_o        (wbs_spi_0_we_i),
1238
        .s1_cyc_o       (wbs_spi_0_cyc_i),
1239
        .s1_stb_o       (wbs_spi_0_stb_i),
1240
        .s1_ack_i       (wbs_spi_0_ack_o),
1241
        .s1_err_i       (wbs_spi_0_err_o),
1242
        .s1_rty_i       (1'b0),
1243
*/
1244
        .s1_data_i      (32'h0000_0000),
1245
        .s1_ack_i       (1'b0),
1246
        .s1_err_i       (1'b1),
1247
        .s1_rty_i       (1'b0),
1248
 
1249
        // Slave 2 Interface. connect to ethernet
1250
        .s2_data_i      (wb_es_dat_o),
1251
        .s2_data_o      (wb_es_dat_i),
1252
        .s2_addr_o      (wb_es_adr_i),
1253
        .s2_sel_o       (wb_es_sel_i),
1254
        .s2_we_o        (wb_es_we_i),
1255
        .s2_cyc_o       (wb_es_cyc_i),
1256
        .s2_stb_o       (wb_es_stb_i),
1257
        .s2_ack_i       (wb_es_ack_o),
1258
        .s2_err_i       (wb_es_err_o),
1259
        .s2_rty_i       (1'b0),
1260
 
1261
        // Slave 3 Interface. connect to uart
1262
        .s3_data_i      (wb_us_dat_o),
1263
        .s3_data_o      (wb_us_dat_i),
1264
        .s3_addr_o      (wb_us_adr_i),
1265
        .s3_sel_o       (wb_us_sel_i),
1266
        .s3_we_o        (wb_us_we_i),
1267
        .s3_cyc_o       (wb_us_cyc_i),
1268
        .s3_stb_o       (wb_us_stb_i),
1269
        .s3_ack_i       (wb_us_ack_o),
1270
        .s3_err_i       (1'b0),
1271
        .s3_rty_i       (1'b0),
1272
 
1273
        // Slave 4 Interface. connect to GPIO
1274
        .s4_data_i      (wbs_gpio_dat_o),
1275
        .s4_data_o      (wbs_gpio_dat_i),
1276
        .s4_addr_o      (wbs_gpio_adr_i),
1277
        .s4_sel_o       (wbs_gpio_sel_i),
1278
        .s4_we_o        (wbs_gpio_we_i),
1279
        .s4_cyc_o       (wbs_gpio_cyc_i),
1280
        .s4_stb_o       (wbs_gpio_stb_i),
1281
        .s4_ack_i       (wbs_gpio_ack_o),
1282
        .s4_err_i       (wbs_gpio_err_o),
1283
        .s4_rty_i       (1'b0),
1284
 
1285
        // Slave 5 Interface. spiMaster for SD Card
1286
        .s5_data_i      (wb_sd_card_dat32_o),
1287
        .s5_data_o      (wb_sd_card_dat32_i),
1288
        .s5_addr_o      (wb_sd_card_adr_i),
1289
        .s5_sel_o       (wb_sd_sel_i),
1290
        .s5_we_o        (wb_sd_card_we_i),
1291
        .s5_cyc_o       (),
1292
        .s5_stb_o       (wb_sd_card_stb_i),
1293
        .s5_ack_i       (wb_sd_card_ack_o),
1294
        .s5_err_i       (1'b0),
1295
        .s5_rty_i       (1'b0),
1296
 
1297
        // Slave 6 Interface
1298
        .s6_data_i      (32'h0000_0000),
1299
        .s6_data_o      (),
1300
        .s6_addr_o      (),
1301
        .s6_sel_o       (),
1302
        .s6_we_o        (),
1303
        .s6_cyc_o       (),
1304
        .s6_stb_o       (),
1305
        .s6_ack_i       (1'b0),
1306
        .s6_err_i       (1'b1),
1307
        .s6_rty_i       (1'b0),
1308
 
1309
        // Slave 7 Interface
1310
        .s7_data_i      (32'h0000_0000),
1311
        .s7_data_o      (),
1312
        .s7_addr_o      (),
1313
        .s7_sel_o       (),
1314
        .s7_we_o        (),
1315
        .s7_cyc_o       (),
1316
        .s7_stb_o       (),
1317
        .s7_ack_i       (1'b0),
1318
        .s7_err_i       (1'b1),
1319
        .s7_rty_i       (1'b0),
1320
 
1321
        // Slave 8 Interface
1322
        .s8_data_i      (32'h0000_0000),
1323
        .s8_data_o      (),
1324
        .s8_addr_o      (),
1325
        .s8_sel_o       (),
1326
        .s8_we_o        (),
1327
        .s8_cyc_o       (),
1328
        .s8_stb_o       (),
1329
        .s8_ack_i       (1'b0),
1330
        .s8_err_i       (1'b1),
1331
        .s8_rty_i       (1'b0),
1332
 
1333
        // Slave 9 Interface
1334
        .s9_data_i      (32'h0000_0000),
1335
        .s9_data_o      (),
1336
        .s9_addr_o      (),
1337
        .s9_sel_o       (),
1338
        .s9_we_o        (),
1339
        .s9_cyc_o       (),
1340
        .s9_stb_o       (),
1341
        .s9_ack_i       (1'b0),
1342
        .s9_err_i       (1'b1),
1343
        .s9_rty_i       (1'b0),
1344
 
1345
        // Slave 10 Interface
1346
        .s10_data_i     (32'h0000_0000),
1347
        .s10_data_o     (),
1348
        .s10_addr_o     (),
1349
        .s10_sel_o      (),
1350
        .s10_we_o       (),
1351
        .s10_cyc_o      (),
1352
        .s10_stb_o      (),
1353
        .s10_ack_i      (1'b0),
1354
        .s10_err_i      (1'b1),
1355
        .s10_rty_i      (1'b0),
1356
 
1357
        // Slave 11 Interface
1358
        .s11_data_i     (32'h0000_0000),
1359
        .s11_data_o     (),
1360
        .s11_addr_o     (),
1361
        .s11_sel_o      (),
1362
        .s11_we_o       (),
1363
        .s11_cyc_o      (),
1364
        .s11_stb_o      (),
1365
        .s11_ack_i      (1'b0),
1366
        .s11_err_i      (1'b1),
1367
        .s11_rty_i      (1'b0),
1368
 
1369
        // Slave 12 Interface. Also connect to DDR SDRAM
1370
        // Kernel will be mapped to 0xc0000000 by MMU
1371
        // during MMU enable, GDB will also access the address
1372
        // 0xc000000, and it does not work. So, link this section
1373
        // to DDR SDRAM can fix this issue.
1374
        //
1375
        // This is just a work around!!
1376
        .s12_data_i     (s12_data_i),
1377
        .s12_data_o     (s12_data_o),
1378
        .s12_addr_o     (s12_addr_o),
1379
        .s12_sel_o      (s12_sel_o),
1380
        .s12_we_o       (s12_we_o),
1381
        .s12_cyc_o      (s12_cyc_o),
1382
        .s12_stb_o      (s12_stb_o),
1383
        .s12_ack_i      (s12_ack_i),
1384
        .s12_err_i      (s12_err_i),
1385
        .s12_rty_i      (1'b0),
1386
/*
1387
        .s12_data_i     (32'h0000_0000),
1388
        .s12_data_o     (),
1389
        .s12_addr_o     (),
1390
        .s12_sel_o      (),
1391
        .s12_we_o       (),
1392
        .s12_cyc_o      (),
1393
        .s12_stb_o      (),
1394
        .s12_ack_i      (1'b0),
1395
        .s12_err_i      (1'b1),
1396
        .s12_rty_i      (1'b0),
1397
*/
1398
 
1399
        // Slave 13 Interface
1400
        .s13_data_i     (32'h0000_0000),
1401
        .s13_data_o     (),
1402
        .s13_addr_o     (),
1403
        .s13_sel_o      (),
1404
        .s13_we_o       (),
1405
        .s13_cyc_o      (),
1406
        .s13_stb_o      (),
1407
        .s13_ack_i      (1'b0),
1408
        .s13_err_i      (1'b1),
1409
        .s13_rty_i      (1'b0),
1410
 
1411
        // Slave 14 Interface
1412
        .s14_data_i     (32'h0000_0000),
1413
        .s14_data_o     (),
1414
        .s14_addr_o     (),
1415
        .s14_sel_o      (),
1416
        .s14_we_o       (),
1417
        .s14_cyc_o      (),
1418
        .s14_stb_o      (),
1419
        .s14_ack_i      (1'b0),
1420
        .s14_err_i      (1'b1),
1421
        .s14_rty_i      (1'b0),
1422
 
1423
        // Slave 15 Interface. connect to SRAM 
1424
        .s15_data_i     (wb_ss_dat_o),
1425
        .s15_data_o     (wb_ss_dat_i),
1426
        .s15_addr_o     (wb_ss_adr_i),
1427
        .s15_sel_o      (wb_ss_sel_i),
1428
        .s15_we_o       (wb_ss_we_i),
1429
        .s15_cyc_o      (wb_ss_cyc_i),
1430
        .s15_stb_o      (wb_ss_stb_i),
1431
        .s15_ack_i      (wb_ss_ack_o),
1432
        .s15_err_i      (wb_ss_err_o),
1433
        .s15_rty_i      (1'b0)
1434
);
1435
 
1436
endmodule
1437
 

powered by: WebSVN 2.1.0

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