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

Subversion Repositories ofdm

[/] [ofdm/] [branches/] [avendor/] [cfft4.vhd] - Diff between revs 4 and 13

Only display areas with differences | Details | Blame | View Log

Rev 4 Rev 13
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
--
--
-- Title       : cfft4
-- Title       : cfft4
-- Design      : cfft
-- Design      : cfft
-- Author      : ZHAO Ming
-- Author      : ZHAO Ming
-- email        : sradio@opencores.org
-- email        : sradio@opencores.org
--
--
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
--
--
-- File        : cfft4.vhd
-- File        : cfft4.vhd
-- Generated   : Wed Oct  2 15:49:06 2002
-- Generated   : Wed Oct  2 15:49:06 2002
--
--
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
--
--
-- Description : 4 point fft
-- Description : 4 point fft
--
--
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
--
--
-- Revisions       :    0
-- Revisions       :    0
-- Revision Number :    1
-- Revision Number :    1
-- Version         :    1.1.0
-- Version         :    1.1.0
-- Date            :    Oct 17 2002
-- Date            :    Oct 17 2002
-- Modifier        :    ZHAO Ming 
-- Modifier        :    ZHAO Ming 
-- Desccription    :    Data width configurable 
-- Desccription    :    Data width configurable 
--
--
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
 
 
library IEEE;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_SIGNED.all;
use IEEE.STD_LOGIC_SIGNED.all;
 
 
 
 
entity cfft4 is
entity cfft4 is
        generic (
        generic (
                WIDTH : Natural
                WIDTH : Natural
        );
        );
         port(
         port(
                 clk : in STD_LOGIC;
                 clk : in STD_LOGIC;
                 rst : in STD_LOGIC;
                 rst : in STD_LOGIC;
                 start : in STD_LOGIC;
                 start : in STD_LOGIC;
                 invert : in std_logic;
                 invert : in std_logic;
                 I : in STD_LOGIC_VECTOR(WIDTH-1 downto 0);
                 I : in STD_LOGIC_VECTOR(WIDTH-1 downto 0);
                 Q : in STD_LOGIC_VECTOR(WIDTH-1 downto 0);
                 Q : in STD_LOGIC_VECTOR(WIDTH-1 downto 0);
                 Iout : out STD_LOGIC_VECTOR(WIDTH+1 downto 0);
                 Iout : out STD_LOGIC_VECTOR(WIDTH+1 downto 0);
                 Qout : out STD_LOGIC_VECTOR(WIDTH+1 downto 0)
                 Qout : out STD_LOGIC_VECTOR(WIDTH+1 downto 0)
             );
             );
end cfft4;
end cfft4;
 
 
 
 
architecture cfft4 of cfft4 is
architecture cfft4 of cfft4 is
type RegAtype is array (3 downto 0) of std_logic_vector(WIDTH-1 downto 0);
type RegAtype is array (3 downto 0) of std_logic_vector(WIDTH-1 downto 0);
type RegBtype is array (3 downto 0) of std_logic_vector(WIDTH downto 0);
type RegBtype is array (3 downto 0) of std_logic_vector(WIDTH downto 0);
 
 
signal counter : std_logic_vector( 1 downto 0 ):="00";
signal counter : std_logic_vector( 1 downto 0 ):="00";
signal RegAI,RegAQ : RegAtype;
signal RegAI,RegAQ : RegAtype;
signal RegBI,RegBQ : RegBtype;
signal RegBI,RegBQ : RegBtype;
begin
begin
 
 
 
 
count:process( clk,rst )
count:process( clk,rst )
begin
begin
        if rst='1' then
        if rst='1' then
                counter<="00";
                counter<="00";
        elsif clk'event and clk='1' then
        elsif clk'event and clk='1' then
                if start='1' then
                if start='1' then
                        counter<="00";
                        counter<="00";
                else
                else
                        counter<=counter+1;
                        counter<=counter+1;
                end if;
                end if;
        end if;
        end if;
end process count;
end process count;
 
 
 
 
-------------------------------------------------------------------------
-------------------------------------------------------------------------
--0 rA(0)<=A0 rB(1)<=rA(0)-rA(2) rB(2)<=rA(1)+rA(3)             B3<=rB(1)-rB(3)--
--0 rA(0)<=A0 rB(1)<=rA(0)-rA(2) rB(2)<=rA(1)+rA(3)             B3<=rB(1)-rB(3)--
--1 rA(1)<=A1 rB(3)<=(-j)*(rA(1)-rA(3))                                 B0<=rB(0)+rB(2)--
--1 rA(1)<=A1 rB(3)<=(-j)*(rA(1)-rA(3))                                 B0<=rB(0)+rB(2)--
--2 rA(2)<=A2                                                                                   B1<=rB(1)+rB(3)--
--2 rA(2)<=A2                                                                                   B1<=rB(1)+rB(3)--
--3 rA(3)<=A3 rB(0)<=rA(0)+rA(2)                                                B2<=rB(0)-rB(2)--
--3 rA(3)<=A3 rB(0)<=rA(0)+rA(2)                                                B2<=rB(0)-rB(2)--
-------------------------------------------------------------------------
-------------------------------------------------------------------------
calculate:process( clk )
calculate:process( clk )
begin
begin
        if clk'event and clk='1' then
        if clk'event and clk='1' then
                case counter is
                case counter is
--0 rA(0)<=A0 rB(1)<=rA(0)-rA(2) rB(2)<=rA(1)+rA(3)             B3<=rB(1)-rB(3)--
--0 rA(0)<=A0 rB(1)<=rA(0)-rA(2) rB(2)<=rA(1)+rA(3)             B3<=rB(1)-rB(3)--
                        when "00" =>
                        when "00" =>
                                RegAI(0)<=I;
                                RegAI(0)<=I;
                                RegAQ(0)<=Q;
                                RegAQ(0)<=Q;
                                RegBI(1)<=SXT(RegAI(0),WIDTH+1)-SXT(RegAI(2),WIDTH+1);
                                RegBI(1)<=SXT(RegAI(0),WIDTH+1)-SXT(RegAI(2),WIDTH+1);
                                RegBQ(1)<=SXT(RegAQ(0),WIDTH+1)-SXT(RegAQ(2),WIDTH+1);
                                RegBQ(1)<=SXT(RegAQ(0),WIDTH+1)-SXT(RegAQ(2),WIDTH+1);
                                RegBI(2)<=SXT(RegAI(1),WIDTH+1)+SXT(RegAI(3),WIDTH+1);
                                RegBI(2)<=SXT(RegAI(1),WIDTH+1)+SXT(RegAI(3),WIDTH+1);
                                RegBQ(2)<=SXT(RegAQ(1),WIDTH+1)+SXT(RegAQ(3),WIDTH+1);
                                RegBQ(2)<=SXT(RegAQ(1),WIDTH+1)+SXT(RegAQ(3),WIDTH+1);
                                Iout<=SXT(RegBI(1),WIDTH+2)-SXT(RegBI(3),WIDTH+2);
                                Iout<=SXT(RegBI(1),WIDTH+2)-SXT(RegBI(3),WIDTH+2);
                                Qout<=SXT(RegBQ(1),WIDTH+2)-SXT(RegBQ(3),WIDTH+2);
                                Qout<=SXT(RegBQ(1),WIDTH+2)-SXT(RegBQ(3),WIDTH+2);
--1 rA(1)<=A1 rB(3)<=(-j)*(rA(1)-rA(3))                                 B0<=rB(0)+rB(2)--
--1 rA(1)<=A1 rB(3)<=(-j)*(rA(1)-rA(3))                                 B0<=rB(0)+rB(2)--
                        when "01" =>
                        when "01" =>
                                RegAI(1)<=I;
                                RegAI(1)<=I;
                                RegAQ(1)<=Q;
                                RegAQ(1)<=Q;
                                if invert='0' then
                                if invert='0' then
                                        -- for fft *(-j)
                                        -- for fft *(-j)
                                        RegBI(3)<=SXT(RegAQ(1),WIDTH+1)-SXT(RegAQ(3),WIDTH+1);
                                        RegBI(3)<=SXT(RegAQ(1),WIDTH+1)-SXT(RegAQ(3),WIDTH+1);
                                        RegBQ(3)<=SXT(RegAI(3),WIDTH+1)-SXT(RegAI(1),WIDTH+1);
                                        RegBQ(3)<=SXT(RegAI(3),WIDTH+1)-SXT(RegAI(1),WIDTH+1);
                                else
                                else
                                        -- for fft *(j)
                                        -- for fft *(j)
                                        RegBI(3)<=SXT(RegAQ(3),WIDTH+1)-SXT(RegAQ(1),WIDTH+1);
                                        RegBI(3)<=SXT(RegAQ(3),WIDTH+1)-SXT(RegAQ(1),WIDTH+1);
                                        RegBQ(3)<=SXT(RegAI(1),WIDTH+1)-SXT(RegAI(3),WIDTH+1);
                                        RegBQ(3)<=SXT(RegAI(1),WIDTH+1)-SXT(RegAI(3),WIDTH+1);
                                end if;
                                end if;
                                Iout<=SXT(RegBI(0),WIDTH+2)+SXT(RegBI(2),WIDTH+2);
                                Iout<=SXT(RegBI(0),WIDTH+2)+SXT(RegBI(2),WIDTH+2);
                                Qout<=SXT(RegBQ(0),WIDTH+2)+SXT(RegBQ(2),WIDTH+2);
                                Qout<=SXT(RegBQ(0),WIDTH+2)+SXT(RegBQ(2),WIDTH+2);
--2 rA(2)<=A2                                                                                   B1<=rB(1)+rB(3)--
--2 rA(2)<=A2                                                                                   B1<=rB(1)+rB(3)--
                        when "10" =>
                        when "10" =>
                                RegAI(2)<=I;
                                RegAI(2)<=I;
                                RegAQ(2)<=Q;
                                RegAQ(2)<=Q;
                                Iout<=SXT(RegBI(1),WIDTH+2)+SXT(RegBI(3),WIDTH+2);
                                Iout<=SXT(RegBI(1),WIDTH+2)+SXT(RegBI(3),WIDTH+2);
                                Qout<=SXT(RegBQ(1),WIDTH+2)+SXT(RegBQ(3),WIDTH+2);
                                Qout<=SXT(RegBQ(1),WIDTH+2)+SXT(RegBQ(3),WIDTH+2);
--3 rA(3)<=A3 rB(0)<=rA(0)+rA(2)                                                B2<=rB(0)-rB(2)--
--3 rA(3)<=A3 rB(0)<=rA(0)+rA(2)                                                B2<=rB(0)-rB(2)--
                        when "11" =>
                        when "11" =>
                                RegAI(3)<=I;
                                RegAI(3)<=I;
                                RegAQ(3)<=Q;
                                RegAQ(3)<=Q;
                                RegBI(0)<=SXT(RegAI(0),WIDTH+1)+SXT(RegAI(2),WIDTH+1);
                                RegBI(0)<=SXT(RegAI(0),WIDTH+1)+SXT(RegAI(2),WIDTH+1);
                                RegBQ(0)<=SXT(RegAQ(0),WIDTH+1)+SXT(RegAQ(2),WIDTH+1);
                                RegBQ(0)<=SXT(RegAQ(0),WIDTH+1)+SXT(RegAQ(2),WIDTH+1);
                                Iout<=SXT(RegBI(0),WIDTH+2)-SXT(RegBI(2),WIDTH+2);
                                Iout<=SXT(RegBI(0),WIDTH+2)-SXT(RegBI(2),WIDTH+2);
                                Qout<=SXT(RegBQ(0),WIDTH+2)-SXT(RegBQ(2),WIDTH+2);
                                Qout<=SXT(RegBQ(0),WIDTH+2)-SXT(RegBQ(2),WIDTH+2);
                        when others => null;
                        when others => null;
                end case;
                end case;
        end if;
        end if;
end process calculate;
end process calculate;
end cfft4;
end cfft4;
 
 

powered by: WebSVN 2.1.0

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