Why is this an issue?

While the trend in modern digital design might lean towards active-high resets for many reasons, there are still compelling arguments for preferring active-low resets in certain contexts. Here are some reasons why active-low resets might be preferred:

  1. Historical Reasons and Convention
  2. Hardware Implementation
  3. Power-On Reset: In some systems, especially those where power management is critical, an active-low reset can ensure that the system is reset during power-up or in case of power loss because most signals naturally fall to ground (low) when power is removed or not yet stable.
  4. Noise and Glitch Protection
  5. Design and Verification
  6. Fail-Safe: If a system needs to fail in a safe or known state, active-low might be preferred because if the reset line breaks or disconnects, it will naturally go to a low state, thus resetting the system.

In conclusion, while active-high resets are often favored for their alignment with positive logic and ease in many modern designs, active-low resets can be preferred based on specific requirements, historical context, or particular hardware considerations. The choice should reflect the needs of the project, including considerations for reliability, safety, and ease of integration with existing systems or standards.

How to fix it

Code examples

Noncompliant code example

process(clk) is
begin
  if rising_edge(clk) then
    if rst = '1' then -- Noncompliant: Active-high reset
      q <= '0';
    else
      q <= d;
    end if;
  end if;
end process;

process(clk, rst) is
begin
  if rst = '1' then -- Noncompliant: Active-high reset
    q <= '0';
  elsif rising_edge(clk) then
    q <= d;
  end if;
end process;

Compliant solution

process(clk) is
begin
  if rising_edge(clk) then
    if rst = '0' then -- Compliant: Active-low reset
      q <= '0';
    else
      q <= d;
    end if;
  end if;
end process;

process(clk, rst) is
begin
  if rst = '0' then -- Compliant: Active-low reset
    q <= '0';
  elsif rising_edge(clk) then
    q <= d;
  end if;
end process;

Resources

Related rules