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

Subversion Repositories wdsp

[/] [wdsp/] [trunk/] [rtl/] [vhdl/] [WISHBONE_FFT/] [stage_II.vhd] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 parrado
 
2
--Component for  Stages using BF2II (second and every even stage) 
3
--Doesn 't handle last stage 
4
--Input is a stand ard logic vector of data_width-add_g 
5
--data_width - width of the internal busses 
6
--  Add growth variable - if 1, data_width gro add_g -   ws by 1,   if 0 then 0 
7
--mult_g - mult g  rowth variable - can r ange from 0 to twiddle_width+1 
8
--twiddle_width - width of the twiddle factor input 
9
--shift_stages - number of shift register stages 
10
library IEEE;
11
use IEEE.std_logic_1164.all;
12
use ieee.std_logic_arith.all;
13
 
14
entity stage_II is
15
generic  (
16
        data_width : INTEGER :=14;
17
    add_g : INTEGER := 1;
18
        mult_g : INTEGER :=9;
19
        twiddle_width : INTEGER :=10;
20
    shift_stages : INTEGER := 16
21
  );
22
 
23
port  (
24
        prvs_r :in std_logic_vector(data_width-1-add_g downto 0);
25
        prvs_i :in std_logic_vector(data_width -1-add_g downto 0);
26
        t :in std_logic;
27
        s :in std_logic;
28
    clock : in std_logic;
29
         enable : in std_logic;
30
    resetn : in std_logic;
31
        fromrom_r :in std_logic_vector(twiddle_width-1 downto 0);
32
    fromrom_i :in  std_logic_vector(twiddle_width-1 downto 0);
33
   tonext_r :out std_logic_vector(data_width+mult_g-1 downto 0) ;
34
   tonext_i :out std_logic_vector(data_width+mult_g-1 downto 0 )
35
  );
36
end stage_II;
37
 
38
architecture structure of stage_II is
39
signal toreg_r : std_logic_vector(data_width-1        downto 0);
40
signal toreg_i : std_logic_vector(data_width-1 downto 0);
41
signal fromreg_r : std_logic_vector(data_width-1 downto 0);
42
signal fromreg_i : std_logic_vector(data_width-1 downto 0);
43
signal tomult_r : std_logic_vector(data_width-1 downto 0);
44
signal tomult_i :  std_logic_vector(data_width-1 downto 0);
45
 
46
signal tonext_r_aux : std_logic_vector(data_width+mult_g-1 downto 0);
47
signal tonext_i_aux : std_logic_vector(data_width+mult_g-1 downto 0);
48
 
49
component shiftregN
50
  generic (
51
                data_width : integer;
52
                n : integer
53
);
54
  port  (
55
                clock : IN std_logic;
56
                enable : in std_logic;
57
                read_data  : OUT    std_logic_vector (data_width-1 DOWNTO 0);
58
        write_data : IN     std_logic_vector (data_width-1 DOWNTO 0);
59
        resetn     : IN     std_logic
60
        );
61
end component;
62
 
63
component shiftreg1
64
  generic (
65
                data_width : integer
66
);
67
  port (
68
                clock : IN std_logic;
69
                enable: in std_logic;
70
                clear: in std_logic;
71
        read_data  : OUT    std_logic_vector (data_width-1 DOWNTO 0);
72
        write_data : IN     std_logic_vector (data_width-1 DOWNTO 0);
73
                resetn     : IN     std_logic
74
                );
75
end component;
76
 
77
 
78
component BF2II
79
  generic (
80
        data_width : INTEGER;
81
        add_g: INTEGER
82
        );
83
  port    (
84
        fromreg_r :in std_logic_vector(data_width-1 downto 0);
85
    fromreg_i :in std_logic_vector(data_width-1 downto 0);
86
        prvs_r :in std_logic_vector(data_width-add_g-1 downto 0);
87
        prvs_i :in std_logic_vector(data_width-add_g-1 downto  0);
88
        t : in std_logic;
89
        s : in std_logic;
90
    toreg_r :out std_logic_vector(data_width-1 downto 0);
91
    toreg_i :out std_logic_vector(data_width-1 downto 0);
92
    tonext_r :out std_logic_vector(data_width-1 downto 0);
93
    tonext_i :out std_logic_vector(data_width-1 downto 0)
94
    );
95
end component;
96
 
97
component  twiddle_mult
98
  generic (
99
        mult_width : INTEGER;
100
    twiddle_width               : INTEGER;
101
    output_width : INTEGER
102
);
103
     port  (
104
                data_r :in std_logic_vector(mult_width-1 downto 0);
105
        data_i :in std_logic_vector(mult_width-1 downto 0);
106
                twdl_r :in std_logic_vector(twiddle_width-1 downto 0) ;
107
                twdl_i :in std_logic_vector(twiddle_width-1 downto 0);
108
        out_r :out std_logic_vector(output_width-1 downto 0);
109
                out_i :out std_logic_vector(output_width-1 downto 0)
110
   );
111
end component;
112
 
113
begin
114
regr : shiftregN
115
  generic map (
116
        data_width=>data_width, n=>shift_stages
117
)
118
  port map (
119
        clock=>clock,
120
        enable=>enable,
121
        read_data=>fromreg_r,
122
        write_data=>toreg_r,
123
        resetn=>resetn
124
        );
125
 
126
regi :  shiftregN
127
     generic map (
128
                data_width=>data_width,
129
                n=>shift_stages
130
                )
131
  port map (
132
                clock=>clock,
133
                enable=>enable,
134
                read_data=>fromreg_i,
135
                write_data=>toreg_i,
136
                resetn=>resetn
137
                );
138
 
139
btrfly : BF2II
140
  generic map (
141
                data_width=>data_width,
142
                add_g=>add_g
143
                )
144
  port map (
145
                fromreg_r=>fromreg_r,
146
                fromreg_i=>fromreg_i,
147
                prvs_r=>prvs_r, prvs_i=>prvs_i,
148
                t=>t,
149
                s=>s,
150
                toreg_r=>toreg_r,
151
                toreg_i=>toreg_i,
152
                tonext_r=>tomult_r,
153
                tonext_i =>tomult_i
154
                );
155
 
156
twiddle : twiddle_mult
157
  generic map (
158
                mult_width=>data_width,
159
                twiddle_width=>twiddle_width,
160
                output_width=> data_width+mult_g
161
                )
162
  port map (
163
                data_r=>tomult_r,
164
                data_i=>tomult_i,
165
                twdl_r=>fromrom_r,
166
                twdl_i=>fromrom_i,
167
                out_r=>tonext_r_aux,
168
                out_i=>tonext_i_aux
169
                );
170
 
171
 
172
regsegr : shiftreg1
173
  generic map (
174
        data_width=>data_width+mult_g
175
 
176
        )
177
port map (
178
        clock=>clock,
179
        enable=>'1',
180
        clear=>'0',
181
        read_data=>tonext_r,
182
        write_data=>tonext_r_aux,
183
        resetn=>resetn
184
        );
185
 
186
regsegi : shiftreg1
187
  generic map (
188
        data_width=>data_width+mult_g
189
 
190
        )
191
port map (
192
        clock=>clock,
193
        enable=>'1',
194
        clear=>'0',
195
        read_data=>tonext_i,
196
        write_data=>tonext_i_aux,
197
        resetn=>resetn
198
        );
199
 
200
 
201
end;

powered by: WebSVN 2.1.0

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