Skip to content

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

asynchronous_reset.vhd
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
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

async_reset_block.vhd
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
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)

asynchronous reset on the dedicated reset pin with a de-assertion metastability hazardreset pinon asserton releaserst (async)to the FF reset pinflip-flop (asyncreset pin)clears immediately onassertassert: safe +immediateno clock needed, off datapathde-assert near edge→ metastability(recovery/removal)12
An asynchronous reset drives the flip-flop's dedicated reset pin directly, forcing the output to its reset value the instant reset asserts, independent of the clock and off the data path (the D-input logic stays clean). The hazard is at RELEASE: because the flip-flop responds to reset asynchronously, if reset DE-asserts too close to a clock edge the flip-flop can be caught mid-transition and go metastable (the recovery/removal timing problem). Assertion is safe and immediate; de-assertion must be synchronised to the clock — the reset-synchroniser pattern of the next lesson.

5. Simulation interpretation — immediate effect

Asynchronous reset: q goes to its reset value immediately, not waiting for an edge

8 cycles
Asynchronous reset: q goes to its reset value immediately, not waiting for an edgerst asserts → q clears to 0 IMMEDIATELY (no edge needed)rst asserts → q clears…rst de-asserts; q resumes on the next edge — release must be edge-saferst de-asserts; q resu…clkrst00110000d77995522q07000552t0t1t2t3t4t5t6t7
Unlike synchronous reset, q clears the instant rst asserts — between clock edges, with no clock required. After rst de-asserts, normal clocked capture resumes. The release is the delicate part: if rst fell away right at a clock edge in real hardware, the flip-flop could go metastable, which is why asynchronous de-assertion is synchronised (next lesson).

6. 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.

assert_async_deassert_sync.vhd
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
-- 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 rst from 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 rst must come before elsif 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.