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 8

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

powered by: WebSVN 2.1.0

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