Skip to Proof + reset questions

Part 3 · Proof and reset

SystemVerilog AssertionsReset, vacuity, and meaningful proof

Control property lifetime, expose unreachable success, and separate implementation checks, environment assumptions, and reachability evidence.

Question directory

Questions for Proof + reset

Open a question at its supporting explanation. The complete property reference stays directly above each answer set.

05 · Reset and meaningful proofMake every pass mean something.

Control attempt lifetime with reset, expose vacuity with coverage, and state the assumptions that separate useful formal proof from an overconstrained result.

Concept modelAssert, assume, and cover answer different questions
Must holdassert

Challenge the implementation.

May occurassume

Define a legal environment.

Can occurcover

Demonstrate reachability.

Meaningful proofchecker + honest assumptions + reachable scenario
A checker constrains the implementation, an assumption constrains the modeled environment, and coverage proves that an interesting path is reachable.

Always-visible reference

Learn the mechanism before testing the interview answer.

These notes, tables, examples, and design limits contain the working knowledge for this chapter. The interview questions below are a checkpoint, not the primary explanation.

Attempt lifetime

Abort, accept, reject, and block are different outcomes.

Choose the control that matches the specification. Reset commonly discards an in-flight attempt; a flush may explicitly accept or reject it; expect waits procedurally for completion.
ConstructCondition observationEffect on active attemptTypical use
disable iff (x)Asynchronous current valueAbort with no pass or failureReset invalidates transaction
accept_on (x)Asynchronous current valueTerminate as successExternal event makes obligation acceptable
reject_on (x)Asynchronous current valueTerminate as failureExternal event makes obligation invalid
sync_accept_on (x)Sampled on property clockTerminate as successClocked acceptance policy
sync_reject_on (x)Sampled on property clockTerminate as failureClocked rejection policy
expect (property)Property sampling semanticsBlock process until success or failureProcedural test scenario

Reset release

Reset abort and post-reset startup are two separate contracts.

disable iff controls whether attempts exist while reset is active. A second property should describe what is legal on and after deassertion.
  • Use |=> when the first protected sample is after the release edge.
  • Use |-> only when the release edge itself is part of the protected interval.
  • A sampled high reset level is not a release event. Use $rose(rst_n) for active-low reset deassertion.
  • Synchronize asynchronous reset release when the design contract requires a clean first active clock.
Three quiet samples after releaseSystemVerilog
a_quiet_after_reset: assert property (
  @(posedge clk) disable iff (!rst_n)
  $rose(rst_n) |=>
    (!enable && !data_valid)[*3]
);

Verification roles

Assert, assume, cover, and coverage reports answer different questions.

A proof is meaningful only when the checker is correct, the environment assumptions are honest, and the interesting behavior is reachable.
MechanismQuestionWhat it provesWhat it does not prove
assert propertyMust this always hold?No allowed trace violates the property in the analysis scopeThe property fully represents the specification
assume propertyWhat may the environment do?Only assumed-legal traces are explored in formalThe environment will drive that behavior in simulation
cover propertyCan this temporal scenario occur?At least one trace reaches the scenarioAll safety behavior is correct
assertion coverageWas the checker exercised?Attempts, outcomes, and possible vacuity dataValue-space completeness
covergroupWhich values and crosses occurred?Bins and sampled combinationsA multi-cycle protocol path

Meaningful proof

Treat a formal PASS as the end of an audit, not the start of a celebration.

Formal analysis explores all traces allowed by the model and assumptions. The result is only as useful as the proof boundary, clocks, resets, X semantics, fairness, and reachability evidence.
Property

Correct obligation

Review sampled edges, antecedent triggers, endpoints, and overlapping attempts against the written requirement.

Environment

Honest assumptions

Assume only behavior guaranteed by the real integration. Prove or review every assumption source.

Reachability

Useful cover traces

Cover reset release, triggers, earliest and latest legal responses, and states needed to exercise the checker.

Liveness

Completion policy

Prefer finite deadlines. Justify every unbounded eventuality and fairness assumption in plain language.

Cover trigger, completion, and boundarySystemVerilog
c_request_seen: cover property (
  @(posedge clk) disable iff (!rst_n)
  $rose(req)
);

c_latest_legal_ack: cover property (
  @(posedge clk) disable iff (!rst_n)
  $rose(req) ##3 $rose(ack)
);

c_state_path: cover property (
  @(posedge clk) disable iff (!rst_n)
  state == S0 ##1 state == S1
              ##1 state == S2
              ##1 state == S3
);

Diagnostics

Action blocks control regression response, not property truth.

The property already passed or failed before its action block runs. Choose severity to match the verification policy and report sampled context that makes the failure reproducible.
TaskTypical policySimulation effect
$fatalCannot continue meaningfullyReport and terminate
$errorRegression failureReport error; simulator normally continues
$warningSuspicious but tolerated conditionReport warning
$infoDiagnostic or progress messageReport information
Pass and fail action blocksSystemVerilog
a_packet_length: assert property (
  @(posedge clk) disable iff (!rst_n)
  sop |-> length inside {[1:MAX_LEN]}
) begin
  packet_checks_passed++;
end else begin
  $error(
    "bad length=%0d at packet start",
    $sampled(length)
  );
end

Interview checkpoint

Explain the rule, then defend its edge cases.

Open a prompt after studying the reference above. A strong answer should name the sampled edge, match endpoint, failure mode, and proof evidence.

Strong answer

disable iff asynchronously disables a property while its expression is true and aborts active attempts without a pass or failure. The disable expression uses current values, not the sampled values used by the property body.

Why it works

  • It is an attempt-lifetime control, not merely an antecedent that happens to mention reset.
  • If reset asserts while a request-to-response attempt is pending, that attempt is terminated unless the specification says reset must preserve it.
  • Reset release semantics still need a design contract. A synchronously released reset can avoid ambiguous first-cycle behavior in the design and its assertions.
What the interviewer is testing

Whether you distinguish asynchronous abort from a synchronously sampled reset condition.

Common trap

Do not claim disable iff pauses an attempt and resumes it after reset.

Abort active attempts during resetSystemVerilog
a_req_ack: assert property (
  @(posedge clk) disable iff (!rst_n)
  $rose(req) |-> ##[1:3] ack
);
  • disable iff
  • reset
  • abort
  • attempt