Search This Blog

VHDL: n-bit ripple counter

For description see: Asynchronnous binary counter (ripple counter)
-- ~ --
-- www.asic-digital-design.com
-- ~ --
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
-- ~ --
entity ripple_cnt is
generic (
  n : natural := 4
);
port (
  clk   : in std_logic;
  clear : in std_logic;

  b     : out std_logic_vector(n-1 downto 0)
);
end ripple_cnt;
-- ~ --
architecture arch_rtl of ripple_cnt is
  -- signals declaration
  signal clk_i, q_i   : std_logic_vector(n-1 downto 0);

begin
  -- clocks
  clk_i(0)            <= clk;
  clk_i(n-1 downto 1) <= q_i(n-2 downto 0);

  -- flip-flops
  gen_cnt: for i in 0 to n-1 generate
    dff: process(clear, clk_i)
    begin
      if (clear = '1') then
        q_i(i) <= '1';
      elsif (clk_i(i)'event and clk_i(i) = '1') then
        q_i(i) <= not q_i(i);
      end if;
    end process dff;
  end generate;
  
  -- output
  b <= not q_i;
  -- ~ --
end arch_rtl;

No comments: