VHDL设计----十进制计数器

一、异步复位加法计数器

 代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity CNT10 is
    port(
        CLK,RST,EN: in std_logic;
        DOUT : out std_logic_vector (3 downto 0);
        COUT : OUT std_logic
    );
end CNT10;
architecture behav of CNT10 is
begin
    process(CLK,RST,EN)
        variable Q : std_logic_vector (3 downto 0);
    begin
    if RST = '1' then Q := (others => '0');
    elsif CLK 'event and CLK = '1' then
            if EN = '1' then 
                if Q < 9 then Q := Q + 1;
                else Q := (others => '0');
                end if;
            end if;
    end if;
    if Q = "1001" then COUT <= '1';
    else COUT <= '0'; 
    end if;
    DOUT <= Q;
    end process;
end behav;

仿真:

RST信号与CLK信号无关,随时可以置零

 

二、同步复位加法计数器

代码:

 

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity CNT10 is
    port(
        CLK,RST,EN: in std_logic;
        DOUT : out std_logic_vector (3 downto 0);
        COUT : OUT std_logic
    );
end CNT10;
architecture behav of CNT10 is
begin
    process(CLK,RST,EN)
        variable Q : std_logic_vector (3 downto 0);
    begin
    if CLK 'event and CLK = '1' then
        if RST = '1' then Q := (others => '0');
        else
            if EN = '1' then 
                if Q < 9 then Q := Q + 1;
                else Q := (others => '0');
                end if;
            end if;
        end if;
    end if;
    if Q = "1001" then COUT <= '1';
    else COUT <= '0'; 
    end if;
    DOUT <= Q;
    end process;
end behav;

 

仿真:

RST信号只有等到CLK信号的下一个上升沿到时才能清零

 

三、总结

 

所谓“同步”是指与系统时钟同步。同步复位是指当复位信号有效时,并不立刻生效,而是要等到复位信号有效之后系统时钟的有效边沿到达时才会生效;
而异步复位则是立刻生效的,只要复位信号有效,无论系统时钟是怎样的,系统都会立即被复位。
在用VHDL描述复位信号时,在系统时钟有效边沿到达之后才判断同步复位是否有效;而对异步复位的判断则与系统时钟无关。

 

同步复位:
IF clock'event AND clock='1' THEN
    IF reset='1' THEN
        -- 复位系统
    ELSE
        -- 正常运作
    END IF;
END IF;
异步复位:
IF reset='1' THEN
    -- 复位系统
ELSIF clock'event AND clock='1' THEN
    -- 正常运作
END IF;

 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VHDL(Very High-Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,它可以用于设计数字电路。十进制计数器是一个常见的电路,用于计数从0到9的十个数字。 在VHDL中,可以使用状态机来实现十进制计数器。状态机是一个有限状态自动机,其中包含一组状态和状态之间的转移条件。 十进制计数器设计可以分为以下几个步骤: 1. 定义计数器的状态:在这种情况下,可以定义10个状态,分别表示0到9的十个数字。 2. 定义状态之间的转移条件:根据十进制计数器的特性,当计数器处于某个数字的状态时,通过递增计数器的值进入下一个状态。 3. 定义计数器的输入和输出计数器的输入通常为时钟信号,输出为当前计数的值。 4. 实现状态机:使用VHDL编写状态机的逻辑代码,定义每个状态之间的转移条件以及计数器的递增逻辑。 5. 进行仿真和验证:使用VHDL仿真工具对设计进行验证,确保计数器按照预期工作。 6. 下载到目标设备:将设计合成为逻辑门电路,并下载到目标FPGA(Field Programmable Gate Array)设备中进行实际测试。 通过以上步骤,可以设计一个VHDL十进制计数器。该计数器可以在时钟信号的驱动下,从0到9循环计数,并输出当前计数的值。这样的计数器在数字电路中有着广泛的应用,例如在显示器、计时器等场景中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值