《EDA课程设计--带存储功能的秒表》由会员分享,可在线阅读,更多相关《EDA课程设计--带存储功能的秒表(16页珍藏版)》请在金锄头文库上搜索。
1、太原科技大学:名字起个什么 电子课程设计 带存储功能的秒表 学院: 专业, 姓名: 学号: 指导老师: 2009 年 12 月 太原科技大学:名字起个什么 带存储功能的秒表设计 一设计任务与要求 1.实现一小时以内的秒表设计,显示精度精确到 0.1 秒,即显示 5 位数据 2.有“开始” , “停止” , “存储”按键,能存储一组数据。 3.能存储两组以上的数据,并能反复调用查看。 二总体框图 (1)方案论证 方案一 采用 8051IP 核设计。 用 FPGA 构成一个 8051 单片应用系统具有如下 优缺点: 1. 拥有标准 8051 完全兼容的指令系统的 cpu; 2. 256 字节内部
2、ram; 3. 4k 字节程序 rom; 4. 每一次编译下载后都能根据需要更新 rom 中的程序,所以该单片机 的实现和使用如同 89c51/52 一样方便。 缺点: 1. 设计繁琐可以直接用 8051 单片机代替。 2. 程序复杂。 方案二 采用芯片 EP1C2Q240C8,共阴七段数码管,按键开关,发光二级管 设计。 EP1C12Q240C8 是 Cyclone 器件, Cyclone 可以最多支持 129 个通道的 LVDS 和 RSDA。 Cyclone 器件的 LVDS 缓冲器可以支持最高达 640Mbps 的数据传输速度。 与单端的 I/0 口标准相比,这些内显置于 Cyclon
3、e 器件内部的 LVDS 缓冲器保持 了信号的完整性, 并且有更低的电磁干扰, 更好的电磁兼容性及更低的电源功耗。 采用此芯片设计简单,不需要用汇编语言编写程序,直接用 VHDL 编写即可。所 以优先选用方案二。 本设计采用模块化设计,共分为顶层文件,控制毫秒模块(msecond) ,控 制秒模块(second) ,控制分钟模块(minutes) ,数码管扫描模块(seltime) , 显示驱动模块(deled),分频模块(finpin) ,decode3_8 模块。 秒表计数器中启/停开关的使用方法和传统的计时器相同,即按一下启/停 开关,启用计时器开始计时,再按一下启/停开关计时终止。而复
4、位开关可以在 任何情况下使用,即使在计时过程中,只要按一下复位开关,计时应立即终止, 并对计时器清零。 太原科技大学:名字起个什么 (2)原理框图 秒 表 电 路 显 示 电 路 扫 描 电 路 分 频 器 时 钟 信 号 图 2.1,总体原理框图 总体框图由秒表电路(包括 msecond,second,minute 三个小模块) ;扫描电路 驱动 5 位八段共阴扫描数码管的片选驱动信号输出模块(seltime) ;显示电路驱 动八段字形译码器输出模块(deled) 。 三选择器件 1.主芯片:Altera的 Cyclone EPEC12Q240C8 2.5 个八段扫描共阴极数码显示管 3.三
5、个按键开关(开关,复位,存储) 4.EDA 实验箱一台 5.含有 Quartus软件的计算机一台 6.导线若干 四功能模块 1.数码管显示模块 图 4.1 数码管 太原科技大学:名字起个什么 数码管驱动电路,驱动数码管发光。共有七段数码管为 g,f,e,d,c,b,a 接高电频 的数码管发亮从而显示数字,管脚图如下: 图 4.2 数码管管脚 仿真波形如下: 图 4.3 数码管仿真波形 程序代码如下: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY deled IS PORT(n
6、um:INstd_logic_vector(3 downto 0); 太原科技大学:名字起个什么 A:out std_logic; B:out std_logic; C:out std_logic; D:out std_logic; E:out std_logic; F:out std_logic; G:out std_logic; dp:out std_logic ); END deled; ARCHITECTURE fun OF deled IS signal led:std_logic_vector(6 downto 0); BEGIN A=led(6); B=led(5); C=led
7、(4); D=led(3); E=led(2); F=led(1); G=led(0); dp=0; LED=“1111110“WHEN NUM=“0000“ELSE “0110000“WHEN NUM=“0001“ELSE “1101101“WHEN NUM=“0010“ELSE “1111001“WHEN NUM=“0011“ELSE “0110011“WHEN NUM=“0100“ELSE “1011011“WHEN NUM=“0101“ELSE “1011111“WHEN NUM=“0110“ELSE “1110000“WHEN NUM=“0111“ELSE “1111111“WHEN
8、 NUM=“1000“ELSE “1111011“WHEN NUM=“1001“ELSE “1110111“WHEN NUM=“1010“ELSE “0011111“WHEN NUM=“1011“ELSE “1001110“WHEN NUM=“1100“ELSE “0111101“WHEN NUM=“1101“ELSE “1001111“WHEN NUM=“1110“ELSE “1000111“WHEN NUM=“1111“; END fun; 太原科技大学:名字起个什么 2.控制分钟模块 图 4.4 分钟计时器 分钟计时器由一个 60 进制的计数器构成的,具有清零,置数和计数的功能。其 中
9、reset 为清零信号,当 reset 为 0 时,分计时器清零;setmin 为调分信号与 置数信号 set 相连;clk 为驱动分计时器工作的时钟,与 enmin 相连接;daout 为输出信号与 seltime 的 minute 相连。 程序代码如下: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY minute IS PORT(clk,reset,setmin:INSTD_LOGIC; daout:out std_logic_vector(6 downto 0); EN
10、D entity minute; ARCHITECTURE fun OF minute IS SIGNAL count:STD_LOGIC_VECTOR(6 downto 0); BEGIN daout=count; process(clk,reset,setmin) begin if(reset=0)then count=“0000000“; elsif(setmin=0)then elsif(clkevent and clk=1)then if(count(3 downto 0)=“1001“)then if(count16#60#)then if(count=“1011001“)then
11、 count=“0000000“ ; ELSE count=count+7; 太原科技大学:名字起个什么 end if; else count=“0000000“; end if; elsif(count16#60#)then count=count+1; else count=“0000000“; end if; end if; end process; END fun; 仿真波形如下: 图 4.5 分钟计时器仿真波形 3.控制秒模块 图 4.6 秒计时器 太原科技大学:名字起个什么 由一个 60 进制的计数器构成的,具有清零,置数和计数的功能。其中 reset 为 清零信号,当 reset
12、 为 0 时,秒计时器清零;setsec 为调秒信号与 set 置数信 号相连;clk 为驱动秒计时器的时钟与 ensec 相连接;daout 为输出信号与 seltime 中的 sec 相连;enmin 控制 minute 的计时。 程序代码如下: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY second IS PORT(clk,clk1,reset,setsec:INSTD_LOGIC; enmin:OUT STD_LOGIC; daout :out std_logic
13、_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 -enmin=k; if(reset=0)then count=“0000000“; elsif(setsec=0)then elsif(clkevent and clk=1)then if(count(3 downto 0)=“1001“)then if(count16
14、#60#)then if(count=“1011001“)then enmin=1; count=“0000000“; ELSE count=count+7; end if; else count=“0000000“; end if; elsif(count16#60#)then count=count+1; enmin=0after 100 ns; else count=“0000000“; end if; 太原科技大学:名字起个什么 end if; end process; END fun 仿真波形如下: 图 4.7 秒计时器仿真波形 4.控制毫秒模块 图 4.8 毫秒计时器 毫秒计时器由
15、一个 10 进制的计数器构成的,具有清零,置数和计数的功能。其 中 reset 为清零信号,当 reset 为 0 时,毫秒时器清零;setmsec 为调秒信号与 置数信号 set 相连;clk 为驱动毫秒时器工作的时钟与 fenpin 相连接;daout 为 输出信号与 seltime 的 msec 相连;ensec 控制 second 的计时。 程序代码如下: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY msecond IS PORT(clk,reset,setsec:
16、INSTD_LOGIC; ensec:OUTSTD_LOGIC; daout :OUT std_logic_vector(7 downto 0); END entity msecond; ARCHITECTURE fun OF msecond IS SIGNAL count:STD_LOGIC_VECTOR(7 downto 0); 太原科技大学:名字起个什么 BEGIN daout=count; process(clk,reset,setsec) begin if(reset=0)then count=“00000000“; elsif(setsec=0)then elsif(clkevent and clk=1)then if(count(3 downto 0)=“1001“)then if(count16#A0#)then if(count=“10011001“)then ensec=1; count=“00000000“; ELSE count=count+7; end if; else coun