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

Subversion Repositories ac97

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

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

powered by: WebSVN 2.1.0

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