VHDL课程设计--数字秒表
- 格式:doc
- 大小:531.00 KB
- 文档页数:14
基于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;