当前位置:文档之家› 数字逻辑课程设计报告

数字逻辑课程设计报告

数字逻辑课程设计报告
数字逻辑课程设计报告

数字逻辑课程设计报告

数字逻辑课程设计

多功能数字钟

班级:

学号:

课程设计人:

指导老师:

课题:

完成时间:

一、设计目的:

学会应用数字系统设计方法进行电路设计,熟练地运用汇编语言。

二、设计任务及要求:

1.记时、记分、记秒

2.校时、校分、秒清0

3.整点报时

4.时间正常显示

5.闹时功能

三、设计思路:

将整个闹钟分为以下几个模块,每个模块中都有详细的各部分的设计思路,源代码及仿真图像,生成的器件。

1.计时模块

计小时:24进制计数器

计分、计秒:60进制计数器

计时间过程:

计秒:1HZ计数脉冲,0~59循环计数,计数至59时产生进位信号。

计分:以秒计数器进位信号作为分计数脉冲,0~59循环计数,59时产生进位。

计时:以分计数器进位信号作为时计数脉冲,0~23循环计数,23时清0。

二十四进制计数器代码:

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));

end cnt24;

architecture behave of cnt24 is

signal q1,q0:std_logic_vector(3 downto 0);

begin

process(clk)

begin

if(clk'event and clk='1')then

if(q1="0010" and q0="0011")then

q1<="0000";q0<="0000";

elsif(q0="1001")then

q0<="0000";q1<=q1+'1';

else

q0<=q0+'1';

end if;

end if;

qh<=q1;

ql<=q0;

end behave;

仿真结果:

图一、cnt24仿真图像

六十进制计数器代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity cnt60 is

port (clk:in std_logic;

clr:in std_logic;

ql,qh:out std_logic_vector(3 downto 0);

c:out std_logic);

end cnt60;

architecture cnt of cnt60 is

signal q1,q0:std_logic_vector(3 downto 0);

begin

process(clk,clr)

begin

if(clr='1')then

q1<="0000";q0<="0000";c<='0';

else

if(clk'event and clk='1')then

if(q1="0101" and q0="1001")then-----到59 q1<="0000";q0<="0000";c<='1';

elsif(q1<"0101" and q0="1001")then

q0<="0000";q1<=q1+'1';c<='0';

elsif(q0<"1001") then

q0<=q0+'1';

end if;

end if;

end if;

qh<=q1;

ql<=q0;

end cnt;

仿真结果:

图二、cnt60仿真图像

clk qh[3..0]

ql[3..0] cnt24

inst

clk

clr

ql[3..0]

qh[3..0]

c cnt60

inst1

图三、生成的计数器符号

2.校时模块:

思路:按下校时键,时位迅速递增,满23清0

按下校分键,分位迅速递增,满59清0

注意:此时应屏蔽分进位。

按清0键,秒清0。

脉冲按键S1~S8、拨动开关K1~K12任选三个。

两个问题:

(1)如何实现校对时间时,计数器快速递增?

按键校对时间时,将一个频率较高的计数脉冲信号作用于计数器,屏蔽正常计时的计数脉冲信号。

(2)如何消除“抖动”?

电路抖动:一次按键的弹跳现象,电路产生多个计数脉冲,导致一次按键,多次计数的误动作。

抖动产生的原因:物理原因。

消除的简易方法:D触发器,同步按键脉冲。

3.整点报时模块:

从59分50秒开始,每2秒一次低音报时;当达到整点时,进行一次高音报时。

低音:频率可定为500HZ;高音:频率可定为1KHZ。

报时效果:报时脉冲接扬声器输入,引脚号:N6。

整点报时器件代码

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity alert_31 is

port(m1,m0,s1,s0:in std_logic_vector(3 downto 0);

siga,sigb:out std_logic);

end alert_31;

architecture alert of alert_31 is

begin

siga<='1'when(m1="0101" and m0="1001" and s1="0101" and (s0="0000" or s0="0010" or s0="0100" or s0="0110" or s0="1000"))else'0';

sigb<='1'when(m1="0000" and m0="0000" and s1="0000" and s0="0000")else'0';

end alert;

仿真结果:

图四、整点报时模块,低频率报时

mh[3..0] ml[3..0] sh[3..0] sl[3..0]sig500 sig1k

zdbs

inst7

图五、整点报时器件符号

4、分频模块:

设计一个进制较大的计数器,分频产生各种频率的脉冲信号。代码:

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity freq_divider is

port (clk:in std_logic;

hz512,hz64,hz4,hz1:out std_logic);

End freq_divider;

architecture beh of freq_divider is

signal cc: std_logic_vector(9 downto 0);

begin

process(clk)

begin

if(clk'event and clk='1') then

if(cc="1111111111")then

cc<="0000000000";

else

cc<=cc+1;

end if;

end if;

end process;

hz512<=cc(0);

hz64<=cc(3);

hz4<=cc(7);

hz1<=cc(9);

end beh;

仿真结果:

f req_div ider

clk hz1

hz4

hz64

hz512

inst

图六、分频器仿真及生成器件符号

相关主题
文本预览
相关文档 最新文档