----------------------------------------------------------------------------------
-- Company:
-- Engineer:
-- 
-- Create Date: 01.11.2023 20:17:11
-- Design Name:
-- Module Name: ADC_Interface_conv_file - Behavioral
-- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
-- 
-- Dependencies:
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
-- 
----------------------------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity ADC_conv is
  Port (
                Reset            : in std_logic;                -- Reset signal
                wr_en            : in std_logic;                -- start signal from FSM to convert data
                ADC_inphase : in std_logic_vector(9 downto 0);--receiver side i/p
                ADC_quadrature : in std_logic_vector(9 downto 0); --receiver side i/p

    -- Dout1            : out std_logic_vector(9 downto 0);--receiver side 0/p
                Dout            : out std_logic_vector(9 downto 0);--receiver side o/p

                Clock_out          : out std_logic ;              -- clock output
-- ADC_CLK2 : out std_logic;
                enable_out       : out std_logic;               -- convertion done signal
    --Reset : IN  STD_LOGIC;
                Clock : IN  STD_LOGIC                          -- clock signal input

   );
end ADC_conv;

architecture Behavioral of ADC_conv is

    shared variable temp1, temp2 : std_logic_vector(9 downto 0) ;

begin

    Convertion : Process (Clock, Reset, wr_en, ADC_inphase) is

                        begin

                            if Reset = '1' then

                                Dout <= ( others => '0' ) ;
                                enable_out <= '0' ;
                                Clock_out <= '0' ;

                            else if rising_edge(Clock) then
                                if (wr_en = '1') then
                                    temp1 := ADC_inphase ;
                                 else
                                    temp1 := (others => '0');
                                end if ;

                            end if ;
                            end if ;

    end process Convertion ;

    Convertion_quadrature : Process (Clock, Reset, wr_en, ADC_quadrature) is

                        begin

                            if Reset = '1' then

                                Dout <= ( others => '0' ) ;
                                enable_out <= '0' ;
                                Clock_out <= '0' ;

                            else if falling_edge(Clock) then
                                if (wr_en = '1') then
                                    temp2 := ADC_quadrature ;
                                else
                                    temp2 := (others => '0');
                                end if ;

                            end if ;
                            end if ;

    end process Convertion_quadrature ;

    Dout <= temp1 when Clock = '1' else temp2 ;

end Behavioral;