generic_counter.vhd 712 B

12345678910111213141516171819202122232425262728293031323334
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4. entity generic_counter is
  5. generic (
  6. counter_bits : integer := 8
  7. );
  8. port
  9. (
  10. clk : in std_logic;
  11. rst : in std_logic;
  12. en : in std_logic;
  13. cnt : out unsigned (counter_bits -1 downto 0)
  14. );
  15. end entity;
  16. architecture beh of generic_counter is
  17. signal i_cnt : unsigned (counter_bits -1 downto 0);
  18. signal i_cnt_next : unsigned (counter_bits -1 downto 0);
  19. begin
  20. cnt <= i_cnt;
  21. i_cnt_next <= i_cnt + 1 when rst = '0'
  22. else (others => '0');
  23. process(clk) is
  24. begin
  25. if rising_edge(clk) then
  26. if en = '1' or rst = '1' then
  27. i_cnt <= i_cnt_next;
  28. end if;
  29. end if;
  30. end process;
  31. end architecture;