Reset strategy (sync vs async) in Verilog - Performance Comparison
When designing reset logic in Verilog, it is important to understand how the reset affects the circuit's operation time.
We want to see how the reset style impacts the number of operations as the design grows.
Analyze the time complexity of synchronous and asynchronous reset blocks.
// Asynchronous reset example
always @(posedge clk or posedge rst) begin
if (rst)
q <= 0;
else
q <= d;
end
// Synchronous reset example
always @(posedge clk) begin
if (rst)
q <= 0;
else
q <= d;
end
This code shows two ways to reset a register: one reacts immediately to reset (async), the other waits for the clock (sync).
Both blocks run on every clock cycle, but the async reset also triggers on reset signal changes.
- Primary operation: Register update on clock edge.
- How many times: Once per clock cycle, plus async reset triggers for async reset.
As the number of registers increases, each register's update happens every clock cycle.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 registers | 10 updates per clock cycle |
| 100 registers | 100 updates per clock cycle |
| 1000 registers | 1000 updates per clock cycle |
Pattern observation: The number of operations grows linearly with the number of registers.
Time Complexity: O(n)
This means the time to update all registers grows directly with how many registers you have.
[X] Wrong: "Asynchronous reset makes the design faster because it triggers immediately and reduces operations."
[OK] Correct: Async reset adds extra triggers but does not reduce the total number of register updates, which still happen every clock cycle.
Understanding how reset strategies affect operation counts helps you design reliable and efficient hardware, a key skill in hardware design roles.
What if we added multiple asynchronous resets to different parts of the design? How would that affect the time complexity?
Practice
Solution
Step 1: Understand synchronous reset behavior
Synchronous reset activates only on the clock edge, so the reset signal is sampled with the clock.Step 2: Understand asynchronous reset behavior
Asynchronous reset activates immediately when asserted, independent of the clock.Final Answer:
Synchronous reset is triggered by the clock edge, asynchronous reset works immediately. -> Option AQuick Check:
Reset timing difference = synchronous on clock, async immediate [OK]
- Confusing which reset depends on clock
- Thinking async reset waits for clock edge
- Assuming both resets behave the same
Solution
Step 1: Identify synchronous reset syntax
Synchronous reset is checked inside a clock-only sensitivity list, typically @(posedge clk).Step 2: Check reset condition inside the block
The reset condition is inside the always block, using if (rst) to reset synchronously.Final Answer:
always @(posedge clk) begin if (rst) q <= 0; else q <= d; end -> Option BQuick Check:
Sync reset inside clock-only always block [OK]
- Including reset in sensitivity list for sync reset
- Using asynchronous sensitivity list for sync reset
- Missing clock edge in always block
q after the asynchronous reset rst is deasserted?reg q; always @(posedge clk or posedge rst) begin if (rst) q <= 1'b0; else q <= d; end
Solution
Step 1: Analyze asynchronous reset sensitivity
The always block triggers on posedge clk or posedge rst, so when rst is asserted, q resets immediately.Step 2: Behavior after reset deassertion
After rst is deasserted, q updates on clock edges following the value of d.Final Answer:
q will immediately reset to 0 when rst is asserted, then follow d on clock edges. -> Option AQuick Check:
Async reset immediate, then sync update [OK]
- Thinking async reset waits for clock edge
- Assuming q holds value during reset
- Confusing reset assertion and deassertion timing
always @(posedge clk or posedge rst) begin if (rst) q <= 0; else q <= d; end
Solution
Step 1: Check sensitivity list for synchronous reset
Synchronous reset should only be sensitive to the clock edge, not the reset signal.Step 2: Identify the error
Including posedge rst makes the reset asynchronous, which contradicts the synchronous reset intent.Final Answer:
The reset should not be in the sensitivity list for synchronous reset. -> Option DQuick Check:
Sync reset sensitivity = clock only [OK]
- Including reset in sensitivity list for sync reset
- Misunderstanding sensitivity list purpose
- Using blocking assignment instead of non-blocking
Solution
Step 1: Understand immediate reset need
Immediate clearing requires asynchronous reset to react without waiting for clock.Step 2: Avoid metastability by synchronizing reset
To prevent metastability, the asynchronous reset signal should be passed through synchronizer flip-flops before use.Step 3: Combine both requirements
Using async reset with synchronizer achieves immediate reset and safe clock domain crossing.Final Answer:
Use an asynchronous reset with a synchronizer circuit on the reset signal. -> Option CQuick Check:
Async reset + synchronizer = immediate and safe reset [OK]
- Using only synchronous reset ignoring immediate reset
- Using async reset without synchronization causing metastability
- Trying to use two resets on same flip-flop incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
