资源描述
JIANGSU NIVERSITY
课程设计汇报
学院:计算机科学和通信工程
班级:网络工程
姓名:
学号:
指导老师:
汇报日期 :1月15日
目 录
Ⅰ.设计目标 1
Ⅱ.设计内容 1
Ⅲ.设计原理 1
Ⅳ.具体实现 2
(1)顶层图 2
(2)代码 2
1.24进制: 2
2. 60进制: 3
3.动态显示: 4
4. 分频器: 5
5. 二路选择器: 6
6.整点报时: 7
7.闹钟设置: 8
8.alarmcmp: 9
9.消抖: 9
Ⅴ.心得体会 10
Ⅰ.设计目标
设计一个拥有:正常时分秒计数功效,实现校时校分清零功效,利用扬声器实现整点报时和闹钟功效多功效数字钟。
Ⅱ.设计内容
整个系统分成七个模块进行:计时模块、校时模块、整点报时模块、分频模块、动态扫描模块,动态显示模块、闹钟模块。
l、能进行正常时、分、秒计时功效,分别由6个数码显示二十四小时、60分钟计数器显示。
2、能利用试验系统上按钮实现“校时”、“校分”功效;
3、能利用扬声器做整点报时:
4、定时闹钟功效
5、用层次化设计方法设计该电路,用硬件描述语言编写各个功效模块。
6、报时功效。报时功效用功效仿真仿真验证,可经过观察相关波形确定电路设计是否正确。
Ⅲ.设计原理
1 计时模块:使用一个二十四进制和两个六十进制计数器级联,组成数字钟基础框架。二十四进制用于计时,六十进制用于计分和计秒。给秒计数器一个1hz时钟脉冲,分计数器以秒计数器进位作为计数脉冲,时计数器以分计数器进位作为计数脉冲。
2 校时模块:分别按下校时键和校分键,计数器增至所需时分数,按下清零键,秒计数器归零。
此处注意事项:①按键“抖动”消除。利用触发器,如D触发器,利用D触发器边缘触发特征,在除去时钟边缘来之前一瞬间之外绝大部分时间全部不能接收输入,从而实现“消抖”。②校分时,分计数器计数不应对小时位产生影响,所以需要屏蔽此时分计数器进位信号。③需要设计二路选择器对于正常计数和校时进行选择。
3 整点报时模块:计时到59分50秒,每两秒一次低音报时,整点进行高音报时,将报时信号接到试验板上扬声器输出。、
4 分频模块:经过不一样进制计数将1khz时钟脉冲分频出不一样频率时钟脉冲,以实现系统对多频率时钟信号需求。
5 动态显示模块:利用6个数码管,将时分秒根据高低位输出到数码管上。其中扫描频率超出人眼视觉暂留频率就能够实现六个管同时显示视觉效果。
6 闹钟模块:需要新计数器进行定时闹钟信号存放,和正常计时状态实现切换,设计一个比较模块使闹钟和计时相等时,开始鸣叫,同时需要一个按键能够控制闹钟开关。
Ⅳ.具体实现
(1)顶层图
图一:顶层图
(2)代码
1.24进制:
时计数器:模块图图。24进制无进位计数器,当计数信号计到23后再检测到计数信号时会自动归零。带清零,clk输入为分秒进位相和结果。qh为十位,ql为个位。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt24 is
port(clk:in std_logic;
qh,ql:out std_logic_vector(3 downto 0);
tc:out std_logic);
end cnt24;
architecture one of cnt24 is
begin
process(clk)
variable iql,iqh:std_logic_vector(3 downto 0):="0000";
begin
if clk'event and clk='1' then
iql:=iql+1;
if iql="1010" then
iqh:=iqh+1;
iql:="0000";
end if;
if (iqh="0010")and(iql="0100") then
iqh:="0000";
iql:="0000";
end if;
end if;
ql<=iql;
qh<=iqh;
end process;
end one;
2. 60进制:
秒计数器模块设计:六十进制带进位计数器,可清零,clk输入信号为1Hz脉冲,当ql计满9后qh增加1,当ql满9且qh记满5,ql、qh同时归零,co输出为高电平。qh为十位ql为个位。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt60 is
port(clk,clr:in std_logic;
ql,qh:buffer std_logic_vector(3 downto 0);
tc:out std_logic
);
end cnt60;
architecture behavor of cnt60 is
begin
tc<='0' when(clk='1' and ql="0000" and qh="0110") else '1';
process(clk,clr,ql,qh)
variable iql,iqh:std_logic_vector(3 downto 0);
begin
if(clr='0'or (iql="0000" and iqh="0110"))then
iql:="0000";
iqh:="0000";
else if(clk'event and clk='1')then
iql:=iql+1;
if(iql="1010")then
iql:="0000";
iqh:=qh+1;
end if;
end if;
end if;
ql<=iql;qh<=iqh;
end process;
END behavor;
分计数器同上。注:不一样之处为分clk输入信号为秒进位信号。
3.动态显示:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY dtsm is
port(
clk:in std_logic;
h:in std_logic_vector(7 downto 0);
m:in std_logic_vector(7 downto 0);
s:in std_logic_vector(7 downto 0);
seg7out:out std_logic_vector(6 downto 0);
sel:buffer std_logic_vector(2 downto 0)
);
END dtsm;
ARCHITECTURE beha of dtsm is
signal key:std_logic_vector(3 downto 0);
BEGIN
PROCESS(clk)
variable dount:std_logic_vector(2 downto 0):="000";
BEGIN
IF(rising_edge(clk))then
IF dount="111" then
dount:="000";
ELSE
dount:=dount+1;
END IF;
END IF;
sel<=dount;
end process;
PROCESS(sel)
BEGIN
CASE sel IS
when "000"=>key<=h(7 downto 4);
when "001"=>key<=h(3 downto 0);
when "010"=>key<="1010";
when "011"=>key<=m(7 downto 4);
when "100"=>key<=m(3 downto 0);
when "101"=>key<="1010";
when "110"=>key<=s(7 downto 4);
when "111"=>key<=s(3 downto 0);
when others=>null;
END CASE;
END PROCESS;
PROCESS (key)
BEGIN
case key is
when"0000"=>seg7out<="0111111";
when"0001"=>seg7out<="0000110";
when"0010"=>seg7out<="1011011";
when"0011"=>seg7out<="1001111";
when"0100"=>seg7out<="1100110";
when"0101"=>seg7out<="1101101";
when"0110"=>seg7out<="1111101";
when"0111"=>seg7out<="0000111";
when"1000"=>seg7out<="1111111";
when"1001"=>seg7out<="1101111";
when"1010"=>seg7out<="1000000";
when others=>null;
END CASE;
END PROCESS;
END beha;
4. 分频器:
模块图图。由四个分频器组成,输入信号in_clk为1024Hz脉冲信号。把输入1024Hz信号分频为四个脉冲信号,即1Hz秒脉冲,4Hz校时、校分脉冲,64Hz消抖脉冲,和512Hz蜂鸣器低音输入。
:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY freq_divider IS
PORT(clk : IN STD_LOGIC;
hz1 : OUT STD_LOGIC;
hz4 : OUT STD_LOGIC;
hz64 : OUT STD_LOGIC;
hz512 : OUT STD_LOGIC);
END freq_divider;
ARCHITECTURE rtl OF freq_divider IS
SIGNAL count : STD_LOGIC_VECTOR(9 DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
IF (clk'event and clk='1') THEN
IF(count="") THEN
Count <= (OTHERS =>'0');
ELSE
Count <= count +1;
END IF ;
END IF ;
END PROCESS;
hz512 <= count(0);
hz64 <= count(3);
hz4 <= count(7);
hz1 <= count(9);
END rtl;
5. 二路选择器:
模块图图。用以进行正常计时和校时/分选择。alarm为经过消抖校时/分信号。当按键未曾按下时,即校时/分信号没有到来时,二选一选择器会选择输出a(正常计时输入)信号,不然当alarm按键按下时输出y为校时/分输入信号——4Hz。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity sel2 is
port(sel:in std_logic;
ip: in std_logic;
a,b:out std_logic);
end sel2;
architecture beh of sel2 is
begin
process(sel)
begin
if(sel='0')then a<=ip;
else b<=ip;
end if;
end process;
end beh;
6.整点报时:
整点报时及闹时:模块图图在59分52秒、54秒、56秒、58秒给扬声器赋以低音512Hz信号,在00分00秒给扬声器赋以高音1024Hz信号,当系统时间和闹铃时间相同时给扬声器赋以高音1024Hz信号。闹时时间为一分钟。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity zdbs is
port(mh,ml,sh,sl:in std_logic_vector(3 downto 0);
sig500,sig1k: out std_logic
);
end zdbs;
architecture behavior of zdbs is
begin
sig500<='1' when mh="0101"and ml="1001"and sh="0101"
and( sl="0000"or sl="0010" or sl="0100"or sl="0110"or sl="1000")
else '0';
sig1k<='1' when mh="0000"and ml="0000"and sh="0000"and sl="0000"
else '0';
end behavior;
7.闹钟设置:
闹钟时间设定:模块图图。由开关K1选择闹钟和时间。由S1、S2脉冲键调整时、分。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity alarmset is
port(sel:in std_logic;
hclo,mclo,sclo,halr,malr,salr: in std_logic_vector(7 downto 0);
h,s,m:out std_logic_vector(7 downto 0));
end alarmset;
architecture beh of alarmset is
begin
process(sel)
begin
if(sel='0')then h<=hclo;
m<=mclo;
s<=sclo;
else h<=halr;
m<=malr;
s<="00000000";
end if;
end process;
end beh;
8.alarmcmp:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity alarmcmp is
port( h,m,halr,malr: in std_logic_vector(7 downto 0);
stop:in std_logic;
sig:out std_logic);
end alarmcmp;
architecture beh of alarmcmp is
begin
process(h,m,halr,malr,stop)
begin
if stop='0'then
sig<='0';
end if;
if h=halr and m=malr and stop='1' then
sig<='1';
else sig<='0';
end if;
end process;
end beh;
9.消抖:
模块图图。分频出用64Hz信号对s1校时信号、s2校分信号、s3秒清零信号、s4秒清分。是由四个两级d触发器组成,分别对输入sa、sb、sc信号相邻两个上升沿进行比较以确定按键按下,从而达成消抖目标。
Ⅴ.心得体会
经过此次课程设计,使我愈加扎实掌握了相关数字逻辑方面知识,在设计过程中碰到了部分问题,比如在画顶层原理图时,最大问题就是根本没有把各个模块VHD文件和生成器件全部全部放在顶层文件文件夹内,还有就是程序设计时候考虑不够全方面,没有联络着各个模式和试验板情况来编写程序,以至于多考虑编写了译码电路而浪费了很多时间。暴露除了我在这方面知识有所欠缺和经验不足,实践出真知,经过亲自动手制作,使我们掌握知识不再是纸上谈兵。
课程设计诚然是一门专业课,给我很多专业知识和专业技能上提升,同时也给我很多新想法,部分在课上学习不到思绪,让我感慨颇深。经过这次课程设计,我掌握了相关数字钟方面相关知识,能够独立设计一个数字钟,而且了解了它原理。思绪即出路,有什么不懂地方要立即弄懂,世上无难事,只怕有心人。只要认真专研,动手实践,就没有弄不懂知识。
展开阅读全文