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

Subversion Repositories ac97

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

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

powered by: WebSVN 2.1.0

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