基于DE2-115 VHDL编写的闹钟,具有时间显示,闹钟定时显示以及闹钟功能。
译码器显示部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY INBCD7 IS
PORT( A:IN INTEGER;
DOUT1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
DOUT2:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000");
END ENTITY INBCD7;
ARCHITECTURE SHOW OF INBCD7 IS
BEGIN
PROCESS(A)
VARIABLE Q : INTEGER;
VARIABLE E : INTEGER;
BEGIN
Q:=A MOD 10;
E:=A/10;
CASE(Q)IS
WHEN 0 => DOUT1 <= "1000000";
WHEN 1 => DOUT1 <= "1111001";
WHEN 2 => DOUT1 <= "0100100";
WHEN 3 => DOUT1 <= "0110000";
WHEN 4 => DOUT1 <= "0011001";
WHEN 5 => DOUT1 <= "0010010";
WHEN 6 => DOUT1 <= "0000010";
WHEN 7 => DOUT1 <= "1111000";
WHEN 8 => DOUT1 <= "0000000";
WHEN 9 => DOUT1 <= "0011000";
WHEN OTHERS => NULL;
END CASE;
CASE(E)IS
WHEN 0 => DOUT2 <= "1000000";
WHEN 1 => DOUT2 <= "1111001";
WHEN 2 => DOUT2 <= "0100100";
WHEN 3 => DOUT2 <= "0110000";
WHEN 4 => DOUT2 <= "0011001";
WHEN 5 => DOUT2 <= "0010010";
WHEN 6 => DOUT2 <= "0000010";
WHEN 7 => DOUT2 <= "1111000";
WHEN 8 => DOUT2 <= "0000000";
WHEN 9 => DOUT2 <= "0011000";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END ARCHITECTURE SHOW;
顶层设计部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY NAO IS
PORT(CLK,EN:IN STD_LOGIC;
KEYS:IN STD_LOGIC;
KEYF:IN STD_LOGIC;
BEEF:OUT STD_LOGIC;
SMG1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
SMG2:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
SMG3:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
SMG4:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
SMG5:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
SMG6:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
SMG7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
SMG8:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END ENTITY NAO;
ARCHITECTURE JISHU OF NAO IS
COMPONENT INTBCD7
PORT(A:IN INTEGER;
SMGD:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000";
SMGC:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):="1000000");
END COMPONENT;
SIGNAL CLK1:STD_LOGIC;
SIGNAL Q : INTEGER:=0; --60
SIGNAL E : INTEGER:=-1; --24
SIGNAL SHI : INTEGER:=0;
SIGNAL FEN : INTEGER:=0;
SIGNAL SHIJIAN :INTEGER:=0;
BEGIN
PROCESS(CLK,SHI,FEN)
VARIABLE CNT:INTEGER RANGE 0 TO 50000001;
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF CNT<25000000 THEN CNT:=CNT+1;
ELSE CNT:=0;CLK1 <= NOT CLK1;
END IF;
END IF;
IF CLK1'EVENT AND CLK1 ='1' AND EN='1' THEN
IF Q<59 THEN Q<=Q+1;
ELSE Q<=0;
END IF;
IF Q=0 THEN
IF E<23 THEN E<=E+1;
ELSE E<=0;
END IF;
END IF;
IF SHI=E AND FEN=Q THEN SHIJIAN<=3;
ELSE SHIJIAN<=0
END IF;
IF SHIJIAN>0 THEN BEEF<='1';SHIJIAN<=SHIJIAN-1;
ELSE BEEF<='0';
END IF;
END IF;
END PROCESS;
SET:PROCESS(KEYS,KEYF,SHI,FEN)BEGIN
IF KEYS'EVENT AND KEYS='1' THEN SHI<=SHI+1;
END IF;
IF SHI>23 THEN SHI<=0;
END IF;
IF KEYF'EVENT AND KEYF='1' THEN FEN<=FEN+1;
END IF;
IF FEN>59 THEN FEN<=0;
END IF;
END PROCESS SET;
D1:INTBCD7
PORT MAP(A=>E,SMGD=>SMG2,SMGC=>SMG1);
D2:INTBCD7
PORT MAP(A=>Q,SMGD=>SMG4,SMGC=>SMG3);
D3:INTBCD7
PORT MAP(A=>SHI,SMGD=>SMG6,SMGC=>SMG5);
D4:INTBCD7
PORT MAP(A=>FEN,SMGD=>SMG8,SMGC=>SMG7);
END ARCHITECTURE JISHU;