电子秒表系统设计Word格式文档下载.docx
《电子秒表系统设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电子秒表系统设计Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
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='
ensec<
=clk;
elsif(clk'
eventandclk='
1'
if(count(3downto0)="
1001"
if(count<
16#60#)then
if(count="
1011001"
ensec<
='
count<
="
ELSE
count<
=count+7;
endif;
else
count<
endif;
elsif(count<
16#60#)then
=count+1;
after100ns;
endprocess;
ENDfun;
2.控制秒模块
LIBRARYieee;
ENTITYsecondIS
clk,clk1,reset,setsec:
enmin:
outstd_logic_vector(6downto0));
ENDentitysecond;
ARCHITECTUREfunOFsecondIS
process(clk,reset,setsec)
enmin<
=clk1;
elsif(clk'
eventandclk='
enmin<
else
elsif(count<
16#60#)then
=count+1;
else
count<
3.控制分钟模块
4.LED模块
该模块是有三个LED灯组成,三个LED轮流亮,起到验证秒表的功能。
程序代码如下:
ENTITYalertIS
clk:
dain:
INSTD_LOGIC_VECTOR(6DOWNTO0);
lamp:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDalert;
ARCHITECTUREfunOFalertIS
signalcount:
std_logic_vector(1downto0);
lamper:
process(clk)
begin
if(rising_edge(clk))then
if(count<
10"
if(count="
00"
lamp<
001"
;
elsif(count="
01"
010"
elsif(count="
)then
100"
endif;
count<
else
count<
endif;
endprocesslamper;
ENDfun;
5.数码管扫描模块
该模块的功能是选择个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。
useieee.std_logic_arith.all;
ENTITYzhishiIS
clk1,reset:
msec,sec:
INSTD_LOGIC_VECTOR(6downto0);
minute:
instd_logic_vector(5downto0);
daout:
OUTSTD_LOGIC_vector(3downto0);
sel:
outstd_logic_vector(2downto0));
ENDzhishi;
ARCHITECTUREfunOFzhishiIS
STD_LOGIC_vector(2downto0);
sel<
process(clk1,reset)
if(reset='
000"
elsif(clk1'
eventandclk1='
if(count>
101"
casecountis
when"
=>
=msec(3downto0);
daout(3)<
='
daout(2downto0)<
=sec(6downto4);
=sec(3downto0);
011"
=minute(3downto0);
whenothers=>
daout(3downto2)<
daout(1downto0)<
=minute(5downto4);
endcase;
endfun;
6.数码管显示模块
数码管驱动电路,驱动数码管发光。
ENTITYdeledIS
PORT(num:
INstd_logic_vector(3downto0);
led:
OUTstd_logic_vector(6downto0));
ENDdeled;
ARCHITECTUREfunOFdeledIS
led<
0111111"
whennum="
0000"
"
0000110"
0001"
1011011"
0010"
"
1001111"
0011"
1100110"
0100"
1101101"
0101"
1111101"
0110"
0000111"
0111"
1111111"
1000"
1101111"
1110111"
1010"
1111100"
1011"
0111001"
1100"
1100011"
1101"
1111001"
1110"
1110001"
1111"
ENDfun;
四、编译仿真
下面使用QuartusII6.0对本设计进行编译和仿真。
首先创建工程,使用文本编辑器输入本设计的所有模块的源程序,把miaobiao.vhd设为顶层文件。
把本设计中的所有设计文件添加进工程后,先对每个模块进行编译纠错,然后把各个模块连接在一起保存然后在全程编译,通过之后就可以进行仿真。
先进行软件仿真每一部分的仿真从略,下面只说明系统的整体仿真波形。
系统工作时的仿真波形如图所示。
确定准确无误后然后开始锁定管脚,执行菜单命令assignments→pins出现如下:
锁定后的管脚结果如下:
NodeName
Direction
Location
a13
Output
PIN_2
b12
PIN_3
c9
Pin_4
clk
Input
PIN_28
clkdsp
Input
PIN_6
d10
PIN_7
e11
PIN_8
f8
PIN_11
g
PIN_12
lamp[2]
PIN_37
lamp[1]
PIN_39
lamp[0]
PIN_38
reset
PIN_16
sel[2]
PIN_19
sel[1]
PIN_18
sel[0]
PIN_17
setmsec
PIN_20
setsec
PIN_21
管脚锁定好以后再重新编译一次编译通过后执行Tools→Progammer命令出现如下:
单击"
start"
按钮,开始硬件仿真.如果不能实现还需要重新调试程序直到实现秒表功能为止.
五、心得体会
经过了一周的课程设计,现在终于有了一点的心得,原本以为我对VHDL还是比较的了解的,所以一向以为VHDL的课程设计应该不会觉得很难,可是事实并不是我所想的那样,如果老师不给我们框架的话,我想就算给我两个月的时间我也不可能做的出来.通过这次课程设计,对VHDL的语言有了更深刻的认识,对课题设计的基本流程有了一定的认识,同时也是一次把原来所学的书本知识和实践相联系的过程。
并通过实践,建立起了学习EDA的浓厚兴趣。
在设计中也深刻体会到了团队精神的重要性!
同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。
某个人的离群都可能导致导致整项工作的失败。
设计中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。
团结协作是我们实习成功的一项非常重要的保证。
而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
对EDA的设计平台QuartusⅡ有了熟练的使用。
掌握了本次设计所用的EDA试验箱用法,为以后更好的学习EDA打下了基础。
通过这次课程设计,我意识到了我对这门课掌握还有一定的不足,还有许多的知识我不了解;
有的是一知半解;
有的即使原理懂了,但在应用方面却是丝毫不知。
所以在今后的学习中,我会更加努力,不仅要学好理论知识,还要把它应用到实践中去,使两者很好的结合起来,互补互助。
参考文献:
[1]松,黄继业·
EDA技术实用教程·
科学·
2006年9月第三版
[2]
马淑华,高原·
《电子设计自动化》·
邮电大学·
2006
[3]卢毅,赖杰·
《VHDL与数字电路设计》·
2001