数显电子钟系统设计.docx

上传人:b****8 文档编号:9395941 上传时间:2023-05-18 格式:DOCX 页数:16 大小:839.86KB
下载 相关 举报
数显电子钟系统设计.docx_第1页
第1页 / 共16页
数显电子钟系统设计.docx_第2页
第2页 / 共16页
数显电子钟系统设计.docx_第3页
第3页 / 共16页
数显电子钟系统设计.docx_第4页
第4页 / 共16页
数显电子钟系统设计.docx_第5页
第5页 / 共16页
数显电子钟系统设计.docx_第6页
第6页 / 共16页
数显电子钟系统设计.docx_第7页
第7页 / 共16页
数显电子钟系统设计.docx_第8页
第8页 / 共16页
数显电子钟系统设计.docx_第9页
第9页 / 共16页
数显电子钟系统设计.docx_第10页
第10页 / 共16页
数显电子钟系统设计.docx_第11页
第11页 / 共16页
数显电子钟系统设计.docx_第12页
第12页 / 共16页
数显电子钟系统设计.docx_第13页
第13页 / 共16页
数显电子钟系统设计.docx_第14页
第14页 / 共16页
数显电子钟系统设计.docx_第15页
第15页 / 共16页
数显电子钟系统设计.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数显电子钟系统设计.docx

《数显电子钟系统设计.docx》由会员分享,可在线阅读,更多相关《数显电子钟系统设计.docx(16页珍藏版)》请在冰点文库上搜索。

数显电子钟系统设计.docx

数显电子钟系统设计

数显电子钟系统设计

实验名称:

数显电子钟系统设计

实验目的:

1.学习系统设计方法

2.设计一个电子钟系统

实验步骤:

电子钟框图→按Top_Down方法作功能分割→画出各层的功能模块图(注明port)、画出模块连接关系,并分配I/O管脚→VHDL编码、仿真、综合。

实验要求:

1.能够对S(秒)、MIN(分)、Hr(小时)进行计时,按24小时计时制。

2.要求采用Top_Down的设计方法

系统功能和个模块功能详细描述:

电子钟主要有四个组成部分:

时基分频器,计时器,显示电路,控制电路,实验通过4MHz时钟,分频产生S(秒)时钟,对S(秒)信号计数,并通过LED数码管进行扫描显示。

a)时基分频器:

对基本时钟(4MHZ)进行分频得到S(秒)时钟(1HZ)和扫描时钟(250HZ)。

b)计时器:

主要包括S计时器(60进制)、MIN计时器(60进制)、Hr计时器(24进制)

c)显示电路:

用6位扫描数码显示(七段数码管),扫描始终用250Hz。

d)控制电路:

对电子表进行启停和复位,清零的控制。

每个模块的具体实现过程:

1.时基分频模块:

设计思想:

利用N位二进制计数器进行分频,第0位是二分频,第一位是四分频,以次类推。

故要将4MHZ时钟产生1HZ时钟须22位二进制计数器(21downto0)对其进行分频。

最后将13位和21位输出即是250HZ和1HZ时钟。

关键代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYclk_divIS

PORT(clk:

INSTD_LOGIC;

RESET:

inSTD_LOGIC;

clk_250HZ:

OUTSTD_LOGIC;

clk_1HZ:

OUTSTD_LOGIC);

ENDclk_div;

ARCHITECTURErtlOFclk_divIS

SIGNALcount:

STD_LOGIC_VECTOR(21DOWNTO0);

BEGIN

PROCESS(clk,reset)

BEGIN

ifRESET='1'then

count<=(others=>'0');

elsif(clk'eventANDclk='1')THEN

Count<=count+1;

ENDIF;

ENDPROCESS;

clk_250HZ<=count(13);

--clk_250HZ<=count

(1);

clk_1HZ<=count(21);

--clk_1HZ<=count

(2);

ENDrtl;

仿真波形:

心得体会:

对4MHZ进行分频产生1HZ时钟,是对原始时钟的4000000分频,如何对其仿真,速度如何,最后结果能否清楚的显示出来确是一个极大的问题。

最后采用如下方式进行仿真:

--clk_250HZ<=count(13);

clk_250HZ<=count

(1);

--clk_1HZ<=count(21);

clk_1HZ<=count

(2);

将原先分频语句屏蔽,利用count

(1),count

(2)实现四分频和八分频,查看仿真波形(如上图),然后还可以适当增大分频数,看仿真波形是否符合设计要求。

2.计时器模块:

设计思想:

利用60进制计数器产生秒计数器、分计数器、利用24进制计数器产生小时计数器,再利用BDE方式产生计时器。

关键代码:

(以下是24进制计数器代码,60进制雷同)

libraryIEEE;

useIEEE.STD_LOGIC_1164.all;

useIEEE.STD_LOGIC_UNSIGNED.all;

entity\60_COUNT\is

port(

CLK:

inSTD_LOGIC;

RESET:

inSTD_LOGIC;

ENABLE:

inSTD_LOGIC;

FULL:

outSTD_LOGIC;

bcd1_out:

outSTD_LOGIC_VECTOR(3downto0);

bcd10_out:

outSTD_LOGIC_VECTOR(3downto0)

);

end\60_COUNT\;

architectureRTLof\60_COUNT\is

signalbcd1,bcd10:

STD_LOGIC_VECTOR(3downto0);

begin

process(CLK,RESET)

begin

if(RESET='1')then

bcd1<=(others=>'0');

bcd10<=(others=>'0');

elsif(CLK='1'andCLK'event)then

if(ENABLE='1')then

if(bcd1=4)then

if(bcd10=2)then

bcd1<=(others=>'0');

bcd10<=(others=>'0');

FULL<='1';

elsebcd1<=bcd1+1;

endif;

elsif(bcd1=9)then

bcd1<=(others=>'0');

bcd10<=bcd10+1;

elsebcd1<=bcd1+1;

endif;

endif;

endif;

endprocess;

bcd1_out<=bcd1;

bcd10_out<=bcd10;

endRTL;

仿真波形:

 

BDE方式的电路图:

最终的仿真波形:

心得体会:

如上图所示,bcd1,bcd2为小时计数信号,bcd3,bcd4为分计数信号,bcd5,bcd6为秒计数信号,当计满24小时后产生一个FULL脉冲信号。

利用BDE方式进行VHDL代码的设计确实比输入代码要简便得许多,方便,快捷,效率又高!

3.显示模块:

设计思想:

同时点亮七段显示器的七节LED,将需电流:

10mA×7=70mA,若同时点亮6个七段显示器,则总电流高达:

70mA×6=420mA≈0.5A,如此大电流,不但CPLD&FPGA无法负荷;而且这个功率也过大,散热很成问题。

所以采用扫描电路,每次只显示一个七段显示器,6个段码显示器循环轮流显示。

当帧显示频率>24Hz时,显示将不会闪烁。

比如扫描频率取245Hz,则帧显示频率245/6=40.8Hz>24Hz。

扫描原理如图所示:

利用段选和位选,每次扫描一位。

具体实现:

对6进制计数器输出进行位译码,产生位选信号;对6进制计数器输出进行位选者,再经过7段译码产生段选信号。

(这只是一种实现方法,其实还有更简单的方法,在最后对其说明)。

关键代码:

译码电路代码:

libraryIEEE;

useIEEE.std_logic_1164.all;

entitydecis

port(

data_in:

instd_logic_vector(2downto0);

data_out:

outstd_logic_vector(5downto0)

);

enddec;

architecturertlofdecis

begin

process(data_in)

begin

data_out<=(others=>'0');

casedata_inis

when"000"=>data_out<="000001";

when"001"=>data_out<="000010";

when"010"=>data_out<="000100";

when"011"=>data_out<="001000";

when"100"=>data_out<="010000";

when"101"=>data_out<="100000";

whenothers=>NULL;

endcase;

endprocess;

endrtl;

位选者器代码:

libraryieee;

useieee.std_logic_1164.all;

entityselisport(

a,b,c,d,e,f:

instd_logic_vector(3downto0);

s:

instd_logic_vector(2downto0);

x:

outstd_logic_vector(3downto0));

endsel;

architecturearchmuxofselis

begin

process(a,b,c,d,e,f,s)

begin

ifs="000"then

x<=f;

elsifs="001"then

x<=e;

elsifs="010"then

x<=d;

elsifs="011"then

x<=c;

elsifs="100"then

x<=b;

else

x<=a;

endif;

endprocess;

endarchmux;

7段译码相关代码:

libraryIEEE;

useIEEE.STD_LOGIC_1164.all;

entityledis

port(

hex:

inSTD_LOGIC_VECTOR(3downto0);

led:

outSTD_LOGIC_VECTOR(6downto0));

endled;

architecturertlofledis

begin

withHEXselect

LED<="1111001"when"0001",--1

"0100100"when"0010",--2

"0110000"when"0011",--3

"0011001"when"0100",--4

"0010010"when"0101",--5

"0000010"when"0110",--6

"1111000"when"0111",--7

"0000000"when"1000",--8

"0010000"when"1001",--9

"0001000"when"1010",--A

"0000011"when"1011",--b

"1000110"when"1100",--C

"0100001"when"1101",--d

"0000110"when"1110",--E

"0001110"when"1111",--F

"1000000"whenothers;--0

endrtl;

其中7段译码电路仿真波形为:

同样采用BDE方式实现显示电路:

最后的显示电路的仿真波形为:

心得体会:

1.对于较为复杂的电路,采用编制宏仿真要比手动加激励方便得多。

2.本实验中我并未对位选和译码电路进行仿真,但其结果肯定是正确的。

因为我对7段译码电路进行了仿真,如上所示,它和最后总的显示电路仿真结果相吻合。

(我在编制宏时将7段译码电路和总的显示电路的输入信号赋成相同值,所以看波形时一目了然)。

3.运用BDE方式,方便,且不容易出错。

4.控制模块

设计思想:

利用FSM方式实现控制电路:

CLK时钟信号,reset复位信号和启/停信号start。

FSM设计后结果如下:

其仿真波形如图:

最后数显电子钟系统的BDE设计结果为:

经过FPGAExpress综合过的电路图:

优化结果:

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

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2