基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx

上传人:b****6 文档编号:17901758 上传时间:2022-12-12 格式:DOCX 页数:21 大小:119.51KB
下载 相关 举报
基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx_第1页
第1页 / 共21页
基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx_第2页
第2页 / 共21页
基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx_第3页
第3页 / 共21页
基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx_第4页
第4页 / 共21页
基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx

《基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。

基于CPLD的VHDL语言数字钟含秒表设计Word文档下载推荐.docx

数码管显示位选信号SEL0/1/2等三个信号。

2.内部功能模块主要有:

Fenp分频模块:

主要是整点报时用的1kH与500Hz的脉冲信号,这里的输入信号是1KHz信号,所以只要一个二分频即可;

时间基准采用1Hz输入信号直接提供(当然也可以分频取得,这里先用的是分频取得的信号,后考虑到精度问题而采用硬件频率信号。

实现带有100进制进位和清零功能,暂定等功能的微秒模块MINSECONDB输入为1Hz脉冲和低电平的清零信号CLR与暂定信号STOP,输出微秒个位、十位及进位信号CO(虽然没有实现进位功能,但还是编写了这个端口,只是在连线时悬空)。

实现60进制带有进位和清零功能的秒计数模块SECOND,输入为1Hz脉冲和低电平有效的清零信号CLR,输出秒个位、时位及进位信号CO。

实现60进制带有进位和置数功能的分计数模块MINUTE,输入为1Hz脉冲和高电平有效的使能信号EN,输出分个位、时位及进位信号CO。

实现24进制的时计数模块HOUR,输入为1Hz脉冲和高电平有效的使能信号EN,输出分个位、时位。

实现分时复用功能模块SELTIME,输入为秒(含个/十位)、分、时、扫描时钟CLK1K,输出为D和显示控制信号SEL。

实现整点报时功能模块ALERT,输入为分/秒信号,输出为高频声控Q1K和Q500。

实现译码显示功能模块DISPLAY,输入为D,输出为Q

三、设计框图

四、模块说明(含程序代码)

1.分频模块

采用原理图输入方式实现2分频与1000分频,但这里并没有用到1000分频,因为后来考虑到精度问题,将千分频用直接输入了。

程序如图:

利用三个7490进行硬

件分频

2.微秒模块

采用VHDL语言输入方式,以时钟clk,清零信号clr以及暂停信号STOP为进程敏感变量,程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityMINSECONDbis

port(clk,clrm,stop:

instd_logic;

----时钟/清零信号

secm1,secm0:

outstd_logic_vector(3downto0);

----秒高位/低位

co:

outstd_logic);

-------输出/进位信号

endMINSECONDb;

architectureSECofMINSECONDbis

signalclk1,DOUT2:

std_logic;

begin

process(clk,clrm)

variablecnt1,cnt0:

std_logic_vector(3downto0);

---计数

VARIABLECOUNT2:

INTEGERRANGE0TO10;

IFCLK'

EVENTANDCLK='

1'

THEN

IFCOUNT2>

=0ANDCOUNT2<

10THEN

COUNT2:

=COUNT2+1;

ELSECOUNT2:

=0;

DOUT2<

=NOTDOUT2;

ENDIF;

ifclrm='

then----当clr为1时,高低位均为0

cnt1:

="

0000"

;

cnt0:

elsifclk'

eventandclk='

then

ifstop='

cnt0:

=cnt0;

cnt1:

=cnt1;

endif;

ifcnt1="

1001"

andcnt0="

1000"

then----当记数为98(实际是经过59个记时脉冲)

co<

='

----进位

----低位为9

elsifcnt0<

"

then----小于9时

=cnt0+1;

----计数

--elsifcnt0="

--clk1<

=notclk1;

else

ifcnt1<

then----高位小于9时

=cnt1+1;

0'

endif;

secm1<

secm0<

endprocess;

endSEC;

3.秒模块程序清单

entitySECONDis

port(clk,clr:

sec1,sec0:

endSECOND;

architectureSECofSECONDis

process(clk,clr)

ifclr='

then----当ckr为1时,高低位均为0

0101"

then----当记数为58(实际是经过59个记时脉冲)

then----高位小于5时

sec1<

sec0<

4.分模块程序清单

libraryieee;

entityMINUTEis

port(clk,en:

min1,min0:

endMINUTE;

architectureMINofMINUTEis

process(clk)

ifclk'

ifen='

min1<

min0<

endMIN;

5.时模块程序清单

entityHOURis

----输入时钟/高电平有效的使能信号

h1,h0:

outstd_logic_vector(3downto0));

----时高位/低位

endHOUR;

architecturehour_arcofHOURis

----记数

then---上升沿触发

then---同时“使能”为1

0010"

0011"

----高位/低位同时为0时

then----低位小于9时,低位记数累加

-----高位记数累加

h1<

h0<

endhour_arc;

6.动态扫描模块

useieee.std_logic_arith.all;

entitySELTIMEis

port(

clk:

------扫描时钟

secm1,secm0,sec1,sec0,min1,min0,h1,h0:

instd_logic_vector(3downto0);

-----分别为秒个位/时位;

分个位/

daout:

----------------输出

sel:

outstd_logic_vector(2downto0));

-----位选信号

endSELTIME;

architecturefunofSELTIMEis

signalcount:

std_logic_vector(2downto0);

----计数信号

sel<

=count;

process(clk)

begin

if(clk'

)then

if(count>

111"

count<

000"

else

=count+1;

casecountis

when"

=>

daout<

=secm0;

----秒个位

110"

=secm1;

----秒十位

101"

=sec0;

----分个位

100"

=sec1;

----分十位

011"

=min0;

----时个位

010"

=min1;

----时十位

001"

=h0;

whenothers=>

=h1;

endcase;

endprocess;

endfun;

7.报时模块

entityALERTis

port(m1,m0,s1,s0:

------输入秒、分高/低位信号

------高频声控制

q500,qlk:

----低频声控制

endALERT;

architecturesss_arcofALERTis

ifclk'

ifm1="

andm0="

ands1="

then----当秒高位为5,低位为9时且分高位为5

ifs0="

0001"

ors0="

0111"

then---当分的低位为1或3或5或7时

q500<

----低频输出为1

----否则输出为0

ifm1="

ands0="

then---当秒高位为5,低位为9时且分高位为5,----分低位为9时,也就是“59分59秒”的时候“报时”

qlk<

-----高频输出为1

endsss_arc;

显示模块

entityDISPLAYis

port(d:

----连接seltime扫描部分d信号

q:

outstd_logic_vector(6downto0));

----输出段选信号(电平)

endDISPLAY;

architecturedisp_areofDISPLAYis

process(d)

casedis

=>

q<

0111111"

--显示0

0000110"

--显示1

1011011"

--显示2

1001111"

--显示3

0100"

1100110"

--显示4

1101101"

--显示5

0110"

1111101"

--显示6

0100111"

--显示7

1111111"

--显示8

1101111"

--显示9

endcase;

enddisp_are;

8.顶层文件(原理图输入)

********************************************************************

数字钟设计模块与程序(不含秒表)

*********************************************************************

1.分频模块(原理图输入)

2.秒模块程序

3.分模块程序

4.时模块程序

5.扫描模块程序

sec1,sec0,min1,min0,h1,h0:

=min0;

=min1;

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

当前位置:首页 > PPT模板 > 其它模板

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

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