VHDL · Chapter 8.3 · Reset Design
Asynchronous Reset
An asynchronous reset does not wait for a clock. The moment it is asserted, the flip-flop is forced to its reset value through the flip-flop's dedicated reset pin. In VHDL that means the reset appears in the process sensitivity list and is tested before the clock edge. Its strengths mirror synchronous reset's weaknesses, because it resets even when the clock is stopped and it stays off the data path, so there is no reset multiplexer on the D input. Its hazard is at de-assertion. If reset releases asynchronously too close to a clock edge, the flip-flop can go metastable, which is the recovery and removal problem that the next lesson solves with a reset synchronizer. This lesson covers the coding pattern, the hardware it maps to, and that critical caveat.
Foundation13 min readVHDLAsynchronous ResetRegisterMetastabilityReset PinRTL
1. Engineering intuition — reset that does not wait for the clock
An asynchronous reset is wired to the flip-flop's special reset input, so it acts the instant it is asserted, regardless of the clock — even if the clock is stopped, the design snaps to its reset state right away. That immediacy is its great strength: power-on reset works before any clock is stable, and a global emergency reset takes effect at once. The catch is releasing it: because the flip-flop reacts to reset independently of the clock, letting reset go at the wrong instant — too near a clock edge — can leave the flip-flop caught between states (metastable). So asynchronous assertion is easy; asynchronous de-assertion needs care.
2. Formal explanation — reset in the sensitivity list
library ieee; use ieee.std_logic_1164.all;
-- ASYNCHRONOUS reset: rst is in the sensitivity list and tested BEFORE the clock edge.
async_rst : process (clk, rst) -- BOTH clk and rst in the sensitivity list
begin
if rst = '1' then q <= '0'; -- immediate: applies as soon as rst asserts
elsif rising_edge(clk) then q <= d; -- normal clocked behaviour otherwise
end if;
end process;The defining features: the sensitivity list contains both clk and rst, and the if rst = '1' test
comes before the elsif rising_edge(clk). So a change on rst wakes the process and forces the reset
value immediately, without waiting for an edge. This maps to the flip-flop's dedicated asynchronous reset
(clear/preset) pin.
3. Production RTL — asynchronous reset across a block
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;
ctrl : process (clk, rst)
begin
if rst = '1' then -- immediate reset of the block's state
state <= IDLE; count <= (others => '0'); valid <= '0';
elsif rising_edge(clk) then
state <= next_state;
if en = '1' then count <= count + 1; end if;
valid <= in_valid;
end if;
end process;What hardware does this become? Each state flip-flop's asynchronous reset pin is driven by rst, so the
whole block clears the instant rst asserts, with no clock required and no reset logic on the data path
(the D inputs stay clean). This is why asynchronous reset is common where the clock may be absent at
power-up, and on FPGA flip-flops that have dedicated async reset/clear inputs.
4. Hardware interpretation — the dedicated reset pin (and the de-assertion hazard)
5. Simulation interpretation — immediate effect
Asynchronous reset: q goes to its reset value immediately, not waiting for an edge
8 cycles6. Debugging example — the metastable release (and a reset glitch)
Expected: the design comes cleanly out of reset. Observed: intermittent, seed/temperature-dependent start-up failures, or some flip-flops leave reset a cycle apart; or a noise glitch on the reset line spuriously clears registers mid-operation. Root cause: the asynchronous reset de-asserted near a clock edge, violating recovery/removal timing and driving flip-flops metastable (or different flip-flops saw the release at slightly different times); separately, because async reset bypasses the clock, a glitch on the reset net directly resets flip-flops. Fix: assert asynchronously but de-assert synchronously — pass reset through a reset synchroniser so release is aligned to the clock (next lesson) — and keep the reset net clean/glitch-free with a balanced tree. Engineering takeaway: asynchronous reset assertion is safe; its release must be synchronised to the clock, and its net must be glitch-free, because it bypasses the clock entirely.
-- The robust idiom (detailed next lesson): assert async, RELEASE synchronously.
-- A small synchroniser turns the raw async reset into one that de-asserts on a clock edge,
-- which is then used as the asynchronous reset of the block — avoiding the metastable release.
process (clk, rst_sync) begin
if rst_sync = '1' then q <= '0';
elsif rising_edge(clk) then q <= d; end if;
end process;7. Common mistakes & what to watch for
- De-asserting asynchronous reset near a clock edge. Risks metastability (recovery/removal); synchronise the release (next lesson).
- A glitchy reset net. Async reset bypasses the clock, so a glitch directly resets flip-flops; keep the net clean and the tree balanced.
- Omitting
rstfrom the sensitivity list. An asynchronous reset must be in the list; otherwise it is not asynchronous (and simulation will be wrong). - Putting the reset after the edge test. The
if rstmust come beforeelsif rising_edge(clk), or it is not asynchronous. - Assuming async reset is automatically better. It resets without a clock and off the data path, but its release and glitch sensitivity are real costs — weigh against synchronous (next lesson).
8. Engineering insight & continuity
An asynchronous reset trades synchronous reset's clean timing for immediacy: it acts at once, with no clock and off the data path, by driving the flip-flop's dedicated reset pin. That immediacy is invaluable for power-on and emergency reset, but it shifts the difficulty to release — letting reset go without driving flip-flops metastable — and to keeping the reset net glitch-free. The standard resolution is "assert asynchronously, de-assert synchronously." With both reset styles now understood, the next lesson, Synchronous vs Asynchronous Reset, weighs them directly and gives decision guidance, leading into the reset-release/metastability and best-practice lessons that make a reset strategy robust.