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

Subversion Repositories fft2_size

[/] [fft2_size/] [fft_int/] [ifft_int.sv] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 11 Papayaved
`ifndef _ifft_int_
2
`define _ifft_int_
3
`include "fft_int.sv"
4
 
5
// Integer streaming IFFT divided by 2**DIV_POW
6
module ifft_int #(parameter
7
        POW = 14, // fft size 2**POW
8
        DATA_WIDTH = 32,
9
        DIV_POW = POW,
10
        RES_WIDTH = DATA_WIDTH - DIV_POW
11
)(
12
        input clk, aclr,
13
        input sink_sop, sink_eop, sink_valid,
14
        input signed [DATA_WIDTH-1:0] sink_Re, sink_Im,
15
 
16
        output reg source_sop, source_eop, source_valid,
17
        output reg signed [RES_WIDTH-1:0] source_Re, source_Im,
18
        output error
19
);
20
        wire sop, eop, valid;
21
        wire signed [DATA_WIDTH + POW - 1:0] re, im;
22
 
23
        fft_int #(.POW(POW), .DATA_WIDTH(DATA_WIDTH)) ifft_inst(
24
                .clk, .aclr,
25
                .sink_sop, .sink_eop, .sink_valid,
26
                .sink_Re(sink_Im), .sink_Im(sink_Re),
27
                .source_sop(sop), .source_eop(eop), .source_valid(valid),
28
                .source_Re(im), .source_Im(re),
29
                .error
30
        );
31
 
32
        always_ff @(posedge clk, posedge aclr)
33
                source_valid <= (aclr) ? 1'b0 : valid;
34
 
35
        always_ff @(posedge clk) begin
36
                source_sop <= sop;
37
                source_eop <= eop;
38
                source_Re <= div_pow2(re);
39
                source_Im <= div_pow2(im);
40
        end
41
 
42
        function signed [RES_WIDTH-1:0] div_pow2(input signed [DATA_WIDTH + POW - 1:0] x);
43
                logic signed [RES_WIDTH-1:0] y, res;
44
 
45
                y = x[DATA_WIDTH + POW - 1:POW];
46
 
47
                if (POW == 0)
48
                        res = y;
49
                else
50
                        if (y == '1 && x[POW-1] == 1'b1)
51
                                res = 'sh0;
52
                        else
53
                                res = y;
54
 
55
                return res;
56
        endfunction
57
 
58
endmodule :ifft_int
59
 
60
`endif

powered by: WebSVN 2.1.0

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