Follow the stories of academics and their research expeditions
A design engineer is hired to build the RTL; a verification engineer is hired to prove it is broken. Interviewers therefore probe a different instinct: can you imagine the corner case nobody wrote down? Expect a mix of SystemVerilog language questions, UVM methodology, protocol reasoning, debug scenarios, and at least one open-ended "how would you verify X" problem. The single biggest differentiator is not memorised syntax — it is being able to explain a verification plan: stimulus, checkers, coverage, and closure criteria, in that order.
Non-blocking assignments update after the current time-step evaluation, which models how all flip-flops in real hardware sample simultaneously; using blocking assignments in clocked always blocks creates simulation-order races. In testbench procedural code, blocking assignments execute in program order, which is what you want for step-by-step stimulus. A strong answer also mentions that clocking blocks in SystemVerilog exist precisely to remove testbench-to-DUT races at the interface.
A queue is a plain data structure with no synchronisation — reading from an empty queue is simply an error you must guard. A mailbox is a built-in synchronisation object: a blocking get() suspends the calling process until data arrives, making it ideal for passing transactions between concurrently running monitor and scoreboard threads. Rule of thumb: same thread, use a queue; producer–consumer across threads, use a mailbox or a UVM analysis port.
The sequence calls start_item(), which arbitrates for the sequencer; once granted, the sequence randomises the transaction and calls finish_item(). The driver's get_next_item() unblocks, it drives the pins, then calls item_done(), which releases the sequence to send the next transaction. Interviewers often follow up with "what happens if the driver forgets item_done()?" — the answer is the sequence hangs in finish_item(), a classic testbench deadlock.
No. Code coverage only proves every line and branch was exercised; it says nothing about whether interesting combinations occurred or whether checkers were even watching. A FIFO can hit full line coverage without ever going full and empty in the same test, and without a scoreboard you can execute buggy code without detecting the bug. Closure needs functional coverage tied to the verification plan, assertion density, and a clean bug-rate trend — code coverage is necessary, never sufficient.
Describe the plan, not just tests: independent read/write clocks with randomised, unrelated frequencies and phase; stimulus that forces full, empty, and simultaneous read-write at boundaries; a scoreboard checking data integrity and ordering; assertions on gray-code pointer transitions (only one bit changes per clock); and functional coverage crossing fill level with clock-ratio bins. Mentioning that you would sweep both fast-write/slow-read and slow-write/fast-read ratios shows real CDC awareness.
Interviewers spend a third of the session on your resume project, so prepare it like a demo. Be ready to draw your testbench architecture from memory, state how many bugs you found and name the two most interesting ones, and explain one debug story end to end: symptom, hypothesis, waveform evidence, root cause, and the regression test you added afterwards. Saying "I found a bug where the design missed back-to-back requests during a same-cycle grant" is worth more than listing ten tools. If your current project experience is thin, building a complete UVM environment for an open protocol such as APB or AXI-Lite gives you exactly this story; structured online electronics classes can shortcut the setup and review parts.
Salary expectations come up in later rounds; treat published figures as indicative ranges only, since compensation varies widely by region, company type, and node experience. Focus the early rounds entirely on technical signal. If you need to strengthen specific gaps first — SystemVerilog, UVM, or formal — you can browse all courses on CourseTron and pick a track that matches the level the job description asks for.
Not universally, but it is the safest bet. Many teams accept strong SystemVerilog plus testbench-construction fundamentals for junior roles, yet UVM familiarity removes the most common screening filter and every concept in it (phasing, factory, TLM) transfers to any methodology.
Expect at least one question on Python or shell — typically parsing a log file or automating regressions. You rarely need advanced algorithms; clean loops, dictionaries, and regular expressions cover most of what is asked.
Increasingly yes, at least conceptually: what property checking is, where formal beats simulation (exhaustive proof on small blocks, deadlock and CDC checks), and where it struggles (state-space explosion on large designs). You are not expected to be a formal specialist unless the role says so.
Leave a comment