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

Subversion Repositories fft2_size

[/] [fft2_size/] [fft_int/] [fft_int_tb.sv] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 Papayaved
timeunit 1ns;
2
timeprecision 1ns;
3
`include "ifft_int.sv"
4
 
5
module fft_int_tb;
6
        localparam POW = 6;
7
        localparam DATA_WIDTH = 32;
8
        localparam RES_WIDTH = DATA_WIDTH + POW;
9
 
10
        bit clk = 0, aclr = 1;
11
        bit sink_sop = 0, sink_eop = 0, sink_valid = 0;
12
        bit signed [DATA_WIDTH-1:0] sink_Re = 0, sink_Im = 0;
13
        wire source_sop, source_eop, source_valid;
14
        wire signed [RES_WIDTH-1:0] source_Re, source_Im;
15
        wire error;
16
 
17
        localparam time period = 20ns;
18
        always #(period/2) clk++;
19
 
20
        initial begin
21
                repeat(10) @(posedge clk);
22
                aclr = 0;
23
                repeat(10) @(posedge clk);
24
 
25
                @(posedge clk);
26
                Test(2**POW, 1<<1);
27
                Test(2**POW, 1<<2);
28
                Test(2**POW, 5<<1);
29
 
30
//              TestLine(2**POW);
31
//              TestConst(2**POW);
32
 
33
                wait (source_eop || error);
34
                if (error) $warning("Error");
35
 
36
                repeat(2**POW * 3 * 3) @(posedge clk);
37
                $stop(2);
38
        end
39
 
40
        always #(period * 2**POW * 10) begin
41
                $warning("Timeout");
42
                $stop(2);
43
        end
44
 
45
        fft_int #(.POW(POW), .DATA_WIDTH(DATA_WIDTH)) dut(.*);
46
 
47
        wire signed [DATA_WIDTH-1:0] ifft_source_Re, ifft_source_Im;
48
        wire ifft_sop, ifft_eop, ifft_valid;
49
        wire ifft_err;
50
 
51
        ifft_int #(.POW(POW), .DATA_WIDTH(RES_WIDTH)) ifft_inst(
52
                .clk, .aclr,
53
                .sink_sop(source_sop), .sink_eop(source_eop), .sink_valid(source_valid),
54
                .sink_Re(source_Re), .sink_Im(source_Im),
55
 
56
                .source_sop(ifft_sop), .source_eop(ifft_eop), .source_valid(ifft_valid),
57
                .source_Re(ifft_source_Re), .source_Im(ifft_source_Im),
58
                .error(ifft_err)
59
        );
60
 
61
 
62
        task Test(int len, int bin_msk = 2);
63
                int ar[];
64
                ar = new[len];
65
 
66
                for (int i = 0; i < len; i++)
67
                        if ((bin_msk & 1<
68
                                ar[i] = 1<<16;
69
                        else
70
                                ar[i] = 0;
71
 
72
                for (int i = 0; i < len; i++) begin
73
                        sink_sop = i == 0;
74
                        sink_eop = i == len - 1;
75
                        sink_valid = 1;
76
                        sink_Re = ar[i];
77
                        @(posedge clk);
78
                end
79
 
80
                sink_sop = 0;
81
                sink_eop = 0;
82
                sink_valid = 0;
83
                sink_Re = 0;
84
 
85
                ar.delete();
86
        endtask
87
 
88
        task TestLine(int len);
89
                int ar_Im[], ar_Re[];
90
                ar_Re = new[len];
91
                ar_Im = new[len];
92
 
93
                for (int i = 0; i < len; i++) begin
94
                        ar_Re[i] = (i+1) * 2**16;
95
                        ar_Im[i] = 0;
96
//                      ar_Im[i] = -(i+1);
97
                end
98
 
99
                for (int i = 0; i < len; i++) begin
100
                        sink_sop = i == 0;
101
                        sink_eop = i == len - 1;
102
                        sink_valid = 1;
103
                        sink_Re = ar_Re[i];
104
                        sink_Im = ar_Im[i];
105
                        @(posedge clk);
106
                end
107
 
108
                sink_sop = 0;
109
                sink_eop = 0;
110
                sink_valid = 0;
111
                sink_Re = 0;
112
                sink_Im = 0;
113
 
114
                ar_Re.delete();
115
                ar_Im.delete();
116
        endtask
117
 
118
        task TestConst(int len);
119
                for (int i = 0; i < len; i++) begin
120
                        sink_sop = i == 0;
121
                        sink_eop = i == len - 1;
122
                        sink_valid = 1;
123
                        sink_Re = 2**16;
124
                        sink_Im = -(2**16);
125
                        @(posedge clk);
126
                end
127
 
128
                sink_sop = 0;
129
                sink_eop = 0;
130
                sink_valid = 0;
131
                sink_Re = 0;
132
                sink_Im = 0;
133
        endtask
134
 
135
endmodule :fft_int_tb

powered by: WebSVN 2.1.0

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