Interviews
Applications Interview Questions
Practise the question, then the follow-ups an interviewer asks next.
Start with a Question TreeAI Mock Interview
- 3
- Question trees
- 17
- Follow-ups
- 9
- Wrong answers explained
- 4
- Runnable on a simulator
start. Simulation passes, but formal fails at step 3. Who is right?
WhyWhy an Unreset Flop Is a Free ValueCompareX-Optimism, X-Pessimism and Free ValuesBreak ItWhy Random Initial Values Are Not EnoughWhat IfAn Explicit X in Formal
+ 2 more follow-ups · Open this tree
Flagship Questions · With follow-ups
Question Trees
Each question opens into the follow-ups an interviewer asks next, the wrong answers people give, and what a fresher's and a senior's answer sound like.
-
Which Formal Apps to Run First
You join an SoC project that has no formal yet. Which formal apps would you run first, and why those? 6 follow-ups · 4 pitfalls · 1 runnable -
Simulation Passes, Formal Fails on an Unreset Flop
A mode register has no reset, because firmware writes it beforestart. Simulation passes, but formal fails at step 3. Who is right? 6 follow-ups · 3 pitfalls · 2 runnable -
Using Formal to Close Coverage Holes
Simulation never hits three coverage bins. Can formal let you waive them, and what evidence would you accept? 5 follow-ups · 2 pitfalls · 1 runnable
No question matches these filters.
Quick revision · One flat list
Question Bank
All 15 Applications questions, main and follow-up. Open a track, then a topic. Answer out loud first, then open the short answer.
Jump to a Track
15 questions · 3 topicsApplications
Which Formal Apps to Run First5
You join an SoC project that has no formal yet. Which formal apps would you run first, and why those? L1L2
Start with apps that need no hand-written properties: connectivity from the integration table and register checks from the register map. Both find real wiring and access-type bugs within days, which earns trust for the harder work. Then add automatic checks and X-propagation, and use unreachability analysis to prune coverage holes for the simulation team. An app proves only the properties it generates, so design rules still need your own.
QuestionPractise Which Formal Apps to Run First →Why must register checks be generated from the register map, and never from the RTL? L1L2
Checks generated from the RTL only prove that the RTL agrees with itself. A field built with the wrong access type then passes. The map is the independent statement of intent. Each access type in it implies a fixed set of checks. For example, a write of 1 clears a W1C bit and a write of 0 keeps it.
Follow-upPractise Why Register Checks Come from the Map →What if the RTL and the checks both come from the same register map? One row of the map has the wrong access type. L2
Then the proof passes, because the RTL and the checks agree with the same wrong row. Formal shows that the RTL matches the map, not that the map is right. So the map needs its own review against the spec and the driver code. A firmware test of the field in system simulation catches what that review misses.
Follow-upPractise When the Register Map Itself Is Wrong →An interrupt-status field should be write-one-to-clear but was built as the line below. Which generated check catches it, and what is the subtle part? L1L2
The W1C check that a written 0 keeps a set bit fails within a few cycles: plain read-write overwrites the bit with the 0. The subtle part is priority. A hardware event that arrives in the same cycle as the clearing write must still set its bit. The bus protocol is assumed and covered, and the register behaviour is asserted one cycle after the completing write.
Follow-upPractise A W1C Field Built as Read-Write →Compare lint with formal automatic checks on the same RTL. L1L2
Lint reads the text and flags code that could be wrong, such as a width mismatch. It does not know whether the bad case can happen. Formal automatic checks generate covers and assertions from the RTL and show whether the bad state is reachable, with a trace. In the lesson lint warned only about a truncated index, while formal failed the index, a dropped carry and an X default.
Follow-upPractise Lint vs Formal Automatic Checks →Simulation Passes, Formal Fails on an Unreset Flop5
A mode register has no reset, because firmware writes it before start. Simulation passes, but formal fails at step 3. Who is right? L1L2
Both, about different things. In formal the unreset mode is free at step 0. So the solver picked the value that enables the block before firmware wrote anything. Simulation started mode at one value per run, and a default run never hit the bad one. Either reset the flop, or write the firmware promise as an initial-state assumption and put it on the sign-off list.
Why does a formal tool treat an unreset flop as any value, instead of X as simulation does? L1
Formal models are two-valued, and silicon powers up to some real 0 or 1 in each flop. Leaving the start value free lets the solver try every possibility in one run. Four-state simulation instead carries an X that if statements can silently resolve, so it may never show the bad value.
Compare X-optimism, X-pessimism and the way formal handles an unknown start value. L1L2
X-optimism is RTL simulation resolving an unknown too kindly, so a bug hides. For example, an if on X takes the else branch. X-pessimism is gate-level simulation spreading X further than real hardware would, which floods the run with false unknowns. Formal is two-valued and leaves the value free, so it checks both 0 and 1 and reports the one that breaks a property.
A colleague says random initial values in simulation are as good as formal for unreset flops. Break that claim. L1L2
A random initial value is one draw per run. If only a few start values break the rule, most seeds pass. Formal treats the start value as free, so one run checks every value. The solver then picks a value that breaks the property, if one exists.
Follow-upPractise Why Random Initial Values Are Not Enough →What does a formal tool do with the output below, which the RTL assigns as 1'bx? L2
In this flow an explicit x becomes a free value the solver may choose on every cycle. An assertion that the debug output stays low therefore fails, here at step 2. That is useful. A stray x default in a case statement shows up as a real failure, not a silent simulation quirk.
Using Formal to Close Coverage Holes5
Simulation never hits three coverage bins. Can formal let you waive them, and what evidence would you accept? L1L2
Formal can ask three things of a bin: is it reachable, proven unreachable forever, or merely unreached within N steps. Only the proof supports a waiver; a bounded unreached cover is a hint about depth. In the lesson one bin is unreached at depth 20 and reached at step 26 at depth 30. Run the proof with as few assumptions as possible, since an over-constraint makes a live bin look dead.
QuestionPractise Using Formal to Close Coverage Holes →Why should an unreachability run use as few assumptions as possible? L2
Free inputs allow more behaviour than the real environment. So a bin that cannot be reached even with free inputs cannot be reached in the chip. Every assumption you add shrinks the search and can make a live bin look dead. Add an assumption only when a reached trace is clearly illegal, and list it on the waiver.
Follow-upPractise Why Unreachability Runs Use Few Assumptions →Formal reaches a bin simulation never hit. What can you do with that trace? L2L3
Replay it as a directed test. SBY writes a small Verilog testbench for every trace. You can port the input values into the simulation environment as a sequence. The simulation team then has a test that hits the bin and keeps hitting it in regression. Every checker and scoreboard watches that test.
Follow-upPractise Turning a Cover Trace into a Test →A refresh event happens only every few thousand cycles, far past any depth your proofs reach. Compare full formal with a semiformal search for bugs around that event. L2L3
Full formal searches every trace from reset, so a few thousand cycles of depth is out of reach. Semiformal starts the solver from a waypoint instead: a simulation or cover trace that has already run close to the event. It then searches exhaustively from there. It finds deep bugs that neither method finds alone. But it proves nothing about the states it skipped, so it counts as bug hunting, not sign-off.
Follow-upPractise Full Formal vs Semiformal Search →How does a formal cover differ from a covergroup bin that simulation hits? L1L2
A covergroup bin counts what your tests happened to do. A formal cover asks whether any legal input sequence can reach the condition and returns the shortest trace that does. An unreached formal cover within a bound only says the depth was too short or an assumption blocks it. A proof of the negation is what makes a bin truly unreachable.
Follow-upPractise A Formal Cover vs a Covergroup Bin →Your Review Queue
Saved review reminders are coming soon.