基于VHDL的电子秒表的设计说明.docx
《基于VHDL的电子秒表的设计说明.docx》由会员分享,可在线阅读,更多相关《基于VHDL的电子秒表的设计说明.docx(14页珍藏版)》请在冰豆网上搜索。
基于VHDL的电子秒表的设计说明
《EDA技术及应用》
课程设计报告
题目:
基于VHDL的电子秒表的设计
院(系):
机电与自动化学院
专业班级:
学生:
学号:
指导教师:
2015年1月5日至2015年1月9日
华中科技大学武昌分校制
1课程设计的目的及主要容………………………………………………………1
2设计模块……………………………………………………………………………1
2.1系统总体框图及功能设计……………………………………………………1
2.1.1系统总体框图……………………………………………………………1
2.1.2模块功能设计……………………………………………………………2
2.2六十进制计数器……………………………………………………………2
2.2.1六十进制计数器设计思路……………………………………………2
2.2.2六十进制计数器仿真结果……………………………………………3
2.3二十四进制计数器…………………………………………………………4
2.3.1二十四进制计数器设计思路…………………………………………4
2.3.2二十四进制计数器仿真结果…………………………………………5
2.4分频器………………………………………………………………………6
2.4.1分频器设计思路………………………………………………………6
2.4.2分频器仿真结果………………………………………………………7
2.5LED显示……………………………………………………………………7
2.5.1LED显示模块设计思路…………………………………………………7
2.5.2LED显示模块仿真结果………………………………………………10
2.6顶层仿真……………………………………………………………………11
3课程设计总结……………………………………………………………………12
4主要参考资料……………………………………………………………………13
1课程设计目的及主要容
(1)运用数字系统的设计方法进行数字系统设计;
(2)能进行较复杂的数字系统设计;
(3)数字中的工作原理,工作流程图与原理方框图,自顶向下的数字系统设计方法。
具体容:
设计一个电子秒表,给定时钟信号为256HZ,要求系统达到以下功能:
(1)用6个数码管分别显示时、分、秒,计时围为:
00:
00:
00~23:
59:
59。
(2)计时精度是1s。
(3)具有启/停开关,复位开关,可以在任何情况下使用。
2设计模块
2.1系统总体框图及功能设计
2.1.1系统总体框图
电子秒表的基本工作原理就是不断输出连续脉冲给加法计数器,加法计数器通过译码器来显示它所记忆的脉冲周期个数。
根据系统设计要求,系统的底层设计主要由六十进制计数器模块、二十四进制计数器模块、分频模块、LED显示模块组成。
系统顶层设计图如图1所示。
图1系统顶层设计图
图1中左边为三个输入信号en,clk,reset,分别为启动/停止开关,时钟信号和复位开关。
中间从上至下依次为count24,count60,count60,fenpinqi。
右边是clock1和输出信号wei[3..0],led[6.0]。
2.1.2模块功能设计
本系统由六十进制计数器模块、二十四进制计数器模块、分频模块执行计时功能,输入信号是256Hz,通过分频后为1hz,时钟信号是1Hz作为秒表的秒输入,秒为60进制计数器,分也为60进制计数器,小时采用二十四进制计数器,各级进位作为高位的使能控制。
2.2六十进制计数器
2.2.1六十进制计数器设计思路
设计一个八位的六十进制计数器模块,输入信号为en、reset、clk,分别为使能、复位和时钟信号,输出信号为qa[3…0]、qb[3…0]、rco,分别为低4位输出、高4位输出和进位。
图2六十进制计数器示意图
六十进制计数器模块部分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.2六十进制计数器仿真结果
六十进制计数器模块部分仿真结果如下图3。
图3六十进制计数器仿真波形图
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。
2.3二十四进制计数器
2.3.1二十四进制计数器设计思路
设计一个八位的二十四进制计数器模块,输入信号为en、reset、clk,分别为使能、复位和时钟信号,输出信号为qa[3…0]、qb[3…0],分别为低4位输出、高4位输出。
图4二十四进制计数器示意图
二十四进制计数器模块部分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.2二十四进制计数器仿真结果
二十四进制计数器模块部分仿真结果如下图5。
图5二十四进制计数器仿真波形图
CLK:
时钟信号
RST:
复位信号低电平清零
En:
置数端低电平不让它继续计数
qb、qa:
输出的四位二进制数,分别对于要输出数的十位个位
2.4分频器
2.4.1分频器设计思路
分频器原理:
输入一个较高的频率,比如750kHz,则设计算法,使得每输入7500个脉冲输出一个脉冲,这样输出端口就提供一个100Hz的频率。
输入信号为clk和rst,分别为时钟信号和复位信号,输出信号为clk_out,为分频器1HZ的时钟信号输出。
图6分频器示意图
分频器模块部分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.4.2分频器仿真结果
分频器模块部分仿真结果如下图7。
图7分频器仿真波形图
CLK:
输入分频前的时钟信号
RST:
复位信号低电平清零
Clkout:
输出分频后的时钟信号
2.5LED显示
2.5.1LED显示模块设计思路
LED有着显示亮度高,响应速度快的特点,最常用的是七段式LED显示器,又称数码管。
七段LED显示器部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。
LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不能发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码(段码),如显示”0”,字形码为3fh。
数码管的接口有静态接口和动态接口。
动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。
将二十四进制计数器和2个六十进制计数器的输出作为LEDA显示模块的输入,在时钟信号的控制下通过此模块完成6个LED数码管的显示,输出信号为WEI[2…0]和LED[6…0],分别为位选信号和段码输出。
图8LED显示示意图
图9LED数码管结构图
LED显示模块部分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<="";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;
2.5.2LED显示模块仿真结果
LED显示模块部分仿真结果如下图10。
图10LED显示模块仿真波形图
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
2.6顶层仿真
顶层仿真仿真波形如下图11
图11顶层仿真仿真波形
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输出对应时钟的十位
3课程设计总结
通过本次课程设计,把EDA课堂上学习的硬件描述语言应用到了实际,巩固了已经学到的东西,并对它有了更深层次的理解。
实际操作让我了解了实际操作方面的应用。
我认识到完成一个复杂的工程需要通过模块。
对数字秒表的设计,可由60进制计数器、24进制计数器、分频器、LED显示4个模块组成。
在每个模块的设计思路和过程上都要清晰和明确,再分布完成仿真,得到想要的正确仿真结果。
在整个设计过程之中细心十分重要,特别是当编译出错或仿真结果不正确时需要细心检查,看是源程序的程序错误还是编译的对象错误等等。
完成此次课程设计后,我学习到了许多东西:
逻辑思维能力和动手能力得到提高,同时加深了理解EDA开发软件QuartusII的认识,对于VHDL语言的应用有了进一步的理解和掌握,还有在对一些设计的思路上有所领悟。
这些对我的学习都有一定的好处,对于我的思维开阔也有所帮助。
本次设计的完成,对我来说也是一种肯定,是一种提高。
在以后的实际生活中本次课程设计的理念也是一种参考。
4主要参考资料
[1]晖.大规模可编程逻辑器件与数字系统设计.北京:
北京航空航天大学,2010.
[2]任爱锋.基于FPGA的嵌入式系统设计.:
电子科技大学,2011.
[3]恒.FPGA/CPLD最新实用技术指南.北京:
清华大学,2010.
[4]王锁萍.电子设计自动化(EDA)教程.:
电子科技大学,2009.
[5]路而红.电子设计自动化应用技术.北京:
北京希望电子,2009.
[6]潘松.VHDL实用教程.:
电子科技大学,2010.
课程设计成绩评定表
成
绩
评
定
项目
比例
得分
平时成绩(百分制记分)
30%
业务考核成绩(百分制记分)
70%
总评成绩(百分制记分)
100%
评定等级
优良中及格不及格
指导教师(签名):
20年月日