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

Posted warms

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

以上是关于VHDL设计----十进制计数器的主要内容,如果未能解决你的问题,请参考以下文章

VHDL 计数器实验看VHDL语言

用VHDL设计正弦信号发生器

RTL基本知识:全加器设计(VHDL)

VHDL语句问题

06-BCD计数器设计与应用——小梅哥FPGA设计思想与验证方法视频教程配套文档

VHDL:在常量中使用十六进制值