library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity ad_vhd_final1 is
port(reset : in std_logic;
start : in std_logic;
clk : in std_logic;
data_in : in std_logic_vector(7 downto 0);
data_out: out std_logic_vector(7 downto 0);
addr : out std_logic_vector(10 downto 0);
flag : out std_logic;
encode_out : out std_logic;
ce : out std_logic;
we : out std_logic;
oe : out std_logic);
end ad_vhd_final1;
architecture a of ad_vhd_final1 is
signal encode : std_logic;
signal data : std_logic_vector(7 downto 0);
signal count: std_logic_vector(10 downto 0);
type states is (s0,s1,s2,s3);
signal state : states;
begin
encode_out <= encode;
data_out <= data;
addr <= count;
----------------------------------- ad ouput data latch ----------------------------------
process(reset,encode)
begin
if reset='1' then data <= "00000000";
elsif encode'event and encode='0' then data <= data_in;
end if;
end process;
----------------------------------- state generate ---------------------------------------
process(reset,start,clk)
begin
if reset='1' then state <= s0;
elsif clk'event and clk='0' then
case state is
when s0 => if start='0' then state <= s1;
else state <= s0;
end if;
when s1 => count <= "00000000000";
if start='1' then state <= s2;
else state <= s1;
end if;
when s2 => if count <2047 then count <= count + 1;
state <= s2;
else state <= s3;
end if;
when s3 => if start='0' then state <= s1;
else state <= s3;
end if;
end case;
end if;
end process;
----------------------------------- signal value -----------------------------------------
flag <= '1' when (state=s3) else
'0';
ce <= clk when (state=s2) else
'1';
oe <= '1';
we <= clk when (state=s2) else
'1';
encode <= clk when (state=s2) else
'0';
end a;