数字逻辑电路设计课程设计数字钟.docx

上传人:b****0 文档编号:18382695 上传时间:2023-08-16 格式:DOCX 页数:13 大小:80.93KB
下载 相关 举报
数字逻辑电路设计课程设计数字钟.docx_第1页
第1页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第2页
第2页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第3页
第3页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第4页
第4页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第5页
第5页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第6页
第6页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第7页
第7页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第8页
第8页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第9页
第9页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第10页
第10页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第11页
第11页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第12页
第12页 / 共13页
数字逻辑电路设计课程设计数字钟.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数字逻辑电路设计课程设计数字钟.docx

《数字逻辑电路设计课程设计数字钟.docx》由会员分享,可在线阅读,更多相关《数字逻辑电路设计课程设计数字钟.docx(13页珍藏版)》请在冰点文库上搜索。

数字逻辑电路设计课程设计数字钟.docx

数字逻辑电路设计课程设计数字钟

JIANGSUUNIVERSITY

数字钟实验报告设计

学院名称:

专业班级:

学生姓名:

学生学号:

2012年7月9日

设计目的

1设计拥有正常的时分秒计时功能的时钟

2能利用实验班上的按键实现校时,校分及秒清零

3扬声器整点报时

4闹铃功能

5在QuartusII中采用层次化设计方法进行设计

设计方案

进行模块化,分别设计

顶层图见附页1

分为六个模块进行设计

设计过程

1首先编写出24和60进制计数器vhdl,用于时分秒的计时

2编写分频器,输入频率1khz,输出1hz,64hz,512hz

3二路选择器的编写,使其能正常进行时分的校准

4编写整点报时模块,使其在正点能进行报时

5进行bcd码转换的编写程序,使数字能在二极管上正确显示

6闹铃设置和判断的编写

7连接顶层图,使其能正常编译、

8、下载验证

总电路图

原理叙述

一计时模块

Cnt60

60进制计数器用于分钟和秒的计时

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt60is

port(clk,clr:

instd_logic;

ql,qh:

outstd_logic_vector(3downto0);

tc:

outstd_logic);

endcnt60;

architectureoneofcnt60is

begin

process(clk,clr)

variableqli,qhi:

std_logic_vector(3downto0);

begin

ifclr='1'then

ifclk'eventandclk='1'then

qli:

=qli+1;

ifqli="1010"andqhi<"0101"then

qhi:

=qhi+1;

qli:

="0000";

tc<='0';

endif;

if(qhi="0101")and(qli="1010")then

tc<='1';

qhi:

="0000";

qli:

="0000";

endif;

endif;

else

qhi:

="0000";

qli:

="0000";

tc<='0';

endif;

ql<=qli;

qh<=qhi;

endprocess;

endone;

Cnt24

24进制计数器用于小时的计时

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt24is

port(clk:

instd_logic;

ql,qh:

outstd_logic_vector(3downto0);

tc:

outstd_logic);

endcnt24;

architectureoneofcnt24is

begin

process(clk)

variableqli,qhi:

std_logic_vector(3downto0);

begin

ifclk'eventandclk='1'then

qli:

=qli+1;

tc<='0';

ifqli="1010"then

qhi:

=qhi+1;

qli:

="0000";

endif;

if(qhi="0010")and(qli="0100")then

tc<='1';

qhi:

="0000";

qli:

="0000";

endif;

endif;

ql<=qli;

qh<=qhi;

endprocess;

endone;

二校时模块

Mux2

二路选择器,进行时分的校准

libraryieee;

useieee.std_logic_1164.all;

entitymux2is

port(a,b,s:

instd_logic;

y:

outstd_logic);

endmux2;

architecturemux_2ofmux2is

begin

process(a,b,s)

begin

ifs='0'theny<=a;

elseY<=b;

endif;

endprocess;

endmux_2;

三整点报时模块

编写vhdl,在正点输出1否则0,实现整点报时

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityzdbsis

port(mh,ml,sh,sl:

instd_logic_vector(3downto0);

sig500,sig1k:

outstd_logic

);

endzdbs;

architecturebehaviorofzdbsis

begin

sig500<='1'whenmh="0101"andml="1001"andsh="0101"and(sl="0010"orsl="0100"orsl="0110"orsl="1000")

else'0';

sig1k<='1'whenmh="0000"andml="0000"andsh="0000"andsl="0000"

else'0';

endbehavior;

 

四Bcd码显示模块

把输出的代码放在二极管上进行正常显示

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdtsmis

port(

clk:

instd_logic;

h:

instd_logic_vector(7downto0);

m:

instd_logic_vector(7downto0);

s:

instd_logic_vector(7downto0);

seg7out:

outstd_logic_vector(6downto0);

sel:

bufferstd_logic_vector(2downto0)

);

ENDdtsm;

ARCHITECTUREbehaofdtsmis

signalkey:

std_logic_vector(3downto0);

BEGIN

PROCESS(clk)

variabledount:

std_logic_vector(2downto0):

="000";

BEGIN

IF(rising_edge(clk))then

IFdount="101"then

dount:

="000";

ELSE

dount:

=dount+1;

ENDIF;

ENDIF;

sel<=dount;

endprocess;

PROCESS(sel)

BEGIN

CASEselIS

when"000"=>key<=h(7downto4);

when"001"=>key<=h(3downto0);

when"010"=>key<=m(7downto4);

when"011"=>key<=m(3downto0);

when"100"=>key<=s(7downto4);

when"101"=>key<=s(3downto0);

whenothers=>null;

ENDCASE;

ENDPROCESS;

PROCESS(key)

BEGIN

casekeyis

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<="1110111";

when"1011"=>seg7out<="1111100";

when"1100"=>seg7out<="0111001";

when"1101"=>seg7out<="1011110";

when"1110"=>seg7out<="1111001";

when"1111"=>seg7out<="1110001";

whenothers=>null;

ENDCASE;

ENDPROCESS;

ENDbeha;

五分频器模块

进行分频使其正常输出512hz,64hz,1hz

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfreq_dividerIS

PORT(clk:

INSTD_LOGIC;

hz_1:

OUTSTD_LOGIC;

hz_4:

OUTSTD_LOGIC;

hz_64:

OUTSTD_LOGIC;

hz_512:

OUTSTD_LOGIC;

hz_2:

OUTSTD_LOGIC);

ENDfreq_divider;

ARCHITECTURErtlOFfreq_dividerIS

SIGNALcount:

STD_LOGIC_VECTOR(9DOWNTO0);

BEGIN

PROCESS(clk)

BEGIN

IF(clk'eventandclk='1')THEN

IF(count="1111111111")THEN

Count<=(OTHERS=>'0');

ELSE

Count<=count+1;

ENDIF;

ENDIF;

ENDPROCESS;

hz_512<=count(0);

hz_64<=count(3);

hz_4<=count(7);

hz_1<=count(9);

hz_2<=count(8);

ENDrtl;

六闹钟模块

闹铃设置

编写代码使其设置时能正常显示和记录

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityalarmsetis

port(sel:

instd_logic;

hclo,mclo,sclo,halr,malr,salr:

instd_logic_vector(7downto0);

h,s,m:

outstd_logic_vector(7downto0));

endalarmset;

architecturebehofalarmsetis

begin

process(sel)

begin

if(sel='0')thenh<=hclo;

m<=mclo;

s<=sclo;

elseh<=halr;

m<=malr;

s<=salr;

endif;

endprocess;

endbeh;

闹铃时间判断

设计程序判断时间是否为闹铃时间,并输出声音的信号

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityalarmcmpis

port(h,m,halr,malr:

instd_logic_vector(7downto0);

stop:

instd_logic;

sig:

outstd_logic);

endalarmcmp;

architecturebehofalarmcmpis

begin

process(h,m,halr,malr,stop)

begin

ifstop='1'then

sig<='0';

endif;

ifh=halrandm=malrandstop='0'then

sig<='1';

elsesig<='0';

endif;

endprocess;

endbeh;

设计结论

设计数字钟可以用vhdl加原理图的方式实现,并且能进行正常功能

经验总结

1vhdl语言是一种重要而且实用的编程语言

2设计中遇到调到59分钟不进位,后来经过改正使其能正常进位。

3其中用了很长时间去研究如何设置一个好听点的音乐闹铃,最后终于成功的从一直响到间断响到现在一个比较悦耳的闹铃的设计,使我明白可以设计出自己想设计的,只要自己肯花时间肯做努力

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2