EDA课程设计_简易万年历.docx

上传人:b****9 文档编号:143038 上传时间:2022-10-04 格式:DOCX 页数:24 大小:1.06MB
下载 相关 举报
EDA课程设计_简易万年历.docx_第1页
第1页 / 共24页
EDA课程设计_简易万年历.docx_第2页
第2页 / 共24页
EDA课程设计_简易万年历.docx_第3页
第3页 / 共24页
EDA课程设计_简易万年历.docx_第4页
第4页 / 共24页
EDA课程设计_简易万年历.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

EDA课程设计_简易万年历.docx

《EDA课程设计_简易万年历.docx》由会员分享,可在线阅读,更多相关《EDA课程设计_简易万年历.docx(24页珍藏版)》请在冰豆网上搜索。

EDA课程设计_简易万年历.docx

.

目录

一、设计任务和要求 1

二、总体框图 1

三、选择器件 2

四、功能模块 3

4.1日模块 3

4.2月模块 5

4.3年模块 7

4.4星期模块 8

4.5扫描模块 9

4.6数码管模块 11

4.7三八译码器 12

4.8分频器模块 14

五.总体电路设计图和硬件实现 14

5.1程序仿真电路 14

5.2硬件实现 18

六.设计中存在的问题 21

七、深入研究 21

八、心得体会 21

.

简易万年历的设计

一、设计任务和要求

1.用七个七段数码管显示年的低两位,月,日和星期,并具有闰年判断功能;

2.可以手动调整年,月,日,星期;

3.在QuartusII6.0中编写VHDL程序实现年,月,日星期各模块的功能;

4.编写顶层程序将各模块连接起来实现万年历调时功能。

二、总体框图

图1总体框图

上图为总体设计框图,主要有计数模块、年月日模块、分频模块和扫描译码显示模块组成。

分频模块在外部时钟信号的作用下实现分频后将其分频信号分别输出给计数模块和扫描模块。

在分频信号(日脉冲)作用下计数模块实现计数功能实现年月日计数功能,但其计数功能是在以BCD码形式所记录的。

这就需要扫描电

路去扫描计数模块所输出的时间在500HZ脉冲下经过译码器将其译成共阴数码管所对应的二进制数进行显示,最终显示的为年月日。

外部时间控制信号可控制时间的校验。

三、选择器件

1、PC机一台。

2、CPLD/FPGA适配器板:

标准配置EPF10K10LC84-4接口板,下载接口是数字芯片的下载接口(DIGITALJTAG),主要用于CPLD/FPGA芯片的数据下载。

3、实验箱:

装有七段数码管及蜂鸣器等,七段数码管真值表及字型如下

表1七段数码管真值表

输入

输出

字型

D

C

B

A

F

a

F

b

F

c

F

d

F

e

F

f

F

g

0

0

0

0

1

1

1

1

1

1

0

0

0

0

1

0

1

1

0

0

0

0

0

0

1

0

1

1

0

1

1

0

1

0

0

1

1

1

1

1

1

0

0

1

0

1

0

0

0

1

1

0

0

1

1

0

1

0

1

1

0

1

1

0

1

1

0

1

1

0

1

0

1

1

1

1

1

0

1

1

1

1

1

1

0

0

0

0

1

0

0

0

1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

0

1

1

七段数码管字形如下:

图2 数码管字型图

四、功能模块

4.1日模块

1.模块图

2.仿真图

图3日模块图

clk:

输入脉冲;

图4日模块仿真图

pan:

输入月的判断信号,0表示大月为31天,1表示小月30天,2表示平月为28天,3表示闰月为29天;

T1:

日的个位;

T2:

日的十位;

cout:

进位信号,当pan=0的时候T2T1=31时产生进位,cout=1,当pan=1的时候T2T1=30时产生进位信号,cout=1,当pan=2的时候T2T1=28时产生进位,cout=1,当pan=3的时候T2T1=29时产生进位,cout=1。

3.程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYTIANIS

PORT(CLK:

INSTD_LOGIC;

pan:

instd_logic_vector(1downto0);

T1,T2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:

OUTSTD_LOGIC);

END;

ARCHITECTUREONEOFTIANIS

SIGNALQ1,Q2:

STD_LOGIC_VECTOR(3DOWNTO0);SIGNALAB:

STD_LOGIC_VECTOR(1DOWNTO0);BEGIN

PROCESS(CLK,pan)BEGIN

IF(CLK'EVENTANDCLK='1')THEN ——检测时钟上升沿

Q1<=Q1+1; ——Q1开始计数

IF(Q1=9)THENQ1<="0000";

Q2<=Q2+1; ——Q1=9时,Q2开

始计数且Q1清零

ENDIF;

--AB<=A&B;

CASEpanISWHEN"00"=>

IF(Q2=3)ANDQ1=1THENQ2<="0000";Q1<="0000";COUT<='1'; ——当pan=00时,

如果Q2=3,Q1=1,Q2清零,Q1从1开始计数并输出进位信号

ELSECOUT<='0';

ENDIF;

WHEN"01"=>

IFQ2=3ANDQ1=0THENQ2<="0000";Q1<="0001";COUT<='1'; ——当pan=01时,

如果Q2=3,Q1=0,Q2清零,Q1从1开始计数并输出进位信号

ELSECOUT<='0';

ENDIF;

WHEN"10"=>

IFQ2=2ANDQ1=8THEN

Q2<="0000";Q1<="0001";COUT<='1'; ——当pan=10时,如果

Q2=2,Q1=9,Q2清零,Q1从1开始计数并输出进位信号

ELSIF Q2=2ANDQ1=9THENQ2<="0000";Q1<="0001";COUT<='1'; ——当pan=11时,

如果Q2=2,Q1=8,Q2清零,Q1从1开始计数并输出进位信号

ELSECOUT<='0';

ENDIF;

WHENOTHERS=>NULL;ENDCASE;

ENDIF;

ENDPROCESS;

T1<=Q1;T2<=Q2;

ENDONE;

4.2月模块

1.模块图

图5月模块图

2.仿真图

clk:

输入脉冲;

图6月模块仿真图

pan:

输出月的判断信号,1、3、5、7、8、10、12为大月输出

pan=00,4、6、9、11为小月输出pan=01,闰年时2月为闰月输出pan=11,否则输出pan=10;

Y1:

月的个位;

Y2:

月的十位;

cout:

进位信号,当Y2Y1等于12时输出cout=1;

run:

输入闰年信号,run=1时表示闰年,run=0时表示不是闰年。

3.程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYyueIS

PORT(CLK,run:

INSTD_LOGIC;COUT:

OUTSTD_LOGIC;

pan:

outstd_logic_vector(1downto0);y1,y2:

outstd_logic_vector(3downto0)

);

END;

ARCHITECTUREONEOFyueIS

SIGNALQ1,Q2:

STD_LOGIC_VECTOR(3DOWNTO0);SIGNALq3:

STD_LOGIC_VECTOR(7DOWNTO0);BEGIN

PROCESS(CLK,run)BEGIN

IF(CLK'EVENTANDCLK='1')THEN ——检测时钟上升沿

Q1<=Q1+1; ——Q1开始计数

IF(Q1=9)THENQ1<="0000";

Q2<=Q2+1; ——Q1=9时,Q2开始计数且Q1清

ENDIF;

ifq1=2andq2=1then

q1<="0001";q2<="0000";cout<='1'; ——q1=2,q2=1时,q2清零,q1从1

开始计数并输出进位信号

else

cout<='0';endif;

endif;

q3<=q2&q1;

CASEq3IS

WHEN"00000001"=>pan<="00"; ——当q3为1月时pan=00可知1月为31天

when"00000010"=>ifrun='1'thenpan<="11";elsepan<="10";endif; ——当q3为2月时若输入信号run=1为闰年,则pan=11即2月是29天,否则2月为28天

when"00000011"=>pan<="00"; ——当q3为3月时pan=00可知3月为31天

when"00000100"=>pan<="01"; ——当q3为4月时pan=01可知4月为30天

when"00000101"=>pan<="00"; ——当q3为5月时pan=00可知5月为31天when"00000110"=>pan<="01"; ——当q3为6月时pan=01可知6月为30天when"00000111"=>pan<="00"; ——当q3为7月时pan=00可知7月为31天when"00001000"=>pan<="00"; ——当q3为8月时pan=00可知8月为31天when"00001001"=>pan<="01"; ——当q3为9月时pan=01可知9月为30天when"00010000"=>pan<="00"; ——当q3为10月时pan=00可知10月为31天when"00010001"=>pan<="01"; ——当q3为11月时pan=01可知11月为30天when"00010010"=>pan<="00"; ——当q3为12月时pan=00可知12月为31天whenothers=>pan<="00";

ENDCASE;ENDPROCESS;y1<=Q1;y2<=Q2;ENDONE;

4.3年模块

1.模块图

2.仿真图

图7年模块图

clk:

输入脉冲;N1:

年的个位;N2:

年的十位;

图8年模块仿真图

run:

闰年信

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1