基于VHDL语言的数字秒表的实现.docx

上传人:b****6 文档编号:4760349 上传时间:2022-12-08 格式:DOCX 页数:10 大小:117.13KB
下载 相关 举报
基于VHDL语言的数字秒表的实现.docx_第1页
第1页 / 共10页
基于VHDL语言的数字秒表的实现.docx_第2页
第2页 / 共10页
基于VHDL语言的数字秒表的实现.docx_第3页
第3页 / 共10页
基于VHDL语言的数字秒表的实现.docx_第4页
第4页 / 共10页
基于VHDL语言的数字秒表的实现.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于VHDL语言的数字秒表的实现.docx

《基于VHDL语言的数字秒表的实现.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的数字秒表的实现.docx(10页珍藏版)》请在冰豆网上搜索。

基于VHDL语言的数字秒表的实现.docx

基于VHDL语言的数字秒表的实现

 

 

姓名学号:

 

基于VHDL语言的数字秒表的实现

[摘要]:

随着基于EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用等领域的重要性日益突出。

本文详细介绍EDA课程设计任务——数字秒表的设计的详细设计过程及结果,并总结出心得体会。

 [关键字]:

EDA技术;VHDL语言;数字秒表

  EDA技术作为现代电子设计技术的核心,它依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、逻辑简化、逻辑分割、逻辑综合,以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。

笔者详细介绍在QUARTUSII软件环境下开发基于VHDL语言数字秒表的设计。

1设计方案

1.1􀀂系统功能要求

(1)具有时钟秒表系统功能要求显示功能,用6个数码管分别显示时、分、秒;计时范围为:

00:

00:

00~23:

59:

59。

(2)计时精度是1s;

(3)具有启/停开关,复位开关,可以在任何情况下使用。

1.2􀀂总体框图

根据系统设计要求,系统的底层设计主要由六十进制计数器模块、二十四进制计数器模块、分频模块、LED显示模块组成。

系统顶层设计图如图所示:

图中左边为三个输入信号en,clk,reset;分为启/停开关,时钟信号和复位开关。

中间是从上倒下时count24,count60,count60,fenpinqi;

右边是clock1和输出信号wei[3..0],led[6.0]。

2􀀂模块功能设计

由六十进制计数器模块、二十四进制计数器模块、分频模块执行计时功能,输入信号是256Hz,通过分频后为1hz,时钟信号是1Hz作为秒表的秒输入,秒为60进制计数器,分也为60进制计数器,小时采用二十四进制计数器,各级进位作为高位的使能控制。

2.1六十进制计数器模块

该模块部分VHDL源程序如下:

LIBRARYieee;

USEieee.std_logic_1164.ALL;

USEieee.std_logic_unsigned.ALL;

ENTITYcount60IS

PORT(en,Reset,clk:

inSTD_LOGIC;

qa:

outSTD_LOGIC_VECTOR(3DOWNTO0);

qb:

outSTD_LOGIC_VECTOR(3DOWNTO0);

rco:

OUTSTD_LOGIC);

ENDcount60;

ARCHITECTUREaOFcount60IS

BEGIN

process(clk)

variabletma:

STD_LOGIC_VECTOR(3DOWNTO0);

variabletmb:

STD_LOGIC_VECTOR(3DOWNTO0);

begin

IfReset='0'thentma:

="0000";tmb:

="0000";

elsifclk'eventandclk='1'then

ifen='1'then

rco<=tmb

(2)andtmb(0)andtma(3)andtma(0);

iftma="1001"thentma:

="0000";

iftmb="0101"thentmb:

="0000";

elsetmb:

=tmb+1;

endif;

elsetma:

=tma+1;

endif;

endif;

endif;

qa<=tma;qb<=tmb;

endprocess;

ENDa;

2.2二十四进制计数器模块

该模块部分VHDL源程序如下:

LIBRARYieee;

USEieee.std_logic_1164.ALL;

USEieee.std_logic_unsigned.ALL;

ENTITYcount24IS

PORT(en,Reset,clk:

inSTD_LOGIC;

qa:

outSTD_LOGIC_VECTOR(3DOWNTO0);

qb:

outSTD_LOGIC_VECTOR(3DOWNTO0));

ENDcount24;

ARCHITECTUREa1OFcount24IS

BEGIN

process(clk)

variabletma:

STD_LOGIC_VECTOR(3DOWNTO0);

variabletmb:

STD_LOGIC_VECTOR(3DOWNTO0);

begin

IfReset='0'thentma:

="0000";tmb:

="0000";else

ifclk'eventandclk='1'then

ifen='1'then

iftma="1001"thentma:

="0000";tmb:

=tmb+1;

elsiftmb="0010"andtma="0011"then

tma:

="0000";tmb:

="0000";

elsetma:

=tma+1;

endif;

endif;

endif;endif;

qa<=tma;qb<=tmb;

endprocess;

ENDa1;

2.3分频器模块

该模块部分VHDL源程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfenpinqiIS

PORT(CLK,RST:

instd_logic;

CLK_OUT:

outstd_logic);

ENDfenpinqi;

ARCHITECTUREbehavOFfenpinqiIS

signalclk_data:

std_logic;

SIGNALCNT6:

INTEGER:

=0;

BEGIN

PROCESS(CLK)

BEGIN

IFRST='0'THENCNT6<=0;

ELSIFCLK'EVENTANDCLK='1'THEN

IFCNT6=2THENclk_data<=NOTclk_data;CNT6<=0;

ELSECNT6<=CNT6+1;

ENDIF;

ENDIF;

CLK_OUT<=clk_data;

ENDPROCESS;

ENDbehav;

2.4LED显示模块

该模块部分VHDL源程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYclock1IS

PORT(CLK:

INSTD_LOGIC;

S1,S2,S3,S4,S5,S6:

INSTD_LOGIC_VECTOR(3DOWNTO0);

WEI:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

LED:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITY;

ARCHITECTUREbehaveOFclock1IS

SIGNALCNT6:

INTEGERRANGE0TO5:

=0;

SIGNALSHUJU:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PRO1:

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

CNT6<=CNT6+1;

CASECNT6IS

WHEN0=>WEI<="000";SHUJU<=S1;

WHEN1=>WEI<="001";SHUJU<=S2;

WHEN2=>WEI<="010";SHUJU<=S3;

WHEN3=>WEI<="011";SHUJU<=S4;

WHEN4=>WEI<="100";SHUJU<=S5;

WHEN5=>WEI<="101";SHUJU<=S6;CNT6<=0;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

ENDPROCESS;

PRO2:

PROCESS(SHUJU)

BEGIN

CASESHUJUIS

WHEN"0000"=>LED<="1111110";

WHEN"0001"=>LED<="0110000";

WHEN"0010"=>LED<="1101101";

WHEN"0011"=>LED<="1111001";

WHEN"0100"=>LED<="0110011";

WHEN"0101"=>LED<="1011011";

WHEN"0110"=>LED<="1011111";

WHEN"0111"=>LED<="1110000";

WHEN"1000"=>LED<="1111111";

WHEN"1001"=>LED<="1111011";

WHENothers=>LED<="0000000";

ENDCASE;

ENDPROCESS;

END;

3仿真波形及分析

各部分模块完成后,用Quartus对程序编译、仿真、得到的仿真波形,各模块仿真波形及顶层仿真波形如下:

3.1六十进制计数器模块仿真

图1-1

图1-2

图1-1、图1-2均为二十四进制计数器仿真波形图

CLK:

时钟信号

RST:

复位信号低电平清零

En:

置数端低电平不让它继续计数

qb、qa:

分别为输出数的十位个位,qb取值范围为0-5,qa取值范围为0-9

rco:

进位信号,当qb=5,qa=0,rco=0时,clk上升沿来到后,qb=0,qa=0,rco=1;

当qb=5,qa=0,rco=1时,clk上升沿来到后,qb=0,qa=0,rco=0

3.2二十四进制计数器模块仿真

 

图2-1

图2-2

图2-1,图2-2均为二十四进制计数器仿真波形图

CLK:

时钟信号

RST:

复位信号低电平清零

En:

置数端低电平不让它继续计数

qb、qa:

输出的四位二进制数,分别对于要输出数的十位个位

3.3分频器模块仿真

因时钟脉冲(为256hz)通过分频器256分频后频率(为1hz),仿真波形显示前一小段,不能看出输出规律,所以做仿真是用3分频后的波形,真正在实验箱上验证是再改。

图3-1

CLK:

输入分频前的时钟信号

RST:

复位信号低电平清零

Clkout:

输出分频后的时钟信号

3.4LED显示模块仿真

Clk:

时钟信号

s1,s2,s3,s4,s5,s6:

输入的的四位二进制数

led:

输出的七位二进制数,对应数码管脚的输出gfedcba

wei:

输出的三位而进制数(输出范围为000-101),控制led输出,

当wei=000时,led输出s1对应的十进制数的数码管脚gfedcba

当wei=001时,led输出s2对应的十进制数的数码管脚gfedcba

当wei=010时,led输出s3对应的十进制数的数码管脚gfedcba

当wei=011时,led输出s4对应的十进制数的数码管脚gfedcba

当wei=100时,led输出s5对应的十进制数的数码管脚gfedcba

当wei=101时,led输出s6对应的十进制数的数码管脚gfedcba

3.5顶层仿真

因时钟脉冲(为256hz)通过分频器256分频后频率(为1hz),仿真波形显示前一小段,不能看出输出规律,所以做仿真是用3分频后的波形,真正在实验箱上验证是再改。

CLK:

时钟信号

RST:

复位信号低电平清零

En:

置数端低电平不让它继续计数

led:

输出的七位二进制数,对应数码管脚的输出gfedcba

wei:

输出的三位而进制数(输出范围为000-101),控制led输出,

当wei=000时,led输出对于秒钟的个位

当wei=001时,led输出对于秒钟的十位

当wei=010时,led输出对于分钟的个位

当wei=011时,led输出对于分钟的十位

当wei=100时,led输出对于时钟的个位

当wei=101时,led输出对应时钟的十位

4总结

这次课程设计,让我体会到EDA应用的方便。

用VHDL语言可以对数字集成电路芯片进行方便的描述,经过生成元件后可作为一个标准元件进行调用,同时,借助于VHDL开发设计平台,进行系统功能仿真和时序仿真,让我可以仅用一台电脑就设计出数字秒表,但中途也遇到过很多的问题,比如VHDL语言编写的错误,器件的连接无法编译,时钟的设置等,可是就在这不停地犯错中,让我更清楚地了解了VHDL程序的描述方法,以及Quartur的具体操作方法,所以这次的课程设计,受益匪浅。

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

当前位置:首页 > 农林牧渔 > 水产渔业

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

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