LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY student IS
PORT(COUNT_N,COUNT_M,START,COOK,CLK:IN STD_L
LOOK:OUT STD_LOGIC;
DOUT :OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END STUDENT;
ARCHITECTURE BEHAV OF student IS
SIGNAL DT1,DT2:STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL DICSOUNT,TEM:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DCP:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL CT:STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL CT1,CT2:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL SG,CMKS:STD_LOGIC;
BEGIN
PROCESS(COUNT_N,SG)
BEGIN
IF SG='1' THEN
DT1<="00";
ELSIF COUNT_N'EVENT AND COUNT_N='1' THEN
IF DT1=3 THEN
DT1<="01";
ELSE
DT1<=DT1+1;
END IF;
END IF;
END PROCESS;
PROCESS(COUNT_M,SG)
BEGIN
IF SG='1' THEN
DT2<="00";
ELSIF COUNT_M'EVENT AND COUNT_M='1' THEN
IF DT2=3 THEN
DT2<="01";
ELSE
DT2<=DT2+1;
END IF;
END IF;
END PROCESS;
PROCESS(START)
BEGIN
IF SG='1' THEN
CMKS<='0';
ELSIF START'EVENT AND START='1' THEN
DICSOUNT<=DT1&DT2;CMKS<=CMKS XOR '1';
END IF;
END PROCESS;
PROCESS(CLK,START,COOK)
BEGIN
IF START='1' AND DCP="0000" THEN
DCP<=DICSOUNT;
ELSIF CLK'EVENT AND CLK='1' THEN
IF COOK='1' THEN
ELSIF START='1' AND DCP>"0000" THEN
ELSIF SG='1' THEN
IF CT1<"0001" THEN
CT1<="0000";SG<='0';
END IF;
ELSIF CMKS='1' THEN
CASE DCP IS
IF CT<35 THEN
CT<=CT+1;
IF CT1<8 THEN
ELSIF CT1=8 THEN
ELSIF CT2<8 THEN
ELSIF CT2=8 THEN
END IF;
ELSE
END IF;
WHEN "0110"=>
IF CT<27 THEN
CT<=CT+1;
IF CT1<6 THEN
ELSIF CT1=6 THEN
ELSIF CT2<6 THEN
ELSIF CT2=6 THEN
END IF;
ELSE
END IF;
WHEN "0111"=>
IF CT<8 THEN
CT<=CT+1;
IF CT1<3 THEN
ELSIF CT1=3 THEN
ELSIF CT2<3 THEN
ELSIF CT2=3 THEN
END IF;
ELSE
END IF;
WHEN "1001"=>
IF CT<27 THEN
CT<=CT+1;
IF CT1<6 THEN
ELSIF CT1=6 THEN
ELSIF CT2<6 THEN
ELSIF CT2=6 THEN
END IF;
ELSE
END IF;
WHEN "1010"=>
IF CT<15 THEN
CT<=CT+1;
IF CT1<3 THEN
ELSIF CT1=3 THEN
ELSIF CT2<3 THEN
ELSIF CT2=3 THEN
END IF;
ELSE
END IF;
WHEN "1011"=>
IF CT<8 THEN
CT<=CT+1;
IF CT1<3 THEN
ELSIF CT1=3 THEN
ELSIF CT2<3 THEN
ELSIF CT2=3 THEN
END IF;
ELSE
END IF;
WHEN "1101"=>
IF CT<19 THEN
CT<=CT+1;
IF CT1<4 THEN
ELSIF CT1=4 THEN
ELSIF CT2<4 THEN
ELSIF CT2=4 THEN
END IF;
ELSE
END IF;
WHEN "1110"=>
IF CT<11 THEN
CT<=CT+1;
IF CT1<2 THEN
ELSIF CT1=2 THEN
ELSIF CT2<2 THEN
ELSIF CT2=2 THEN
END IF;
ELSE
END IF;
WHEN "1111"=>
IF CT<8 THEN
IF CT1<3 THEN
ELSIF CT1=3 THEN
ELSIF CT2<3 THEN
ELSIF CT2=3 THEN
END IF;
ELSE
END IF;
WHEN OTHERS=>
END CASE;
END IF;
END IF;
END PROCESS;
LOOK<=SG;
END BEHAV;