FFTaval.vhd
90 lines
| 2.2 KiB
| text/x-vhdl
|
VhdlLexer
martin
|
r103 | -- FFTaval.vhd | ||
library IEEE; | ||||
use IEEE.std_logic_1164.all; | ||||
use IEEE.numeric_std.all; | ||||
entity FFTaval is | ||||
generic( | ||||
martin
|
r106 | Data_sz : integer range 1 to 32 := 8; | ||
NbData : integer range 1 to 512 := 256 | ||||
martin
|
r103 | ); | ||
port( | ||||
clk : in std_logic; | ||||
rstn : in std_logic; | ||||
Ready : in std_logic; | ||||
Valid : in std_logic; | ||||
Full : in std_logic; | ||||
Data_re : in std_logic_vector(Data_sz-1 downto 0); | ||||
Data_im : in std_logic_vector(Data_sz-1 downto 0); | ||||
Read : out std_logic; | ||||
Write : out std_logic; | ||||
ReUse : out std_logic; | ||||
DATA : out std_logic_vector(Data_sz-1 downto 0) | ||||
); | ||||
end entity; | ||||
architecture ar_FFTaval of FFTaval is | ||||
type etat is (eX,e0,e1,e2,e3); | ||||
signal ect : etat; | ||||
signal DataTmp : std_logic_vector(Data_sz-1 downto 0); | ||||
martin
|
r106 | signal sRead : std_logic; | ||
signal DataCount : integer; | ||||
martin
|
r103 | |||
begin | ||||
process(clk,rstn) | ||||
begin | ||||
if(rstn='0')then | ||||
ect <= e0; | ||||
martin
|
r106 | sRead <= '0'; | ||
martin
|
r103 | Write <= '1'; | ||
Reuse <= '0'; | ||||
martin
|
r106 | DataCount <= 0; | ||
martin
|
r103 | |||
elsif(clk'event and clk='1')then | ||||
martin
|
r106 | |||
if(Ready='1')then | ||||
sRead <= not sRead; | ||||
else | ||||
sRead <= '0'; | ||||
end if; | ||||
martin
|
r103 | |||
martin
|
r106 | if(DataCount=NbData or Ready='0')then | ||
DataCount <= 0; | ||||
elsif(Valid='1')then | ||||
DataCount <= DataCount+1; | ||||
end if; | ||||
martin
|
r103 | case ect is | ||
when e0 => | ||||
Write <= '1'; | ||||
if(Valid='1' and full='0')then | ||||
DataTmp <= Data_im; | ||||
DATA <= Data_re; | ||||
Write <= '0'; | ||||
martin
|
r106 | ect <= e1; | ||
martin
|
r103 | elsif(full='1')then | ||
martin
|
r106 | ReUse <= '1'; | ||
martin
|
r103 | end if; | ||
martin
|
r106 | when e1 => | ||
martin
|
r103 | DATA <= DataTmp; | ||
martin
|
r106 | ect <= e0; | ||
martin
|
r103 | |||
martin
|
r106 | when others => | ||
null; | ||||
martin
|
r103 | |||
end case; | ||||
end if; | ||||
end process; | ||||
martin
|
r106 | Read <= sRead; | ||
martin
|
r103 | |||
end architecture; | ||||