VHDL课程设计--数字秒表

  • 格式:doc
  • 大小:531.00 KB
  • 文档页数:14

下载文档原格式

  / 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于VHDL语言的数字秒表实现041020421夏进1510301班

2013-5-1

基于VHDL语言的数字秒表实现

041020421 夏进 1510301班

1 设计方案

1.1 系统功能要求

设计一块数字秒表,能够精确反映计时时间,并完成复位、计时功能。秒表计时的最大范围为1小时,精度为0.01秒,并可显示计时时间的分、秒、0.1秒等度量。

( 1) 具有秒表系统功能要求显示功能, 用6个数码管分别显示分、秒、0.01秒; 计时范围为00: 00: 00~ 59: 59:99。

( 2) 计时精度是0.01s;

( 3) 具有启/ 停开关, 复位开关。

1. 2 总体框图

根据系统设计要求, 系统的底层设计主要由六十进制计数器模块、二十四进制计数器模块、分频模块、LED显示模块组成。系统顶层设计图如图所示:

图中左边为三个输入信号en,clk,reset;分为启/ 停开关,时钟信号和复位开关。

主要模块有:模60计数器(count60),模100计数器(count100),分频器(clk_div),复位控制(control),译码器(yima),防抖模块(fdou),状态变换模块(change)。

右边是六个LED显示输出信号。

2 模块功能设计

由模60计数器模块与模100计数器模块进行计数;实验室仪器可产生标准的1kHz的时钟信号,通过分频器模块产生所需的100Hz的时钟信号;复位模块可进行计数器复位操作;译码器是为了将四位二进制信号转换为LED所需的七位二进制编码;防抖模块用于消除用户按键时的抖动消除,为方便仿真,此处原始时钟信号3周期以上可产生信号;状态变换模块是为了用户按键后信号的变换及保持。

2. 1 模60计数器

该模块部分VHDL 源程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY count60 IS

PORT( en,Reset,clk: in STD_LOGIC;

qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);

qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);

rco: OUT STD_LOGIC);

END count60;

ARCHITECTURE a OF count60 IS

BEGIN

process(clk)

variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);

variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);

begin

If Reset ='0'then tma:="0000"; tmb:="0000";

elsif clk'event and clk='1' then

if en='1' then

rco<=tmb(2)and tmb(0)and tma(3)and tma(0);

if tma="1001" then tma:="0000";

if tmb="0101" then tmb:="0000";

else tmb:=tmb+1;

end if;

else tma:=tma+1;

end if;

end if;

end if;

qa<=tma;qb<=tmb;

end process;

END a;

2. 2 模100计数器

该模块部分VHDL 源程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY count100 IS

PORT( en,Reset,clk: in STD_LOGIC;

qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);

qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);

rco: OUT STD_LOGIC);

END count100;

ARCHITECTURE a OF count100 IS

BEGIN

process(clk)

variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);

variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);

begin

If Reset ='0'then tma:="0000"; tmb:="0000";

elsif clk'event and clk='1' then

if en='1' then

rco<=tmb(3)and tmb(0)and tma(3)and tma(0);

if tma="1001" then tma:="0000";

if tmb="1001" then tmb:="0000";

else tmb:=tmb+1;

end if;

else tma:=tma+1;

end if;

end if;

end if;

qa<=tma;qb<=tmb;

end process;

END a;

2. 3 分频器模块

该模块部分VHDL 源程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;