← Formal Verification Interviews
Interview Question · Design
The Formal Sign-Off Argument
- Likely at AMD
- Likely at Qualcomm
- Likely at Intel
The Question
The interviewer asks
You are asked to sign off a timeout block with formal. What has to be on the page before you put your name to it?
You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Each of four items needs evidence. Every assumption has a spec reason and a cover reachable under it. The properties map to spec rows, and a mutation sample shows they notice faults. Each result is a full proof, or a bounded pass next to the depth the counters and transactions require. A cone map names the logic no property reads, and every line carries the tool version and date.
Read the diagram as text
- Constraints: every assumption, its reason, and a cover reached under it
- Checkers: the spec checklist and a mutation score with its sample (F7.2)
- Complexity: per property: full proof, or bounded with its worksheet; each abstraction with its soundness note
- Coverage: the cone map, white logic named (F7.1); cover depths
- One-page sign-off: the four lists, the depth bar per property, suite version, date
- Constraints → One-page sign-off
- Checkers → One-page sign-off
- Complexity → One-page sign-off
- Coverage → One-page sign-off
A gap in any list is a reason to reject, however green the runs are.
Four covers on the spine, reached at reported steps 3, 6, 6, 8. A bounded run must reach past the deepest one.
Linear scale. 0 to 20 steps.
- Checked bound
- 10
- Required bound
- 9
- Claim
- Bounded check only
Measured: one entry at step 3; full at step 6; full, push and pop together at step 6; full again after two reads at step 8. The spine passes bmc at depth 10.
Self-Check
Tick each key point you covered in your answer.
What Interviewers Listen For (Senior)
A good senior answer lists the assumptions with their covers, and the required depth or a full proof. It maps every property to the spec. It also shows coverage of the cone.
What Interviewers Listen For (Staff)
A good staff answer frames sign-off as a risk statement: what is proven, what is bounded, and why that is enough. It adds what simulation owns and what reruns on every RTL drop.
Cross-Questions
Where the interviewer goes next. Open a node to practise that follow-up.
WhyWhat IfProve ItBreak ItCompareScale It
- The Formal Sign-Off Argument
-
WhyWorking Out the Required DepthL2 Mid-LevelL3 Senior
How do you work out the depth a bounded proof must reach before you trust it?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Start from the deepest counter in the property's cone, the longest transaction and the property's own window. Then add the tool's step offset. Check the number with covers: the deepest interesting behaviour must be reached inside the bound. The book's guideline is to prove assertions deeper than the longest cover trace, ideally about twice as deep.
TMO = 12: the bound stops short Depth 12 against the required depth 17 of the TMO = 12 block with the late-error bug.
Linear scale. 0 to 20 steps.
×- Checked bound
- 12
- Required bound
- 17
- First reported failure
- 16
- Claim
- Counterexample found
Measured: depth 12 gives BMC PASS to depth 12; depth 20 gives FAIL at reported step 16. The bound stopped short.
Self-Check
Tick each key point you covered in your answer.
-
Prove ItSolve F1.5.1: How Deep Is the Expiry Corner?Simulator-graded
Show it, don't just say it: this Silicon Lab problem is graded by the simulator.
-
Break ItA Required Depth That Was Too SmallL2 Mid-LevelL3 Senior
You computed a required depth of 30 and proved to 30. How can the result still miss a bug?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
The number is only as good as its inputs. A counter you missed in the cone, a longer transaction or a wrong step offset makes 30 too small. Covers check it: the deepest interesting state must be reached inside the bound. A depth sweep, where a planted bug fails near the predicted depth, also checks the arithmetic.
Self-Check
Tick each key point you covered in your answer.
Missed Corner
"All my covers hit by depth 12, so depth 30 is plenty."
Covers only show the states you wrote covers for. A counter with no cover can need far more steps, so list every counter in the cone first.
Source Lesson F7.3 key points
-
What IfWhat a Proof Actually CoversL2 Mid-LevelL3 Senior
What does a proof actually cover, and how do you show the logic it never looked at?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
A proof covers its property's cone of influence, the logic that can affect it, and nothing else. Draw the union of all cones: logic outside it is unverified, not wrong, and belongs in the review. The proof core is the part of the cone the engine actually used, and cutting registers one at a time measures it. Cover depths add a time view: a bounded run below the deepest cover never saw that behaviour.
The Cone of `count <= 9` on ctr_dbgTrace back from the assertion through every gate and register that can change it. What you reach is its cone of influence; the rest is invisible to the proof. Read the diagram as text
- en, fast_in: free inputs
- fast: speed mode register: step by 2
- count: wraps 9 to 0 (8 to 0 when fast)
- dbg: debug mirror of count, one cycle late
- a_cnt: count <= 9
- en, fast_in → fast
- fast → count
- count → a_cnt
- count → dbg: feeds, but nothing reads dbg
Measured by Yosys: the cone of
a_cntholdscount,fast. The debug register is in no cone, so no run of this property can say anything about it.Self-Check
Tick each key point you covered in your answer.
-
Prove ItSolve F7.1.1: Map the Registers Each Property Can SeeSimulator-graded
Show it, don't just say it: this Silicon Lab problem is graded by the simulator.
-
CompareSpec Checklist vs Mutation AnalysisL2 Mid-LevelL3 Senior
How do you know your property set is complete enough? Compare a spec checklist with mutation analysis.
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
The checklist puts one spec rule per row with its property, so an empty cell is a visible hole. But it trusts that each property is strong enough. Mutation changes the design on purpose and asks whether some property fails; survivors grouped by behaviour name the missing properties. In the lesson's FIFO campaign, bookkeeping properties killed 24 of 39 mutations, and adding an order property raised it to 38.
One Fault, Two QuestionsMCY edits the RTL once per run, then asks the property set whether it noticed. If it did not, a second run asks whether the edit changed anything a user can see. Read the diagram as text
- fifo4.sv: the RTL only; the bench is never edited
- One edit: invert a signal, tie a bit, swap a mux input
- Property set, abc pdr: does any check fail?
- Killed: a check caught the fault
- Miter, abc pdr: do the outputs differ from the original?
- Survived: a real fault the set accepts
- No change: equal at every output: not a fault
- fifo4.sv → One edit
- One edit → Property set, abc pdr
- Property set, abc pdr → Killed: FAIL
- Property set, abc pdr → Miter, abc pdr: PASS
- Miter, abc pdr → Survived: differ
- Miter, abc pdr → No change: equal
Forty runs per property set, seed 7, register and memory cells excluded. The first run is the unedited design, a control. Each campaign took about 33.3 s.
Self-Check
Tick each key point you covered in your answer.
-
Prove ItSolve F6.5.1: Kill the Data-Path SurvivorsSimulator-graded
Show it, don't just say it: this Silicon Lab problem is graded by the simulator.
-
What IfA Mutation That Survives Every PropertyL2 Mid-LevelL3 Senior
What if a mutated design passes every property? How do you decide whether it shows a hole or is harmless?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Run an equivalence check between the mutated design and the original. If they are equivalent, the mutation changed nothing visible, so it is harmless. If not, the check gives a trace where they differ. That trace names the behaviour no property watches, so write the missing property from it.
Self-Check
Tick each key point you covered in your answer.
Misconception
"A 97% kill rate means the properties are 97% complete."
The rate is measured on one fixed list of mutations. It says how many of those were caught, not how much of the spec is checked.
Source Lesson F6.5 key points
-
Prove ItSolve F7.3.1: Expose the Hidden Sign-Off ConstraintSimulator-graded
Show it, don't just say it: this Silicon Lab problem is graded by the simulator.
-
Scale ItWriting the Formal Verification PlanL3 Senior
What goes in a formal verification plan, and when do you write it?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Write it before the properties. It names scope, goal, spec rows, properties, assumptions, covers, abstractions, a depth budget and sign-off criteria. Every assumption names who checks it at system level, and every bounded result sits next to its required depth. One empty field can turn an honest open item into a false sign-off.
Self-Check
Tick each key point you covered in your answer.
-
Prove ItSolve F7.5.1: Review the Missing Depth ArgumentSimulator-graded
Show it, don't just say it: this Silicon Lab problem is graded by the simulator.
What People Get Wrong
Common wrong answers and why they fail. Run It shows the wrong belief failing on a real simulator.
Missed Corner
"BMC passed at depth 12, longer than any transaction, so we are done."
With a 12-cycle timeout this bug needs 16 steps; the depth sweep shows depth 16 passing and 17 failing. The required depth comes from the deepest counter in the cone.
Run It
The timeout block from lesson F7.3 with a 12-cycle timeout, run at depth 12.
module tmo_blk(input clk, rst, req, grant_in, output reg pending = 0, output reg err = 0);
localparam TMO = 12;
reg [3:0] cnt = 0; // waiting cycles
reg late = 0; // the cycle after a timeout
always @(posedge clk)
if (rst) begin pending <= 0; cnt <= 0; err <= 0; late <= 0; end
else begin
err <= late;
late <= 0;
if (!pending) begin
if (req && !late) begin pending <= 1; cnt <= 0; end // bug: a req in the late cycle is dropped
end else if (grant_in) pending <= 0;
else if (cnt == TMO - 1) begin pending <= 0; late <= 1; end
else cnt <= cnt + 4'd1;
end
`ifdef FORMAL
always @(posedge clk) begin
if ($initstate) begin assume(rst); end else begin assume(!rst); end
end
reg req_q = 0; // registered copy: a request seen while idle
always @(posedge clk) begin
req_q <= !rst && req && !pending;
if (!rst && req_q) assert(pending);
end
`endif
endmodule
Prints: bmc, depth 12 (smtbmc yices): PASS
See the Fix
module tmo_blk(input clk, rst, req, grant_in, output reg pending = 0, output reg err = 0);
localparam TMO = 12;
reg [3:0] cnt = 0; // waiting cycles
reg late = 0; // the cycle after a timeout
always @(posedge clk)
if (rst) begin pending <= 0; cnt <= 0; err <= 0; late <= 0; end
else begin
err <= late;
late <= 0;
if (!pending) begin
if (req && !late) begin pending <= 1; cnt <= 0; end // bug: a req in the late cycle is dropped
end else if (grant_in) pending <= 0;
else if (cnt == TMO - 1) begin pending <= 0; late <= 1; end
else cnt <= cnt + 4'd1;
end
`ifdef FORMAL
always @(posedge clk) begin
if ($initstate) begin assume(rst); end else begin assume(!rst); end
end
reg req_q = 0; // registered copy: a request seen while idle
always @(posedge clk) begin
req_q <= !rst && req && !pending;
if (!rst && req_q) assert(pending);
end
`endif
endmodule
Prints: bmc, depth 20 (smtbmc yices): FAIL at step 16
Misconception
"PDR gave a full proof, so the assumptions do not matter."
Assuming the grant always comes within four cycles means the timeout can never fire. PDR proves the buggy block; a cover of the timeout path comes back unreached.
Run It
The same buggy block with "the grant comes within four cycles" assumed, proved by abc pdr.
module tmo_blk(input clk, rst, req, grant_in, output reg pending = 0, output reg err = 0);
localparam TMO = 12;
reg [3:0] cnt = 0; // waiting cycles
reg late = 0; // the cycle after a timeout
always @(posedge clk)
if (rst) begin pending <= 0; cnt <= 0; err <= 0; late <= 0; end
else begin
err <= late;
late <= 0;
if (!pending) begin
if (req && !late) begin pending <= 1; cnt <= 0; end // bug: a req in the late cycle is dropped
end else if (grant_in) pending <= 0;
else if (cnt == TMO - 1) begin pending <= 0; late <= 1; end
else cnt <= cnt + 4'd1;
end
`ifdef FORMAL
always @(posedge clk) begin
if ($initstate) begin assume(rst); end else begin assume(!rst); end
end
always @(*) if (pending && cnt >= 4'd3) assume(grant_in); // the grant comes within four cycles
reg req_q = 0; // registered copy: a request seen while idle
always @(posedge clk) begin
req_q <= !rst && req && !pending;
if (!rst && req_q) assert(pending);
end
`endif
endmodule
Prints: prove, depth 20 (abc pdr): PASS
See the Fix
module tmo_blk(input clk, rst, req, grant_in, output reg pending = 0, output reg err = 0);
localparam TMO = 12;
reg [3:0] cnt = 0; // waiting cycles
reg late = 0; // the cycle after a timeout
always @(posedge clk)
if (rst) begin pending <= 0; cnt <= 0; err <= 0; late <= 0; end
else begin
err <= late;
late <= 0;
if (!pending) begin
if (req && !late) begin pending <= 1; cnt <= 0; end // bug: a req in the late cycle is dropped
end else if (grant_in) pending <= 0;
else if (cnt == TMO - 1) begin pending <= 0; late <= 1; end
else cnt <= cnt + 4'd1;
end
`ifdef FORMAL
always @(posedge clk) begin
if ($initstate) begin assume(rst); end else begin assume(!rst); end
end
always @(*) if (pending && cnt >= 4'd3) assume(grant_in); // the grant comes within four cycles
reg req_q = 0; // registered copy: a request seen while idle
always @(posedge clk) begin
req_q <= !rst && req && !pending;
if (!rst) cover(pending && cnt == TMO - 1 && !grant_in);
end
`endif
endmodule
Prints: cover, depth 20 (smtbmc yices): FAIL, cover unreached
Wrong Altitude
Answers with tool commands and run times instead of an argument.
The question is what evidence makes the claim believable. Engine names are the smallest part of a sign-off.