DECADE COUNTER BEHAVIOURAL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity DECADE_COUNTER is
Port (RESET: in STD_LOGIC;
CLK: in STD_LOGIC;
Q: inout STD_LOGIC_VECTOR (3 downto 0):="0000" );
end DECADE_COUNTER;
architecture BEHAVIOURAL of DECADE_COUNTER is
begin
PROCESS (CLK, RESET)
BEGIN
IF RESET='0' THEN
Q<="0000";
ELSIF FALLING_EDGE(CLK) THEN
IF Q="1001" THEN
Q<="0000";
ELSE
Q<=Q+"0001";
END IF;
END IF;
END PROCESS;
END BEHAVIOURAL;
DECADE COUNTER STRUCTURAL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity dec_str is
Port (CLK :IN STD_LOGIC;
RESET : IN STD_LOGIC;
Q : INOUT STD_LOGIC_VECTOR (3 DOWNTO 0) );
end dec_str;
architecture structural of dec_str is
COMPONENT JK IS
Port ( J,K,C,CLR : IN STD_LOGIC;
Z: OUT STD_LOGIC );
END COMPONENT;
COMPONENT NAND1
Port ( D,C : in STD_LOGIC;
Y : out STD_LOGIC);
END COMPONENT;
begin
N : NAND1 PORT MAP (Q(3),Q(1),RESET);
JK1 : JK PORT MAP ('1','1',CLK,RESET,Q(0));
JK2 : JK PORT MAP ('1','1',Q(0),RESET,Q(1));
JK3 : JK PORT MAP ('1','1',Q(1),RESET,Q(2));
JK4 : JK PORT MAP ('1','1',Q(2),RESET,Q(3));
end structural;
COMPONENT INSTANTIATION –
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity JK is
Port ( J,K,C,CLR : IN STD_LOGIC;
Z: OUT STD_LOGIC );
end JK;
architecture Behavioral of JK is
begin
PROCESS (J,K,C,CLR)
VARIABLE A : STD_LOGIC:= '0';
BEGIN
IF CLR ='0' THEN
A:= '0';
ELSE
IF FALLING_EDGE(C) THEN
IF J= '0' AND K= '0' THEN
A := A;
ELSIF J= '0' AND K= '1' THEN
A := '0';
ELSIF J= '1' AND K= '0' THEN
A := '1';
ELSIF J= '1' AND K= '1' THEN
A := NOT A;
END IF;
END IF;
END IF;
Z<= A;
END PROCESS;