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

Subversion Repositories mem_ctrl

[/] [mem_ctrl/] [trunk/] [bench/] [verilog/] [test_bench_top.v] - Blame information for rev 10

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

Line No. Rev Author Line
1 4 rudi
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  Top Level Test Bench                                       ////
4
////                                                             ////
5
////                                                             ////
6
////  Author: Rudolf Usselmann                                   ////
7
////          rudi@asics.ws                                      ////
8
////                                                             ////
9
////                                                             ////
10
////  Downloaded from: http://www.opencores.org/cores/mem_ctrl/  ////
11
////                                                             ////
12
/////////////////////////////////////////////////////////////////////
13
////                                                             ////
14
//// Copyright (C) 2000 Rudolf Usselmann                         ////
15
////                    rudi@asics.ws                            ////
16
////                                                             ////
17
//// This source file may be used and distributed without        ////
18
//// restriction provided that this copyright statement is not   ////
19
//// removed from the file and that any derivative work contains ////
20
//// the original copyright notice and the associated disclaimer.////
21
////                                                             ////
22
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
23
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
24
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
25
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
26
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
27
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
28
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
29
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
30
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
31
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
32
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
33
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
34
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
35
////                                                             ////
36
/////////////////////////////////////////////////////////////////////
37
 
38
//  CVS Log
39
//
40 10 rudi
//  $Id: test_bench_top.v,v 1.3 2001-09-02 02:29:43 rudi Exp $
41 4 rudi
//
42 10 rudi
//  $Date: 2001-09-02 02:29:43 $
43
//  $Revision: 1.3 $
44 4 rudi
//  $Author: rudi $
45
//  $Locker:  $
46
//  $State: Exp $
47
//
48
// Change History:
49
//               $Log: not supported by cvs2svn $
50 10 rudi
//               Revision 1.2  2001/08/10 08:16:21  rudi
51
//
52
//               - Changed IO names to be more clear.
53
//               - Uniquifyed define names to be core specific.
54
//               - Removed "Refresh Early" configuration
55
//
56 8 rudi
//               Revision 1.1  2001/07/29 07:34:40  rudi
57
//
58
//
59
//               1) Changed Directory Structure
60
//               2) Fixed several minor bugs
61
//
62 4 rudi
//               Revision 1.2  2001/06/03 11:34:18  rudi
63
//               *** empty log message ***
64
//
65
//               Revision 1.1.1.1  2001/05/13 09:36:32  rudi
66
//               Created Directory Structure
67
//
68
//
69
//
70
//                        
71
 
72
`include "mc_defines.v"
73
 
74
module test;
75
 
76
reg             clk;
77
reg             rst;
78
 
79
// IO Prototypes
80
 
81
wire    [31:0]   wb_data_i;
82
wire    [31:0]   wb_data_o;
83
wire    [31:0]   wb_addr_i;
84
wire    [3:0]    wb_sel_i;
85
wire            wb_we_i;
86
wire            wb_cyc_i;
87
wire            wb_stb_i;
88
wire            wb_ack_o;
89
wire            wb_err_o;
90
wire            wb_rty_o;
91
 
92
reg             susp_req, resume_req;
93
wire            suspended;
94
wire    [31:0]   poc;
95
 
96
reg             mc_clk;
97
reg             mc_br;
98
wire            mc_bg;
99
wire            mc_ack;
100
wire    [23:0]   mc_addr;
101
wire    [31:0]   mc_data_i;
102
wire    [31:0]   mc_data_o;
103
wire    [3:0]    mc_dp_i;
104
wire    [3:0]    mc_dp_o;
105
wire            mc_data_oe;
106
wire    [3:0]    mc_dqm;
107
wire            mc_oe_;
108
wire            mc_we_;
109
wire            mc_cas_;
110
wire            mc_ras_;
111
wire            mc_cke_;
112
wire    [7:0]    mc_cs_;
113
wire            mc_sts;
114
wire            mc_rp_;
115
wire            mc_vpen;
116
wire            mc_adsc_;
117
wire            mc_adv_;
118
wire            mc_zz;
119
wire            mc_c_oe;
120
 
121
 
122
// Test Bench Variables
123
reg     [31:0]   wd_cnt;
124
integer         error_cnt;
125
integer         verbose;
126
integer         poc_mode;
127
reg             wb_err_check_dis;
128 10 rudi
integer         LVL;
129 4 rudi
 
130
integer cyc_cnt;
131
integer ack_cnt;
132
 
133
// Misc Variables
134
 
135
integer         n,m;
136
 
137
reg     [31:0]   data;
138
 
139
reg     [31:0]   buffer32;
140
integer         del, size;
141
reg     [7:0]    mode;
142
reg     [2:0]    bs;
143
integer         sz_inc;
144
integer         read, write;
145
integer         done;
146
integer         adr;
147
 
148
/////////////////////////////////////////////////////////////////////
149
//
150
// Defines 
151
//
152
 
153
`define MEM_BASE        32'h0000_0000
154
`define MEM_BASE1       32'h0400_0000
155
`define MEM_BASE2       32'h0800_0000
156
`define MEM_BASE3       32'h0c00_0000
157
`define MEM_BASE4       32'h1000_0000
158
`define MEM_BASE5       32'h1400_0000
159
`define MEM_BASE6       32'h1800_0000
160
`define REG_BASE        32'hf000_0000
161
 
162
`define CSR             8'h00
163
`define POC             8'h04
164
`define BA_MASK         8'h08
165
 
166
`define CSC0            8'h10
167
`define TMS0            8'h14
168
`define CSC1            8'h18
169
`define TMS1            8'h1c
170
`define CSC2            8'h20
171
`define TMS2            8'h24
172
`define CSC3            8'h28
173
`define TMS3            8'h2c
174
`define CSC4            8'h30
175
`define TMS4            8'h34
176
`define CSC5            8'h38
177
`define TMS5            8'h3c
178
`define CSC6            8'h40
179
`define TMS6            8'h44
180
`define CSC7            8'h48
181
`define TMS7            8'h4c
182
 
183
/////////////////////////////////////////////////////////////////////
184
//
185
// Simulation Initialization and Start up Section
186
//
187
 
188
`define SDRAM0          1
189
`define SRAM            1
190
`define MULTI_SDRAM     1
191
`define FLASH           1
192
`define MICRON          1
193
 
194
initial
195
   begin
196
        $display("\n\n");
197
        $display("*****************************************************");
198
        $display("* WISHBONE Memory Controller Simulation started ... *");
199
        $display("*****************************************************");
200
        $display("\n");
201
`ifdef WAVES
202
        $shm_open("waves");
203
        $shm_probe("AS",test,"AS");
204
        $display("INFO: Signal dump enabled ...\n\n");
205
`endif
206
        poc_mode = 1;
207
        #1;
208
        poc_mode = 0;
209
        wb_err_check_dis=0;
210
        cyc_cnt = 0;
211
        ack_cnt = 0;
212
        wd_cnt = 0;
213
        error_cnt = 0;
214
        clk = 1;
215
        mc_clk = 0;
216
        rst = 0;
217
        susp_req = 0;
218
        resume_req = 0;
219
        verbose = 1;
220
        mc_br = 0;
221
 
222 10 rudi
        repeat(11)      @(posedge clk);
223
        #1;
224 4 rudi
        rst = 1;
225
        repeat(10)      @(posedge clk);
226
 
227
        // HERE IS WHERE THE TEST CASES GO ...
228
 
229
if(0)    // Full Regression Run
230
   begin
231
$display(" ......................................................");
232
$display(" :                                                    :");
233
$display(" :    Long Regression Run ...                         :");
234
$display(" :....................................................:");
235
        verbose = 0;
236
`ifdef FLASH
237
        boot(0);
238
`endif
239
 
240
        m0.wb_wr1(`REG_BASE + `CSC3,    4'hf, 32'h0000_0000);
241
        sdram_wr1(0);
242
        sdram_rd1(0);
243
        sdram_rd2(0);
244
        sdram_wr2(0);
245
        sdram_rd3(0);
246
        sdram_wr3(0);
247
        sdram_rd4(0);
248
        sdram_wr4(0);
249
        sdram_wp(0);
250
        sdram_rmw1(0);
251
        sdram_rmw2(0);
252
 
253
`ifdef MULTI_SDRAM
254
        sdram_rd5(0);
255
        sdram_wr5(0);
256
`endif
257
 
258
`ifdef FLASH
259
        asc_rdwr1(0);
260
`endif
261
 
262
`ifdef SRAM
263
        sram_rd1;
264
        sram_wr1;
265
        sram_wp;
266
        sram_rmw1;
267
        sram_rmw2;
268
`endif
269
 
270
        scs_rdwr1(0);
271
 
272
   end
273
else
274
if(0)    // Quick Regression Run
275
   begin
276
$display(" ......................................................");
277
$display(" :                                                    :");
278
$display(" :    Short Regression Run ...                        :");
279
$display(" :....................................................:");
280
        verbose = 0;
281
`ifdef FLASH
282
        boot(2);
283
`endif
284
        m0.wb_wr1(`REG_BASE + `CSC3,    4'hf, 32'h0000_0000);
285 8 rudi
 
286 4 rudi
        sdram_rd1(2);
287
        sdram_wr1(2);
288
 
289
        sdram_rd2(2);
290
        sdram_wr2(2);
291
 
292
        sdram_rd3(2);
293
        sdram_wr3(2);
294
 
295
        sdram_rd4(2);
296
        sdram_wr4(2);
297
 
298
        sdram_wp(2);
299
        sdram_rmw1(2);
300
        sdram_rmw2(2);
301
 
302
`ifdef MULTI_SDRAM
303
        sdram_rd5(2);
304
        sdram_wr5(2);
305
`endif
306
 
307 10 rudi
 
308 4 rudi
`ifdef FLASH
309
        asc_rdwr1(2);
310
`endif
311
 
312
`ifdef SRAM
313
        sram_rd1;
314
        sram_wr1;
315
        sram_wp;
316
        sram_rmw1;
317
        sram_rmw2;
318
`endif
319
        scs_rdwr1(2);
320
 
321
   end
322
else
323 8 rudi
if(1)   // Suspend resume testing
324 4 rudi
begin
325
$display(" ......................................................");
326
$display(" :                                                    :");
327
$display(" :    Suspend Resume Testing ...                      :");
328
$display(" :....................................................:");
329
 
330
        verbose = 0;
331
        done = 0;
332 10 rudi
        LVL = 1;
333
 
334 4 rudi
        fork
335
 
336
           begin
337 10 rudi
 
338 4 rudi
`ifdef FLASH
339 10 rudi
                boot(LVL);
340 4 rudi
`endif
341
                m0.wb_wr1(`REG_BASE + `CSC3,    4'hf, 32'h0000_0000);
342 10 rudi
 
343 4 rudi
                while(susp_req | suspended)     @(posedge clk);
344 10 rudi
                sdram_rd1(LVL);
345 4 rudi
                while(susp_req | suspended)     @(posedge clk);
346 10 rudi
                sdram_wr1(LVL);
347 4 rudi
                while(susp_req | suspended)     @(posedge clk);
348 10 rudi
                sdram_rd2(LVL);
349
 
350
 
351 4 rudi
                while(susp_req | suspended)     @(posedge clk);
352 10 rudi
                sdram_wr2(LVL);
353
 
354 4 rudi
                while(susp_req | suspended)     @(posedge clk);
355 10 rudi
                sdram_rd3(LVL);
356 4 rudi
                while(susp_req | suspended)     @(posedge clk);
357 10 rudi
                sdram_wr3(LVL);
358 4 rudi
                while(susp_req | suspended)     @(posedge clk);
359 10 rudi
                sdram_rd4(LVL);
360 4 rudi
                while(susp_req | suspended)     @(posedge clk);
361 10 rudi
                sdram_wr4(LVL);
362 4 rudi
 
363
                while(susp_req | suspended)     @(posedge clk);
364 10 rudi
                sdram_wp(LVL);
365 4 rudi
                while(susp_req | suspended)     @(posedge clk);
366 10 rudi
                sdram_rmw1(LVL);
367 4 rudi
                while(susp_req | suspended)     @(posedge clk);
368 10 rudi
                sdram_rmw2(LVL);
369 4 rudi
 
370
`ifdef MULTI_SDRAM
371
                while(susp_req | suspended)     @(posedge clk);
372 10 rudi
                sdram_rd5(LVL);
373 4 rudi
                while(susp_req | suspended)     @(posedge clk);
374 10 rudi
                sdram_wr5(LVL);
375 4 rudi
`endif
376
 
377
`ifdef FLASH
378
                while(susp_req | suspended)     @(posedge clk);
379 10 rudi
                asc_rdwr1(LVL);
380 4 rudi
`endif
381
 
382
`ifdef SRAM
383
                while(susp_req | suspended)     @(posedge clk);
384
                sram_rd1;
385
                while(susp_req | suspended)     @(posedge clk);
386
                sram_wr1;
387
                while(susp_req | suspended)     @(posedge clk);
388
                sram_wp;
389
                while(susp_req | suspended)     @(posedge clk);
390 10 rudi
                sram_wp;
391
                while(susp_req | suspended)     @(posedge clk);
392 4 rudi
                sram_rmw1;
393 10 rudi
 
394 4 rudi
                while(susp_req | suspended)     @(posedge clk);
395 10 rudi
                sram_rmw1;
396
                while(susp_req | suspended)     @(posedge clk);
397 4 rudi
                sram_rmw2;
398
`endif
399
                while(susp_req | suspended)     @(posedge clk);
400 10 rudi
                scs_rdwr1(LVL);
401 4 rudi
 
402 10 rudi
 
403 4 rudi
                done = 1;
404
           end
405
 
406
           begin
407
                repeat(50)      @(posedge clk);
408
                while(!done)
409
                   begin
410
                        repeat(40)      @(posedge clk);
411
                        susp_res;
412
                   end
413
           end
414
        join
415
end
416 10 rudi
//else
417
mc_reset;
418
 
419
if(1)   // Bus Request testing
420 4 rudi
begin
421
$display(" ......................................................");
422
$display(" :                                                    :");
423
$display(" :    Bus Request/Grant Testing ...                   :");
424
$display(" :....................................................:");
425
        verbose = 0;
426
        done = 0;
427 10 rudi
        LVL = 1;
428 4 rudi
        fork
429
 
430
           begin
431
`ifdef FLASH
432 10 rudi
                boot(LVL);
433 4 rudi
`endif
434
                m0.wb_wr1(`REG_BASE + `CSC3,    4'hf, 32'h0000_0000);
435 10 rudi
                sdram_rd1(LVL);
436
                sdram_wr1(LVL);
437
                sdram_rd1(LVL);
438
                sdram_wr1(LVL);
439
                sdram_rd3(LVL);
440
                sdram_wr3(LVL);
441
                sdram_rd4(LVL);
442
                sdram_wr4(LVL);
443
                sdram_wp(LVL);
444
                sdram_rmw1(LVL);
445
                sdram_rmw2(LVL);
446 4 rudi
 
447
`ifdef MULTI_SDRAM
448 10 rudi
                sdram_rd5(LVL);
449
                sdram_wr5(LVL);
450 4 rudi
`endif
451
 
452
`ifdef FLASH
453 10 rudi
                asc_rdwr1(LVL);
454 4 rudi
`endif
455
 
456
`ifdef SRAM
457
                sram_rd1;
458
                sram_wr1;
459
                sram_wp;
460
                sram_rmw1;
461
                sram_rmw2;
462
`endif
463 10 rudi
                scs_rdwr1(LVL);
464 4 rudi
 
465
                done = 1;
466
           end
467
 
468
           begin
469
                repeat(50)      @(posedge clk);
470
                while(!done)
471
                   begin
472
                        repeat(40)      @(posedge clk);
473
                        bus_req;
474
                   end
475
           end
476
 
477
        join
478
end
479
else
480
if(1)   // Debug Tests
481
   begin
482
$display(" ......................................................");
483
$display(" :                                                    :");
484
$display(" :    Test Debug Testing ...                          :");
485
$display(" :....................................................:");
486 10 rudi
        //verbose = 0;
487 4 rudi
        //boot(2);
488
 
489
`define CSR             8'h00
490
`define POC             8'h04
491
`define BA_MASK         8'h08
492
 
493
        m0.wb_wr1(`REG_BASE + `CSC3,    4'hf, 32'h0000_0000);
494
        //sdram_rmw2(2);
495
 
496 8 rudi
        //sram_rd1;
497
        //sram_rmw1;
498 4 rudi
        //sram_rmw2;
499 8 rudi
        //sram_wp;
500 4 rudi
 
501
        //scs_rdwr1(2);
502
 
503
 
504
        //sdram_rd3(2);
505
        //sdram_wr3(2);
506
 
507
        //asc_rdwr1(2);
508
        //asc_rdwr1_x(2);
509
 
510 10 rudi
        //sdram_wp(2);
511
        //sdram_rmw1(2);
512 8 rudi
        //sdram_rmw2(2);
513
 
514 10 rudi
        //sdram_rd2(2);
515
        //sdram_wr2(2);
516
        sdram_wr1(2);
517 4 rudi
/*
518
        sdram_rd1(2);
519 10 rudi
        sdram_wr1(2);
520
        sdram_rd2(2);
521
        sdram_wr2(2);
522
        sdram_rd3(2);
523
        sdram_wr3(2);
524
        sdram_rd4(2);
525
        sdram_wr4(2);
526 4 rudi
 
527 10 rudi
        sdram_rd5(2);
528
        sdram_wr5(2);
529 4 rudi
 
530 10 rudi
        sdram_wp(2);
531
        sdram_rmw1(2);
532
        sdram_rmw2(2);
533
*/
534 4 rudi
 
535 10 rudi
        //sdram_rmw2(2);
536 4 rudi
 
537
        repeat(100)     @(posedge clk);
538
        $finish;
539
   end
540
else
541
   begin
542
 
543
        //
544
        // TEST DEVELOPMENT AREA
545
        //
546 10 rudi
        $display("\n\n");
547
        $display("*****************************************************");
548
        $display("*** Test Development ...                          ***");
549
        $display("*****************************************************\n");
550 4 rudi
 
551
 
552 10 rudi
        show_errors;
553
        $display("*****************************************************");
554
        $display("*** Test DONE ...                                 ***");
555
        $display("*****************************************************\n\n");
556
   end
557 4 rudi
 
558 10 rudi
        repeat(100)     @(posedge clk);
559
        $finish;
560 4 rudi
 
561 10 rudi
end     // End of Initial
562 4 rudi
 
563
 
564 10 rudi
/////////////////////////////////////////////////////////////////////
565
//
566
// Clock Generation
567
//
568 4 rudi
 
569 10 rudi
always #2.5     clk = ~clk;
570 4 rudi
 
571 10 rudi
always @(posedge clk)
572
        //#0.5 mc_clk <= ~mc_clk;
573
        //#4.5 mc_clk <= ~mc_clk;
574
        mc_clk <= ~mc_clk;
575 4 rudi
 
576 10 rudi
/////////////////////////////////////////////////////////////////////
577
//
578
// IO Monitors
579
//
580 4 rudi
 
581 10 rudi
`define STD     10
582
always @(posedge clk)
583
        if((wb_ack_o === 1'bx) & ($time > `STD) )
584
           begin
585
                $display("ERROR: Wishbone ACK unknown (%t)", $time);
586
                error_cnt = error_cnt + 1;
587
           end
588 4 rudi
 
589 10 rudi
always @(posedge clk)
590
        if( (wb_err_o === 1'bx) & ($time > `STD) )
591 4 rudi
 
592 10 rudi
           begin
593
                $display("ERROR: Wishbone ERR unknown (%t)", $time);
594
                error_cnt = error_cnt + 1;
595
           end
596 4 rudi
 
597 10 rudi
always @(posedge clk)
598
        if( (mc_ras_ === 1'bx) & ($time > `STD) )
599 4 rudi
 
600 10 rudi
           begin
601
                $display("ERROR: MC RAS unknown (%t)", $time);
602
                error_cnt = error_cnt + 1;
603
           end
604 4 rudi
 
605 10 rudi
always @(posedge clk)
606
        if( (mc_cas_ === 1'bx) & ($time > `STD) )
607 4 rudi
 
608
           begin
609 10 rudi
                $display("ERROR: MC CAS unknown (%t)", $time);
610
                error_cnt = error_cnt + 1;
611
           end
612 4 rudi
 
613 10 rudi
always @(posedge clk)
614
        if( (mc_we_ === 1'bx) & ($time > `STD) )
615 4 rudi
 
616 10 rudi
           begin
617
                $display("ERROR: MC WE unknown (%t)", $time);
618
                error_cnt = error_cnt + 1;
619
           end
620 4 rudi
 
621 10 rudi
always @(posedge clk)
622
        if( ((|mc_cs_) === 1'bx) & ($time > `STD) )
623 4 rudi
 
624 10 rudi
           begin
625
                $display("ERROR: MC CS unknown (%t)", $time);
626
                error_cnt = error_cnt + 1;
627 4 rudi
           end
628
 
629 10 rudi
always @(error_cnt)
630
        if(error_cnt > 25)      #500 $finish;
631 4 rudi
 
632
/////////////////////////////////////////////////////////////////////
633
//
634
// IO Buffers
635
//
636
 
637
wire    [31:0]   mc_dq;
638
wire    [3:0]    mc_dqp;
639
wire    [23:0]   _mc_addr;
640
wire    [3:0]    _mc_dqm;
641
wire            _mc_oe_;
642
wire            _mc_we_;
643
wire            _mc_cas_;
644
wire            _mc_ras_;
645
wire            _mc_cke_;
646
wire    [7:0]    _mc_cs_;
647
wire            _mc_rp_;
648
wire            _mc_vpen;
649
wire            _mc_adsc_;
650
wire            _mc_adv_;
651
wire            _mc_zz;
652
reg     [31:0]   rst_dq_val;
653
 
654
always @(poc_mode)
655
        case(poc_mode)
656
           0: rst_dq_val = {28'hzzz_zzzz, 2'b10, 2'b00};
657
           1: rst_dq_val = {28'hzzz_zzzz, 2'b10, 2'b01};
658
           2: rst_dq_val = {28'hzzz_zzzz, 2'b10, 2'b10};
659
         //  3: rst_dq_val = {28'hzzzz_zzzz, 2'b10, 2'b11};
660
           default: rst_dq_val = 32'hzzzz_zzzz;
661
        endcase
662
 
663 10 rudi
assign #1 mc_dq = mc_data_oe ? mc_data_o : (~rst ? rst_dq_val : 32'hzzzz_zzzz);
664
assign #1 mc_data_i = mc_dq;
665 4 rudi
 
666 10 rudi
assign #1 mc_dqp = mc_data_oe ? mc_dp_o : 4'hz;
667
assign #1 mc_dp_i = mc_dqp;
668 4 rudi
 
669 10 rudi
assign #1 mc_addr = mc_c_oe ? _mc_addr : 24'bz;
670
assign #1 mc_dqm = mc_c_oe ? _mc_dqm : 4'bz;
671
assign #1 mc_oe_ = mc_c_oe ? _mc_oe_ : 1'bz;
672
assign #1 mc_we_ = mc_c_oe ? _mc_we_ : 1'bz;
673
assign #1 mc_cas_ = mc_c_oe ? _mc_cas_ : 1'bz;
674
assign #1 mc_ras_ = mc_c_oe ? _mc_ras_ : 1'bz;
675
assign #1 mc_cke_ = mc_c_oe ? _mc_cke_ : 1'bz;
676
assign #1 mc_cs_ = mc_c_oe ? _mc_cs_ : 8'bz;
677
assign #1 mc_rp_ = mc_c_oe ? _mc_rp_ : 1'bz;
678
assign #1 mc_vpen = mc_c_oe ? _mc_vpen : 1'bz;
679
assign #1 mc_adsc_ = mc_c_oe ? _mc_adsc_ : 1'bz;
680
assign #1 mc_adv_ = mc_c_oe ? _mc_adv_ : 1'bz;
681
assign #1 mc_zz = mc_c_oe ? _mc_zz : 1'bz;
682 4 rudi
 
683
pullup p0(mc_cas_);
684
pullup p1(mc_ras_);
685
pullup p2(mc_oe_);
686
pullup p3(mc_we_);
687
pullup p4(mc_cke_);
688
pullup p5(mc_adsc_);
689
pullup p6(mc_adv_);
690
pullup p70(mc_cs_[0]);
691
pullup p71(mc_cs_[1]);
692
pullup p72(mc_cs_[2]);
693
pullup p73(mc_cs_[3]);
694
pullup p74(mc_cs_[4]);
695
pullup p75(mc_cs_[5]);
696
pullup p76(mc_cs_[6]);
697
pullup p77(mc_cs_[7]);
698
pullup p8(mc_rp_);
699
 
700
 
701
/////////////////////////////////////////////////////////////////////
702
//
703
// WISHBONE Memory Controller IP Core
704
//
705
mc_top  u0(
706 8 rudi
                .clk_i(         clk             ),
707
                .rst_i(         rst             ),
708 4 rudi
                .wb_data_i(     wb_data_i       ),
709
                .wb_data_o(     wb_data_o       ),
710
                .wb_addr_i(     wb_addr_i       ),
711
                .wb_sel_i(      wb_sel_i        ),
712
                .wb_we_i(       wb_we_i         ),
713
                .wb_cyc_i(      wb_cyc_i        ),
714
                .wb_stb_i(      wb_stb_i        ),
715
                .wb_ack_o(      wb_ack_o        ),
716
                .wb_err_o(      wb_err_o        ),
717 8 rudi
                .susp_req_i(    susp_req        ),
718
                .resume_req_i(  resume_req      ),
719
                .suspended_o(   suspended       ),
720
                .poc_o(         poc             ),
721
                .mc_clk_i(      mc_clk          ),
722
                .mc_br_pad_i(   mc_br           ),
723
                .mc_bg_pad_o(   mc_bg           ),
724
                .mc_ack_pad_i(  mc_ack          ),
725
                .mc_addr_pad_o( _mc_addr        ),
726
                .mc_data_pad_i( mc_data_i       ),
727
                .mc_data_pad_o( mc_data_o       ),
728
                .mc_dp_pad_i(   mc_dp_i         ),
729
                .mc_dp_pad_o(   mc_dp_o         ),
730
                .mc_doe_pad_doe_o(mc_data_oe    ),
731
                .mc_dqm_pad_o(  _mc_dqm         ),
732
                .mc_oe_pad_o_(  _mc_oe_         ),
733
                .mc_we_pad_o_(  _mc_we_         ),
734
                .mc_cas_pad_o_( _mc_cas_        ),
735
                .mc_ras_pad_o_( _mc_ras_        ),
736
                .mc_cke_pad_o_( _mc_cke_        ),
737
                .mc_cs_pad_o_(  _mc_cs_         ),
738
                .mc_sts_pad_i(  mc_sts          ),
739
                .mc_rp_pad_o_(  _mc_rp_         ),
740
                .mc_vpen_pad_o( _mc_vpen        ),
741
                .mc_adsc_pad_o_(_mc_adsc_       ),
742
                .mc_adv_pad_o_( _mc_adv_        ),
743
                .mc_zz_pad_o(   _mc_zz          ),
744
                .mc_coe_pad_coe_o(mc_c_oe       )
745 4 rudi
                );
746
 
747
/////////////////////////////////////////////////////////////////////
748
//
749
// WISHBONE Master Model
750
//
751
 
752
wb_mast m0(     .clk(           clk             ),
753
                .rst(           rst             ),
754
                .adr(           wb_addr_i       ),
755
                .din(           wb_data_o       ),
756
                .dout(          wb_data_i       ),
757
                .cyc(           wb_cyc_i        ),
758
                .stb(           wb_stb_i        ),
759
                .sel(           wb_sel_i        ),
760
                .we(            wb_we_i         ),
761
                .ack(           wb_ack_o        ),
762
                .err(           wb_err_o        ),
763
                .rty(           wb_rty_o        )
764
                );
765
 
766
/////////////////////////////////////////////////////////////////////
767
//
768
// Sync. CS Device Model
769
//
770
 
771
sync_cs_dev s0(
772
                .clk(           mc_clk          ),
773
                .addr(          mc_addr[15:0]    ),
774
                .dq(            mc_dq           ),
775
                .cs_(           mc_cs_[5]       ),
776
                .we_(           mc_we_          ),
777
                .oe_(           mc_oe_          ),
778
                .ack_(          mc_ack          )
779
                );
780
 
781
 
782
/////////////////////////////////////////////////////////////////////
783
//
784
// Memory Models
785
//
786
 
787
`ifdef SDRAM0
788
//      Model:  MT48LC2M32B2 (2Meg x 32 x 4 Banks)
789
mt48lc2m32b2 sdram0(
790
                .Dq(            mc_dq           ),
791
                .Addr(          mc_addr[10:0]    ),
792
                .Ba(            mc_addr[14:13]  ),
793
                .Clk(           mc_clk          ),
794
                .Cke(           mc_cke_         ),
795
                .Cs_n(          mc_cs_[0]        ),
796
                .Ras_n(         mc_ras_         ),
797
                .Cas_n(         mc_cas_         ),
798
                .We_n(          mc_we_          ),
799
                .Dqm(           mc_dqm          )
800
                );
801
 
802
wire    [27:0]   dq_tmp;
803
mt48lc2m32b2 sdram0p(
804
                .Dq(            {dq_tmp, mc_dqp}),
805
                .Addr(          mc_addr[10:0]    ),
806
                .Ba(            mc_addr[14:13]  ),
807
                .Clk(           mc_clk          ),
808
                .Cke(           mc_cke_         ),
809
                .Cs_n(          mc_cs_[0]        ),
810
                .Ras_n(         mc_ras_         ),
811
                .Cas_n(         mc_cas_         ),
812
                .We_n(          mc_we_          ),
813
                .Dqm(           mc_dqm          )
814
                );
815
 
816
task fill_mem;
817
input   size;
818
 
819
integer         size, n;
820
reg     [31:0]   data;
821
 
822
begin
823
sdram0.mem_fill(size);
824
 
825
for(n=0;n<size;n=n+1)
826
   begin
827
        data = sdram0.Bank0[n];
828
        sdram0p.Bank0[n] = {28'h0, ^data[31:24], ^data[23:16], ^data[15:8], ^data[7:0] };
829
        data = sdram0.Bank1[n];
830
        sdram0p.Bank1[n] = {28'h0, ^data[31:24], ^data[23:16], ^data[15:8], ^data[7:0] };
831
        data = sdram0.Bank2[n];
832
        sdram0p.Bank2[n] = {28'h0, ^data[31:24], ^data[23:16], ^data[15:8], ^data[7:0] };
833
        data = sdram0.Bank3[n];
834
        sdram0p.Bank3[n] = {28'h0, ^data[31:24], ^data[23:16], ^data[15:8], ^data[7:0] };
835
   end
836
 
837
 
838
end
839
endtask
840
 
841
 
842
`endif
843
 
844
 
845
`ifdef MULTI_SDRAM
846
//      Model:  MT48LC2M32B2 (2Meg x 32 x 4 Banks)
847
 
848
mt48lc2m32b2 sdram1(
849
                .Dq(            mc_dq           ),
850
                .Addr(          mc_addr[10:0]    ),
851
                .Ba(            mc_addr[14:13]  ),
852
                .Clk(           mc_clk          ),
853
                .Cke(           mc_cke_         ),
854
                .Cs_n(          mc_cs_[1]       ),
855
                .Ras_n(         mc_ras_         ),
856
                .Cas_n(         mc_cas_         ),
857
                .We_n(          mc_we_          ),
858
                .Dqm(           mc_dqm          )
859
                );
860
 
861
//      Model:  MT48LC2M32B2 (2Meg x 32 x 4 Banks)
862
mt48lc2m32b2 sdram2(
863
                .Dq(            mc_dq           ),
864
                .Addr(          mc_addr[10:0]    ),
865
                .Ba(            mc_addr[14:13]  ),
866
                .Clk(           mc_clk          ),
867
                .Cke(           mc_cke_         ),
868
                .Cs_n(          mc_cs_[2]       ),
869
                .Ras_n(         mc_ras_         ),
870
                .Cas_n(         mc_cas_         ),
871
                .We_n(          mc_we_          ),
872
                .Dqm(           mc_dqm          )
873
                );
874
 
875
 
876
/*
877
 
878
mt48lc4m16a2 sdram1a(
879
                .Dq(            mc_dq[15:0]     ),
880
                .Addr(          mc_addr[11:0]   ),
881
                .Ba(            mc_addr[14:13]  ),
882
                .Clk(           mc_clk          ),
883
                .Cke(           mc_cke_         ),
884
                .Cs_n(          mc_cs_[1]       ),
885
                .Ras_n(         mc_ras_         ),
886
                .Cas_n(         mc_cas_         ),
887
                .We_n(          mc_we_          ),
888
                .Dqm(           mc_dqm[1:0]     )
889
                );
890
 
891
mt48lc4m16a2 sdram1b(
892
                .Dq(            mc_dq[31:16]    ),
893
                .Addr(          mc_addr[11:0]   ),
894
                .Ba(            mc_addr[14:13]  ),
895
                .Clk(           mc_clk          ),
896
                .Cke(           mc_cke_         ),
897
                .Cs_n(          mc_cs_[1]       ),
898
                .Ras_n(         mc_ras_         ),
899
                .Cas_n(         mc_cas_         ),
900
                .We_n(          mc_we_          ),
901
                .Dqm(           mc_dqm[3:2]     )
902
                );
903
 
904
mt48lc8m8a2 sdram2a(
905
                .Dq(            mc_dq[07:00]    ),
906
                .Addr(          mc_addr[11:0]   ),
907
                .Ba(            mc_addr[14:13]  ),
908
                .Clk(           mc_clk          ),
909
                .Cke(           mc_cke_         ),
910
                .Cs_n(          mc_cs_[2]       ),
911
                .Ras_n(         mc_ras_         ),
912
                .Cas_n(         mc_cas_         ),
913
                .We_n(          mc_we_          ),
914
                .Dqm(           mc_dqm[0]       )
915
                );
916
 
917
mt48lc8m8a2 sdram2b(
918
                .Dq(            mc_dq[15:08]    ),
919
                .Addr(          mc_addr[11:0]   ),
920
                .Ba(            mc_addr[14:13]  ),
921
                .Clk(           mc_clk          ),
922
                .Cke(           mc_cke_         ),
923
                .Cs_n(          mc_cs_[2]       ),
924
                .Ras_n(         mc_ras_         ),
925
                .Cas_n(         mc_cas_         ),
926
                .We_n(          mc_we_          ),
927
                .Dqm(           mc_dqm[1]       )
928
                );
929
 
930
mt48lc8m8a2 sdram2c(
931
                .Dq(            mc_dq[23:16]    ),
932
                .Addr(          mc_addr[11:0]   ),
933
                .Ba(            mc_addr[14:13]  ),
934
                .Clk(           mc_clk          ),
935
                .Cke(           mc_cke_         ),
936
                .Cs_n(          mc_cs_[2]       ),
937
                .Ras_n(         mc_ras_         ),
938
                .Cas_n(         mc_cas_         ),
939
                .We_n(          mc_we_          ),
940
                .Dqm(           mc_dqm[2]       )
941
                );
942
 
943
mt48lc8m8a2 sdram2d(
944
                .Dq(            mc_dq[31:24]    ),
945
                .Addr(          mc_addr[11:0]   ),
946
                .Ba(            mc_addr[14:13]  ),
947
                .Clk(           mc_clk          ),
948
                .Cke(           mc_cke_         ),
949
                .Cs_n(          mc_cs_[2]       ),
950
                .Ras_n(         mc_ras_         ),
951
                .Cas_n(         mc_cas_         ),
952
                .We_n(          mc_we_          ),
953
                .Dqm(           mc_dqm[3]       )
954
                );
955
*/
956
 
957
`endif
958
 
959
`ifdef FLASH
960
IntelAdvBoot f1(
961
                .dq(    mc_dq[15:0]      ),
962
                .addr(  mc_addr[19:0]    ),
963
                .ceb(   mc_cs_[3]       ),
964
                .oeb(   mc_oe_          ),
965
                .web(   mc_we_          ),
966
                .rpb(   mc_rp_          ),
967
                .wpb(   1'b0            ),
968
                .vpp(   3300            ),
969
                .vcc(   3300            )
970
                );
971
`endif
972
 
973
 
974
`ifdef SRAM
975
 
976
`ifdef MICRON
977
mt58l1my18d sram0a(
978
                .Dq(            {mc_dqp[1],
979
                                mc_dq[15:8],
980
                                mc_dqp[0],
981
                                mc_dq[7:0]}      ),
982
 
983
                .Addr(          mc_addr[19:0]    ),
984
                .Mode(          1'b0            ),
985
                .Adv_n(         mc_adv_         ),
986
                .Clk(           mc_clk          ),
987
                .Adsc_n(        mc_adsc_        ),
988
                .Adsp_n(        1'b1            ),
989
 
990
                .Bwa_n(         mc_dqm[0]        ),
991
                .Bwb_n(         mc_dqm[1]       ),
992
                .Bwe_n(         mc_we_          ),
993
                .Gw_n(          1'b1            ),
994
 
995
                .Ce_n(          mc_cs_[4]       ),
996
                .Ce2(           1'b1            ),
997
                .Ce2_n(         1'b0            ),
998
                .Oe_n(          mc_oe_          ),
999
                .Zz(            mc_zz           )
1000
                );
1001
 
1002
 
1003
mt58l1my18d sram0b(
1004
                .Dq(            {mc_dqp[3],
1005
                                mc_dq[31:24],
1006
                                mc_dqp[2],
1007
                                mc_dq[23:16]}   ),
1008
 
1009
                .Addr(          mc_addr[19:0]    ),
1010
                .Mode(          1'b0            ),
1011
                .Adv_n(         mc_adv_         ),
1012
                .Clk(           mc_clk          ),
1013
                .Adsc_n(        mc_adsc_        ),
1014
                .Adsp_n(        1'b1            ),
1015
 
1016
                .Bwa_n(         mc_dqm[2]       ),
1017
                .Bwb_n(         mc_dqm[3]       ),
1018
                .Bwe_n(         mc_we_          ),
1019
                .Gw_n(          1'b1            ),
1020
 
1021
                .Ce_n(          mc_cs_[4]       ),
1022
                .Ce2(           1'b1            ),
1023
                .Ce2_n(         1'b0            ),
1024
                .Oe_n(          mc_oe_          ),
1025
                .Zz(            mc_zz           )
1026
                );
1027
 
1028
`else
1029
 
1030
idt71t67802s133 sram0a(
1031
                .A(     mc_addr[18:0]    ),
1032
                .D(     mc_dq[15:0]      ),
1033
                .DP(    mc_dqp[1:0]      ),
1034
                .oe_(   mc_oe_          ),
1035
                .ce_(   mc_cs_[4]       ),
1036
                .cs0(   1'b1            ),
1037
                .cs1_(  1'b0            ),
1038
                .lbo_(  1'b0            ),
1039
 
1040
                .gw_(   1'b1            ),
1041
                .bwe_(  mc_we_          ),
1042
                .bw2_(  mc_dqm[1]       ),
1043
                .bw1_(  mc_dqm[0]        ),
1044
 
1045
                .adsp_( 1'b1            ),
1046
                .adsc_( mc_adsc_        ),
1047
                .adv_(  mc_adv_         ),
1048
                .clk(   mc_clk          )
1049
                );
1050
 
1051
idt71t67802s133 sram0b(
1052
                .A(     mc_addr[18:0]    ),
1053
                .D(     mc_dq[31:16]    ),
1054
                .DP(    mc_dqp[3:2]     ),
1055
                .oe_(   mc_oe_          ),
1056
                .ce_(   mc_cs_[4]       ),
1057
                .cs0(   1'b1            ),
1058
                .cs1_(  1'b0            ),
1059
                .lbo_(  1'b0            ),
1060
 
1061
                .gw_(   1'b1            ),
1062
                .bwe_(  mc_we_          ),
1063
                .bw2_(  mc_dqm[3]       ),
1064
                .bw1_(  mc_dqm[2]       ),
1065
 
1066
                .adsp_( 1'b1            ),
1067
                .adsc_( mc_adsc_        ),
1068
                .adv_(  mc_adv_         ),
1069
                .clk(   mc_clk          )
1070
                );
1071
`endif
1072
 
1073
`endif
1074
 
1075
`include "tests.v"
1076
`include "test_lib.v"
1077
 
1078
endmodule
1079
 

powered by: WebSVN 2.1.0

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