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

Subversion Repositories dblclockfft

[/] [dblclockfft/] [trunk/] [bench/] [cpp/] [qtrstage_tb.cpp] - Blame information for rev 3

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

Line No. Rev Author Line
1 3 dgisselq
#include <stdio.h>
2
#include <stdint.h>
3
 
4
#include "Vqtrstage.h"
5
#include "verilated.h"
6
 
7
void    tick(Vqtrstage *qstage) {
8
        qstage->i_clk = 0;
9
        qstage->eval();
10
        qstage->i_clk = 1;
11
        qstage->eval();
12
}
13
 
14
void    reset(Vqtrstage *qstage) {
15
        qstage->i_ce  = 0;
16
        qstage->i_rst = 1;
17
        tick(qstage);
18
        qstage->i_ce  = 0;
19
        qstage->i_rst = 0;
20
        tick(qstage);
21
}
22
 
23
int     main(int argc, char **argv, char **envp) {
24
        Verilated::commandArgs(argc, argv);
25
        Vqtrstage       *qstage = new Vqtrstage;
26
        int16_t         ir0, ii0, lstr, lsti;
27
        int32_t         sumr, sumi, difr, difi;
28
        int32_t         smr, smi, dfr, dfi;
29
        int             rnd = 0;
30
 
31
        reset(qstage);
32
 
33
        for(int k=0; k<270; k++) {
34
                int32_t or0, oi0, or1, oi1;
35
 
36
                qstage->i_ce = 1;
37
                qstage->i_sync = ((k&0x0ff)==0);
38
                // Let's pick some random values, ...
39
                ir0 = rand(); if (ir0&4) ir0 = -ir0;
40
                ii0 = rand(); if (ii0&2) ii0 = -ii0;
41
 
42
                qstage->i_data  = ((ir0&0x0ffff) << 16) | (ii0 & 0x0ffff);
43
                tick(qstage);
44
 
45
                printf("k=%3d: ISYNC=%d, IN = %08x, OUT =%09lx, SYNC=%d\n",
46
                        k, qstage->i_sync, qstage->i_data,
47
                        qstage->o_data, qstage->o_sync);
48
 
49
                or0 = (qstage->o_data  >> 17) & 0x01ffff;
50
                oi0 =  qstage->o_data         & 0x01ffff;
51
                if (or0 & 0x010000)     or0 |= (-1<<16);
52
                if (oi0 & 0x010000)     oi0 |= (-1<<16);
53
 
54
                if (k>3) {
55
                        /*
56
                        printf("\tOR0 = %6x, OI0 = %6x, SUM = %6x + %6x, DIF = %6x + %6x\n",
57
                                or0, oi0, sumr, sumi, difr, difi);
58
                        */
59
                        if (0==(k&1)) {
60
                                if (or0 != sumr)        {fprintf(stderr, "FAIL 1\n"); exit(-1);}
61
                                if (oi0 != sumi)        {fprintf(stderr, "FAIL 2\n"); exit(-1);}
62
                        } else if (1==(k&1)) {
63
                                if (or0 != difr)        {fprintf(stderr, "FAIL 3\n"); exit(-1);}
64
                                if (oi0 != difi)        {fprintf(stderr, "FAIL 4\n"); exit(-1);}
65
                        }
66
                }
67
 
68
                if (((4==(k&0x0ff))?1:0) != qstage->o_sync) { fprintf(stderr, "BAD O-SYNC\n"); exit(-1); }
69
 
70
                if (1 == (k&1)) {
71
                        sumr = smr; sumi = smi; difr=dfr, difi= dfi;
72
 
73
                        smr = lstr + ir0 + rnd;
74
                        smi = lsti + ii0 + rnd;
75
 
76
                        dfr = lstr - ir0 + rnd;
77
                        dfi = lsti - ii0 + rnd;
78
                }
79
 
80
                lstr = ir0;
81
                lsti = ii0;
82
        }
83
 
84
        delete  qstage;
85
 
86
        exit(0);
87
}

powered by: WebSVN 2.1.0

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