电子秒表系统设计.docx
- 文档编号:26420120
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:16
- 大小:205.31KB
电子秒表系统设计.docx
《电子秒表系统设计.docx》由会员分享,可在线阅读,更多相关《电子秒表系统设计.docx(16页珍藏版)》请在冰豆网上搜索。
电子秒表系统设计
《VHDL语言》课程设计
设计题目:
电子秒表系统设计
系别:
电子通信工程系
XX:
武志伟
组员:
吴金彪X向往
班级:
医电051
学号:
050411125
指导老师:
石新峰
成绩:
设计时间:
2007年12月7日
前言…………………………………………………………………1
一、设计任务及要求……………………………………………2
二、方案论证……………………………………………………3
三、设计总体框图………………………………………………4
四、硬件电路设计与程序设计………………………………5
五、编译仿真……………………………………………………6
六、心得体会………………………………………………………7
参考文献:
……………………………………………………………8
前言
秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。
其中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。
而复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时应立即终止,并对计时器清零。
本文是主要是用CPLD的一些知识简单的设计秒表的过程。
一、设计任务及要求
1.设计数码管显示的秒表。
2.能够准确的计时并显示。
3.开机显示00.00.00。
4.用户可以随时清零、暂停、计时。
5.最大记时59分钟,最小精确到0.01秒。
二、方案论证
方案一采用8051IP核设计。
用FPGA构成一个8051单片应用系统具有如下优缺点:
1、拥有标准8051完全兼容的指令系统的CPU;
2、256字节内部RAM;
3、4K字节程序ROM;
4、每一此编译下载后都能根据需要更新ROM中的程序,所以该单片机的实现和使用如同89C51/52一样方便。
缺点:
1.设计烦琐可以直接用8051单片机代替。
2.程序复杂。
方案二采用芯片EP1C12Q240C8、共阴七段数码管、按键开关、发光二极管设计。
EP1C12Q240C8是Cyclone器件,Cyclone可以最多支持129个通道的LVDS和RSDS。
Cyclone器件的LVDS缓冲器可以支持最高达640Mbps的数据传输速度。
与单端的I/O口标准相比,这些内显置于Cyclone器件内部的LVDS缓冲器保持了信号的完整性,并且有更低的电磁干扰、更好的电磁兼容性(EMI)及更低的电源功耗。
采用此芯片设计简单,不需要用汇编语言编写程序,直接用VHDL编写即可以.
缺点:
与8051IP核相比精确度不是很高。
但是对于秒表系统设计可以满足要求。
三、设计总体框图
三、硬件电路设计与程序设计
本设计采用模块化设计,共分为顶层文件(msecond)、控制秒模块(second)、控制分钟模块(minutes)、LED模块(alert)、数码管扫描模块(zhishi)、显示驱动模块(deled)六个模块。
其中LED模块可以去掉,不影响秒表正常运行以下对各个模块一一描述。
1.顶层文件
对这个功能模块用一个进程语句描述。
clk、reset和调秒的setsec为输入信号程序代码如下:
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYmsecondIS
PORT(
clk,reset,setsec:
INSTD_LOGIC;
ensec:
OUTSTD_LOGIC;
daout:
OUTstd_logic_vector(6downto0));
ENDentitymsecond;
ARCHITECTUREfunOFmsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
BEGIN
daout<=count;
process(clk,reset,setsec)
begin
--enmsec<=k;
if(reset='0')then
count<="0000000";
elsif(setsec='0')then
ensec<=clk;
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#60#)then
if(count="1011001")then
ensec<='1';
count<="0000000";
ELSE
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#60#)then
count<=count+1;
ensec<='0'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
2.控制秒模块
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYsecondIS
PORT(
clk,clk1,reset,setsec:
INSTD_LOGIC;
enmin:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDentitysecond;
ARCHITECTUREfunOFsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
BEGIN
daout<=count;
process(clk,reset,setsec)
begin
if(reset='0')then
count<="0000000";
elsif(setsec='0')then
enmin<=clk1;
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#60#)then
if(count="1011001")then
enmin<='1';
count<="0000000";
ELSE
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#60#)then
count<=count+1;
enmin<='0'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
3.控制分钟模块
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYsecondIS
PORT(
clk,clk1,reset,setsec:
INSTD_LOGIC;
enmin:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDentitysecond;
ARCHITECTUREfunOFsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
BEGIN
daout<=count;
process(clk,reset,setsec)
begin
if(reset='0')then
count<="0000000";
elsif(setsec='0')then
enmin<=clk1;
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#60#)then
if(count="1011001")then
enmin<='1';
count<="0000000";
ELSE
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#60#)then
count<=count+1;
enmin<='0'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
4.LED模块
该模块是有三个LED灯组成,三个LED轮流亮,起到验证秒表的功能。
程序代码如下:
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYalertIS
PORT(
clk:
INSTD_LOGIC;
dain:
INSTD_LOGIC_VECTOR(6DOWNTO0);
lamp:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDalert;
ARCHITECTUREfunOFalertIS
signalcount:
std_logic_vector(1downto0);
BEGIN
lamper:
process(clk)
begin
if(rising_edge(clk))then
if(count<="10")then
if(count="00")then
lamp<="001";
elsif(count="01")then
lamp<="010";
elsif(count="10")then
lamp<="100";
endif;
count<=count+1;
else
count<="00";
endif;
endif;
endprocesslamper;
ENDfun;
5.数码管扫描模块
该模块的功能是选择个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
ENTITYzhishiIS
PORT(
clk1,reset:
INSTD_LOGIC;
msec,sec:
INSTD_LOGIC_VECTOR(6downto0);
minute:
instd_logic_vector(5downto0);
daout:
OUTSTD_LOGIC_vector(3downto0);
sel:
outstd_logic_vector(2downto0));
ENDzhishi;
ARCHITECTUREfunOFzhishiIS
SIGNALcount:
STD_LOGIC_vector(2downto0);
BEGIN
sel<=count;
process(clk1,reset)
begin
if(reset='0')then
count<="000";
elsif(clk1'eventandclk1='1')then
if(count>="101")then
count<="000";
else
count<=count+1;
endif;
endif;
casecountis
when"000"=>daout<=msec(3downto0);
when"001"=>daout(3)<='0';
daout(2downto0)<=sec(6downto4);
when"010"=>daout<=sec(3downto0);
when"011"=>daout(3)<='0';
daout(2downto0)<=sec(6downto4);
when"100"=>daout<=minute(3downto0);
whenothers=>daout(3downto2)<="00";
daout(1downto0)<=minute(5downto4);
endcase;
endprocess;
endfun;
6.数码管显示模块
数码管驱动电路,驱动数码管发光。
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYdeledIS
PORT(num:
INstd_logic_vector(3downto0);
led:
OUTstd_logic_vector(6downto0));
ENDdeled;
ARCHITECTUREfunOFdeledIS
BEGIN
led<="0111111"whennum="0000"else
"0000110"whennum="0001"else
"1011011"whennum="0010"else
"1001111"whennum="0011"else
"1100110"whennum="0100"else
"1101101"whennum="0101"else
"1111101"whennum="0110"else
"0000111"whennum="0111"else
"1111111"whennum="1000"else
"1101111"whennum="1001"else
"1110111"whennum="1010"else
"1111100"whennum="1011"else
"0111001"whennum="1100"else
"1100011"whennum="1101"else
"1111001"whennum="1110"else
"1110001"whennum="1111";
ENDfun;
四、编译仿真
下面使用QuartusII6.0对本设计进行编译和仿真。
首先创建工程,使用文本编辑器输入本设计的所有模块的源程序,把miaobiao.vhd设为顶层文件。
把本设计中的所有设计文件添加进工程后,先对每个模块进行编译纠错,然后把各个模块连接在一起保存然后在全程编译,通过之后就可以进行仿真。
先进行软件仿真每一部分的仿真从略,下面只说明系统的整体仿真波形。
系统工作时的仿真波形如图所示。
确定准确无误后然后开始锁定管脚,执行菜单命令assignments→pins出现如下:
锁定后的管脚结果如下:
NodeName
Direction
Location
a13
Output
PIN_2
b12
Output
PIN_3
c9
Output
Pin_4
clk
Input
PIN_28
clkdsp
Input
PIN_6
d10
Output
PIN_7
e11
Output
PIN_8
f8
Output
PIN_11
g
Output
PIN_12
lamp[2]
Output
PIN_37
lamp[1]
Output
PIN_39
lamp[0]
Output
PIN_38
reset
Input
PIN_16
sel[2]
Output
PIN_19
sel[1]
Output
PIN_18
sel[0]
Output
PIN_17
setmsec
Input
PIN_20
setsec
Input
PIN_21
管脚锁定好以后再重新编译一次编译通过后执行Tools→Progammer命令出现如下:
单击"start"按钮,开始硬件仿真.如果不能实现还需要重新调试程序直到实现秒表功能为止.
五、心得体会
经过了一周的课程设计,现在终于有了一点的心得,原本以为我对VHDL还是比较的了解的,所以一向以为VHDL的课程设计应该不会觉得很难,可是事实并不是我所想的那样,如果老师不给我们框架的话,我想就算给我两个月的时间我也不可能做的出来.通过这次课程设计,对VHDL的语言有了更深刻的认识,对课题设计的基本流程有了一定的认识,同时也是一次把原来所学的书本知识和实践相联系的过程。
并通过实践,建立起了学习EDA的浓厚兴趣。
在设计中也深刻体会到了团队精神的重要性!
同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。
某个人的离群都可能导致导致整项工作的失败。
设计中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。
团结协作是我们实习成功的一项非常重要的保证。
而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
对EDA的设计平台QuartusⅡ有了熟练的使用。
掌握了本次设计所用的EDA试验箱用法,为以后更好的学习EDA打下了基础。
通过这次课程设计,我意识到了我对这门课掌握还有一定的不足,还有许多的知识我不了解;有的是一知半解;有的即使原理懂了,但在应用方面却是丝毫不知。
所以在今后的学习中,我会更加努力,不仅要学好理论知识,还要把它应用到实践中去,使两者很好的结合起来,互补互助。
参考文献:
[1]潘松,黄继业·EDA技术实用教程·科学·2006年9月第三版
[2] 马淑华,高原·《电子设计自动化》·邮电大学·2006
[3]卢毅,赖杰·《VHDL与数字电路设计》·2001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 秒表 系统 设计