原创 【博客大赛】【原创】基于FPGA的秒计时器

2012-5-4 16:58 1915 18 21 分类: FPGA/CPLD

       本例子是由VHDL语言编写的60秒计时器,主要是学习编程思想,该例子可以根据自己的需要扩展为时钟程序。具体程序如下所示:

-------------------------------------------------------------------
-- 说明: 1位十进制计数器模块
-- 文件: CNT10.vhd
-- 作者:
-- 日期: 2012/03/09
-- 修改:
-- 软件: Altera QuartusII 9.0 
-- 芯片: Altera Cyclone FPGA (EP1C3T144C8)
-------------------------------------------------------------------


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;   --运算符重载的一个头文件


--实体描述部分
ENTITY CNT10 IS
      PORT(                  --端口声明
            CLK, CLR, EN : IN  STD_LOGIC;
                    COUT : OUT STD_LOGIC;
                       Q : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
           ); 
END CNT10;


--结构体描述部分
ARCHITECTURE bhv OF CNT10 IS
 
 SIGNAL Q1 : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );--定义四位宽的矢量型信号节点
 
BEGIN
 PROCESS(CLR,CLK)  --IF语句放在进程中
 BEGIN
  IF CLR = '0' THEN Q1 <= "0000";   --复位信号,当RESET为1时复位,正常为低电平
   ELSIF CLK'EVENT AND CLK = '1' THEN
          IF EN='1' THEN
     IF Q1<9 THEN Q1 <= Q1+1;COUT <= '0';    --计数器未计满9就继续计数
      ELSE Q1 <= "0000";COUT <= '1';      --计数器计满9就清零,产生进位信号
     END IF;
    END IF;
  END IF;
 -- IF  Q1 = "1001"  THEN COUT <= '1';   --当计数器计到9时,产生进位信号
 --    ELSE COUT <= '0';
 -- END  IF;
 END PROCESS;    --进程结束
 Q <= Q1;        --端口赋值
END bhv;   --结束结构体

 

 

-------------------------------------------------------------------
-- 说明: 1位6进制计数器模块
-- 文件: CNT6.vhd
-- 作者:
-- 日期: 2012/03/26
-- 修改:
-- 软件: Altera QuartusII 9.0 
-- 芯片: Altera Cyclone FPGA (EP1C3T144C8)
-------------------------------------------------------------------


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;   --运算符重载的一个头文件


--实体描述部分
ENTITY CNT6 IS
      PORT(                  --端口声明
            CLK, CLR, EN : IN  STD_LOGIC;
                    COUT : OUT STD_LOGIC;
                       Q : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
           ); 
END CNT6;


--结构体描述部分
ARCHITECTURE bhv OF CNT6 IS
 
 SIGNAL Q1 : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );--定义四位宽的矢量型信号节点
 
BEGIN
 PROCESS(CLR,CLK)  --IF语句放在进程中
 BEGIN
  IF CLR = '0' THEN Q1 <= "0000";   --复位信号,当RESET为1时复位,正常为低电平
   ELSIF CLK'EVENT AND CLK = '1' THEN
          IF EN='1' THEN
     IF Q1<5 THEN Q1 <= Q1+1;COUT <= '0';    --计数器未计满5就继续计数
      ELSE Q1 <= "0000";COUT <= '1';      --计数器计满5就清零,产生进位信号
     END IF;
    END IF;
  END IF;
 -- IF  Q1 = "1001"  THEN COUT <= '1';   --当计数器计到5时,产生进位信号
 --    ELSE COUT <= '0';
 -- END  IF;
 END PROCESS;    --进程结束
 Q <= Q1;        --端口赋值
END bhv;   --结束结构体

 

 

-------------------------------------------------------------------
-- 说明: 计数器的顶层设计
-- 文件: CNT.vhd
-- 作者:
-- 日期: 2012/03/26
-- 修改:
-- 软件: Altera QuartusII 9.0 
-- 芯片: Altera Cyclone FPGA (EP1C3T144C8)
-------------------------------------------------------------------

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;


--实体描述部分
ENTITY CNT IS
      PORT(                  --端口声明
            CLK,CLR ,EN : IN  STD_LOGIC;
       COUT : OUT STD_LOGIC;
         QL : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );
    --      QM : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );
            QH : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
           );
END CNT;


--结构体描述部分
ARCHITECTURE behav OF CNT IS

    COMPONENT CNT10    --调用一位十进制计数器
        PORT(          --端口声明
           CLK,CLR,EN : IN  STD_LOGIC;
                 COUT : OUT STD_LOGIC;
                    Q : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
           );
    END COMPONENT;  --结束标志
   
    COMPONENT CNT6    --调用一位6进制计数器
        PORT(          --端口声明
           CLK,CLR,EN : IN  STD_LOGIC;
                 COUT : OUT STD_LOGIC;
                    Q : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
           );
    END COMPONENT;  --结束标志
   
SIGNAL cout1 : STD_LOGIC;    --定义了3个信号节点,作为内部的连接线使用

BEGIN
    u1 : CNT10 PORT MAP (CLK=>CLK,CLR=>CLR,EN=>EN,COUT=>cout1,Q=>QL);
    u2 : CNT6  PORT MAP (CLK=>cout1,CLR=>CLR,EN=>EN,COUT=>COUT,Q=>QH);
-- u3 : CNT10 PORT MAP (CLK=>cout2,RESET=>RESET,COUT=>COUT,Q=>QH);
END behav;   --结束结构体


 

文章评论3条评论)

登录后参与讨论

东莞元宝代理Microchip长电二三极管 2015-11-25 18:27

是的!但不要太迷信!

用户1523975 2015-11-24 19:47

机器人是当前的热点。

用户1727656 2015-11-24 08:46

很好!加油!

用户593939 2015-11-23 22:54

多多指导,认真学习,写的更好

用户377235 2012-5-23 18:49

非常好……

用户377235 2012-5-5 16:25

好棒啊!!!!!!!!!!!!!!!强大

用户377235 2012-5-5 12:36

好深啊 看不懂呀!呜呜呜

相关推荐阅读
zhangzhihang 2012-10-10 13:09
【博客大赛】FPGA中嵌入8051内核
        首先,安装Quartus II软件;         在移植前,先做准备工作:使用 KeiC51 软件,编写一个简单的 8051 单片机程序,并生成hex文件,程序如下(只是个...
zhangzhihang 2012-09-13 18:40
【TI博客大赛】电子设计竞赛作品——数字式LCR测量仪
  数字式LCR测量仪   摘  要 本文设计了一个基于MSP430F5438A的低功耗RLC参数自动测试仪,采用数字电桥测量方法测量电阻、电容、电感值及电容电感的D值...
zhangzhihang 2012-05-04 17:03
【博客大赛】【原创】基于FPGA的1位二进制全加器的设计
------------------------------------------------------------------- -- 说明: 半加器的设计 -- 文件: h_adder...
zhangzhihang 2012-04-21 23:29
【博客大赛】【原创】基于FPGA的频率计设计
FPGA即是Field-Programmable Gate Array(现场可编程门阵列)英文的首字母,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。目前以硬件描述语言用得比...
我要评论
3
18
关闭 站长推荐上一条 /2 下一条