--------------------------------------------------------------------------------
-- Company: 
-- Engineer:
--
-- Create Date:    19:20:09 10/22/05
-- Design Name:    
-- Module Name:    timeout_counter - Behavioral
-- Project Name:   
-- Target Device:  
-- Tool versions:  
-- Description:
--
-- Dependencies:
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
-- 
--------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

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

entity timeout_counter is
	 Generic (N : integer := 8);
    Port ( rst : in std_logic;
           clk : in std_logic;
           ce : in std_logic;
           load : in integer range 0 to N-1;
           load_en : in std_logic;
           rdy : out std_logic);
end timeout_counter;

architecture Behavioral of timeout_counter is
signal count : integer range 0 to N-1;
begin

process (rst, clk, ce, load, load_en) 
begin
   if rst='1' then 
      count <= load;
		rdy <= '0'; 
   elsif clk='1' and clk'event then
		rdy <= '0'; 
      if load_en ='1' then
         count <= load;
      else
			if (count /= 0) then
		      if ce ='1' then
	           	count <= count - 1;
				end if;
			else
				rdy <= '1';
			end if;		
      end if;
   end if;
end process;

end Behavioral;
