My title page contents

复位起停数字秒表设计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


演示视频:

设计文档:

数字秒表设计.doc

数字秒表设计报告

一、秒表的背景需求

   在日常生活中经常会用到数字秒表。本设计设计的秒表具有如下功能:

    1、 计时精度大于1/1000计时器能显示1/1000的时间,提供给计时器内部定时的时钟频率为120kHz;计时器的最长计时时间为1小时,计时最长时间为5959.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;

代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 复位起停数字秒表设计VHDL代码Quartus仿真

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员