VHDL秒表计时器.docx

上传人:b****7 文档编号:10592904 上传时间:2023-02-21 格式:DOCX 页数:9 大小:15.70KB
下载 相关 举报
VHDL秒表计时器.docx_第1页
第1页 / 共9页
VHDL秒表计时器.docx_第2页
第2页 / 共9页
VHDL秒表计时器.docx_第3页
第3页 / 共9页
VHDL秒表计时器.docx_第4页
第4页 / 共9页
VHDL秒表计时器.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

VHDL秒表计时器.docx

《VHDL秒表计时器.docx》由会员分享,可在线阅读,更多相关《VHDL秒表计时器.docx(9页珍藏版)》请在冰豆网上搜索。

VHDL秒表计时器.docx

VHDL秒表计时器

 

VHDL秒表计时器

本秒表计时器用于体育竞赛及各种要求有较精确时的各领域。

此计时器是用一块专用的芯片,用VHDL语言描述的。

它除开关、时钟和显示功能以外,它还包括1/100s计时器所有的控制和定时功能,其体积小,携带方便。

计时器的设计功能:

(1) 精度应大于1/100s

(2) 计时器的最长计时时间为1小时

      在一般的短时间计时应用中,1小时应该足够了。

为此需要一个6位显示器,显示最长时间为59分59.99秒。

(3) 设置复位和启/停开关

      复位开关用来使计时器清0,并作好清0准备。

启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。

复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程应立即终止,并对计时器清零。

设计方案:

   为了便于描述,将整个计时控制芯片分成5个子模块:

键输入子模块(keyin),时钟产生子模块(clkgen),控制子模块(ctrl),定时计数子模块(cntclk)和显示子模块(disp),各模块之间信号连接关系的方框图如下:

芯片设计:

各模块程序及生成的符号文件如下:

keyin模块设计

该模块的描述是为了产生单个复位脉冲res和启停脉冲stst.整个功能模块用两个进程语句描述。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitykeyinis

port(reset,start_stop,clk:

instd_logic;

res,stst:

outstd_logic);

endentity;

architectureaofkeyinis

signalres0,res1,stst0,stst1:

std_logic;

begin

process(clk)

begin

if(clk'eventandclk='0')then

 res1<=res0;

 res0<=reset;

 stst1<=stst0;

 stst0<=start_stop;

endif;

endprocess;

process(res0,res1,stst0,stst1)

begin

res<=clkandres0and(notres1);

stst<=clkandstst0and(notstst1);

endprocess;

enda;

clkgen模块设计

该模块的功能是产生100Hz的计时允许信号cntclk和25Hz的宽度为1ms的键输入时钟信号keycek.

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

 

ENTITYcnt10IS

   PORT(reset,en,clk:

INSTD_LOGIC;

         carry:

OUTSTD_LOGIC;

         q   :

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCNT10;

 

ARCHITECTURErtlOFcnt10IS

    SIGNALqs:

STD_LOGIC_VECTOR(3DOWNTO0);

    SIGNALca:

STD_LOGIC;

BEGIN

   PROCESS(clk)

     BEGIN

      IF(clk'EVENTANDclk='1')THEN

         IF(reset='1')THEN

             qs<="0000";

         ELSIF(en='1')THEN

             IF(qs="1001")THEN

               qs<="0000";

               ca<='0';

             ELSIF(qs="1000")THEN

               qs<=qs+1;

               ca<='1';

             ELSE

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

 

ENTITYcnt4IS

   PORT(reset,en,clk:

INSTD_LOGIC;

         carry      :

OUTSTD_LOGIC;

         q          :

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

ENDCNT4;

 

ARCHITECTURErtlOFcnt4IS

    SIGNALqs:

STD_LOGIC_VECTOR(1DOWNTO0);

    SIGNALca:

STD_LOGIC;

BEGIN

   PROCESS(clk)

     BEGIN

      IF(clk'EVENTANDclk='1')THEN

         IF(reset='1')THEN

             qs<="00";

         ELSIF(EN='1')THEN

             IF(qs="11")THEN

               qs<="00";

               ca<='0';

             ELSIF(qs="10")THEN

               qs<=qs+1;

               ca<='1';

             ELSE

               qs<=qs+1;

               ca<='0';

             ENDIF;

         ENDIF;

      ENDIF;

     ENDPROCESS;

    PROCESS(ca)

    BEGIN

       q<=qs;

       carry<=caANDen;

    ENDPROCESS;

 ENDrtl;

 

  

ctrl子模块

该模块的功能是产生计时计数模块的计数允许信号cnten

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

entityctrlis

port(sysres,res,stst,cntclk:

instd_ulogic;

centen:

outstd_ulogic);

endctrl;

architecturertlofctrlis

signalenb1:

std_ulogic;

begin

process(stst,sysres,res)

begin

if(sysres='1'orres='1')then

enb1<='0';

elsif(stst'eventandstst='1')then

enb1<=notenb1;

endif;

endprocess;

centen<=enb1andcntclk;

endrtl;

cntblk模块设计

该模块的功能是实现计时计数,它由四个十进制计数器和两个六进制计数器串结而成。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

 

ENTITYcnt10IS

   PORT(reset,en,clk:

INSTD_LOGIC;

         carry:

OUTSTD_LOGIC;

         q   :

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCNT10;

 

ARCHITECTURErtlOFcnt10IS

    SIGNALqs:

STD_LOGIC_VECTOR(3DOWNTO0);

    SIGNALca:

STD_LOGIC;

BEGIN

   PROCESS(clk)

     BEGIN

      IF(clk'EVENTANDclk='1')THEN

         IF(reset='1')THEN

             qs<="0000";

         ELSIF(en='1')THEN

             IF(qs="1001")THEN

               qs<="0000";

               ca<='0';

             ELSIF(qs="1000")THEN

               qs<=qs+1;

               ca<='1';

             ELSE

               qs<=qs+1;

               ca<='0';

             ENDIF;

         ENDIF;

      ENDIF;

     ENDPROCESS;

    PROCESS(ca,en)

    BEGIN

       q<=qs;

       carry<=caANDen;

    ENDPROCESS;

 ENDrtl;

  

 

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

 

ENTITYcnt6IS

   PORT(reset,en,clk:

INSTD_LOGIC;

         carry      :

OUTSTD_LOGIC;

         q          :

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCNT6;

 

ARCHITECTURErtlOFcnt6IS

    SIGNALqs:

STD_LOGIC_VECTOR(3DOWNTO0);

    SIGNALca:

STD_LOGIC;

BEGIN

   PROCESS(clk)

     BEGIN

      IF(clk'EVENTANDclk='1')THEN

         IF(reset='1')THEN

             qs<="0000";

         ELSIF(en='1')THEN

             IF(qs="0101")THEN

               qs<="0000";

               ca<='0';

             ELSIF(qs="0100")THEN

               qs<=qs+1;

               ca<='1';

             ELSE

               qs<=qs+1;

               ca<='0';

             ENDIF;

         ENDIF;

      ENDIF;

     ENDPROCESS;

    PROCESS(ca,en)

    BEGIN

       q<=qs;

       carry<=caANDen;

    ENDPROCESS;

 ENDrtl;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1