Reset strategy helps start your digital circuit in a known state. It makes sure your design works correctly from the beginning.
Reset strategy selection in VHDL
process (clk, reset) begin if reset = '1' then -- reset signals here elsif rising_edge(clk) then -- normal operation end if; end process;
Reset can be synchronous (checked with clock) or asynchronous (independent of clock).
Use asynchronous reset to respond immediately, synchronous reset to avoid timing issues.
process (clk, reset) begin if reset = '1' then q <= '0'; elsif rising_edge(clk) then q <= d; end if; end process;
process (clk) begin if rising_edge(clk) then if reset = '1' then q <= '0'; else q <= d; end if; end if; end process;
This VHDL code shows an asynchronous reset. When reset is '1', output q resets to '0' immediately. Otherwise, q follows input d on clock rising edge.
library ieee; use ieee.std_logic_1164.all; entity reset_example is port ( clk : in std_logic; reset : in std_logic; d : in std_logic; q : out std_logic ); end reset_example; architecture Behavioral of reset_example is signal q_reg : std_logic := '0'; begin process (clk, reset) begin if reset = '1' then q_reg <= '0'; elsif rising_edge(clk) then q_reg <= d; end if; end process; q <= q_reg; end Behavioral;
Asynchronous resets can cause glitches if not handled carefully.
Synchronous resets are safer for timing but react only on clock edges.
Choose reset type based on your hardware and timing needs.
Reset strategy sets your circuit to a known state at start or error.
Asynchronous reset acts immediately, synchronous reset acts on clock.
Pick the reset style that fits your design and hardware requirements.
Practice
Solution
Step 1: Understand asynchronous reset behavior
An asynchronous reset acts immediately when activated, without waiting for the clock signal.Step 2: Compare with synchronous reset
Synchronous reset waits for the clock edge, unlike asynchronous reset which is independent of the clock.Final Answer:
It resets the circuit immediately, independent of the clock. -> Option BQuick Check:
Asynchronous reset = immediate reset [OK]
- Confusing asynchronous with synchronous reset
- Thinking reset waits for clock edge
- Assuming reset needs a special clock
Solution
Step 1: Identify synchronous reset structure
Synchronous reset checks reset inside the clock edge condition, so reset is applied only on clock rising edge.Step 2: Analyze each option
process(clk) begin if rising_edge(clk) then if reset = '1' then q <= '0'; else q <= d; end if; end if; end process; checks reset inside rising_edge(clk), which is correct for synchronous reset. process(clk, reset) begin if reset = '1' then q <= '0'; elsif rising_edge(clk) then q <= d; end if; end process; uses asynchronous reset sensitivity. process(reset) begin if reset = '1' then q <= '0'; end if; end process; is asynchronous and incomplete. process(clk) begin if reset = '1' then q <= '0'; elsif rising_edge(clk) then q <= d; end if; end process; checks reset outside clock edge, incorrect for synchronous.Final Answer:
process(clk) begin if rising_edge(clk) then if reset = '1' then q <= '0'; else q <= d; end if; end if; end process; -> Option CQuick Check:
Synchronous reset inside clock edge = process(clk) begin if rising_edge(clk) then if reset = '1' then q <= '0'; else q <= d; end if; end if; end process; [OK]
- Putting reset check outside clock edge
- Using reset in sensitivity list for synchronous reset
- Confusing asynchronous and synchronous reset syntax
process(clk, rst) begin
if rst = '1' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
end if;
end process;What is the value of
q after reset rst goes high, regardless of clock?Solution
Step 1: Understand asynchronous reset effect
Whenrstis '1', the process setsqto '0' immediately, ignoring clock.Step 2: Confirm behavior regardless of clock
Becauserstis in sensitivity list and checked first,qresets immediately whenrst= '1'.Final Answer:
'0' immediately -> Option DQuick Check:
Asynchronous reset sets q to '0' immediately [OK]
- Thinking reset waits for clock edge
- Assuming q keeps old value during reset
- Confusing asynchronous with synchronous reset
process(clk, reset) begin
if rising_edge(clk) then
if reset = '1' then
q <= '0';
else
q <= d;
end if;
end if;
end process;Solution
Step 1: Check sensitivity list for synchronous reset
Synchronous reset requires only clock in sensitivity list; including reset causes unnecessary triggers.Step 2: Confirm reset check inside clock edge is correct
Reset is checked inside rising_edge(clk), which is correct for synchronous reset.Final Answer:
Reset should be in sensitivity list only if asynchronous -> Option AQuick Check:
Synchronous reset excludes reset from sensitivity list [OK]
- Including reset in sensitivity list for synchronous reset
- Moving reset check outside clock edge for synchronous reset
- Confusing sensitivity list rules
Solution
Step 1: Understand immediate reset need
Immediate reset after power-on requires asynchronous reset to act without waiting for clock.Step 2: Avoid glitches during clock transitions
Asynchronous resets can cause glitches; adding a glitch filter or synchronizer avoids this problem.Final Answer:
Asynchronous reset with glitch filter circuit -> Option AQuick Check:
Immediate reset + glitch avoidance = asynchronous with filter [OK]
- Choosing synchronous reset only (delays reset)
- Using async reset without glitch protection
- Assuming power-on defaults are reliable
Ready to prove it?
Pass the test and this pattern moves unknown
