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

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

.

.

.

.

目录

一、设计任务和要求 1

二、总体框图 1

三、选择器件 2

四、功能模块 3

日模块 3

月模块 5

年模块 7

星期模块 8

扫描模块 9

数码管模块 11

三八译码器 12

分频器模块 14

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

程序仿真电路 14

硬件实现 18

六.设计中存在的问题 21

七、深入研究 21

八、心得体会 21

简易万年历的设计

一、设计任务和要求

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

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

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

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

二、总体框图

图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 数码管字型图

四、功能模块

日模块

模块图

仿真图

图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。

程序

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(CLKEVENTANDCLK=1)THEN ——检测时钟上升沿

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

IF(Q1=9)THENQ1=0000;

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

始计数且Q1清零

ENDIF;

--AB=AB;

CASEpanISWHEN00=

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

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

ELSECOUT=0;

ENDIF;

WHEN01=

IFQ2=3ANDQ1=0THENQ2=0000;Q1=00

文档评论(0)

159****1944 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档