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

Subversion Repositories ac97

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

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
//  $Id: tests.v,v 1.1 2002-02-13 08:22:32 rudi Exp $
41
//
42
//  $Date: 2002-02-13 08:22:32 $
43
//  $Revision: 1.1 $
44
//  $Author: rudi $
45
//  $Locker:  $
46
//  $State: Exp $
47
//
48
// Change History:
49
//               $Log: not supported by cvs2svn $
50
//
51
//
52
//                        
53
 
54
 
55
task show_errors;
56
 
57
begin
58
 
59
$display("\n");
60
$display("     +--------------------+");
61
$display("     |  Total ERRORS: %0d   |", error_cnt);
62
$display("     +--------------------+");
63
 
64
end
65
endtask
66
 
67
 
68
task basic1;
69
 
70
reg     [31:0]   data;
71
reg     [31:0]   data1;
72
reg     [31:0]   data2;
73
integer         size, frames, m;
74
 
75
begin
76
$display("\n\n");
77
$display("*****************************************************");
78
$display("*** Basic AC97 I/O Test & Reg Wr ...              ***");
79
$display("*****************************************************\n");
80
 
81
 
82
        wb_busy = 1;
83
        m0.wb_wr1(`INTM,4'hf, 32'h0000_0003);
84
        m0.wb_wr1(`OCC0,4'hf, 32'h7373_7373);
85
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_7373);
86
        m0.wb_wr1(`ICC,4'hf, 32'h0073_7373);
87
 
88
        wb_busy = 0;
89
        oc0_dma_en = 1;
90
        oc1_dma_en = 1;
91
        oc2_dma_en = 1;
92
        oc3_dma_en = 1;
93
        oc4_dma_en = 1;
94
        oc5_dma_en = 1;
95
        ic0_dma_en = 1;
96
        ic1_dma_en = 1;
97
        ic2_dma_en = 1;
98
 
99
        for(n=0;n<256;n=n+1)
100
           begin
101
                oc0_mem[n] = $random;
102
                oc1_mem[n] = $random;
103
                oc2_mem[n] = $random;
104
                oc3_mem[n] = $random;
105
                oc4_mem[n] = $random;
106
                oc5_mem[n] = $random;
107
                ic0_mem[n] = $random;
108
                ic1_mem[n] = $random;
109
                ic2_mem[n] = $random;
110
           end
111
 
112
        u1.init(0);
113
        frames = 139;
114
 
115
fork
116
        u1.tx1( frames,                                 // Number of frames to process
117
                0,                                       // How many frames before codec is ready
118
                10'b1111_1111_11,                        // Output slots valid bits
119
                10'b1111_1111_11,                        // Input slots valid bits
120
                20'b00_00_00_00_00_00_00_00_00_00,       // Output Slots intervals
121
                20'b00_00_00_00_00_00_00_00_00_00        // Input Slots intervals
122
                );
123
 
124
        begin   // Do a register Write
125
                repeat(2)       @(posedge sync);
126
 
127
                for(n=0;n<75;n=n+1)
128
                   begin
129
                        @(negedge sync);
130
                        repeat(230)     @(posedge bit_clk);
131
 
132
                        repeat(n)       @(posedge bit_clk);
133
 
134
                        while(wb_busy)  @(posedge clk);
135
                        wb_busy = 1;
136
                        m0.wb_wr1(`CRAC,4'hf, {9'h0, n[6:0], 16'h1234 + n[7:0]} );
137
                        wb_busy = 0;
138
 
139
                        while(!int)     @(posedge clk);
140
                   end
141
        end
142
join
143
 
144
repeat(300)     @(posedge bit_clk);
145
 
146
        for(n=0;n<75;n=n+1)
147
           begin
148
                        data2 = {9'h0, n[6:0], 16'h1234 + n[7:0]};
149
                        tmp = u1.rs2_mem[n];
150
                        data1[15:0] = tmp[19:4];
151
 
152
                        tmp = u1.rs1_mem[n];
153
                        data1[31:16] = {9'h0, tmp[18:12]};
154
 
155
                if(     (data1 !== data2) |
156
                        (^data1 === 1'hx) |
157
                        (^data2 === 1'hx)
158
                        )
159
                   begin
160
                        $display("ERROR: Register Write Data %0d Mismatch Sent: %h Got: %h",
161
                        n, data2, data1);
162
                        error_cnt = error_cnt + 1;
163
                   end
164
 
165
           end
166
 
167
        size = frames - 4;
168
 
169
        for(n=0;n<size;n=n+1)
170
           begin
171
                data1 = u1.rs3_mem[n];
172
                data = oc0_mem[n[8:1]];
173
 
174
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
175
                else            data2 = {12'h0, data[31:16], 4'h0};
176
 
177
                if(     (data1 !== data2) |
178
                        (^data1 === 1'hx) |
179
                        (^data2 === 1'hx)
180
                        )
181
                   begin
182
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
183
                        n, data2, data1);
184
                        error_cnt = error_cnt + 1;
185
                   end
186
           end
187
 
188
        for(n=0;n<size;n=n+1)
189
           begin
190
                data1 = u1.rs4_mem[n];
191
                data = oc1_mem[n[8:1]];
192
 
193
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
194
                else            data2 = {12'h0, data[31:16], 4'h0};
195
 
196
                if(     (data1 !== data2) |
197
                        (^data1 === 1'hx) |
198
                        (^data2 === 1'hx)
199
                        )
200
                   begin
201
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
202
                        n, data2, data1);
203
                        error_cnt = error_cnt + 1;
204
                   end
205
           end
206
 
207
        for(n=0;n<size;n=n+1)
208
           begin
209
                data1 = u1.rs6_mem[n];
210
                data = oc2_mem[n[8:1]];
211
 
212
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
213
                else            data2 = {12'h0, data[31:16], 4'h0};
214
 
215
                if(     (data1 !== data2) |
216
                        (^data1 === 1'hx) |
217
                        (^data2 === 1'hx)
218
                        )
219
                   begin
220
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
221
                        n, data2, data1);
222
                        error_cnt = error_cnt + 1;
223
                   end
224
           end
225
 
226
        for(n=0;n<size;n=n+1)
227
           begin
228
                data1 = u1.rs7_mem[n];
229
                data = oc3_mem[n[8:1]];
230
 
231
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
232
                else            data2 = {12'h0, data[31:16], 4'h0};
233
 
234
                if(     (data1 !== data2) |
235
                        (^data1 === 1'hx) |
236
                        (^data2 === 1'hx)
237
                        )
238
                   begin
239
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
240
                        n, data2, data1);
241
                        error_cnt = error_cnt + 1;
242
                   end
243
           end
244
 
245
        for(n=0;n<size;n=n+1)
246
           begin
247
                data1 = u1.rs8_mem[n];
248
                data = oc4_mem[n[8:1]];
249
 
250
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
251
                else            data2 = {12'h0, data[31:16], 4'h0};
252
 
253
                if(     (data1 !== data2) |
254
                        (^data1 === 1'hx) |
255
                        (^data2 === 1'hx)
256
                        )
257
                   begin
258
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
259
                        n, data2, data1);
260
                        error_cnt = error_cnt + 1;
261
                   end
262
           end
263
 
264
        for(n=0;n<size;n=n+1)
265
           begin
266
                data1 = u1.rs9_mem[n];
267
                data = oc5_mem[n[8:1]];
268
 
269
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
270
                else            data2 = {12'h0, data[31:16], 4'h0};
271
 
272
                if(     (data1 !== data2) |
273
                        (^data1 === 1'hx) |
274
                        (^data2 === 1'hx)
275
                        )
276
                   begin
277
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
278
                        n, data2, data1);
279
                        error_cnt = error_cnt + 1;
280
                   end
281
           end
282
 
283
        for(n=0;n<size;n=n+1)
284
           begin
285
                data1 = u1.is3_mem[n];
286
                data = ic0_mem[n[8:1]];
287
 
288
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
289
                else            data2 = {12'h0, data[31:16], 4'h0};
290
 
291
                if(     (data1 !== data2) |
292
                        (^data1 === 1'hx) |
293
                        (^data2 === 1'hx)
294
                        )
295
                   begin
296
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
297
                        n, data2, data1);
298
                        error_cnt = error_cnt + 1;
299
                   end
300
           end
301
 
302
        for(n=0;n<size;n=n+1)
303
           begin
304
                data1 = u1.is4_mem[n];
305
                data = ic1_mem[n[8:1]];
306
 
307
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
308
                else            data2 = {12'h0, data[31:16], 4'h0};
309
 
310
                if(     (data1 !== data2) |
311
                        (^data1 === 1'hx) |
312
                        (^data2 === 1'hx)
313
                        )
314
                   begin
315
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
316
                        n, data2, data1);
317
                        error_cnt = error_cnt + 1;
318
                   end
319
           end
320
 
321
        for(n=0;n<size;n=n+1)
322
           begin
323
                data1 = u1.is6_mem[n];
324
                data = ic2_mem[n[8:1]];
325
 
326
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
327
                else            data2 = {12'h0, data[31:16], 4'h0};
328
 
329
                if(     (data1 !== data2) |
330
                        (^data1 === 1'hx) |
331
                        (^data2 === 1'hx)
332
                        )
333
                   begin
334
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
335
                        n, data2, data1);
336
                        error_cnt = error_cnt + 1;
337
                   end
338
           end
339
 
340
repeat(10)      @(posedge clk);
341
 
342
show_errors;
343
$display("*****************************************************");
344
$display("*** Test DONE ...                                 ***");
345
$display("*****************************************************\n\n");
346
 
347
end
348
endtask
349
 
350
 
351
 
352
task basic2;
353
 
354
reg     [31:0]   data;
355
reg     [31:0]   data1;
356
reg     [31:0]   data2;
357
integer         size, frames, m;
358
 
359
begin
360
$display("\n\n");
361
$display("*****************************************************");
362
$display("*** Basic AC97 I/O Test & Reg Rd ...              ***");
363
$display("*****************************************************\n");
364
 
365
        wb_busy = 1;
366
        m0.wb_wr1(`INTM,4'hf, 32'h0000_0003);
367
        m0.wb_wr1(`OCC0,4'hf, 32'h7373_7373);
368
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_7373);
369
        m0.wb_wr1(`ICC,4'hf, 32'h0073_7373);
370
 
371
        wb_busy = 0;
372
        oc0_dma_en = 1;
373
        oc1_dma_en = 1;
374
        oc2_dma_en = 1;
375
        oc3_dma_en = 1;
376
        oc4_dma_en = 1;
377
        oc5_dma_en = 1;
378
        ic0_dma_en = 1;
379
        ic1_dma_en = 1;
380
        ic2_dma_en = 1;
381
 
382
        for(n=0;n<256;n=n+1)
383
           begin
384
                oc0_mem[n] = $random;
385
                oc1_mem[n] = $random;
386
                oc2_mem[n] = $random;
387
                oc3_mem[n] = $random;
388
                oc4_mem[n] = $random;
389
                oc5_mem[n] = $random;
390
                ic0_mem[n] = $random;
391
                ic1_mem[n] = $random;
392
                ic2_mem[n] = $random;
393
           end
394
 
395
        u1.init(0);
396
        frames = 139;
397
 
398
fork
399
        u1.tx1( frames,                                 // Number of frames to process
400
                0,                                       // How many frames before codec is ready
401
                10'b1111_1111_11,                        // Output slots valid bits
402
                10'b1111_1111_11,                        // Input slots valid bits
403
                20'b00_00_00_00_00_00_00_00_00_00,       // Output Slots intervals
404
                20'b00_00_00_00_00_00_00_00_00_00        // Input Slots intervals
405
                );
406
 
407
        begin   // Do a register Write
408
                repeat(2)       @(posedge sync);
409
 
410
                for(n=0;n<75;n=n+1)
411
                   begin
412
                        @(negedge sync);
413
                        repeat(230)     @(posedge bit_clk);
414
 
415
                        repeat(n)       @(posedge bit_clk);
416
 
417
                        while(wb_busy)  @(posedge clk);
418
                        wb_busy = 1;
419
                        m0.wb_wr1(`CRAC,4'hf, {1'b1, 8'h0, n[6:0], 16'h1234 + n[7:0]} );
420
                        wb_busy = 0;
421
 
422
                        while(!int)     @(posedge clk);
423
 
424
                        while(wb_busy)  @(posedge clk);
425
                        wb_busy = 1;
426
                        m0.wb_rd1(`CRAC,4'hf, reg_mem[n] );
427
                        wb_busy = 0;
428
 
429
                   end
430
        end
431
join
432
 
433
repeat(300)     @(posedge bit_clk);
434
 
435
        for(n=0;n<75;n=n+1)
436
           begin
437
 
438
                        tmp = u1.is2_mem[n];
439
                        data2 = {16'h0, tmp[19:4]};
440
                        tmp = reg_mem[n];
441
                        data1 = {16'h0, tmp[15:0]};
442
 
443
                if(     (data1 !== data2) |
444
                        (^data1 === 1'hx) |
445
                        (^data2 === 1'hx)
446
                        )
447
                   begin
448
                        $display("ERROR: Register Read Data %0d Mismatch Expected: %h Got: %h",
449
                        n, data2, data1);
450
                        error_cnt = error_cnt + 1;
451
                   end
452
 
453
           end
454
 
455
        size = frames - 4;
456
 
457
        for(n=0;n<size;n=n+1)
458
           begin
459
                data1 = u1.rs3_mem[n];
460
                data = oc0_mem[n[8:1]];
461
 
462
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
463
                else            data2 = {12'h0, data[31:16], 4'h0};
464
 
465
                if(     (data1 !== data2) |
466
                        (^data1 === 1'hx) |
467
                        (^data2 === 1'hx)
468
                        )
469
                   begin
470
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
471
                        n, data2, data1);
472
                        error_cnt = error_cnt + 1;
473
                   end
474
           end
475
 
476
        for(n=0;n<size;n=n+1)
477
           begin
478
                data1 = u1.rs4_mem[n];
479
                data = oc1_mem[n[8:1]];
480
 
481
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
482
                else            data2 = {12'h0, data[31:16], 4'h0};
483
 
484
                if(     (data1 !== data2) |
485
                        (^data1 === 1'hx) |
486
                        (^data2 === 1'hx)
487
                        )
488
                   begin
489
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
490
                        n, data2, data1);
491
                        error_cnt = error_cnt + 1;
492
                   end
493
           end
494
 
495
        for(n=0;n<size;n=n+1)
496
           begin
497
                data1 = u1.rs6_mem[n];
498
                data = oc2_mem[n[8:1]];
499
 
500
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
501
                else            data2 = {12'h0, data[31:16], 4'h0};
502
 
503
                if(     (data1 !== data2) |
504
                        (^data1 === 1'hx) |
505
                        (^data2 === 1'hx)
506
                        )
507
                   begin
508
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
509
                        n, data2, data1);
510
                        error_cnt = error_cnt + 1;
511
                   end
512
           end
513
 
514
        for(n=0;n<size;n=n+1)
515
           begin
516
                data1 = u1.rs7_mem[n];
517
                data = oc3_mem[n[8:1]];
518
 
519
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
520
                else            data2 = {12'h0, data[31:16], 4'h0};
521
 
522
                if(     (data1 !== data2) |
523
                        (^data1 === 1'hx) |
524
                        (^data2 === 1'hx)
525
                        )
526
                   begin
527
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
528
                        n, data2, data1);
529
                        error_cnt = error_cnt + 1;
530
                   end
531
           end
532
 
533
        for(n=0;n<size;n=n+1)
534
           begin
535
                data1 = u1.rs8_mem[n];
536
                data = oc4_mem[n[8:1]];
537
 
538
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
539
                else            data2 = {12'h0, data[31:16], 4'h0};
540
 
541
                if(     (data1 !== data2) |
542
                        (^data1 === 1'hx) |
543
                        (^data2 === 1'hx)
544
                        )
545
                   begin
546
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
547
                        n, data2, data1);
548
                        error_cnt = error_cnt + 1;
549
                   end
550
           end
551
 
552
        for(n=0;n<size;n=n+1)
553
           begin
554
                data1 = u1.rs9_mem[n];
555
                data = oc5_mem[n[8:1]];
556
 
557
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
558
                else            data2 = {12'h0, data[31:16], 4'h0};
559
 
560
                if(     (data1 !== data2) |
561
                        (^data1 === 1'hx) |
562
                        (^data2 === 1'hx)
563
                        )
564
                   begin
565
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
566
                        n, data2, data1);
567
                        error_cnt = error_cnt + 1;
568
                   end
569
           end
570
 
571
        for(n=0;n<size;n=n+1)
572
           begin
573
                data1 = u1.is3_mem[n];
574
                data = ic0_mem[n[8:1]];
575
 
576
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
577
                else            data2 = {12'h0, data[31:16], 4'h0};
578
 
579
                if(     (data1 !== data2) |
580
                        (^data1 === 1'hx) |
581
                        (^data2 === 1'hx)
582
                        )
583
                   begin
584
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
585
                        n, data2, data1);
586
                        error_cnt = error_cnt + 1;
587
                   end
588
           end
589
 
590
        for(n=0;n<size;n=n+1)
591
           begin
592
                data1 = u1.is4_mem[n];
593
                data = ic1_mem[n[8:1]];
594
 
595
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
596
                else            data2 = {12'h0, data[31:16], 4'h0};
597
 
598
                if(     (data1 !== data2) |
599
                        (^data1 === 1'hx) |
600
                        (^data2 === 1'hx)
601
                        )
602
                   begin
603
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
604
                        n, data2, data1);
605
                        error_cnt = error_cnt + 1;
606
                   end
607
           end
608
 
609
        for(n=0;n<size;n=n+1)
610
           begin
611
                data1 = u1.is6_mem[n];
612
                data = ic2_mem[n[8:1]];
613
 
614
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
615
                else            data2 = {12'h0, data[31:16], 4'h0};
616
 
617
                if(     (data1 !== data2) |
618
                        (^data1 === 1'hx) |
619
                        (^data2 === 1'hx)
620
                        )
621
                   begin
622
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
623
                        n, data2, data1);
624
                        error_cnt = error_cnt + 1;
625
                   end
626
           end
627
 
628
show_errors;
629
$display("*****************************************************");
630
$display("*** Test DONE ...                                 ***");
631
$display("*****************************************************\n\n");
632
 
633
end
634
endtask
635
 
636
 
637
 
638
task vsr1;
639
 
640
reg     [31:0]   data;
641
reg     [31:0]   data1;
642
reg     [31:0]   data2;
643
integer         size, frames, m;
644
 
645
begin
646
$display("\n\n");
647
$display("*****************************************************");
648
$display("*** VSR AC97 I/O Test ...                       ***");
649
$display("*****************************************************\n");
650
 
651
        wb_busy = 1;
652
        m0.wb_wr1(`OCC0,4'hf, 32'h7373_7373);
653
        m0.wb_wr1(`OCC1,4'hf, 32'h0000_7373);
654
        m0.wb_wr1(`ICC,4'hf, 32'h0073_7373);
655
 
656
        wb_busy = 0;
657
        oc0_dma_en = 1;
658
        oc1_dma_en = 1;
659
        oc2_dma_en = 1;
660
        oc3_dma_en = 1;
661
        oc4_dma_en = 1;
662
        oc5_dma_en = 1;
663
        ic0_dma_en = 1;
664
        ic1_dma_en = 1;
665
        ic2_dma_en = 1;
666
 
667
        for(n=0;n<256;n=n+1)
668
           begin
669
                oc0_mem[n] = $random;
670
                oc1_mem[n] = $random;
671
                oc2_mem[n] = $random;
672
                oc3_mem[n] = $random;
673
                oc4_mem[n] = $random;
674
                oc5_mem[n] = $random;
675
                ic0_mem[n] = $random;
676
                ic1_mem[n] = $random;
677
                ic2_mem[n] = $random;
678
           end
679
 
680
        u1.init(0);
681
 
682
        frames = 132;
683
 
684
        u1.tx1( frames,                                 // Number of frames to process
685
                0,                                       // How many frames before codec is ready
686
                10'b1101_1110_00,                        // Output slots valid bits
687
                10'b1101_0000_00,                        // Input slots valid bits
688
                20'b01_01_00_01_01_01_01_00_00_00,       // Output Slots intervals
689
                20'b01_01_00_01_00_00_00_00_00_00        // Input Slots intervals
690
                );
691
 
692
        size = (frames - 4)/2;
693
 
694
        for(n=0;n<size;n=n+1)
695
           begin
696
                data1 = u1.rs3_mem[n];
697
                data = oc0_mem[n[8:1]];
698
 
699
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
700
                else            data2 = {12'h0, data[31:16], 4'h0};
701
 
702
                if(     (data1 !== data2) |
703
                        (^data1 === 1'hx) |
704
                        (^data2 === 1'hx)
705
                        )
706
                   begin
707
                        $display("ERROR: Out. CH0 Sample %0d Mismatch Sent: %h Got: %h",
708
                        n, data2, data1);
709
                        error_cnt = error_cnt + 1;
710
                   end
711
           end
712
 
713
        for(n=0;n<size;n=n+1)
714
           begin
715
                data1 = u1.rs4_mem[n];
716
                data = oc1_mem[n[8:1]];
717
 
718
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
719
                else            data2 = {12'h0, data[31:16], 4'h0};
720
 
721
                if(     (data1 !== data2) |
722
                        (^data1 === 1'hx) |
723
                        (^data2 === 1'hx)
724
                        )
725
                   begin
726
                        $display("ERROR: Out. CH1 Sample %0d Mismatch Sent: %h Got: %h",
727
                        n, data2, data1);
728
                        error_cnt = error_cnt + 1;
729
                   end
730
           end
731
 
732
        for(n=0;n<size;n=n+1)
733
           begin
734
                data1 = u1.rs6_mem[n];
735
                data = oc2_mem[n[8:1]];
736
 
737
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
738
                else            data2 = {12'h0, data[31:16], 4'h0};
739
 
740
                if(     (data1 !== data2) |
741
                        (^data1 === 1'hx) |
742
                        (^data2 === 1'hx)
743
                        )
744
                   begin
745
                        $display("ERROR: Out. CH2 Sample %0d Mismatch Sent: %h Got: %h",
746
                        n, data2, data1);
747
                        error_cnt = error_cnt + 1;
748
                   end
749
           end
750
 
751
        for(n=0;n<size;n=n+1)
752
           begin
753
                data1 = u1.rs7_mem[n];
754
                data = oc3_mem[n[8:1]];
755
 
756
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
757
                else            data2 = {12'h0, data[31:16], 4'h0};
758
 
759
                if(     (data1 !== data2) |
760
                        (^data1 === 1'hx) |
761
                        (^data2 === 1'hx)
762
                        )
763
                   begin
764
                        $display("ERROR: Out. CH3 Sample %0d Mismatch Sent: %h Got: %h",
765
                        n, data2, data1);
766
                        error_cnt = error_cnt + 1;
767
                   end
768
           end
769
 
770
        for(n=0;n<size;n=n+1)
771
           begin
772
                data1 = u1.rs8_mem[n];
773
                data = oc4_mem[n[8:1]];
774
 
775
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
776
                else            data2 = {12'h0, data[31:16], 4'h0};
777
 
778
                if(     (data1 !== data2) |
779
                        (^data1 === 1'hx) |
780
                        (^data2 === 1'hx)
781
                        )
782
                   begin
783
                        $display("ERROR: Out. CH4 Sample %0d Mismatch Sent: %h Got: %h",
784
                        n, data2, data1);
785
                        error_cnt = error_cnt + 1;
786
                   end
787
           end
788
 
789
        for(n=0;n<size;n=n+1)
790
           begin
791
                data1 = u1.rs9_mem[n];
792
                data = oc5_mem[n[8:1]];
793
 
794
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
795
                else            data2 = {12'h0, data[31:16], 4'h0};
796
 
797
                if(     (data1 !== data2) |
798
                        (^data1 === 1'hx) |
799
                        (^data2 === 1'hx)
800
                        )
801
                   begin
802
                        $display("ERROR: Out. CH5 Sample %0d Mismatch Sent: %h Got: %h",
803
                        n, data2, data1);
804
                        error_cnt = error_cnt + 1;
805
                   end
806
           end
807
 
808
        for(n=0;n<size;n=n+1)
809
           begin
810
                data1 = u1.is3_mem[n];
811
                data = ic0_mem[n[8:1]];
812
 
813
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
814
                else            data2 = {12'h0, data[31:16], 4'h0};
815
 
816
                if(     (data1 !== data2) |
817
                        (^data1 === 1'hx) |
818
                        (^data2 === 1'hx)
819
                        )
820
                   begin
821
                        $display("ERROR: In. CH0 Sample %0d Mismatch Sent: %h Got: %h",
822
                        n, data2, data1);
823
                        error_cnt = error_cnt + 1;
824
                   end
825
           end
826
 
827
        for(n=0;n<size;n=n+1)
828
           begin
829
                data1 = u1.is4_mem[n];
830
                data = ic1_mem[n[8:1]];
831
 
832
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
833
                else            data2 = {12'h0, data[31:16], 4'h0};
834
 
835
                if(     (data1 !== data2) |
836
                        (^data1 === 1'hx) |
837
                        (^data2 === 1'hx)
838
                        )
839
                   begin
840
                        $display("ERROR: In. CH1 Sample %0d Mismatch Sent: %h Got: %h",
841
                        n, data2, data1);
842
                        error_cnt = error_cnt + 1;
843
                   end
844
           end
845
 
846
        for(n=0;n<size;n=n+1)
847
           begin
848
                data1 = u1.is6_mem[n];
849
                data = ic2_mem[n[8:1]];
850
 
851
                if(~n[0])        data2 = {12'h0, data[15:0], 4'h0};
852
                else            data2 = {12'h0, data[31:16], 4'h0};
853
 
854
                if(     (data1 !== data2) |
855
                        (^data1 === 1'hx) |
856
                        (^data2 === 1'hx)
857
                        )
858
                   begin
859
                        $display("ERROR: In. CH2 Sample %0d Mismatch Sent: %h Got: %h",
860
                        n, data2, data1);
861
                        error_cnt = error_cnt + 1;
862
                   end
863
           end
864
 
865
repeat(10)      @(posedge clk);
866
 
867
show_errors;
868
$display("*****************************************************");
869
$display("*** Test DONE ...                                 ***");
870
$display("*****************************************************\n\n");
871
 
872
end
873
endtask
874
 
875
 

powered by: WebSVN 2.1.0

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