VHDL模十计数器

提示:源码+仿真代码


提示:以下是本篇文章正文内容,下面案例可供参考

一、“模十计数器”是什么?

对时钟 CLK 上升沿信号进行计数,输出是位宽 为 4 位的信号,每当计数到 10 时,便立即回复到初始状态,重新计数。

二、VHDL代码

代码原理:

要进行分频操作,因为FPGA板子的时钟频率过大,不易看到最终实验效果。
分频操作:我认为简单一点可以理解为原来1个上升沿计数+1,经过分频后变为每100000000个上升沿计数+1,计数值到达9后清0,周而复始。

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT10 IS
	PORT(CLK:IN STD_LOGIC;
		 DATA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
		 );
END CNT10;
ARCHITECTURE CNT10_BEHAVIOR OF CNT10 IS
SIGNAL CNT:STD_LOGIC_VECTOR(3 DOWNTO 0);
CONSTANT N : INTEGER :=100000000;
SIGNAL COUNTER : INTEGER RANGE 0 TO N;

BEGIN
	PROCESS(CLK)
	BEGIN
	   IF clk'EVENT AND clk='1' THEN         --上升沿
          IF COUNTER = N THEN
             COUNTER <= 0;                  --100000000个上升沿,COUNTER就清零,实现分频
             IF CNT="1001" THEN	           
                 CNT<="0000";
             ELSE
                 CNT<=CNT+1;
             END IF;
          ELSE
             COUNTER <= COUNTER + 1;
         END IF;
       END IF;
	END PROCESS;
	DATA<=CNT;
END CNT10_BEHAVIOR;

三、仿真代码

提示:仿真时我将上面源码中的常量 N赋值改为7,如下所示:

CONSTANT N : INTEGER :=7;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY TEST IS
--  PORT ( );
END TEST;

ARCHITECTURE BEHAVIORAL OF TEST IS
COMPONENT CNT10
PORT(CLK:IN STD_LOGIC;
     DATA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
     );
 END COMPONENT;
 
 --INPUTS
 SIGNAL CLK:  STD_LOGIC := '0';
--OUTPUTS
 SIGNAL DATA :STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";

 CONSTANT PERIOD : TIME := 10 NS;
 BEGIN
    UUT: CNT10 PORT MAP (
     CLK =>CLK,
     DATA=>DATA
     );
     A_PROCESS :PROCESS
      BEGIN
      CLK <= '0';
      WAIT FOR PERIOD/4;
      CLK <= '1';
      WAIT FOR PERIOD/4;

    END PROCESS;
END BEHAVIORAL;

四、RTL图

在这里插入图片描述

五、仿真图

在这里插入图片描述


总结

不同FPGA板子的时钟频率是不同的,可以修改代码改变计数周期。

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值