summaryrefslogtreecommitdiff
path: root/Example/counter/updown_counter.vhdl
blob: 922ee67240dc11c601be6abcc485e66b630a2c7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;


entity updown_counter is
    Port ( clk: in std_logic;
           reset: in std_logic;
     up_down: in std_logic;
           counter: out std_logic_vector(3 downto 0)
     );
end updown_counter;

architecture Behavioral of updown_counter is
signal tmp: std_logic_vector(3 downto 0);
begin

process(clk,reset)
begin
    if(reset='1') then
         tmp <= "0000";
    elsif(clk'event and clk='1') then
         if(up_down='1') then
           tmp <= std_logic_vector(to_unsigned(to_integer(unsigned(tmp)-1), tmp'length));
         else 
           tmp <= std_logic_vector(to_unsigned(to_integer(unsigned(tmp)+1), tmp'length));
         end if;
    end if;
end process;
 counter <= std_logic_vector(tmp);

end Behavioral;