You are on page 1of 3

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
entity HUNG is
Port ( CK100MHZ : in STD_LOGIC;
SS : in STD_LOGIC;
U1 : in STD_LOGIC;
U2 : in STD_LOGIC;
SSEG : out STD_LOGIC_VECTOR (7 downto 0);
AN : out STD_LOGIC_VECTOR (3 downto 0));
end HUNG;
architecture Behavioral of HUNG is
SIGNAL CK1HZ,CK2HZ:STD_LOGIC:='0';
SIGNAL CKQ :STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
SIGNAL TMP,BCD0,BCD1,BCD2,BCD3:STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";
SIGNAL BCD0T,BCD1T,BCD2T,BCD3T:STD_LOGIC_VECTOR(3 DOWNTO 0);
begin
PROCESS(CK100MHZ,CKQ,CK1HZ,CK2HZ)
VARIABLE CHIAXUNG1:STD_LOGIC_VECTOR(27 DOWNTO 0):=X"0000000";
VARIABLE CHIAXUNG2:STD_LOGIC_VECTOR(27 DOWNTO 0):=X"0000000";
BEGIN
IF RISING_EDGE(CK100MHZ) THEN
IF CHIAXUNG1=X"2FAF080" THEN
CK1HZ<=NOT CK1HZ;
CHIAXUNG1:=X"0000000";
ELSE
CHIAXUNG1:=CHIAXUNG1 + 1;
END IF;
IF CHIAXUNG2=X"0BEBC20" THEN
CK2HZ<=NOT CK2HZ;
CHIAXUNG2:=X"0000000";
ELSE
CHIAXUNG2:=CHIAXUNG2 + 1;
END IF;
END IF;
CKQ<=CHIAXUNG1(15 DOWNTO 14);
END PROCESS;
----------PROCESS(U1,U2,SS,CK1HZ,CK2HZ,BCD0,BCD1,BCD2,BCD3)
VARIABLE TAM,TAMSS:INTEGER:=0;
BEGIN
IF U1='1' THEN
TAM:=1;
ELSIF U2='1' THEN
TAM:=0;
--PHAN SAU DAU "--" LA GHI CHU
ELSE
IF TAM = 1 THEN TAM:=1;
ELSIF TAM = 0 THEN TAM:=0;
END IF;
END IF;
--TAM=1 NGHIA LA CO BAM START
--TAM=0 NGHIA LA BAM STOP, BAN DAU MAC DINH LA DA BAM STOP
---------------------------IF SS='0' AND TAM=0 THEN

BCD0<="0001";
BCD1<="1010";
BCD2<="0000";
BCD3<="0000";
TAMSS:=0;
ELSIF SS='1' AND TAM=0 THEN
BCD0<="0100";
BCD1<="1010";
BCD2<="0000";
BCD3<="0000";
TAMSS:=1;
END IF;
--PHAI GAN MOT BIEN TAMSS , DO LA BIEN TAM CUA SWITCH
--CH KHI M XONG HAY L BM NT STOP, KHI DO TAM=0 THI MOI CHO CHINH
SWITCH
-----------------------IF TAMSS='0' AND TAM = 1 THEN
BCD3T<="0000";
BCD2T<="1001";
IF FALLING_EDGE(CK1HZ) THEN
IF BCD3T="0001" AND BCD2T="1001" THEN
IF CK1HZ='1' THEN
BCD3<="1011";
BCD2<="1100";
BCD1<="1101";
BCD0<="1111";
ELSE
BCD3<="1111";
BCD2<="1111";
BCD1<="1111";
BCD0<="1111";--TAT HET LED
END IF;
-- TU DONG NY TR LN 5 DONG LA LAM NHAP NHAY LED
ELSE
IF BCD2T="1001" THEN
BCD2T<="0000";
ELSE
BCD2T<=BCD2T + 1;
END IF;
IF BCD3T="1001" THEN BCD3T<="0000";
ELSE
BCD3T<=BCD3T + 1;
END IF;
--TU DNG NY LN 9 DONG LA THUAT TOAN DEM XUONG
END IF;
END IF;
END IF;
-------------------------IF TAMSS= '1' AND TAM=1 THEN
BCD3T<="0010";
BCD2T<="0001";
IF FALLING_EDGE(CK2HZ) THEN
IF BCD3T="0001" AND BCD2T="0000" THEN
IF CK2HZ='1' THEN
BCD3<="1011";
BCD2<="1100";
BCD1<="1101";
BCD0<="1111";
ELSE
BCD3<="1111";
BCD2<="1111";

BCD1<="1111";
BCD0<="1111";
END IF;
ELSE
IF BCD2T="0000" THEN BCD2T<="1001";
ELSE
BCD2T<=BCD2T - 1;
END IF;
IF BCD3T="0000" THEN BCD3T<="1001";
ELSE
BCD3T<=BCD3T - 1;
END IF;
END IF;
END IF;
END IF;
BCD3<=BCD3T;
BCD2<=BCD2T;
BCD1<=BCD1T;
BCD0<=BCD0T;
END PROCESS;
-----------PROCESS(TMP)
BEGIN
CASE TMP IS
WHEN "0000" => SSEG<=X"C0";
WHEN "0001" => SSEG<=X"F9";
WHEN "0010" => SSEG<=X"A4";
WHEN "0011" => SSEG<=X"B0";
WHEN "0100" => SSEG<=X"99";
WHEN "0101" => SSEG<=X"92";
WHEN "0110" => SSEG<=X"82";
WHEN "0111" => SSEG<=X"F8";
WHEN "1000" => SSEG<=X"80";
WHEN "1001" => SSEG<=X"90";
WHEN "1010" => SSEG<=X"8E";
WHEN "1011" => SSEG<=X"86";
WHEN "1100" => SSEG<=X"AB";
WHEN "1101" => SSEG<=X"A1";
WHEN "1111" => SSEG<=X"FF";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
--------PROCESS(CKQ)
BEGIN
CASE CKQ IS
WHEN "00" => AN<="1110";TMP<=BCD0;
WHEN "01" => AN<="1101";TMP<=BCD1;
WHEN "10" => AN<="1011";TMP<=BCD2;
WHEN "11" => AN<="0111";TMP<=BCD3;
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
end Behavioral;

You might also like