logo资料库

多功能数字钟的设计与实现.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
数字逻辑课程设计 学院: 班级: 姓名: 学号:
实验名称: 多功能数字钟的设计与实现。 设计目的: 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 进制的计数器来控制。 顶层图中模块截图如下:
分享到:
收藏