USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY SELTIME IS
PORT(CKDSP,RESET:IN STD_LOGIC;
SECOND:IN STD_LOGIC_VECTOR(7 DOWNTO 0); MINUTE:IN STD_LOGIC_VECTOR(7 DOWNTO 0); HOUR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DAOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END SELTIME;
ARCHITECTURE ART OF SELTIME IS
SIGNAL SEC:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN
PROCESS(RESET,CKDSP) BEGIN
IF(RESET='0') THEN SEC<=\
ELSIF(CKDSP'EVENT AND CKDSP='1') THEN IF(SEC=\ SEC<=\ ELSE SEC<=SEC+1; END IF; END IF; END PROCESS;
PROCESS(SEC,SECOND,MINUTE,HOUR) BEGIN
CASE SEC IS
WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS=>DAOUT<=\ END CASE; END PROCESS; SEL<=SEC; END ART;
此模块中,设计了一个具有6组状态的3位计数器sec,以调时时钟信号CKDSP的上升沿为激励响应。如果一个时刻的电子钟要显示的数字是六个的话,则送出并接受这一组数字需要的时间是调时时钟信号CKDSP的周期×6.即
t=T(ckdsp) ×6 (式1-1)
由于在后面将每个模块进行整合的时候,就存在如何协调每个计数器的周期,以减少出错,并且节约时间与资源。通过这个公式可以轻松得出,并且助于理解各模块之间的关系。
5. 报时模块VHDL(alert.vhd)
喇叭在整点有时有报时驱动信号产生,以及LED灯根据设计的要求再整点时有花样显示信号产生(在整点时从51秒到59秒时从左到右九个LED登依次亮起)。Alert模块产生整点报时的驱动信号speak和LED灯花样显示信号lamp[8..0]。在分位计数到59分时,秒位为51、53、55、57、59秒时扬声器会发出一秒左右的警告音,并且51、53、55、57秒为低音,59秒为高音。
程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ALERT IS
PORT(CLKSP:IN STD_LOGIC;
SECOND,MINUTE:IN STD_LOGIC_VECTOR(7 DOWNTO 0); SPEAK:OUT STD_LOGIC;
LAMP:OUT STD_LOGIC_VECTOR(8 DOWNTO 0)); END ALERT;
ARCHITECTURE ART OF ALERT IS SIGNAL Q500,QLK:STD_LOGIC;
SIGNAL M1,M0,S1,S0:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
M1<=MINUTE(7 DOWNTO 4); M0<=MINUTE(3 DOWNTO 0); S1<=SECOND(7 DOWNTO 4); S0<=SECOND(3 DOWNTO 0);
PROCESS(CLKSP) BEGIN
IF (CLKSP'EVENT AND CLKSP='1') THEN
IF(M1=\ CASE S0 IS
WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\
WHEN\ WHEN\ WHEN OTHERS=>LAMP<=\ END CASE;
IF(S0=\OR S0=\OR S0=\OR S0=\
THEN
Q500<='1'; ELSE Q500<='0'; END IF;
SPEAK<=q500;
else LAMP<=”000000000”; END IF;
IF(M1=\
THEN
QLK<='1'; ELSE QLK<='0'; END IF;
SPEAK<=QLK; SPEAK<=QLK OR Q500; END IF; END PROCESS; END ART;
下面我们对LED显示模块和喇叭模块进行简要介绍: 【LED显示模块】:
16个发光二极管(LED1-LED16),主要用于输出显示,输出高电平时发光二极管亮。另外I/O12-I/O27在模拟信号源模块的上方通过插孔引出,我们只用其中九个(I/O12-I/O20)。
【喇叭模块】:
提供了语音输出功能,同时插孔SPEAKER引出了I/O44。
6. 显示模块VHDL(deled.vhd)
译码输出与十进制对应关系, 0111111 0000110 1011011 1001111 译码输出 0 1 2 3 十进制 1101101 1111101 0000111 1111111 译码输出 5 6 7 8 十进制 程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DELED IS
PORT( S:IN STD_LOGIC_VECTOR(3 DOWNTO 0); RES:IN STD_LOGIC_VECTOR(2 DOWNTO 0); A,B,C:OUT STD_LOGIC;
D0,D1,D2,D3,D4,D5,D6:OUT STD_LOGIC); END DELED;
ARCHITECTURE ART OF DELED IS
SIGNAL DATA_4:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL OUT_7:STD_LOGIC_VECTOR(6 DOWNTO 0);
1100110 4 1101111 9