电子秒表系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《VHDL语言》课程设计设计题目:电子秒表系统设计
系别:电子通信工程系
姓名:武志伟
组员:吴金彪向往
班级:医电 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为输入信号程序代码如下:
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY msecond IS
PORT(
clk, reset,setsec : IN STD_LOGIC;
ensec : OUT STD_LOGIC;
daout: OUT std_logic_vector (6 downto 0));
END entity msecond ;
ARCHITECTURE fun OF msecond IS
SIGNAL count: STD_LOGIC_VECTOR( 6 downto 0);
BEGIN
daout <= count;
process ( clk , reset , setsec )
begin
-- enmsec <=k;
count <= "0000000";
elsif (setsec ='0') then
ensec <= clk;
elsif (clk 'event and clk='1') then
if (count(3 downto 0)="1001") then
if (count <16#60#) then
if (count="1011001") then
ensec <='1';
count<="0000000";
ELSE
count<=count+7;
end if;
else
count<="0000000";
end if;
elsif (count < 16#60#) then
count <= count+1;
ensec <='0' after 100 ns; else
count<="0000000"; end if;
end if;
end process;
END fun;
2.控制秒模块
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY second IS
PORT(
clk, clk1,reset,setsec : IN STD_LOGIC;
enmin : OUT STD_LOGIC;
daout: out std_logic_vector (6 downto 0));
END entity second ;
ARCHITECTURE fun OF second IS
SIGNAL count: STD_LOGIC_VECTOR( 6 downto 0);
BEGIN
daout <= count;
process ( clk,reset,setsec )
begin