Reset

Typisch is het gewenst om een reset ingang te hebben om alles terug naar een gekende begintoestand te brengen. Er zijn typisch 2 manieren om dit te doen, een synchrone reset of een asynchrone reset.

Asynchrone reset

Onderstaand voorbeeld is van een D flip-flop met asynchrone reset. Je ziet hier dat de reset onderdeel is van de sensitivity list. De reset staat hier als eerste in het process.

Synchrone reset

Onderstaand voorbeeld is van een D flip-flop met synchrone reset. Je ziet hier dat de reset geen onderdeel is van de sensitivity list. De reset staat hier na de if van de stijgende flank van de clock.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity asynchronous_reset is
    Port (
        clock: in std_logic;
        reset: in std_logic;
        data_in: in std_logic;
        data_out: out std_logic
    );
end asynchronous_reset;

architecture Behavioral of asynchronous_reset is

    signal clock_i: std_logic;
    signal reset_i: std_logic;
    signal data_in_i: std_logic;
    signal data_out_i: std_logic;

begin

    clock_i <= clock;
    reset_i <= reset;
    data_in_i <= data_in;
    data_out <= data_out_i;

    PREG: process(reset_i, clock_i)
    begin
        if reset_i =  '1' then
            data_out_i <= '0';
        else
            if clock_i'event and clock_i = '1' then
                data_out_i <= data_in_i;    
            end if;
        end if;

    end process;
end Behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity asynchronous_reset is
    Port (
        clock: in std_logic;
        reset: in std_logic;
        data_in: in std_logic;
        data_out: out std_logic
    );
end asynchronous_reset;

architecture Behavioral of asynchronous_reset is

    signal clock_i: std_logic;
    signal reset_i: std_logic;
    signal data_in_i: std_logic;
    signal data_out_i: std_logic;

begin

    clock_i <= clock;
    reset_i <= reset;
    data_in_i <= data_in;
    data_out <= data_out_i;

    PREG: process(clock_i)
    begin
        if clock_i'event and clock_i = '1' then
            if reset_i =  '1' then
                data_out_i <= '0';
            else
                data_out_i <= data_in_i;    
            end if;
        end if;
    end process;

end Behavioral;

Voor sequentiële processen zijn er maximaal 2 signalen (clock en eventueel reset) die in de sensitivity list staan. Bij combinatorische processen zijn het alle signalen.



ff_withreset.png