Why is this an issue?

The preference for synchronous resets over asynchronous resets can be attributed to several key advantages:

  1. Predictability and Timing Closure
  2. Simplicity in Design and Verification
  3. Synthesis and Implementation
  4. Power Management
  5. Debugging and Maintenance

However, there are scenarios where asynchronous resets might be preferred or necessary:

Therefore, while synchronous resets are generally preferred for reasons of design predictability, timing, and power efficiency, the choice might also depend on specific system requirements or constraints. If you need to implement or analyze such a system, considering these points will help in making an informed decision.

How to fix it

Code examples

Noncompliant code example

process(clk, rst) is
begin
  if rst = '1' then -- Asynchronous reset
    s <= '0';
  elsif rising_edge(clk) then
    s <= '1';
  end if;
end process;

Compliant solution

process (clk) is
begin
 if rising_edge(clk) then
   if rst = '1' then  -- Synchronous reset
     s <= '0';
   else
     s <= '1';
   end if;
 end if;
end process;

Resources

Related rules