数字逻辑课程设计
学院:
班级:
姓名:
学号:
实验名称:
多功能数字钟的设计与实现。
设计目的:
1.学会运用数字系统设计方法进行电路设计。
2.掌握并会使用 VHDL 语言以及组合电路。
3.掌握各个元件的功能以及使用。
4.培养设计综合实验的设计能力。
设计要求
1.设计一时钟
实现 24 小时、60 分钟、60 秒计数器功能。
2.校时
按下校时健,小时位计数器快速递增,按 24 小时循环。
按下校分健,分钟位计数器快速递增,按 60 分钟循环。
按下校秒健,秒位清 0.
3.报时
当时钟位于 59 分 50 秒开始没隔 2 秒低音报时,到整点
时高音报时。
设计思路
可以分为:
1.计时模块
2.校时模块
3.报时模块
4.分频模块
5.显示模块
模块一:计时模块
计时分别用 1 个 24 进制和 2 个 60 进制的计数器构成
24 进制计数器设计如下图:
60 进制计数器设计如下图:
24 进制计数器仿真图如下图:
60 进制计数器仿真图如下图:
模块二:校时模块
sa,sb,sc 分别由三个开关控制
1. 按下 sa 时小时位滚动,进行校时
2. 按下 sb 时分钟位滚动,进行校时
3. 按下 sc 时秒位清零
模块三:报时模块
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
ENTITY alert IS
port(f : in std_logic_vector(7 downto 0);
m : in std_logic_vector(7 downto 0);
sigsoo :out std_logic;
siglk
END alert;
ARCHITECTURE beheave OF alert IS
:out std_logic);
begin
sigsoo<='1' when f(7)='0' and f(6)='1' and f(5)='0' and f(4)='1'
and f(3)='1' and f(2)='0' and f(1)='0' and f(0)='1'
and m(7)='0' and m(6)='1' and m(5)='0' and m(4)='1'
and ((m(3)='0' and m(2)='0' and m(1)='0' and m(0)='0') or
(m(3)='0' and m(2)='0' and m(1)='1' and m(0)='0') or
(m(3)='0' and m(2)='1' and m(1)='0' and m(0)='0') or
(m(3)='0' and m(2)='1' and m(1)='1' and m(0)='0') or
(m(3)='1' and m(2)='0' and m(1)='0' and m(0)='0'))
else '0';
siglk<='1' when f(7)='0' and f(6)='0' and f(5)='0' and f(4)='0'
and f(3)='0' and f(2)='0' and f(1)='0' and f(0)='0'
and m(7)='0' and m(6)='0' and m(5)='0' and m(4)='0'
and m(3)='0' and m(2)='0' and m(1)='0' and m(0)='0'
else '0';
end beheave;
顶层图中模块截图如下:
模块四:分频模块
分频模块 VHDL 设计如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
ENTITY clk_div IS
port(clk
: in std_logic;
clk_div512
clk_div256
clk_div64
clk_div4
clk_div1
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic;
: out std_logic);
END clk_div;
ARCHITECTURE beheave OF clk_div IS
signal count : Std_logic_vector(9 downto 0);
BEGIN
process(clk)
BEGIN
IF (clk'event AND clk='1') THEN
IF(count="1111111111") THEN
count <= "0000000000";
ELSE
count <= count +1;
END IF ;
END IF ;
END process;
clk_div512<= count(0);
clk_div256<= count(1);
clk_div64<=
count(3);
clk_div4<= count(7);
clk_div1<= count(9);
end beheave;
顶层图中模块截图如下:
模块五:显示模块
24 进制与 60 进制计数器的输出分 6 组,每组接 SCD7
段码译码器,驱动数码管显示。选用 8 隔数码管中的
6 个进行时间显示,用一片 6 进制的计数器来控制。
顶层图中模块截图如下: