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

Subversion Repositories ac97

[/] [ac97/] [trunk/] [bench/] [verilog/] [tests.v] - Blame information for rev 10

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

Line No. Rev Author Line
1 7 rudi
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  Tests                                                      ////
4
////                                                             ////
5
////                                                             ////
6
////  Author: Rudolf Usselmann                                   ////
7
////          rudi@asics.ws                                      ////
8
////                                                             ////
9
////                                                             ////
10
////  Downloaded from: http://www.opencores.org/cores/ac97_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: tests.v,v 1.2 2002-03-05 04:44:04 rudi Exp $
41 7 rudi
//
42 10 rudi
//  $Date: 2002-03-05 04:44:04 $
43
//  $Revision: 1.2 $
44 7 rudi
//  $Author: rudi $
45
//  $Locker:  $
46
//  $State: Exp $
47
//
48
// Change History:
49
//               $Log: not supported by cvs2svn $
50 10 rudi
//               Revision 1.1  2002/02/13 08:22:32  rudi
51 7 rudi
//
52 10 rudi
//               Added test bench for public release
53 7 rudi
//
54 10 rudi
//
55
//
56 7 rudi
//                        
57
 
58
 
59
task show_errors;
60
 
61
begin
62
 
63
$display("\n");
64
$display("     +--------------------+");
65
$display("     |  Total ERRORS: %0d   |", error_cnt);
66
$display("     +--------------------+");
67
 
68
end
69
endtask
70
 
71
 
72
task basic1;
73
 
74
reg     [31:0]   data;
75
reg     [31:0]   data1;
76
reg     [31:0]   data2;
77
integer         size, frames, m;
78
 
79
begin
80
$display("\n\n");
81
$display("*****************************************************");
82
$display("*** Basic AC97 I/O Test & Reg Wr ...              ***");
83
$display("*****************************************************\n");
84
 
85
 
86
        wb_busy = 1;
87
        m0.wb_wr1(`INTM,4'hf, 32'h0000_0003);
88
        m0.wb_wr1(`OCC0,4'hf, 32'h7373_7373);
89
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_7373);
90
        m0.wb_wr1(`ICC,4'hf, 32'h0073_7373);
91
 
92
        wb_busy = 0;
93
        oc0_dma_en = 1;
94
        oc1_dma_en = 1;
95
        oc2_dma_en = 1;
96
        oc3_dma_en = 1;
97
        oc4_dma_en = 1;
98
        oc5_dma_en = 1;
99
        ic0_dma_en = 1;
100
        ic1_dma_en = 1;
101
        ic2_dma_en = 1;
102
 
103
        for(n=0;n<256;n=n+1)
104
           begin
105
                oc0_mem[n] = $random;
106
                oc1_mem[n] = $random;
107
                oc2_mem[n] = $random;
108
                oc3_mem[n] = $random;
109
                oc4_mem[n] = $random;
110
                oc5_mem[n] = $random;
111
                ic0_mem[n] = $random;
112
                ic1_mem[n] = $random;
113
                ic2_mem[n] = $random;
114
           end
115
 
116
        u1.init(0);
117
        frames = 139;
118
 
119
fork
120
        u1.tx1( frames,                                 // Number of frames to process
121
                0,                                       // How many frames before codec is ready
122
                10'b1111_1111_11,                        // Output slots valid bits
123
                10'b1111_1111_11,                        // Input slots valid bits
124
                20'b00_00_00_00_00_00_00_00_00_00,       // Output Slots intervals
125
                20'b00_00_00_00_00_00_00_00_00_00        // Input Slots intervals
126
                );
127
 
128
        begin   // Do a register Write
129
                repeat(2)       @(posedge sync);
130
 
131
                for(n=0;n<75;n=n+1)
132
                   begin
133
                        @(negedge sync);
134 10 rudi
                        //repeat(230)   @(posedge bit_clk);
135
                        repeat(130)     @(posedge bit_clk);
136 7 rudi
 
137
                        repeat(n)       @(posedge bit_clk);
138
 
139
                        while(wb_busy)  @(posedge clk);
140
                        wb_busy = 1;
141
                        m0.wb_wr1(`CRAC,4'hf, {9'h0, n[6:0], 16'h1234 + n[7:0]} );
142
                        wb_busy = 0;
143
 
144
                        while(!int)     @(posedge clk);
145
                   end
146
        end
147
join
148
 
149
repeat(300)     @(posedge bit_clk);
150
 
151
        for(n=0;n<75;n=n+1)
152
           begin
153
                        data2 = {9'h0, n[6:0], 16'h1234 + n[7:0]};
154
                        tmp = u1.rs2_mem[n];
155
                        data1[15:0] = tmp[19:4];
156
 
157
                        tmp = u1.rs1_mem[n];
158
                        data1[31:16] = {9'h0, tmp[18:12]};
159
 
160
                if(     (data1 !== data2) |
161
                        (^data1 === 1'hx) |
162
                        (^data2 === 1'hx)
163
                        )
164
                   begin
165
                        $display("ERROR: Register Write Data %0d Mismatch Sent: %h Got: %h",
166
                        n, data2, data1);
167
                        error_cnt = error_cnt + 1;
168
                   end
169
 
170
           end
171
 
172
        size = frames - 4;
173
 
174
        for(n=0;n<size;n=n+1)
175
           begin
176
                data1 = u1.rs3_mem[n];
177
                data = oc0_mem[n[8:1]];
178
 
179
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
180
                else            data2 = {12'h0, data[31:16], 4'h0};
181
 
182
                if(     (data1 !== data2) |
183
                        (^data1 === 1'hx) |
184
                        (^data2 === 1'hx)
185
                        )
186
                   begin
187
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
188
                        n, data2, data1);
189
                        error_cnt = error_cnt + 1;
190
                   end
191
           end
192
 
193
        for(n=0;n<size;n=n+1)
194
           begin
195
                data1 = u1.rs4_mem[n];
196
                data = oc1_mem[n[8:1]];
197
 
198
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
199
                else            data2 = {12'h0, data[31:16], 4'h0};
200
 
201
                if(     (data1 !== data2) |
202
                        (^data1 === 1'hx) |
203
                        (^data2 === 1'hx)
204
                        )
205
                   begin
206
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
207
                        n, data2, data1);
208
                        error_cnt = error_cnt + 1;
209
                   end
210
           end
211
 
212
        for(n=0;n<size;n=n+1)
213
           begin
214
                data1 = u1.rs6_mem[n];
215
                data = oc2_mem[n[8:1]];
216
 
217
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
218
                else            data2 = {12'h0, data[31:16], 4'h0};
219
 
220
                if(     (data1 !== data2) |
221
                        (^data1 === 1'hx) |
222
                        (^data2 === 1'hx)
223
                        )
224
                   begin
225
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
226
                        n, data2, data1);
227
                        error_cnt = error_cnt + 1;
228
                   end
229
           end
230
 
231
        for(n=0;n<size;n=n+1)
232
           begin
233
                data1 = u1.rs7_mem[n];
234
                data = oc3_mem[n[8:1]];
235
 
236
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
237
                else            data2 = {12'h0, data[31:16], 4'h0};
238
 
239
                if(     (data1 !== data2) |
240
                        (^data1 === 1'hx) |
241
                        (^data2 === 1'hx)
242
                        )
243
                   begin
244
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
245
                        n, data2, data1);
246
                        error_cnt = error_cnt + 1;
247
                   end
248
           end
249
 
250
        for(n=0;n<size;n=n+1)
251
           begin
252
                data1 = u1.rs8_mem[n];
253
                data = oc4_mem[n[8:1]];
254
 
255
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
256
                else            data2 = {12'h0, data[31:16], 4'h0};
257
 
258
                if(     (data1 !== data2) |
259
                        (^data1 === 1'hx) |
260
                        (^data2 === 1'hx)
261
                        )
262
                   begin
263
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
264
                        n, data2, data1);
265
                        error_cnt = error_cnt + 1;
266
                   end
267
           end
268
 
269
        for(n=0;n<size;n=n+1)
270
           begin
271
                data1 = u1.rs9_mem[n];
272
                data = oc5_mem[n[8:1]];
273
 
274
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
275
                else            data2 = {12'h0, data[31:16], 4'h0};
276
 
277
                if(     (data1 !== data2) |
278
                        (^data1 === 1'hx) |
279
                        (^data2 === 1'hx)
280
                        )
281
                   begin
282
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
283
                        n, data2, data1);
284
                        error_cnt = error_cnt + 1;
285
                   end
286
           end
287
 
288
        for(n=0;n<size;n=n+1)
289
           begin
290
                data1 = u1.is3_mem[n];
291
                data = ic0_mem[n[8:1]];
292
 
293
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
294
                else            data2 = {12'h0, data[31:16], 4'h0};
295
 
296
                if(     (data1 !== data2) |
297
                        (^data1 === 1'hx) |
298
                        (^data2 === 1'hx)
299
                        )
300
                   begin
301
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
302
                        n, data2, data1);
303
                        error_cnt = error_cnt + 1;
304
                   end
305
           end
306
 
307
        for(n=0;n<size;n=n+1)
308
           begin
309
                data1 = u1.is4_mem[n];
310
                data = ic1_mem[n[8:1]];
311
 
312
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
313
                else            data2 = {12'h0, data[31:16], 4'h0};
314
 
315
                if(     (data1 !== data2) |
316
                        (^data1 === 1'hx) |
317
                        (^data2 === 1'hx)
318
                        )
319
                   begin
320
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
321
                        n, data2, data1);
322
                        error_cnt = error_cnt + 1;
323
                   end
324
           end
325
 
326
        for(n=0;n<size;n=n+1)
327
           begin
328
                data1 = u1.is6_mem[n];
329
                data = ic2_mem[n[8:1]];
330
 
331
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
332
                else            data2 = {12'h0, data[31:16], 4'h0};
333
 
334
                if(     (data1 !== data2) |
335
                        (^data1 === 1'hx) |
336
                        (^data2 === 1'hx)
337
                        )
338
                   begin
339
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
340
                        n, data2, data1);
341
                        error_cnt = error_cnt + 1;
342
                   end
343
           end
344
 
345
repeat(10)      @(posedge clk);
346
 
347
show_errors;
348
$display("*****************************************************");
349
$display("*** Test DONE ...                                 ***");
350
$display("*****************************************************\n\n");
351
 
352
end
353
endtask
354
 
355
 
356
 
357
task basic2;
358
 
359
reg     [31:0]   data;
360
reg     [31:0]   data1;
361
reg     [31:0]   data2;
362
integer         size, frames, m;
363
 
364
begin
365
$display("\n\n");
366
$display("*****************************************************");
367
$display("*** Basic AC97 I/O Test & Reg Rd ...              ***");
368
$display("*****************************************************\n");
369
 
370
        wb_busy = 1;
371
        m0.wb_wr1(`INTM,4'hf, 32'h0000_0003);
372
        m0.wb_wr1(`OCC0,4'hf, 32'h7373_7373);
373
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_7373);
374
        m0.wb_wr1(`ICC,4'hf, 32'h0073_7373);
375
 
376
        wb_busy = 0;
377
        oc0_dma_en = 1;
378
        oc1_dma_en = 1;
379
        oc2_dma_en = 1;
380
        oc3_dma_en = 1;
381
        oc4_dma_en = 1;
382
        oc5_dma_en = 1;
383
        ic0_dma_en = 1;
384
        ic1_dma_en = 1;
385
        ic2_dma_en = 1;
386
 
387
        for(n=0;n<256;n=n+1)
388
           begin
389
                oc0_mem[n] = $random;
390
                oc1_mem[n] = $random;
391
                oc2_mem[n] = $random;
392
                oc3_mem[n] = $random;
393
                oc4_mem[n] = $random;
394
                oc5_mem[n] = $random;
395
                ic0_mem[n] = $random;
396
                ic1_mem[n] = $random;
397
                ic2_mem[n] = $random;
398
           end
399
 
400
        u1.init(0);
401
        frames = 139;
402
 
403
fork
404
        u1.tx1( frames,                                 // Number of frames to process
405
                0,                                       // How many frames before codec is ready
406
                10'b1111_1111_11,                        // Output slots valid bits
407
                10'b1111_1111_11,                        // Input slots valid bits
408
                20'b00_00_00_00_00_00_00_00_00_00,       // Output Slots intervals
409
                20'b00_00_00_00_00_00_00_00_00_00        // Input Slots intervals
410
                );
411
 
412
        begin   // Do a register Write
413
                repeat(2)       @(posedge sync);
414
 
415
                for(n=0;n<75;n=n+1)
416
                   begin
417
                        @(negedge sync);
418 10 rudi
                        //repeat(230)   @(posedge bit_clk);
419
                        repeat(130)     @(posedge bit_clk);
420 7 rudi
 
421
                        repeat(n)       @(posedge bit_clk);
422
 
423
                        while(wb_busy)  @(posedge clk);
424
                        wb_busy = 1;
425
                        m0.wb_wr1(`CRAC,4'hf, {1'b1, 8'h0, n[6:0], 16'h1234 + n[7:0]} );
426
                        wb_busy = 0;
427
 
428
                        while(!int)     @(posedge clk);
429
 
430
                        while(wb_busy)  @(posedge clk);
431
                        wb_busy = 1;
432
                        m0.wb_rd1(`CRAC,4'hf, reg_mem[n] );
433
                        wb_busy = 0;
434
 
435
                   end
436
        end
437
join
438
 
439
repeat(300)     @(posedge bit_clk);
440
 
441
        for(n=0;n<75;n=n+1)
442
           begin
443
 
444
                        tmp = u1.is2_mem[n];
445
                        data2 = {16'h0, tmp[19:4]};
446
                        tmp = reg_mem[n];
447
                        data1 = {16'h0, tmp[15:0]};
448
 
449
                if(     (data1 !== data2) |
450
                        (^data1 === 1'hx) |
451
                        (^data2 === 1'hx)
452
                        )
453
                   begin
454
                        $display("ERROR: Register Read Data %0d Mismatch Expected: %h Got: %h",
455
                        n, data2, data1);
456
                        error_cnt = error_cnt + 1;
457
                   end
458
 
459
           end
460
 
461
        size = frames - 4;
462
 
463
        for(n=0;n<size;n=n+1)
464
           begin
465
                data1 = u1.rs3_mem[n];
466
                data = oc0_mem[n[8:1]];
467
 
468
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
469
                else            data2 = {12'h0, data[31:16], 4'h0};
470
 
471
                if(     (data1 !== data2) |
472
                        (^data1 === 1'hx) |
473
                        (^data2 === 1'hx)
474
                        )
475
                   begin
476
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
477
                        n, data2, data1);
478
                        error_cnt = error_cnt + 1;
479
                   end
480
           end
481
 
482
        for(n=0;n<size;n=n+1)
483
           begin
484
                data1 = u1.rs4_mem[n];
485
                data = oc1_mem[n[8:1]];
486
 
487
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
488
                else            data2 = {12'h0, data[31:16], 4'h0};
489
 
490
                if(     (data1 !== data2) |
491
                        (^data1 === 1'hx) |
492
                        (^data2 === 1'hx)
493
                        )
494
                   begin
495
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
496
                        n, data2, data1);
497
                        error_cnt = error_cnt + 1;
498
                   end
499
           end
500
 
501
        for(n=0;n<size;n=n+1)
502
           begin
503
                data1 = u1.rs6_mem[n];
504
                data = oc2_mem[n[8:1]];
505
 
506
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
507
                else            data2 = {12'h0, data[31:16], 4'h0};
508
 
509
                if(     (data1 !== data2) |
510
                        (^data1 === 1'hx) |
511
                        (^data2 === 1'hx)
512
                        )
513
                   begin
514
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
515
                        n, data2, data1);
516
                        error_cnt = error_cnt + 1;
517
                   end
518
           end
519
 
520
        for(n=0;n<size;n=n+1)
521
           begin
522
                data1 = u1.rs7_mem[n];
523
                data = oc3_mem[n[8:1]];
524
 
525
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
526
                else            data2 = {12'h0, data[31:16], 4'h0};
527
 
528
                if(     (data1 !== data2) |
529
                        (^data1 === 1'hx) |
530
                        (^data2 === 1'hx)
531
                        )
532
                   begin
533
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
534
                        n, data2, data1);
535
                        error_cnt = error_cnt + 1;
536
                   end
537
           end
538
 
539
        for(n=0;n<size;n=n+1)
540
           begin
541
                data1 = u1.rs8_mem[n];
542
                data = oc4_mem[n[8:1]];
543
 
544
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
545
                else            data2 = {12'h0, data[31:16], 4'h0};
546
 
547
                if(     (data1 !== data2) |
548
                        (^data1 === 1'hx) |
549
                        (^data2 === 1'hx)
550
                        )
551
                   begin
552
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
553
                        n, data2, data1);
554
                        error_cnt = error_cnt + 1;
555
                   end
556
           end
557
 
558
        for(n=0;n<size;n=n+1)
559
           begin
560
                data1 = u1.rs9_mem[n];
561
                data = oc5_mem[n[8:1]];
562
 
563
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
564
                else            data2 = {12'h0, data[31:16], 4'h0};
565
 
566
                if(     (data1 !== data2) |
567
                        (^data1 === 1'hx) |
568
                        (^data2 === 1'hx)
569
                        )
570
                   begin
571
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
572
                        n, data2, data1);
573
                        error_cnt = error_cnt + 1;
574
                   end
575
           end
576
 
577
        for(n=0;n<size;n=n+1)
578
           begin
579
                data1 = u1.is3_mem[n];
580
                data = ic0_mem[n[8:1]];
581
 
582
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
583
                else            data2 = {12'h0, data[31:16], 4'h0};
584
 
585
                if(     (data1 !== data2) |
586
                        (^data1 === 1'hx) |
587
                        (^data2 === 1'hx)
588
                        )
589
                   begin
590
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
591
                        n, data2, data1);
592
                        error_cnt = error_cnt + 1;
593
                   end
594
           end
595
 
596
        for(n=0;n<size;n=n+1)
597
           begin
598
                data1 = u1.is4_mem[n];
599
                data = ic1_mem[n[8:1]];
600
 
601
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
602
                else            data2 = {12'h0, data[31:16], 4'h0};
603
 
604
                if(     (data1 !== data2) |
605
                        (^data1 === 1'hx) |
606
                        (^data2 === 1'hx)
607
                        )
608
                   begin
609
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
610
                        n, data2, data1);
611
                        error_cnt = error_cnt + 1;
612
                   end
613
           end
614
 
615
        for(n=0;n<size;n=n+1)
616
           begin
617
                data1 = u1.is6_mem[n];
618
                data = ic2_mem[n[8:1]];
619
 
620
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
621
                else            data2 = {12'h0, data[31:16], 4'h0};
622
 
623
                if(     (data1 !== data2) |
624
                        (^data1 === 1'hx) |
625
                        (^data2 === 1'hx)
626
                        )
627
                   begin
628
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
629
                        n, data2, data1);
630
                        error_cnt = error_cnt + 1;
631
                   end
632
           end
633
 
634
show_errors;
635
$display("*****************************************************");
636
$display("*** Test DONE ...                                 ***");
637
$display("*****************************************************\n\n");
638
 
639
end
640
endtask
641
 
642
 
643
 
644
task vsr1;
645
 
646
reg     [31:0]   data;
647
reg     [31:0]   data1;
648
reg     [31:0]   data2;
649
integer         size, frames, m;
650
 
651
begin
652
$display("\n\n");
653
$display("*****************************************************");
654
$display("*** VSR AC97 I/O Test ...                       ***");
655
$display("*****************************************************\n");
656
 
657
        wb_busy = 1;
658 10 rudi
        m0.wb_wr1(`INTM,4'hf, 32'h0492_4924);
659
 
660 7 rudi
        m0.wb_wr1(`OCC0,4'hf, 32'h7373_7373);
661
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_7373);
662
        m0.wb_wr1(`ICC,4'hf, 32'h0073_7373);
663
 
664
        wb_busy = 0;
665 10 rudi
 
666 7 rudi
        oc0_dma_en = 1;
667
        oc1_dma_en = 1;
668
        oc2_dma_en = 1;
669
        oc3_dma_en = 1;
670
        oc4_dma_en = 1;
671
        oc5_dma_en = 1;
672
        ic0_dma_en = 1;
673
        ic1_dma_en = 1;
674
        ic2_dma_en = 1;
675
 
676
        for(n=0;n<256;n=n+1)
677
           begin
678
                oc0_mem[n] = $random;
679
                oc1_mem[n] = $random;
680
                oc2_mem[n] = $random;
681
                oc3_mem[n] = $random;
682
                oc4_mem[n] = $random;
683
                oc5_mem[n] = $random;
684
                ic0_mem[n] = $random;
685
                ic1_mem[n] = $random;
686
                ic2_mem[n] = $random;
687
           end
688
 
689
        u1.init(0);
690
 
691
        frames = 132;
692
 
693
        u1.tx1( frames,                                 // Number of frames to process
694
                0,                                       // How many frames before codec is ready
695
                10'b1101_1110_00,                        // Output slots valid bits
696
                10'b1101_0000_00,                        // Input slots valid bits
697
                20'b01_01_00_01_01_01_01_00_00_00,       // Output Slots intervals
698
                20'b01_01_00_01_00_00_00_00_00_00        // Input Slots intervals
699
                );
700
 
701
        size = (frames - 4)/2;
702
 
703
        for(n=0;n<size;n=n+1)
704
           begin
705
                data1 = u1.rs3_mem[n];
706
                data = oc0_mem[n[8:1]];
707
 
708
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
709
                else            data2 = {12'h0, data[31:16], 4'h0};
710
 
711
                if(     (data1 !== data2) |
712
                        (^data1 === 1'hx) |
713
                        (^data2 === 1'hx)
714
                        )
715
                   begin
716
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
717
                        n, data2, data1);
718
                        error_cnt = error_cnt + 1;
719
                   end
720
           end
721
 
722
        for(n=0;n<size;n=n+1)
723
           begin
724
                data1 = u1.rs4_mem[n];
725
                data = oc1_mem[n[8:1]];
726
 
727
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
728
                else            data2 = {12'h0, data[31:16], 4'h0};
729
 
730
                if(     (data1 !== data2) |
731
                        (^data1 === 1'hx) |
732
                        (^data2 === 1'hx)
733
                        )
734
                   begin
735
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
736
                        n, data2, data1);
737
                        error_cnt = error_cnt + 1;
738
                   end
739
           end
740
 
741
        for(n=0;n<size;n=n+1)
742
           begin
743
                data1 = u1.rs6_mem[n];
744
                data = oc2_mem[n[8:1]];
745
 
746
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
747
                else            data2 = {12'h0, data[31:16], 4'h0};
748
 
749
                if(     (data1 !== data2) |
750
                        (^data1 === 1'hx) |
751
                        (^data2 === 1'hx)
752
                        )
753
                   begin
754
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
755
                        n, data2, data1);
756
                        error_cnt = error_cnt + 1;
757
                   end
758
           end
759
 
760
        for(n=0;n<size;n=n+1)
761
           begin
762
                data1 = u1.rs7_mem[n];
763
                data = oc3_mem[n[8:1]];
764
 
765
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
766
                else            data2 = {12'h0, data[31:16], 4'h0};
767
 
768
                if(     (data1 !== data2) |
769
                        (^data1 === 1'hx) |
770
                        (^data2 === 1'hx)
771
                        )
772
                   begin
773
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
774
                        n, data2, data1);
775
                        error_cnt = error_cnt + 1;
776
                   end
777
           end
778
 
779
        for(n=0;n<size;n=n+1)
780
           begin
781
                data1 = u1.rs8_mem[n];
782
                data = oc4_mem[n[8:1]];
783
 
784
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
785
                else            data2 = {12'h0, data[31:16], 4'h0};
786
 
787
                if(     (data1 !== data2) |
788
                        (^data1 === 1'hx) |
789
                        (^data2 === 1'hx)
790
                        )
791
                   begin
792
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
793
                        n, data2, data1);
794
                        error_cnt = error_cnt + 1;
795
                   end
796
           end
797
 
798
        for(n=0;n<size;n=n+1)
799
           begin
800
                data1 = u1.rs9_mem[n];
801
                data = oc5_mem[n[8:1]];
802
 
803
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
804
                else            data2 = {12'h0, data[31:16], 4'h0};
805
 
806
                if(     (data1 !== data2) |
807
                        (^data1 === 1'hx) |
808
                        (^data2 === 1'hx)
809
                        )
810
                   begin
811
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
812
                        n, data2, data1);
813
                        error_cnt = error_cnt + 1;
814
                   end
815
           end
816
 
817
        for(n=0;n<size;n=n+1)
818
           begin
819
                data1 = u1.is3_mem[n];
820
                data = ic0_mem[n[8:1]];
821
 
822
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
823
                else            data2 = {12'h0, data[31:16], 4'h0};
824
 
825
                if(     (data1 !== data2) |
826
                        (^data1 === 1'hx) |
827
                        (^data2 === 1'hx)
828
                        )
829
                   begin
830
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
831
                        n, data2, data1);
832
                        error_cnt = error_cnt + 1;
833
                   end
834
           end
835
 
836
        for(n=0;n<size;n=n+1)
837
           begin
838
                data1 = u1.is4_mem[n];
839
                data = ic1_mem[n[8:1]];
840
 
841
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
842
                else            data2 = {12'h0, data[31:16], 4'h0};
843
 
844
                if(     (data1 !== data2) |
845
                        (^data1 === 1'hx) |
846
                        (^data2 === 1'hx)
847
                        )
848
                   begin
849
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
850
                        n, data2, data1);
851
                        error_cnt = error_cnt + 1;
852
                   end
853
           end
854
 
855
        for(n=0;n<size;n=n+1)
856
           begin
857
                data1 = u1.is6_mem[n];
858
                data = ic2_mem[n[8:1]];
859
 
860
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
861
                else            data2 = {12'h0, data[31:16], 4'h0};
862
 
863
                if(     (data1 !== data2) |
864
                        (^data1 === 1'hx) |
865
                        (^data2 === 1'hx)
866
                        )
867
                   begin
868
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
869
                        n, data2, data1);
870
                        error_cnt = error_cnt + 1;
871
                   end
872
           end
873
 
874
repeat(10)      @(posedge clk);
875
 
876
show_errors;
877
$display("*****************************************************");
878
$display("*** Test DONE ...                                 ***");
879
$display("*****************************************************\n\n");
880
 
881
end
882
endtask
883
 
884
 
885 10 rudi
 
886
task vsr_int;
887
 
888
reg     [31:0]   data;
889
reg     [31:0]   data1;
890
reg     [31:0]   data2;
891
integer         size, frames, m, th, smpl;
892
 
893
begin
894
$display("\n\n");
895
$display("*****************************************************");
896
$display("*** VSR AC97 I/O Test (INT ctrl) ...              ***");
897
$display("*****************************************************\n");
898
 
899
for(smpl=0;smpl<4;smpl=smpl+1)
900
begin
901
$display("Sampling selection: %0d",smpl);
902
for(th=0;th<4;th=th+1)
903
   begin
904
        do_rst;
905
 
906
        while(wb_busy)  @(posedge clk);
907
 
908
        wb_busy = 1;
909
 
910
        m0.wb_wr1(`INTM,4'hf, 32'hffff_fffc);
911
 
912
        case(th)
913
        0:
914
        begin
915
        $display("Interrupt thrash hold: 100%");
916
        // Thrash holds
917
        oc0_th = 4;     // 100% (4/4) Full Empty
918
        oc1_th = 4;
919
        oc2_th = 4;
920
        oc3_th = 4;
921
        oc4_th = 4;
922
        oc5_th = 4;
923
        ic0_th = 4;
924
        ic1_th = 4;
925
        ic2_th = 4;
926
 
927
        m0.wb_wr1(`OCC0,4'hf, 32'h3333_3333);
928
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_3333);
929
        m0.wb_wr1(`ICC,4'hf, 32'h0033_3333);
930
        end
931
 
932
        1:
933
        begin
934
        $display("Interrupt thrash hold: 75%");
935
        // Thrash holds
936
        oc0_th = 3;     // 75% (3/4) Full Empty
937
        oc1_th = 3;
938
        oc2_th = 3;
939
        oc3_th = 3;
940
        oc4_th = 3;
941
        oc5_th = 3;
942
        ic0_th = 3;
943
        ic1_th = 3;
944
        ic2_th = 3;
945
 
946
        m0.wb_wr1(`OCC0,4'hf, 32'h2323_2323);
947
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_2323);
948
        m0.wb_wr1(`ICC,4'hf, 32'h0023_2323);
949
        end
950
 
951
        2:
952
        begin
953
        $display("Interrupt thrash hold: 50%");
954
        // Thrash holds
955
        oc0_th = 2;     // 50% (1/2) Full/Empty
956
        oc1_th = 2;
957
        oc2_th = 2;
958
        oc3_th = 2;
959
        oc4_th = 2;
960
        oc5_th = 2;
961
        ic0_th = 2;
962
        ic1_th = 2;
963
        ic2_th = 2;
964
 
965
        m0.wb_wr1(`OCC0,4'hf, 32'h1313_1313);
966
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_1313);
967
        m0.wb_wr1(`ICC,4'hf, 32'h0013_1313);
968
        end
969
 
970
        3:
971
        begin
972
        $display("Interrupt thrash hold: 25%");
973
        // Thrash holds
974
        oc0_th = 1;     // 25% (1/4) Full/Empty
975
        oc1_th = 1;
976
        oc2_th = 1;
977
        oc3_th = 1;
978
        oc4_th = 1;
979
        oc5_th = 1;
980
        ic0_th = 1;
981
        ic1_th = 1;
982
        ic2_th = 1;
983
 
984
        m0.wb_wr1(`OCC0,4'hf, 32'h0303_0303);
985
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_0303);
986
        m0.wb_wr1(`ICC,4'hf, 32'h0003_0303);
987
        end
988
 
989
        endcase
990
 
991
        wb_busy = 0;
992
 
993
        oc0_dma_en = 0;
994
        oc1_dma_en = 0;
995
        oc2_dma_en = 0;
996
        oc3_dma_en = 0;
997
        oc4_dma_en = 0;
998
        oc5_dma_en = 0;
999
        ic0_dma_en = 0;
1000
        ic1_dma_en = 0;
1001
        ic2_dma_en = 0;
1002
        int_chk_en = 0;
1003
        int_ctrl_en = 1;
1004
 
1005
        for(n=0;n<256;n=n+1)
1006
           begin
1007
                oc0_mem[n] = $random;
1008
                oc1_mem[n] = $random;
1009
                oc2_mem[n] = $random;
1010
                oc3_mem[n] = $random;
1011
                oc4_mem[n] = $random;
1012
                oc5_mem[n] = $random;
1013
                ic0_mem[n] = $random;
1014
                ic1_mem[n] = $random;
1015
                ic2_mem[n] = $random;
1016
           end
1017
 
1018
        u1.init(0);
1019
        frames = 132;
1020
        frames = 132 + 132 + 132;
1021
 
1022
 
1023
        case(smpl)
1024
           0:    // All FULL Speed (48 Khz per channel)
1025
                u1.tx1( frames,                 // Number of frames to process
1026
                        0,                       // How many frames before codec is ready
1027
                        10'b1101_1110_00,        // Output slots valid bits
1028
                        10'b1101_0000_00,        // Input slots valid bits
1029
                        20'b00_00_00_00_00_00_00_00_00_00,  // Output Slots intervals
1030
                        20'b00_00_00_00_00_00_00_00_00_00  // Input Slots intervals
1031
                        );
1032
           1:   // All 1/4 Speed (12 Khz per channel)
1033
                u1.tx1( frames,                 // Number of frames to process
1034
                        0,                       // How many frames before codec is ready
1035
                        10'b1101_1110_00,        // Output slots valid bits
1036
                        10'b1101_0000_00,        // Input slots valid bits
1037
                        20'b11_11_00_11_11_11_11_00_00_00,  // Output Slots intervals
1038
                        20'b11_11_00_11_00_00_00_00_00_00  // Input Slots intervals
1039
                        );
1040
           2:   // Mix 1
1041
                u1.tx1( frames,                 // Number of frames to process
1042
                        0,                       // How many frames before codec is ready
1043
                        10'b1101_1110_00,        // Output slots valid bits
1044
                        10'b1101_0000_00,        // Input slots valid bits
1045
                        20'b00_01_00_10_11_01_10_00_00_00,  // Output Slots intervals
1046
                        20'b11_10_00_01_00_00_00_00_00_00  // Input Slots intervals
1047
                        );
1048
           3:   // Mix 2
1049
                u1.tx1( frames,                 // Number of frames to process
1050
                        0,                       // How many frames before codec is ready
1051
                        10'b1101_1110_00,        // Output slots valid bits
1052
                        10'b1101_0000_00,        // Input slots valid bits
1053
                        20'b00_00_00_01_01_10_10_00_00_00,  // Output Slots intervals
1054
                        20'b00_00_00_10_00_00_00_00_00_00  // Input Slots intervals
1055
                        );
1056
        endcase
1057
 
1058
 
1059
        size = (frames - 4)/2;
1060
        size = (frames - 4)/3;
1061
        size = size - 36;
1062
 
1063
        repeat(100)     @(posedge clk);
1064
 
1065
        for(n=0;n<size;n=n+1)
1066
           begin
1067
                data1 = u1.rs3_mem[n];
1068
                data = oc0_mem[n[8:1]];
1069
 
1070
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1071
                else            data2 = {12'h0, data[31:16], 4'h0};
1072
 
1073
                if(     (data1 !== data2) |
1074
                        (^data1 === 1'hx) |
1075
                        (^data2 === 1'hx)
1076
                        )
1077
                   begin
1078
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
1079
                        n, data2, data1);
1080
                        error_cnt = error_cnt + 1;
1081
                   end
1082
           end
1083
 
1084
 
1085
        for(n=0;n<size;n=n+1)
1086
           begin
1087
                data1 = u1.rs4_mem[n];
1088
                data = oc1_mem[n[8:1]];
1089
 
1090
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1091
                else            data2 = {12'h0, data[31:16], 4'h0};
1092
 
1093
                if(     (data1 !== data2) |
1094
                        (^data1 === 1'hx) |
1095
                        (^data2 === 1'hx)
1096
                        )
1097
                   begin
1098
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
1099
                        n, data2, data1);
1100
                        error_cnt = error_cnt + 1;
1101
                   end
1102
           end
1103
 
1104
        for(n=0;n<size;n=n+1)
1105
           begin
1106
                data1 = u1.rs6_mem[n];
1107
                data = oc2_mem[n[8:1]];
1108
 
1109
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1110
                else            data2 = {12'h0, data[31:16], 4'h0};
1111
 
1112
                if(     (data1 !== data2) |
1113
                        (^data1 === 1'hx) |
1114
                        (^data2 === 1'hx)
1115
                        )
1116
                   begin
1117
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
1118
                        n, data2, data1);
1119
                        error_cnt = error_cnt + 1;
1120
                   end
1121
           end
1122
 
1123
        for(n=0;n<size;n=n+1)
1124
           begin
1125
                data1 = u1.rs7_mem[n];
1126
                data = oc3_mem[n[8:1]];
1127
 
1128
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1129
                else            data2 = {12'h0, data[31:16], 4'h0};
1130
 
1131
                if(     (data1 !== data2) |
1132
                        (^data1 === 1'hx) |
1133
                        (^data2 === 1'hx)
1134
                        )
1135
                   begin
1136
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
1137
                        n, data2, data1);
1138
                        error_cnt = error_cnt + 1;
1139
                   end
1140
           end
1141
 
1142
        for(n=0;n<size;n=n+1)
1143
           begin
1144
                data1 = u1.rs8_mem[n];
1145
                data = oc4_mem[n[8:1]];
1146
 
1147
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1148
                else            data2 = {12'h0, data[31:16], 4'h0};
1149
 
1150
                if(     (data1 !== data2) |
1151
                        (^data1 === 1'hx) |
1152
                        (^data2 === 1'hx)
1153
                        )
1154
                   begin
1155
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
1156
                        n, data2, data1);
1157
                        error_cnt = error_cnt + 1;
1158
                   end
1159
           end
1160
 
1161
        for(n=0;n<size;n=n+1)
1162
           begin
1163
                data1 = u1.rs9_mem[n];
1164
                data = oc5_mem[n[8:1]];
1165
 
1166
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1167
                else            data2 = {12'h0, data[31:16], 4'h0};
1168
 
1169
                if(     (data1 !== data2) |
1170
                        (^data1 === 1'hx) |
1171
                        (^data2 === 1'hx)
1172
                        )
1173
                   begin
1174
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
1175
                        n, data2, data1);
1176
                        error_cnt = error_cnt + 1;
1177
                   end
1178
           end
1179
 
1180
        for(n=0;n<size;n=n+1)
1181
           begin
1182
                data1 = u1.is3_mem[n];
1183
                data = ic0_mem[n[8:1]];
1184
 
1185
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1186
                else            data2 = {12'h0, data[31:16], 4'h0};
1187
 
1188
                if(     (data1 !== data2) |
1189
                        (^data1 === 1'hx) |
1190
                        (^data2 === 1'hx)
1191
                        )
1192
                   begin
1193
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
1194
                        n, data2, data1);
1195
                        error_cnt = error_cnt + 1;
1196
                   end
1197
           end
1198
 
1199
        for(n=0;n<size;n=n+1)
1200
           begin
1201
                data1 = u1.is4_mem[n];
1202
                data = ic1_mem[n[8:1]];
1203
 
1204
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1205
                else            data2 = {12'h0, data[31:16], 4'h0};
1206
 
1207
                if(     (data1 !== data2) |
1208
                        (^data1 === 1'hx) |
1209
                        (^data2 === 1'hx)
1210
                        )
1211
                   begin
1212
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
1213
                        n, data2, data1);
1214
                        error_cnt = error_cnt + 1;
1215
                   end
1216
           end
1217
 
1218
        for(n=0;n<size;n=n+1)
1219
           begin
1220
                data1 = u1.is6_mem[n];
1221
                data = ic2_mem[n[8:1]];
1222
 
1223
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
1224
                else            data2 = {12'h0, data[31:16], 4'h0};
1225
 
1226
                if(     (data1 !== data2) |
1227
                        (^data1 === 1'hx) |
1228
                        (^data2 === 1'hx)
1229
                        )
1230
                   begin
1231
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
1232
                        n, data2, data1);
1233
                        error_cnt = error_cnt + 1;
1234
                   end
1235
           end
1236
 
1237
repeat(10)      @(posedge clk);
1238
end
1239
end
1240
 
1241
$display("Processed %0d samples per channel for each test",size);
1242
 
1243
show_errors;
1244
$display("*****************************************************");
1245
$display("*** Test DONE ...                                 ***");
1246
$display("*****************************************************\n\n");
1247
 
1248
end
1249
endtask
1250
 
1251
 
1252
 

powered by: WebSVN 2.1.0

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