复位起停数字秒表设计VHDL代码Quartus仿真
名称:复位起停数字秒表设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
复位起停数字秒表设计
1、 计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时的时钟频率为120kHz;计时器的最长计时时间为1小时,计时最长时间为59分59.999秒。
2、设计有复位和起/停开关
(1) 复位开关用来使计时器清零,并做好计时准备。
(2) 起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关计时终止。
(3) 复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程立刻终止,并对计时器清零。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
数字秒表设计报告
一、秒表的背景需求
在日常生活中经常会用到数字秒表。本设计设计的秒表具有如下功能:
1、 计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时的时钟频率为120kHz;计时器的最长计时时间为1小时,计时最长时间为59分59.999秒。
2、设计有复位和起/停开关
(1) 复位开关用来使计时器清零,并做好计时准备。
(2) 起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关计时终止。
(3) 复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程立刻终止,并对计时器清零。
软件版本:quartusII 9.0
二、设计思路
数字秒表主要有分频器、十进制计数器(1/10秒、1/100秒,1/1000秒、秒的个位、分的个位,共5个十进制计数器)、以及秒的十位和分的十位两个六进制计数器组成。设计中首先需要获得一个比较精确的1000Hz计时脉冲,即周期为1/1000秒的计时脉冲。其次,除了对每一计数器需设置清零信号输入外,还需在4个十进制计数上设置时钟使能信号,即计时允许信号,以便作为秒表的计时起停控制开关。7个计数器中的每一计数的4位输出,通过外设的BCD译码器输出显示。
首先分频器将120kHz的时钟信号分频到1000Hz,再连到3个十进制计数器,计时000~999毫秒,三个十进制计数器级联,即前一个计数器的进位输出作为下一级计数器的时钟信号,这样当前一级计数器的计数值到9后会触发下一级计数器加1,同时前一级回0。
然后再连接一个十进制计数器个一个6进制计数器,同理也是级联,可以计时00~59秒。最后再连接一个十进制计数器和一个6进制计数器,同理也是级联,可以计时00~59分。最终计时器的最长计时时间为1小时,显示的最长时间为59分59.999秒。
每个十进制计数器和6进制计数器都有一个clr信号和ena信号,clr信号用于
异步清零,即clr为高电平时计数器清零,低电平时若ena信号为高电平则正常计时,若ena为低电平则停止计数。通过这两个信号可以实现秒表的复位和启停功能。
三、具体编程设计(分频器、十进制计数器、六进制计数器的源程序及仿真图)
1.分频器代码如下:
略
分频器仿真图如下:

上图可以看到,输入时钟clk分频输出了1KHz的信号clk_1K.
2.十进制计数器代码如下:
--十进制计数器
ENTITY count_10 IS
PORT (
clk : IN STD_LOGIC;--时钟
clr : IN STD_LOGIC;--清零,高电平清零
ena : IN STD_LOGIC;--使能,高电平计数
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数值
carry_out : OUT STD_LOGIC--进位
);
END count_10;
ARCHITECTURE behave OF count_10 IS
SIGNAL CNT : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000";
BEGIN
略
仿真图如下:
可以看到,CQ每个时钟信号累加一次,当clr高电平时清零,当ena高电平时正常计数,低电平时暂停。当计数到9时,产生一个进位信号,同时计数器回到0。

3. 六进制计数器代码如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
--六进制计数器
ENTITY count_6 IS
PORT (
clk : IN STD_LOGIC;--时钟
clr : IN STD_LOGIC;--清零,高电平清零
ena : IN STD_LOGIC;--使能,高电平计数
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数值
carry_out : OUT STD_LOGIC--进位
);
END count_6;
ARCHITECTURE behave OF count_6 IS
SIGNAL CNT : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000";
BEGIN
略
END behave;
仿真图如下:
可以看到,CQ每个时钟信号累加一次,当clr高电平时清零,当ena高电平时正常计数,低电平时暂停。当计数到5时,产生一个进位信号,同时计数器回到0。

四、顶层电路的程序及仿真波形
顶层电路代码如下:
略
仿真图如下:
可以看到,clr高电平时,秒表计时清零,ena高电平时计时,低电平时暂停。

五、结论
通过仿真可知,分频器、十进制计数器、六进制计数器均实现了对应的模块功能,最终通过顶层文件将这三个模块连接,并整体仿真,仿真图表明秒表功能正常,满足复位、暂停等功能,最大计时时间为59分59秒999毫秒。
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --六进制计数器 ENTITY count_6 IS PORT ( clk : IN STD_LOGIC;--时钟 clr : IN STD_LOGIC;--清零,高电平清零 ena : IN STD_LOGIC;--使能,高电平计数 CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数值 carry_out : OUT STD_LOGIC--进位 ); END count_6; ARCHITECTURE behave OF count_6 IS SIGNAL CNT : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; BEGIN --控制计数 PROCESS (clk, clr) BEGIN IF (clr = '1') THEN CNT <= "0000"; ELSIF (clk'EVENT AND clk = '1') THEN IF (ena = '1') THEN IF (CNT = "0101") THEN--计数0~5 CNT <= "0000";--回 ELSE CNT <= CNT + "0001";--计数 END IF; ELSE CNT <= CNT; END IF; END IF; END PROCESS;
代码文件(付费下载):
![]()
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 复位起停数字秒表设计VHDL代码Quartus仿真
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm