电子日历的设计文档格式.docx
《电子日历的设计文档格式.docx》由会员分享,可在线阅读,更多相关《电子日历的设计文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
第2章总体设计
2.1设计内容
设计具有如下功能的电子日历:
1)能显示年月日和星期
2)年月日和星期都可调
3)*注意闰年
2.2设计说明
年、月、日和星期的显示格式如图2所示。
年(高位)年(低位)月
日星期
图2-1电子日历显示格式
2.3设计报告要求
1)分析系统的工作原理。
2)画出顶层原理图,写出顶层文件源程序。
3)写出各功能模块的源程序。
4)仿真各功能模块,画出仿真波形。
5)书写实验报告应结构合理,层次分明。
第三章设计原理
3.1设计思想
按照模块化的设计思想,要实现电子日历的基础功能,必定要包含年、月、日和星期的功能模块,其中,日用三十进制计数器来实现,月用十二进制计数器来实现,年的低两位和高两位都是一百进制计数器,同时每个计数器都有显示输出端和进位输出端,同时低级别(如日)的进位输出要给较高级别(如月)的时钟输入端,以此类推,采用串行工作方式进行连接。
从而完成了基础的计时和显示的功能。
再按照由基础功能到增强功能的设计思路,要实现校时功能,要在之前电路的基础之上增加一个校时控制模块,增加两个按键来实现控制,按键1来选择校对哪一个模块,按键2选择校对到何值——检测到按键2的一个上升沿,对应的计数器加1。
3.2设计原理图
电子日历时分秒部分的原理图如下图所示,年月日部分与之同理,通过控制可以进行切换。
译码驱动
年十位
计数
年个位
月十位
月个位
日十位
日个位
校年控制电路
校月控制电路
分频器电路
晶体振荡器电路
图3-1电子日历实验原理图
原理图说明:
K1键是选择电子日历工作的模式,K2键提供上升沿(时钟功能)来使各计数模块加一,从而实现校时的功能。
模式0:
正常计时显示--K1不按
模式1:
调整星期增加--K1按下一次
模式2:
调整日增加--K1按下两次
模式3:
调整月增加--K1按下三次
模式4:
调整年增加--K1按下四次
CLK是外部1Hz输入时钟,作为秒的时钟输入,驱动整个电子日历工作运行。
3.3工作过程
当1Hz时钟信号从CLK输入端输入时,K1没有按下时,系统从零开始处于正常的计时模式,并显示。
低位计满归零并且向高位进1。
如果此时按一下按键1,那么电子日历停止计时,工作于模式1,再通过按键2对分进行校时,通过同样的方法可以对时、日、月、年进行校时。
当校时完毕,需要电子日历重新计时工作时,通过按下键1使系统工作与正常计时模式。
第四章设计结果
4.1VHDL程序与仿真
4.1.1秒与分模块
秒与分模块为六十进制的计数器
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT60IS
PORT(CLK:
INSTD_LOGIC;
Q1,Q2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT60;
ARCHITECTUREONEOFCNT60IS
SIGNALQ11,Q22:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN
Q11<
=Q11+1;
IFQ11=9THENQ11<
=(OTHERS=>
'
0'
);
Q22<
=Q22+1;
ENDIF;
IFQ22=5ANDQ11=9THEN
="
0000"
;
Q11<
COUT<
='
ELSECOUT<
ENDPROCESS;
Q1<
=Q11;
Q2<
=Q22;
END;
仿真结果:
图4-160进制计数器仿真图
如上图所示当Q1、Q2计满60时,Q1、Q2都归零同时有一个进位输出脉冲,完成了六十进制计数器的功能,设计正确。
4.1.2小时模块
时模块为24进制计数器。
ENTITYCNT24IS
Q1,Q2:
ENDCNT24;
ARCHITECTUREONEOFCNT24IS
IFQ22=2ANDQ11=3THEN
图4-224进制计数器仿真图
如上图所示当Q1、Q2计满24时,Q1、Q2都归零同时有一个进位输出脉冲,完成了二十四进制计数器的功能,设计正确。
4.1.3星期模块
星期模块为“7进制”的计数器
ENTITYWEEKIS
W:
ENDWEEK;
ARCHITECTUREONEOFWEEKIS
SIGNALQ11:
IFQ11=7THEN
Q11<
0001"
ENDIF;
W<
图4-37进制计数器仿真图
如上图所示当W计满7时,归1,完成了“七进制”计数器的功能,设计正确。
4.1.4日模块
日模块原本有四种情况,大月为31进制计数器,小月为30进制计数器,平年二月为28进制计数器,闰年二月为29进制计数器。
ENTITYTIANIS
PORT(CLK:
PAN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
T1,T2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
ENDTIAN;
ARCHITECTUREONEOFTIANIS
SIGNALQ1,Q2:
SIGNALAB:
STD_LOGIC_VECTOR(1DOWNTO0);
PROCESS(CLK,PAN)
BEGIN
IFCLK'
--检测时钟上升沿
THENQ1<
=Q2+1;
IFQ1=9THENQ1=“0000”;
--Q1开始计时
Q2<
CASEPANIS
WHEN“00”=>
IFQ2=3ANDQ1=1THENQ2<
=”0000”Q1<
=”0001”;
COUT<
:
ELSECOUT<
=’0’;
--当PAN=“00”时,如果Q2=3,Q1=1,Q2清零,Q1从1开始计时,并输出进位信号
ENDIF;
WHEN“01”=>
IFQ2=3ANDQ1=0THENQ2<
=’1’;
ELSECOUT<
--当PAN=“01”时,如果Q2=3,Q1=0,Q2清零,Q1从1开始计时,并输出进位信号
ENDIF;
WHEN“10”=>
IFQ2=2ANDQ1=8THENQ2<
ELSECOUT<
--当PAN=“11”时,如果Q2=2,Q1=8,Q2清零,Q1从1开始计时,并输出进位信号
WHENOTHERS=>
NULL;
ENDCASE;
T1<
=Q1;
T2<
=Q2;
图4-430进制计数器仿真图
如图所示,仿真结果与设计要求一致,日模块的设计正确
4.1.4月模块
月模块为12进制计数器
ENTITYMONTHIS
port(clk:
cout:
OUTSTD_LOGIC;
cq1,cq2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREbehavOFMONTHIS
signalcq3,cq4:
STD_LOGIC_VECTOR(3DOWNTO0);
PROCESS(clk)
IFclk'
EVENTandclk='
THEN
cq3<
=cq3+1;
IFcq3=9THENcq4<
=cq4+1;
cq3<
IFcq3=2andcq4=1THENcq3<
cq4<
cout<
ELSEcout<
--十二进制计数器
cq1<
=cq3;
cq2<
=cq4;
图4-5月模块仿真图
如图所示月模块为12进制计数器,合设计要求,模块的设计正确。
4.1.5年低两位模块
年的高两位和低两位都为一百进制计数器,功能基本相同
ENTITYYEARIS
Y1,Y2:
ENDYEAR;
ARCHITECTUREONEOFYEARIS
THENQ1<
=Q1+1;
IFQ1=9THENQ1<
Q2<
IFQ2=9ANDQ1=9THEN
Q1<
ENDPROCESS;
Y1<
Y2<
图4-6年低两位模块仿真图
4.1.5年高两位模块
Y3,Y4:
IFQ22=9ANDQ11=9THEN
Y3<
Y4<
图4-7高两位年模块仿真图
如图所示,高两位年模块为100进制计数器符合设计的要求,设计正确。
4.1.6校时模块
如原理图的说明部分所述,校时模块进行工作模式的选择,输入端设有控制按键K1,K2。
K1进行模式的选择,K2的功能如同手动时钟脉冲,进行调时设置。
ENTITYJIAODUIIS
PORT(K1,K2:
WI,DI,MI,YLI,YHI:
WO,DO,MO,YLO,YHO:
ENDJIAODUI;
ARCHITECTUREBEHAVOFJIAODUIIS
SIGNALA:
PROCESS(K1,K2)
IFK1'
EVENTANDK1='
A<
=A+1;
IFA=5THEN
CASEAIS
WHEN"
=>
WO<
=WI;
DO<
=DI;
MO<
=MI;
YLO<
=YLI;
YHO<
=YHI;
--模式0正常计时
=K2;
--选通星期模块,调周
0010"
--选通日模块,调日
0011"
--选通月模块,调月
0100"
--选通年模块,调年
0101"
--选通年模块,调年
ENDCASE;
图4-8K1按下一次与两次,K2校正星期与日
图4-9K1按下三次,K2校正月
图4-10K1按下四次,K2校正年低两位
图4-11K1按下五次,K2校正年高两位
图4-12K1按下六次恢复正常
如图,按键K1,K2能够完成电子日历工作模式的选择与调时校对的功能,满足系统的设计要求,设计正确。
4.1.7显示模式模块
ENTITYCONTROLIS
PORT(WL,WH,DL,DH,ML,MH,YL,YH,Y1L,Y1H:
INSTD_LOGIC_VECTOR(3DOWNTO0);
Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q:
ENDCONTROL;
ARCHITECTUREONEOFCONTROLIS
Q10<
=Y1H;
Q9<
=Y1L;
Q8<
=YH;
Q7<
=YL;
Q6<
=MH;
Q5<
=ML;
Q4<
=DH;
Q3<
=DL;
=WH;
=WL;
4.2顶层设计与仿真
顶层设计采样原理图输入方法,用以上的各模块的VHDL源程序分别生成元器件,在此基础上用“导线”对元器件进行连接,搭建原理图,完成系统的顶层设计,而不是利用元件例化程序去设计。
对于较为复杂的系统而言,采用原理图输入的设计方法思路更加清
图4-13电子日历总体设计图
4.3实验小结
通过这次电子日历程序的设计,完成了硬件系统设计目标。
加深了对EDA技术的理解,熟悉了QuartusII软件环境,熟练地掌握了基于VHDL硬件设计的整个流程,从设计编程到下载验证。
通过对具体模块的编写,如CNT60模块,CNT24模块,DAY模块,MONTH模块,YEAR模块,JIAODUI模块,显示模块等,加强了自己分析问题及编程的能力,掌握编程时该注意的语法规则,理解进行系统设计时的模块化设计思想。
最终实现了一个自己动手完成的电子作品,增强了我们分析问题、解决问题的能力,培养了对电子工程设计的浓厚兴趣。
第五章参考文献
潘松黄继业EDA技术实用教程—VHDL版(第四版)北京:
科学出版社,2010