vhdl秒表 实验报告

2019-08-30 20:43

EDA大作业实验报告

——数字秒表的设计实验

一 、实验目的:

1.通过实验了解数字秒表的工作原理,并实现。

2.进一步熟悉VHDL语言的编写驱动七段数码管显示的代码,熟悉quartes2软件的操作。 3.掌握VHDL编写的一些技巧。 二、实验要求:

1. 数字秒表的计数范围是0秒~59分59.99秒,即有分、秒、1%秒显示,显示的最长

时间为59分59秒。

2. 数字秒表的计时精度是10ms。

3. 复位开关可以在任何情况下使用,即便在计时过程,只要按下复位开关,计时器就

清零,并做好下次计时的准备。

4. 具有启/停开关,即按一下此开关,则可以启动计时器开始计时,再按一下此开关便

可以停止计时。 。

三、系统设计方案:

根据系统的设计要求,可以的到如图1的系统组成框图。系统设计采用自顶向下的设计方法,系统的整体组装设计原理图如图2所示,它主要由控制模块,分频模块,计时模块和显示模块四部分组成。

秒表工作原理和多少数字电子钟大致一样,不同的是秒表为0.01秒,整个秒表的时钟信号输入为40MHZ。所以,需要对时钟信号进行分频 假设该秒表应用场合小于1小时,秒表的显示格式为mm-ss-xx(mm表示分钟:0~59;ss表示秒:0~59;xx表示百分之一秒:0~99)。

(1) 控制模块

计时控制模块主要是对计时过程进行控制。计时控制模块可以由两个按钮开关来完成秒表的启动,停止和复位。 (2) 计时模块

计时模块实现的是计时功能,及时的方法是对标准时钟脉冲计数。由于秒表的计时范围是0秒~59分59.99秒,所以计数器可以由四个十进制计数器和两个六进制计数器构成,其中毫秒位,秒位和分位采用十进制计数器来实现,十秒位和十分位采用六进制计数器。 (3) 显示模块

计时显示模块是将计时值在LED七段数码管显示出来。 数字秒表 计时电路 计时控制电 控制状态机 分频电路 计数器 显示电路 七段译码器

一百进制计数器 十进制计数器

图一,系统组成框图

该时钟以六进制加法器和十进制加法器连接而成。 故原理图方案:整个秒表由两个六进制和四个十进制搭接而成(原理图如下)。 其中mh表示分钟的高位,ml表示分钟的地位,sh表示秒的高位,sl表示秒的地位,s100h表示十分之一秒,s100l表示百分之一秒。实验使用了异步使能,异步清零。时钟信号为100HZ。

图二,系统的整体组装设计原理图

四.源程序

1. 40MHZ分频器的设计程序: library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity FP400K is

Port ( RESET : in std_logic; CLK : in std_logic;

CLKOUT : out std_logic); end FP400K;

architecture Behavioral of FP400K is

signal div_val : integer range 0 to 200000; --分频值=256*2 signal div_clk : std_logic;--因为CLKOUT是out类型, --故不能在 <=的右边,

--用div_clk来暂存

begin

process(CLK,RESET) begin

if(RESET='0') then--RESET的优先级最高 div_clk <= '0';

elsif(CLK'event and CLK='1') then --'event是指

--信号的属性,意为此信号不稳定, --再加上CLK='1',故此句判断CLK的上升沿 if(div_val=200000) then div_val <= 0;

div_clk <= not div_clk; else

div_val <= div_val + 1;--在CLK的上升

--沿div_val自加1,加到256时清零并将div_clk取反 end if; end if; end process;

CLKOUT <= div_clk;

end Behavioral;

2.:十进制计数器源程序:

--cnt10

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cnt10 IS PORT(clr:IN STD_LOGIC; en,clk:IN STD_LOGIC; co : out std_logic; cnt:BUFFER INTEGER RANGE 9 DOWNTO 0); END cnt10; ARCHITECTURE example OF cnt10 IS BEGIN

PROCESS(clr,clk) BEGIN IF clr='1' THEN cnt<=0; ELSIF en<='1' then if clk'EVENT AND clk='1' THEN IF (cnt=9) THEN cnt<=0;co<='1'; elsif en<='0' then cnt<=cnt; ELSE cnt<=cnt+1;co<='0'; END IF; END IF; end if; END PROCESS; END example; 3:六进计数器设计 程序如下: --Cnt6 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cnt6 IS PORT(clr:IN STD_LOGIC; en,clk:IN STD_LOGIC; co : out std_logic; cnt:BUFFER INTEGER RANGE 9 DOWNTO 0); END cnt6; ARCHITECTURE example OF cnt6 IS BEGIN PROCESS(clr,clk) BEGIN IF clr='1' THEN cnt<=0; ELSIF en<='1' then if clk'EVENT AND clk='1' THEN IF (cnt=5) THEN cnt<=0;co<='1'; elsif en<='0' then cnt<=cnt; ELSE cnt<=cnt+1;co<='0'; END IF; END IF; end if; END PROCESS;


vhdl秒表 实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:华光一百签

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: