基于EDA技术的秒表设计.docx
- 文档编号:9816898
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:24
- 大小:265.58KB
基于EDA技术的秒表设计.docx
《基于EDA技术的秒表设计.docx》由会员分享,可在线阅读,更多相关《基于EDA技术的秒表设计.docx(24页珍藏版)》请在冰豆网上搜索。
基于EDA技术的秒表设计
编号:
03063076
南阳师范学院2007届毕业生
毕业论文(设计)
题目:
基于EDA技术的快速计时器设计
完成人:
黄朝伟
班级:
2003-03
学制:
4年
专业:
电子信息与科学技术
指导教师:
张帅
完成日期:
2007-03-31
目录
摘要
1绪论
(1)
1.1EDA技术
(1)
1.2系统设计意义
(2)
2数字快速计时器的设计方案及要求
(2)
2.1系统设计要求(3)
2.2系统设计方案(3)
3程序设计及分析(4)
3.1时基分频模块的VHDL源程序(CB10.VHD)(4)
3.2控制模块的VHDL源程序(CTRL.VHD)(5)
3.3计时模块的VHDL源程序(6)
3.3.1十进制计数器的VHDL源程序(CDU10.VHD)(6)
3.3.2六进制计数器的VHDL源程序(CDU6.VHD)(7)
3.3.3计时器的VHDL源程序(COUNT.VHD)(8)
3.4显示模块的VHDL源程序(10)
3.4.1数据选择器的VHDL源程序(MULX.VHD)(10)
3.4.2BCD七段译码驱动器的VHDL源程序(BCD7.VHD)(12)
3.5顶层设计的VHDL源程序(MB.VHD)(12)
4数字快速计时器的系统仿真及结果分析(15)
4.3计时电路模块的仿真(16)
4.3.1十进制计数器的仿真(16)
4.3.2六进制计数器的仿真(16)
4.4显示电路模块的仿真(17)
4.4.1数据选择器的仿真(17)
4.4.2BCD七段译码驱动器的仿真(17)
4.5数字快速计时器整个系统的仿真(17)
4.5.1快速计时器的起始工作状态(17)
4.5.2快速计时器的停止工作状态,(18)
5结论(19)
参考文献…………………………………………………………….(18)
Abstract(20)
基于EDA技术的快速计时器设计
作者:
黄朝伟
指导老师:
张帅
摘要:
基于EDA技术的使用,本文着重讨论了采用EDA技术设计的快速计时器设计,使用硬件描述语言VHDL,在开发软件MAX+PLUS2进行输入、编译、综合、仿真,得到的仿真波形。
实验结果表明,与原有的数控系统的控制电路部分相比采用EDA技术的快速计时器使得数控系统具有更高的可靠性、实时性、高运算速度以及高集成度。
同时由于EDA技术中FPGA芯片具有在系统可编程特性,因此该快速计时器的设计可像软件一样随时更改。
关键词:
EDA;VHDL;快速计时器设计
1绪论
电子技术的发展推动着社会的发展,人民从使用收音机到黑白电视机、彩色电视机、数字电视机到计算机进入千家万户,通过Internet网可以了解世界的变化,这一切都是电子技术发展的结果。
但是,随着信息化社会的进一步发展,传统的电子技术设计与芯片的制造也就不能适应社会发展的需要,EDA技术正是适应社会的这一需要而产生的。
EDA技术就是以大规模可编程逻辑器件为载体,以硬件描述语言为系统逻辑描述的表达方式,以计算机、大规模可编程逻辑器件的开发软件及试验开发系统为设计工具,通过有关的开发软件,自动完成电子系统的设计。
利用EDA技术进行电子设计它可以实现用软件的方式设计硬件;系统可现场编程,在线升级;整个系统低功耗,多功能等特点,成为现代电子设计发展的趋势[1][2][3]。
1.1EDA技术
随着数字集成技术的飞速发展,数字系统的规模和技术复杂度也在急剧增长,人工设计数字系统变得十分困难,必须依靠EDA技术。
EDA(ElectronicDesignAutomation)技术就是电子设计自动化,用EDA技术设计数字系统的实质是一种自顶向下的分层设计方法[4]。
在每一层次上,都有描述、划分、综合和验证四种类型的工作。
描述是把系统设计输入到EDA软件的过程,它可以采用图形输入、硬件描述语言或二者混合使用的方法输入。
整个设计过程只有该部分由设计者完成。
划分、综合和验证则采用EDA软件平台自动完成。
这样做极大地简化了设计工作,提高了效率,因此,采用EDA技术设计数字系统得到了越来越广泛的应用[1]。
与手工设计相比EDA技术有如下特点[7]:
Ø采用自顶向下设计方案
Ø应用硬件描述语言(HDL)描述设计
Ø能够自动完成仿真和测试
Ø开发技术的标准化和规范化
Ø对工程技术人员的硬件知识和经验要求低
1.2系统设计意义
快速计时器由于其计时精确,分辨率高(0.01秒),在各种竞技场所得到了广泛的应用。
本数字快速计时器可用于体育比赛,计时精度大于1/100S,计时器能显示1/100S的时间,计时器的最长计时时间为1小时,显示的最长时间为59分59.99秒。
系统具有简单、工作稳定可靠等优点,具有一定的实际意义。
与原有的数控系统的控制电路部分相比采用EDA技术的快速计时器使得数控系统具有更高的可靠性、实时性、高运算速度以及高集成度。
2数字快速计时器的设计方案及要求
本文介绍的数字快速计时器设计,利用基于VHDL的EDA设计工具,采用大规模可编程逻辑器件FPGA,通过设计芯片来实现系统功能。
快速计时器由于其计时精确,分辨率高(0.01秒),在各种竞技场所得到了广泛的应用。
快速计时器的工作原理与多功能时钟基本相同,唯一不同的是,由于快速计时器的计时时钟信号,由于其分辨率为0.01秒,所以整个快速计时器的工作时钟是在100Hz的时钟信号下完成。
当快速计时器的计时小于1个小时时,显示的格式是mm-ss-xx(mm表示分钟:
0~59;ss表示秒:
0~59;xx表示百分之一秒:
0~99),当快速计时器的计时大于或等于一个小时时,显示的和多功能时钟是一样的,就是hh-mm-ss(hh表示小时:
0~99),由于快速计时器的功能和钟表有所不同,所以快速计时器的hh表示的范围不是0~23,而是0~99,这也是和多功能时钟不一样的地方。
2.1系统设计要求
Ø数字快速计时器的计时范围是0秒到59.99秒,显示的最长时间为59分59秒。
Ø数字快速计时器的计时精度是10ms。
Ø复位开关可以在任何情况下使用,即便在计时过程中,只要按一下复位开关,计时器就清零,并做好下次计时的准备。
Ø具有启/停开关,即按一下启/停开关,启动计时器开始计时,再按一下复位开关则停止计时。
2.2系统设计方案
根据系统设计要求,系统的组成框图如图1所示。
图1系统的组成框图
系统设计采用自顶向下的设计方法,系统的整体组装设计主要由控制模块、时基分频模块、计时模块和显示模块四部分组成。
(1)控制模块
计时控制模块的作用是对计时过程进行控制。
计时控制模块可用两个按钮快速计时器的启动、停止和复位。
(2)计时模块
计时模块执行计时功能,计时的方法是对标准时钟脉冲计数[6]。
由于计时范围是0秒到59分59.99秒,所以计数器可以由四个十进制计数器和两个六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。
(3)显示模块
计时显示电路的作用是将计时值在LED七段数码管上显示出来。
计时电路产生的计时值经过BCD七段译码管后,驱动LED数码管。
计时显示电路的实现方案采用扫描显示,即每次只驱动一位数码管,各位数据轮流驱动对应的数码管进行显示。
3程序设计及分析
3.1时基分频模块的VHDL源程序(CB10.VHD)
architectureARTOFCB10IS
SIGNALCOUNT:
std_logic_vector(3downto0);
BEGIN
PROCESS(CLK)
BEGIN
IFRISING_EDGE(CLK)THEN
IFCOUNT="1001"THENCOUNT<="0000";CO<='1';
ELSECOUNT<=COUNT+1;CO<='0';
ENDIF;ENDIF;
ENDPROCESS;ENDART;
程序分析:
时基分频模块的VHDL源程序(CB10.VHD)的功能是:
当时钟信号CLK发生变化,将启动进程语句PROCESS。
如果此时有信号CLK的上升沿,此时若计数值COUNT小于9,即COUNT<"1001",计数器将进行正常计数,即执行COUNT<=COUNT+'1';否则当计数值COUNT达到9时COUNT变为0,CO输出高电平,作为十进制计数的进位溢出信号,当计数值COUNT为其它值时输出低电平。
3.2控制模块的VHDL源程序(CTRL.VHD)
architectureBEHAVEOFCTRLIS
CONSTANTS0:
STD_LOGIC_VECTOR(1DOWNTO0):
="00";
CONSTANTS1:
STD_LOGIC_VECTOR(1DOWNTO0):
="01";
CONSTANTS2:
STD_LOGIC_VECTOR(1DOWNTO0):
="11";
CONSTANTS3:
STD_LOGIC_VECTOR(1DOWNTO0):
="10";
TYPESTATESIS(S0,S1,S2,S3);
SIGNALCURRENT_STATE,NEXT_STATE:
STATES;
BEGIN
COM:
PROCESS(SP,CURRENT_STATE)
BEGIN
CASECURRENT_STATEIS
WHENS0=>EN<='0';
IFSP='1'THENNEXT_STATE<=S1;
ELSENEXT_STATE<=S0;
ENDIF;
WHENS1=>EN<='1';
IFSP='1'THENNEXT_STATE<=S1;
ELSENEXT_STATE<=S2;
ENDIF;
WHENS2=>EN<='1';
IFSP='1'THENNEXT_STATE<=S3;
ELSENEXT_STATE<=S2;
ENDIF;
WHENS3=>EN<='0';
IFSP='1'THENNEXT_STATE<=S3;
ELSENEXT_STATE<=S0;
ENDIF;ENDCASE;
ENDPROCESS;ENDBEHAVE;
程序分析:
控制模块的VHDL源程序(CTRL.VHD)是用VDHL设计的有限状态机。
SYNCH是主控时序进程;COM是主控组合进程。
在上面的结构体说明部分,定义了含四个状态的数据类型STATES,然后将现态CURRENT_STATE和次态NEXT_STATE变量的数据类型定义为STATES,数据类型定义为SIGNAL。
对于此程序,如果异步清零信号CLR有过一个复位脉冲,当前状态被异步设置为S0。
与此同时,启动组合进程,执行“WHENS0=>EN<='0';…”语句,并使次态NEXT_STATE获得S1,而当此后的第一个CLK上升沿到来时,现态CURRENT_STATE自动转向S1状态。
随着时钟信号的到来,将根据控制信号SP而转向不同的状态,同时输出相应的信号EN去控制外部对象。
3.3计时模块的VHDL源程序
3.3.1十进制计数器的VHDL源程序(CDU10.VHD)
ENTITYCDU10IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
EN:
INSTD_LOGIC;
CN:
OUTSTD_LOGIC;
COUNT10:
outstd_logic_vector(3downto0));
ENDCDU10;
architectureARTOFCDU10IS
SIGNALSCOUNT10:
std_logic_vector(3downto0);
BEGIN
COUNT10<=SCOUNT10;
PROCESS(CLK,CLR,EN)
BEGIN
IF(CLR='1')THEN
SCOUNT10<="0000";CN<='0';
ELSIFRISING_EDGE(CLK)THEN
IF(EN='1')THEN
IFSCOUNT10="1001"THENCN<='1';SCOUNT10<="0000";
ELSECN<='0';SCOUNT10<=SCOUNT10+'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDART;
程序分析:
十进制计数器的VHDL源程序(CDU10.VHD)的功能是:
当时钟信号CLK、复位信号CLR或时钟使能信号EN中任一信号发生变化,都将启动进程语句PROCESS。
此时如果CLR为’1’,将对计数器清零,即复位,这项独立于CLK的,因而称异步;如果CLR为’0’,则看是否有时钟信号的上升沿:
如果此时有CLK信号,又测得EN=‘1‘,即允许计数器计数,此时若计数值小于9,即SCOUNT10<"1001",计数器将进行正常计数,即执行SCOUNT10<=SCOUNT10+'1';否则当计数值SCOUNT10达到9时,输出高电平,作为十进制计数的进位溢出信号,当计数值SCOUNT10为其它值时输出低电平;但如果测得EN=‘0‘使SCOUNT10保持原值,即将计数值向端口输出:
COUNT10<=SCOUNT10。
3.3.2六进制计数器的VHDL源程序(CDU6.VHD)
ENTITYCDU6IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
EN:
INSTD_LOGIC;
CN:
OUTSTD_LOGIC;
COUNT6:
outstd_logic_vector(3downto0));
ENDCDU6;
architectureARTOFCDU6IS
SIGNALSCOUNT6:
std_logic_vector(3downto0);
BEGIN
COUNT6<=SCOUNT6;
PROCESS(CLK,CLR,EN)
BEGIN
IF(CLR='1')THENSCOUNT6<="0000";CN<='0';
ELSIFRISING_EDGE(CLK)THEN
IF(EN='1')THEN
IFSCOUNT6="0101"THENCN<='1';
SCOUNT6<="0000";
ELSECN<='0';SCOUNT6<=SCOUNT6+'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDART;
程序分析:
六进制计数器的VHDL源程序(CDU10.VHD)的功能是:
当时钟信号CLK、复位信号CLR或时钟使能信号EN中任一信号发生变化,都将启动进程语句PROCESS。
此时如果CLR为’1’,将对计数器清零,即复位;如果CLR为’0’,则看是否有时钟信号的上升沿:
如果此时有CLK信号,又测得EN=‘1‘,即允许计数器计数,此时若计数值小于5,即SCOUNT6<"0101",计数器将进行正常计数,即执行SCOUNT6<=SCOUNT6+'1';否则当计数值SCOUNT6达到5时,输出高电平,作为十进制计数的进位溢出信号,当计数值SCOUNT6为其它值时输出低电平;但如果测得EN=‘0‘使SCOUNT6保持原值,即将计数值向端口输出:
COUNT6<=SCOUNT6。
3.3.3计时器的VHDL源程序(COUNT.VHD)
ENTITYCOUNTIS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
EN:
INSTD_LOGIC;
S_1MS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_10MS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_100MS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_1S:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_10S:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_1MIN:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_10MIN:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
HOUR:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOUNT;
architectureARTOFCOUNTIS
COMPONENTCDU10
PORT(CLK,CLR,EN:
INSTD_LOGIC;
CN:
OUTSTD_LOGIC;
COUNT10:
outstd_logic_vector(3downto0));
ENDCOMPONENTCDU10;
COMPONENTCDU6
PORT(CLK,CLR,EN:
INSTD_LOGIC;
CN:
OUTSTD_LOGIC;
COUNT6:
outstd_logic_vector(3downto0));
ENDCOMPONENTCDU6;
SIGNALA,B,C,D,E,F,G,H:
std_logic;
BEGIN
U1:
CDU10PORTMAP(CLK,CLR,EN,A,S_1MS);
U2:
CDU10PORTMAP(A,CLR,EN,B,S_10MS);
U3:
CDU10PORTMAP(B,CLR,EN,C,S_100MS);
U4:
CDU10PORTMAP(C,CLR,EN,D,S_1S);
U5:
CDU6PORTMAP(D,CLR,EN,E,S_10S);
U6:
CDU10PORTMAP(E,CLR,EN,F,S_1MIN);
U7:
CDU6PORTMAP(F,CLR,EN,G,S_10MIN);
U8:
CDU10PORTMAP(G,CLR,EN,H,HOUR);
ENDART;
程序分析:
以上程序是计数器的顶层VHDL描述,计时器执行计时功能,计时的方法是对标准时钟脉冲计数。
计数器由四个十进制计数器和两个六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。
为了达到连接底层元件形成更高层次的电路设计结构,文件使用了元件例化语句。
文件在实体中首先定义了计数器顶层设计文件的端口信号,然后在architecture和BEGIN之间利用COMPONENT语句对准备调用的元件作了声明,并定义了A,B,C,D,E,F,G,H八个信号作为器件内部的连接线。
最后利用端口映射语句PORTMAP()将六个十进制计数器和两个六个进制计数器连接起来构成一个完整的计数器。
(详细功能见仿真图的分析)
3.4显示模块的VHDL源程序
3.4.1数据选择器的VHDL源程序(MULX.VHD)
ENTITYMULXIS
PORT(CLK,CLR,EN:
INSTD_LOGIC;
OUTBCD:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_10MS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_100MS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_1S:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_10S:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_1MIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_10MIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
HOUR:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_1MS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
SEG:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDMULX;
architectureARTOFMULXIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
PROCESS(CLK)
BEGINIFCLR='1'THEN
COUNT<="1111";
ELSIFRISING_EDGE(CLK)THEN
IFEN='1'THENIFCOUNT="1001"THEN
COUNT<="0000";ELSE
COUNT<=COUNT+'1';ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
CASECOUNTIS
WHEN"0000"=>OUTBCD<=S_1MS;SEG<="11111110";
WHEN"0001"=>OUTBCD<=S_10MS;SEG<="11111101";
WHEN"0010"=>OUTBCD<=S_100MS;SEG<="11111011";
WHEN"0011"=>OUTBCD<=S_1S;SEG<="11110111";
WHEN"0100"=>OUTBCD<=S_10S;SEG<="11101111";
WHEN"0101"=>OUTBCD<=S_1MIN;SEG<="11011111";
WHEN"0110"=>OUTBCD<=S_10MIN;SEG<="10111111";
WHEN"0111"=>OUTBCD<=HOUR;SEG<="01111111";
WHEN"1000"=>OUTBCD<=S_1MS;SEG<="11111110";
WHEN"1001"=>OUTBCD<=S_10MS;SEG<="11111101";
WHENOTHERS=>OUTBCD<="0000";SEG<="00000000";
ENDCASE;
ENDIF;
ENDPROCESS;
ENDART;
程序分析:
此程序中包含两个进程,信号CLK都将启动这两个进程。
对于第一个进程:
当信号CLK发生变化,如果此时复位信号CLR为高电平,COUNT将置为“1111”;否则如果遇到信号CLK的上升沿,又测得EN=‘1‘,即允许计数,此时若计数值小于9,即SCOUNT<"1001",计数器将进行正常计数,即执行COUNT<=COUNT+'1';否则当计数值COUNT达到9时,输出高电平,作为十进制计数的进位溢出信号,当计数值COUNT为其它值时输出低电平;但如果测得EN=‘0‘使SCOUNT6保持原值,即将计数值向端口输出:
COUNT6<=SCOUNT6。
对于第二个进程:
当信号CLK发生变化,此时如果遇到信号CLK的上升沿,将执行CASE语句。
根据信号COUNT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 EDA 技术 秒表 设计