基于VHDL语言的数字秒表的实现.docx
《基于VHDL语言的数字秒表的实现.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的数字秒表的实现.docx(10页珍藏版)》请在冰豆网上搜索。
基于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的具体操作方法,所以这次的课程设计,受益匪浅。