44 lines
940 B
VHDL
44 lines
940 B
VHDL
|
library IEEE;
|
||
|
use IEEE.STD_LOGIC_1164.all;
|
||
|
use IEEE.NUMERIC_STD.all;
|
||
|
|
||
|
entity Counter4Bits is
|
||
|
port(MAX : natural := 9;
|
||
|
reset : in std_logic;
|
||
|
clk : in std_logic;
|
||
|
enable1 : in std_logic;
|
||
|
enable2 : in std_logic;
|
||
|
valOut : out std_logic_vector(3 downto 0);
|
||
|
termCnt : out std_logic);
|
||
|
end Counter4Bits;
|
||
|
|
||
|
architecture RTL of Counter4Bits is
|
||
|
|
||
|
signal s_value : unsigned(3 downto 0);
|
||
|
|
||
|
begin
|
||
|
process(reset, clk)
|
||
|
begin
|
||
|
if (rising_edge(clk)) then
|
||
|
if (reset = '1') then
|
||
|
s_value <= (others => '0');
|
||
|
termCnt <= '0';
|
||
|
elsif ((enable1 = '1') and (enable2 = '1')) then
|
||
|
if (to_integer(s_value) = MAX) then
|
||
|
s_value <= (others => '0');
|
||
|
termCnt <= '0';
|
||
|
else
|
||
|
s_value <= s_value + 1;
|
||
|
if (to_integer(s_value) = MAX - 1) then
|
||
|
termCnt <= '1';
|
||
|
else
|
||
|
termCnt <= '0';
|
||
|
end if;
|
||
|
end if;
|
||
|
end if;
|
||
|
end if;
|
||
|
end process;
|
||
|
|
||
|
valOut <= std_logic_vector(s_value);
|
||
|
end RTL;
|