شمارنده ی جانسون
هدف از این برنامه طراحی یک شمارنده ی جانسون 4 بیتی است. خروجی این برنامه بر روی LED است.
*** یادآوری: این شمارنده به صورت چرخشی اعداد زیر را تولید می کند:
0 > 8 > 12 > 14 > 15 > 7 > 3 > 1 >
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity johnson is
Port ( clk1 : in STD_LOGIC;
clk2 : in STD_LOGIC;
q : out STD_LOGIC_VECTOR (3 downto 0));
end johnson;
architecture Behavioral of johnson is
signal clk : std_logic;
signal p : std_logic_vector (3 downto 0);
signal st : integer range 0 to 15 :=0;
begin
process(clk1, clk2)
begin
if clk2'event and clk2 = '1' then
clk <= clk1;
end if;
end process;
process (clk)
begin
if clk = '1' and clk'event then
if st = 0 then
p <= "1000";
st <= 8;
elsif st = 8 then
p <= "1100";
st <= 12;
elsif st = 12 then
p <= "1110";
st <= 14;
elsif st = 14 then
p <= "1111";
st <= 15;
elsif st = 15 then
p <= "0111";
st <= 7;
elsif st = 7 then
p <= "0011";
st <= 3;
elsif st = 3 then
p <= "0001";
st <= 1;
elsif st = 1 then
p <= "0000";
st <= 0;
end if;
end if;
end process;
q <= not p;
end Behavioral;