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

Subversion Repositories dblclockfft

[/] [dblclockfft/] [trunk/] [bench/] [cpp/] [butterfly_tb.cpp] - Blame information for rev 4

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 "Vbutterfly.h"
5
#include "verilated.h"
6
 
7
void    tick(Vbutterfly *bfly) {
8
        bfly->i_clk = 0;
9
        bfly->eval();
10
        bfly->i_clk = 1;
11
        bfly->eval();
12
}
13
 
14
void    reset(Vbutterfly *bfly) {
15
        bfly->i_ce  = 0;
16
        bfly->i_rst = 1;
17
        tick(bfly);
18
        bfly->i_ce  = 0;
19
        bfly->i_rst = 0;
20
        tick(bfly);
21
}
22
 
23
int     main(int argc, char **argv, char **envp) {
24
        Verilated::commandArgs(argc, argv);
25
        Vbutterfly      *bfly = new Vbutterfly;
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(bfly);
32
 
33
        for(int k=0; k<270; k++) {
34
                int32_t or0, oi0, or1, oi1;
35
 
36
                bfly->i_ce = 1;
37
                bfly->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
                bfly->i_data  = ((ir0&0x0ffff) << 16) | (ii0 & 0x0ffff);
43
                tick(bfly);
44
 
45
                printf("k=%3d: COEF=%08x, LFT=%08x, RHT=%08x, AUX=%d, OLFT =%09lx, ORHT=%09lx, AUX=%d\n",
46
                        k, bfly->i_coef, bfly->i_left, bfly->i_right, bfly->i_aux,
47
                        bfly->o_left, bfly->o_right, bfly->o_sync);
48
 
49
                or0 = (bfly->o_data  >> 17) & 0x01ffff;
50
                oi0 =  bfly->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) != bfly->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  bfly;
85
 
86 4 dgisselq
        printf("SUCCESS!\n");
87 3 dgisselq
        exit(0);
88
}

powered by: WebSVN 2.1.0

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