← All articles
RTL DesignVerilogInterview PrepDigital DesignASIC

RTL Design Interview Guide: How to Prepare and What to Expect

Complete RTL design interview preparation guide. Learn what hardware companies test, how to practice coding RTL under pressure, and the most common mistakes candidates make.

May 12, 2025·10 min read

RTL design interviews are structured differently from software engineering interviews — but they share one thing in common: you will be asked to write code on a whiteboard or shared screen. This guide tells you exactly what to prepare and how to practice effectively.

What Companies Actually Test

Based on patterns across Intel, Qualcomm, Apple, NVIDIA, AMD, and Arm interviews, RTL design rounds consistently test the following:

  • Write synthesizable Verilog/SystemVerilog for common circuits: FIFO, arbiter, counter, shift register, pipeline
  • Design an FSM for a given specification (traffic light, serial protocol, handshake)
  • Fix a buggy Verilog snippet (common source: blocking vs non-blocking assignment errors)
  • Explain the synthesis implications of your code (what hardware does this infer?)
  • Timing analysis of the circuit you designed (critical path, setup/hold)
  • Discuss trade-offs: area vs speed, synchronous vs asynchronous reset, one-hot vs binary FSM encoding

The Most Common RTL Coding Mistakes

Q.What is the difference between blocking (=) and non-blocking (<=) assignments?

A.Blocking assignments execute in order, like a C program — the right-hand side is evaluated and assigned immediately before the next statement runs. Non-blocking assignments schedule the assignment to happen at the end of the time step — all RHS values are evaluated first, then all assignments happen simultaneously. The golden rule: always use non-blocking (<=) for sequential logic (always_ff blocks) and blocking (=) for combinational logic (always_comb blocks). Mixing them in a sequential block causes race conditions and simulation/synthesis mismatch.

verilog
// WRONG — blocking in sequential causes race conditions
always @(posedge clk) begin
  a = b;  // a gets new value immediately
  b = a;  // b gets the SAME new value (not original a)
end

// CORRECT — non-blocking for flip-flop behavior
always @(posedge clk) begin
  a <= b;  // scheduled: a will get old b
  b <= a;  // scheduled: b will get old a
end       // both assignments happen simultaneously — correct swap

Q.What is an inferred latch and how do you avoid it?

A.A latch is inferred in combinational logic when a signal is not assigned in all branches of an if/case statement. The synthesizer must preserve the previous value — which requires a latch. In synchronous design, inferred latches are almost always a bug. Avoid them by: (1) providing a default assignment at the top of the always_comb block, (2) using a full case statement with a default branch, (3) using always_comb (tools warn on inferred latches). The only time a latch is intentional is for specific low-power or asynchronous design scenarios.

Live Coding: How to Approach It

  • Read the spec twice — ask clarifying questions before writing any code (synchronous reset? active low? bus width?)
  • Draw the block diagram or state diagram first, even on the whiteboard — interviewers appreciate the structured thinking
  • Start with the module declaration and port list — get the interface right before the implementation
  • Code the sequential logic first (always_ff), then the combinational (always_comb)
  • Talk through your logic as you write — silence is worse than a wrong answer that you catch yourself
  • After writing, trace through a simple example mentally to verify correctness
  • Proactively discuss trade-offs: 'I used binary encoding — if area is critical, one-hot might be better'

Essential Circuits to Know by Heart

  • D flip-flop with synchronous and asynchronous reset
  • N-bit binary counter with enable and load
  • Shift register (SIPO, PISO) — used in serial interfaces
  • Synchronous FIFO with full/empty flags
  • Round-robin arbiter for N requestors
  • Gray-code counter (essential for CDC FIFOs)
  • Pipeline register stage with valid/ready handshaking
  • 2-to-1 and 4-to-1 multiplexer (structural and behavioral)

How to Build Muscle Memory

Reading Verilog is not enough. You need to write it from memory under time pressure. Effective preparation:

  • Practice on paper or whiteboard — not in an IDE with syntax checking
  • Time yourself: an experienced engineer writes a clean FIFO in 20–30 minutes
  • After writing, actually simulate your code to verify it's functionally correct
  • Do at least 10 coding exercises in the 2 weeks before your interview
  • Use ChipPrep's practice page filtered by category to drill specific circuit types
💡

The biggest differentiator between candidates is not raw knowledge — it's structured thinking under pressure. Interviewers hire engineers who can decompose a problem, make explicit trade-offs, and communicate clearly while coding.

Practice these topics now

ChipPrep has 500+ real hardware engineering interview questions with AI-graded answers.