实验四:电子钟显示 一、 实验目的
(1)掌握较复杂的逻辑设计和调试。
(2)学习用原理图+VHDL语言设计逻辑电路。 (3)学习数字电路模块层次设计。 (4)掌握ispLEVER 软件的使用方法。 (5)掌握ISP 器件的使用。 二、实验所用器件和设备
在系统可编程逻辑器件ISP1032 一片 示波器 一台 万用表或逻辑笔 一只 TEC-5实验系统,或TDS-2B 数字电路实验系统 一台 三、 实验内容
数字显示电子钟 1、任务要求
(1)、时钟的“时”要求用两位显示;上、下午用发光管作为标志; (2)、时钟的“分”、“秒”要求各用两位显示;
(3)、整个系统要有校时部分(可以手动,也可以自动),校时时不能产生进位; (4)*、系统要有闹钟部分,声音要响5秒(可以是一声一声的响,也可以连续响)。
VHDL源代码:
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all;
----主体部分- ENTITY clock is
port(clk,clr,put,clk1 : in std_logic; --clr 为清零信号,put为置数脉冲,clk1 为响铃控制时钟
choice : in std_logic; --用来选择时钟状态的脉冲信号 lighthour : out std_logic_vector(10 downto 0); lightmin : out std_logic_vector(7 downto 0);
lightsec : out std_logic_vector(7 downto 0);--输出显示 ring : out std_logic); --响铃信号 end clock;
--60进制计数器模块
ARCHITECTURE func of clock is component counter_60
port(clock : in std_logic; clk_1s : in std_logic; putust : in std_logic;
clr : in std_logic;
load : in std_logic;
s1 : out std_logic_vector(3 downto 0) ;
s10 : out std_logic_vector(3 downto 0) ;
co : out std_logic) ;
end component;
--24进制计数器模块 component counter_24
port(clock : in std_logic; clk_1s : in std_logic;
putust : in std_logic;
clr : in std_logic; load : in std_logic;
s1 : out std_logic_vector(3 downto 0); s10 : out std_logic_vector(6 downto 0)); end component;
signal sec,a:std_logic; ---2 分频产生1s信号 signal l1,l2,l3:std_logic; ---判定对时间三部分修改 signal c1,c2:std_logic; ---进位信号 signal load:std_logic_vector(1 downto 0); signal temp:integer range 0 to 2499; signal temp1:integer range 0 to 95; --计数信号 signal sec_temp:std_logic_vector(7 downto 0);
--总进程 begin
u1 : counter_60 port map (sec,sec,put,clr,l1,sec_temp(3 downto 0),sec_temp(7 downto 4),c1); u2 : counter_60 port map (c1,sec,put,clr,l2,lightmin(3 downto 0),lightmin(7 downto 4),c2); u3 : counter_24 port map (c2,sec,put,clr,l3,lighthour(3 downto 0),lighthour(10 downto 4)); lightsec(7 downto 0)<=sec_temp(7 downto 0);
--状态转换
process (choice) begin
if (choice'event and choice='1') then case load is
when \非修改状态 l2<='0'; l3<='0';
load<=\
when \此状态下对小时进行修改
l2<='0' ; l3<='1' ;