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

Subversion Repositories fft2_size

[/] [fft2_size/] [fft_int/] [W_int32_gen.m] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 Papayaved
clc
2
clear
3
close all
4
 
5
POW_MAX = 16;
6
 
7
fid = fopen('W_int32.sv', 'w');
8
 
9
fprintf(fid, '`ifndef _fft_w_\n');
10
fprintf(fid, '`define _fft_w_\n');
11
fprintf(fid, '`include "round32.sv"\n\n');
12
 
13
fprintf(fid, 'module W_int32 #(parameter POW, W_WIDTH)(clk, k, W_Re, W_Im);\n');
14
fprintf(fid, '// N = 2**POW, Max POW = 10, Max W_WIDTH = 32\n');
15
fprintf(fid, '// File contains the rotate coefficients\n');
16
fprintf(fid, '// W(k, N) =  exp(-2i * pi * k / N)\n');
17
fprintf(fid, '// in the scale W * 2^30\n\n');
18
fprintf(fid, '   input wire clk;\n');
19
fprintf(fid, '   input wire [POW-2:0] k;\n');
20
fprintf(fid, '   output wire signed [W_WIDTH-1:0] W_Re, W_Im;\n\n');
21
 
22
fprintf(fid, '   generate\n');
23
fprintf(fid, '      if (POW == 1)\n');
24
fprintf(fid, '         begin\n');
25
w = W(0, 2) * 2^30;
26
bit32 = IntToBit32(real(w));
27
fprintf(fid, '            localparam bit signed [31:0] W_Re_table = 32''sh%08x;\n', bit32);
28
 
29
bit32 = IntToBit32(imag(w));
30
fprintf(fid, '            localparam bit signed [31:0] W_Im_table = 32''sh%08x;\n\n', bit32);
31
 
32
fprintf(fid, '            round32 #(.WIDTH(W_WIDTH)) round_re(W_Re_table, W_Re);\n');
33
fprintf(fid, '            round32 #(.WIDTH(W_WIDTH)) round_im(W_Im_table, W_Im);\n');
34
fprintf(fid, '         end\n');
35
 
36
for POW = 2:POW_MAX
37
    fprintf(fid, '      else if (POW == %d)\n', POW);
38
    fprintf(fid, '         begin\n');
39
    fprintf(fid, '            reg signed [31:0] W_Re_table[%d] = ''{\n', 2^(POW-1));
40
    fprintf(fid, '               ');
41
    for i=1:2^(POW-1)
42
        w = W(i-1, 2^POW) * 2^30;
43
        bit32 = IntToBit32(real(w));
44
        if i ~= 2^(POW-1)
45
            fprintf(fid, '32''sh%08x, ', bit32);
46
            if mod(i, 8) == 0
47
                fprintf(fid, '\n');
48
                fprintf(fid, '               ');
49
            end
50
        else
51
            fprintf(fid, '32''sh%08x\n', bit32);
52
            fprintf(fid, '            };\n\n');
53
        end
54
    end
55
 
56
    fprintf(fid, '            reg signed [31:0] W_Im_table[%d] = ''{\n', 2^(POW-1));
57
    fprintf(fid, '               ');
58
    for i=1:2^(POW-1)
59
        w = W(i-1, 2^POW) * 2^30;
60
        bit32 = IntToBit32(imag(w));
61
        if i ~= 2^(POW-1)
62
            fprintf(fid, '32''sh%08x, ', bit32);
63
            if mod(i, 8) == 0
64
                fprintf(fid, '\n');
65
                fprintf(fid, '               ');
66
            end
67
        else
68
            fprintf(fid, '32''sh%08x\n', bit32);
69
            fprintf(fid, '            };\n\n');
70
        end
71
    end
72
 
73
    fprintf(fid, '            reg signed [31:0] W_Re_reg, W_Im_reg;\n');
74
    fprintf(fid, '            always_ff @(posedge clk) begin\n');
75
    fprintf(fid, '               W_Re_reg <= W_Re_table[k];\n');
76
    fprintf(fid, '               W_Im_reg <= W_Im_table[k];\n');
77
    fprintf(fid, '            end\n\n');
78
 
79
    fprintf(fid, '            round32 #(.WIDTH(W_WIDTH)) round_re(W_Re_reg, W_Re);\n');
80
    fprintf(fid, '            round32 #(.WIDTH(W_WIDTH)) round_im(W_Im_reg, W_Im);\n');
81
 
82
    fprintf(fid, '         end\n');
83
end
84
 
85
fprintf(fid, '   endgenerate\n');
86
 
87
fprintf(fid, 'endmodule :W_int32\n\n');
88
 
89
fprintf(fid, '`endif\n');
90
 
91
fclose(fid);

powered by: WebSVN 2.1.0

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