eda整点报时时钟设计.docx
- 文档编号:6283878
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:19
- 大小:325.73KB
eda整点报时时钟设计.docx
《eda整点报时时钟设计.docx》由会员分享,可在线阅读,更多相关《eda整点报时时钟设计.docx(19页珍藏版)》请在冰豆网上搜索。
eda整点报时时钟设计
EDA技术应用课程设计报告
题目名称:
多功能数字钟
专业班级:
姓名:
学号:
小组成员:
指导教师:
设计时间:
15-12-01~15-12-25
一、设计目的
1.使得更加了解EDA的应用
2.熟悉VHDL的编程。
3.对于编程语句的编辑与纠错有较大的提升
4.提升对于设计方面的能力
二、设计要求
1.数字钟具有“时”、“分”、“秒”显示功能,其中时功能为24小时制。
2.数字钟具有校时和校分功能。
3.数字钟具有整点报时功能。
三、设计方案
通过分别作出秒模块、分钟模块、小时模块、整点报时模块,导入动态扫描模块,再由其输出到数码管输出。
四、模块设计
1.秒程序模块
1有3输入3输出
2reset为异步清零当没有信号时清零秒模块的计数
3setmin为校分当有信号时想分模块进一位
4daout_a与daout_b为输出的信号分别为秒的高位与低位
5enmin负责向下一个模块进位
6clk为时钟信号
2.分钟程序模块
23输入3输出
②reset为异步清零当没有信号时清零分模块的计数
3sethour为校分当有信号时向时模块进一位
4daout_ma分daout_mb为输出的信号分别为分的高位与低位
7enhour负责向下一个模块进位
8clk为时钟信号
3.小时程序模块
有2输入2输出
②reset为异步清零当没有信号时清零时模块的计数
③clk为时钟信号
5daout_hadaout_hb为输出的信号分别为时的高位与低位
4.动态扫描模块
1有八个输入端,两个输出端
2reset为异步清零当没有信号时清零时模块的计数
3daout为高位
5.七段译码管模块
1有1输入8输出
2S为用来接收秒分时模块输出的信号
3A~H为转化后的信号用来接数码管
6.整点报时模块
1有5输入2输出
2Clkspk为时钟信号
3Miao_hMiao_lfen_hfen_h为从秒模块时模块接收的信号
4Speak接蜂鸣器,
5Lamp接LED作为报时时的闪烁灯
五、模块程序
1.秒模块设计(60计时制)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityshijianis
port(reset,clk,setmin:
instd_logic;
daout_a:
outstd_logic_vector(7downto4);
————输出高位daout_a
daout_b:
outstd_logic_vector(3downto0);
————输出低位daou_b
enmin:
outstd_logic);
————enmin是向分位进位信号
endshijian;
architecturebehavofshijianis
signalcount:
std_logic_vector(3downto0);
signalcounter:
std_logic_vector(3downto0);
signalcarry_out1:
std_logic;————59秒时的进位信号
signalcarry_out2:
std_logic;
begin
p1:
process(reset,clk)
begin
ifreset='0'then——59秒时的进位信号
count<="0000";
counter<="0000";
——若reset为0时,则高、低位异步清零
elsif(clk'eventandclk='1')then
——否则clk为上升沿时
if(counter<5)then
if(count=9)then
count<="0000"
counter<=counter+1;
else
count<=count+1;
endif;
carry_out1<='0';
——若高位counter<5,低位count=9,则低位清零,高位进一,否则低位进一,59秒时的进位信号carry_out1为0。
else
if(count=9)then
count<="0000";
counter<="0000";
carry_out1<='1';
——若高位counter为5时,低位count=9,则高、低位清零,59秒时的进位信号carry_out1进位为1。
else
count<=count+1;
carry_out1<='0';
——低位count加1,59秒时的进位信号carry_out1为0
endif;
endif;
endif;
endprocess;
daout_a(7downto4)<=counter;——高位赋予daout_a
daout_b(3downto0)<=count;——低位赋予daout_b
enmin<=carry_out1orsetmin;——程序59秒的进位信号或手动给enmin进位
endbehav;
2.分钟模块设计(60制计时)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenis
port(reset,clk,sethour:
instd_logic;
daout_ma:
outstd_logic_vector(7downto4);
——输出高位信号daout_ma
daout_mb:
outstd_logic_vector(3downto0);
——输出低位信号daout_mb
enhour:
outstd_logic);
——enhour向时位进位信号
endfen;
architecturebehavoffenis
signalcount:
std_logic_vector(3downto0);
signalcounter:
std_logic_vector(3downto0);
signalcarry_out1:
std_logic
——59分的进位信号carry_out1
signalcarry_out2:
std_logic;
begin
p1:
process(reset,clk)
begin
ifreset='0'then
count<="0000";
counter<="0000";
——若reset为0时,则高、低位异步清零
elsif(clk'eventandclk='1')then
——否则clk为上升沿时
if(counter<5)then
if(count=9)then
count<="0000";
counter<=counter+1;
else
count<=count+1;
endif;
carry_out1<='0';
——若高位counter<5,低位count=9,则低位清零,高位进1,否则低位进1,59分时的进位信号carry_out1为0
else
if(count=9)then
count<="0000";
counter<="0000";
carry_out1<='1';
——若高位counter为5时,低位count=9,则高、低位清零,59分时的进位信号carry_out1进位为1。
else
count<=count+1;
carry_out1<='0';
——低位count加1,59分时的进位信号carry_out1为0。
endif;
endif;
endif;
endprocess;
p2:
process(reset,clk)
begin
if(clk'eventandclk='0')then——若clk为下降沿时
if(counter=0)then
if(count=0)then
carry_out2<='0';
——若高位counter为零,低位为零,则59分时的进位信号carry_out2为0
endif;
else
carry_out2<='1';——否则进位为1
endif;
endif;
endprocess;
daout_ma(7downto4)<=counter;
——高位赋予daout_ma
daout_mb(3downto0)<=count;
——低位赋予daout_mb
enhour<=(carry_out1andcarry_out2)orsethour;
——程序两个59分的进位信号或手动给enmin进位
endbehav;
3.小时模块设计(24小时制)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityxiaoshiis
port(reset,clk:
instd_logic;
daout_ha:
outstd_logic_vector(7downto4);
——输出高位daout_ha
daout_hb:
outstd_logic_vector(3downto0));
——输出地位daout_hb
endxiaoshi;
architecturebehavofxiaoshiis
signalcount:
std_logic_vector(3downto0);
signalcounter:
std_logic_vector(3downto0);
begin
p1:
process(reset,clk)
begin
ifreset='0'then
count<="0000";
counter<="0000";
——若reset为0时,则高、低位异步清零
if(counter<2)then
elsif(clk'eventandclk='1')then
——否则clk上升沿来到时
if(counter<2)then
if(count=9)then
count<="0000";
counter<=counter+1;
else
count<=count+1;
——若高位counter<2,低位count=9,则低位清零,高位进1,否则低位进1。
endif;
else
if(count=3)then
count<="0000";
counter<="0000";
else
count<=count+1;
——若高位counter=2,低位count=3,则高、低位清零,否则低位进一。
endif;
endif;
endif;
endprocess;
daout_ha(7downto4)<=counter;
——高位赋予daout_ha
daout_hb(3downto0)<=count;
——地位赋予daout_hb
endbehav;
4.动态扫描模块设计
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityseltimeis
port(
ckdsp:
instd_logic;
reset:
instd_logic;
shijian_s:
instd_logic_vector(7downto4);
——秒模块高位模块输入
shijian_g:
instd_logic_vector(3downto0);
——秒模块低位模块输入
fen_s:
instd_logic_vector(7downto4);
fen_g:
instd_logic_vector(3downto0);
xiaoshi_s:
instd_logic_vector(7downto4);
xiaoshi_g:
instd_logic_vector(3downto0);
daout:
outstd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0));
endseltime;
architecturebehavofseltimeis
signalsec:
std_logic_vector(2downto0);
begin
process(reset,ckdsp)
begin
if(reset='0')then
sec<="000";
elsif(ckdsp'eventandckdsp='1')then
if(sec="101")then
sec<="000";
else
sec<=sec+1;
endif;
endif;
endprocess;
process(sec,shijian_g,shijian_s,fen_g,fen_s,xiaoshi_g,xiaoshi_s)
begin
casesecis
when"000"=>daout<=shijian_g(3downto0);
when"001"=>daout<=shijian_s(7downto4);
when"010"=>daout<=fen_g(3downto0);
when"011"=>daout<=fen_s(7downto4);
when"100"=>daout<=xiaoshi_g(3downto0);
when"101"=>daout<=xiaoshi_s(7downto4);
whenothers=>daout<="XXXX";
endcase;
endprocess;
sel<=sec;
endbehav;
5.整点报时模式
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityalertis
port(
clkspk:
instd_logic;——时钟信号
shijian_s:
instd_logic_vector(7downto4);
shijian_g:
instd_logic_vector(3downto0);
fen_s:
instd_logic_vector(7downto4);
fen_g:
instd_logic_vector(3downto0);
speak:
outstd_logic;——输出speak
lamp:
outstd_logic_vector(8downto0));
——输出lamp
endalert;
architecturebehavofalertis
signaldivclkspk2:
std_logic;
begin
p1:
process(clkspk)
begin
if(clkspk'eventandclkspk='1')then
——当clkspk为上升沿时
divclkspk2<=notdivclkspk2;
——divclkspk2的非赋予divclkspk2
endif;
endprocess;
p2:
process(shijian_s,shijian_g,fen_s,fen_g)
begin
if(fen_g="1001"andfen_s="0101"andshijian_s="0101")then
——若时间是59分50秒时
caseshijian_gis
——隔一秒响一次
when"0001"=>lamp<="000000001";speak<=divclkspk2;
when"0010"=>lamp<="000000010";speak<='0';
when"0011"=>lamp<="000000100";speak<=divclkspk2;
when"0100"=>lamp<="000001000";speak<='0';
when"0101"=>lamp<="000010000";speak<=divclkspk2;
when"0110"=>lamp<="000100000";speak<='0';
when"0111"=>lamp<="001000000";speak<=divclkspk2;
when"1000"=>lamp<="010000000";speak<='0';
when"1001"=>lamp<="100000000";speak<=clkspk;
——当59秒信号给lamp,时钟信号给speak,准备整点报时
whenothers=>lamp<="000000000";——当秒为其他值时无效
endcase;
endif;
endprocess;
endbehav;
6.7段译码显示模块设计
libraryieee;
useieee.std_logic_1164.all;
entitydeledis
port(
s:
instd_logic_vector(3downto0);
a,b,c,d,e,f,g,h:
outstd_logic);
enddeled;
architecturebehavofdeledis
signaldata:
std_logic_vector(3downto0);
signaldout:
std_logic_vector(7downto0);
begin
data<=s;——s赋值给data
process(data)
begin
casedatais
when"0000"=>dout<="00111111";
——当data是‘0000’时将‘00111111’赋给dout
when"0001"=>dout<="00000110";
when"0010"=>dout<="01011011";
when"0011"=>dout<="01001111";
when"0100"=>dout<="01100110";
when"0101"=>dout<="01101101";
when"0110"=>dout<="01111101";
when"0111"=>dout<="00000111";
when"1000"=>dout<="01111111";
when"1001"=>dout<="01101111";
when"1010"=>dout<="01110111";
when"1011"=>dout<="01111100";
when"1100"=>dout<="00111001";
when"1101"=>dout<="01011110";
when"1110"=>dout<="01111001";
when"1111"=>dout<="01110001";
whenothers=>dout<="00000000";
——当data为其他值时,将‘00000000’赋给dout
endcase;
endprocess;
h<=dout(7);
g<=dout(6);
f<=dout(5);
e<=dout(4);
d<=dout(3);
c<=dout
(2);
b<=dout
(1);
a<=dout(0);
endbehav;
六、仿真波形
1.秒模块仿真波形
当信号reset输入时,各输出端口信号正常。
并且当reset为0时,清零正常。
2.分模块仿真波形
当信号reset输入时,各输出端口信号正常。
并且当reset为0时,清零正常。
3.时模块波形
当信号reset输入时,各输出端口信号正常。
4.动态扫描模块
当信号reset输入时,各输出端口信号正常。
5.整点报时波形
当信号clkdspk输入时,各输出端口信号正常。
6.七段译码管显示波形
当S输入0-9是译码器分别输出不同的值与程序相同
7.数字钟
,7段译码管显示的波形,可看出秒分时都正常
校分校时为’1’时分时有进位所以正常当reset为高电平是分秒时为0则异步清零也正常
七、设计小结
本次实训最主要的收获是:
使我们对 EDA 设计有一定的感性和理性认识;培养和锻炼我们的实际动手能力。
使我们的理论知识与实践充分地结合, 作到不仅具有专业知识,而且还具有较强的实践动手能力,能分析问题和解决问 题的高素质人才,为以后的顺利就业作好准备。
本次实习的对我们很重要,是我们应用电子专业的学生实践中的重要环节。
在以 前我们学的都是一些理论知识。
这一次的实训正如老师所讲,没有多少东西要我 们去想,更多的是要我们去做,好多东西看起来十分简单,看着电路图都懂,但 没有亲自去操作,就不会懂得理论与实践是有很大区别的。
看一个东西简单,但 在实际操作中就是有许多要注意的地方,有些东西也与你的想象不一样,我们这 次的实验就是要我们跨过这道实际和理论之间的鸿沟。
不过,我坚信自己的是有 一定能力的。
以前我们光只注意一些理论知识,并没有专门的练习我们的实际动 手能力。
这次的实习使我意识到我的操作能力的不足, 在理论上也有很多的缺陷。
所以,在以后的学习生活中,我需要更努力地读书和实践。
八、参考文献
1.《EDA技术项目化教程》——————主编胥勋涛
2.《EDA技术与应用(第2版)》————主编江国强
3.《EDA技术与VHDL》————主编潘松
附录:
截图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- eda 整点 报时 时钟 设计