1、 基于基于 VHDLVHDL 语言的数字秒表语言的数字秒表实现实现 2013-5-1 基于 VHDL 语言的数字秒表实现 1 基于基于 VHDLVHDL 语言的数字秒表语言的数字秒表实现实现 1 1 设计方案设计方案 1.1. 1 1 系统功能要求系统功能要求 设计一块数字秒表,能够精确反映计时时间,并完成复位、计时功能。秒表 计时的最大范围为 1 小时, 精度为 0.01 秒, 并可显示计时时间的分、 秒、 0.1 秒等度量。 ( 1) 具有秒表系统功能要求显示功能, 用6个数码管分别显示分、秒、0.01秒; 计时范围为 00: 00: 00 59: 59:99。 ( 2) 计时精度是0.0
2、1s; ( 3) 具有启/ 停开关, 复位开关。 1. 2 1. 2 总体总体框图框图 根据系统设计要求, 系统的底层设计主要由六十进制计数器模块、 二十四进制计数器模 块、分频模块、LED显示模块组成。系统顶层设计图如图所示: 图中左边为三个输入信号en,clk,reset;分为启/ 停开关,时钟信号和复位开关。 主要模块有:模60计数器(count60),模100计数器(count100),分频器(clk_div),复位控制 (control),译码器(yima),防抖模块(fdou),状态变换模块(change)。 基于 VHDL 语言的数字秒表实现 2 右边是六个LED显示输出信号。
3、2 2 模块功能设计模块功能设计 由模60计数器模块与模100计数器模块进行计数; 实验室仪器可产生标准的1kHz的时钟 信号,通过分频器模块产生所需的100Hz的时钟信号;复位模块可进行计数器复位操作;译 码器是为了将四位二进制信号转换为LED所需的七位二进制编码;防抖模块用于消除用户按 键时的抖动消除,为方便仿真,此处原始时钟信号3周期以上可产生信号;状态变换模块是 为了用户按键后信号的变换及保持。 2. 1 2. 1 模模6060计数器计数器 该模块部分VHDL 源程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_
4、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_VE
5、CTOR(3 DOWNTO 0); begin If Reset =0then tma:=“0000“; tmb:=“0000“; 基于 VHDL 语言的数字秒表实现 3 elsif clkevent 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;
6、 qa=tma;qb=tmb; end process; END a; 2. 2 2. 2 模模100100计数器计数器 该模块部分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 基于 VHDL 语言的数字秒表实现 4 BEGIN process(clk) variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0)