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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM