Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Paths
  • Concept Map
  • Meet DCRouter
  • Glossary
  • Part 0: What Verification Is8
  • Part 1: What Can Go Wrong11
  • Part 2: Specifications as Checkable Rules8
  • Part 3: Observability and Controllability7
  • Part 4: Stimulus11
  • Part 5: Checking11
  • Part 6: Coverage10
  • Part 7: Formal and Simulation10
    • What Formal Does
    • Bounded Proofs
    • Induction and Full Proofs
    • Assumptions and Over-Constraint
    • Where Formal Wins
    • Where Simulation Wins
    • Formal Apps
    • Combining Formal and Simulation
    • Proving DCRouter
    • Drills: Formal and Simulation
  • Part 8: Verification Levels and Reuse8
  • Part 9: Planning and Risk9
  • Part 10: Emulation and Prototyping8
  • Part 11: Post-Silicon Validation8
  • Part 12: Bug Economics8
  • Part 13: Debug7
  • Part 14: Sign-Off7
  • Part 15: Verification in Context8
  • Part 16: Case Studies5
  • Part 17: Capstones5
  • Part 18: Interview Preparation6
Loading lesson

‹Part 7: Formal and Simulation
  1. Topics
  2. First Principles of Verification Strategy
  3. Part 7: Formal and Simulation
  4. Combining Formal and Simulation

Part 7 · Formal and Simulation · Principal (P)

Combining Formal and Simulation

A verification plan assigns each rule to proof, test or both, and records the evidence in one place. How to split DCRouter's rules between formal and simulation, how results from each count toward the same sign-off, and the handoffs that make the two reinforce each other: shared assertions, formal reachability for coverage holes, simulation traces as formal starting points.

On this page

    Note

    Level: Principal (P) · Answers: When should we prove instead of test?

    Before this: Formal Apps, Requirements Traceability

    Two teams verify the same block. The formal team proves its properties and reports "100% proven". The simulation team closes coverage and reports "100% covered". At the review nobody can say, for a given rule, which team's evidence covers it, whether any rule was covered by neither, or whether both spent weeks on the same arbiter. Two kinds of evidence with no shared ledger are two half-plans.

    How do you split a verification plan between formal and simulation?

    The obvious answer, and why it breaks

    The obvious split is by block: formal owns the arbiter, simulation owns the rest. It is simple and it leaves gaps at every boundary: the arbiter's interaction with the credit logic, the fairness rule nobody wrote as a property, the deep counter formal could not reach. The unit of planning should be the rule (lesson 2.6), and each rule should get the method that gives the strongest evidence for it, with one ledger recording which.

    The idea: assign by rule, record in one ledger

    DCRouter rule

    Primary evidence

    Secondary

    Why

    R1, R2 FIFO occupancy

    Formal proof (lesson 7.9)

    Scoreboard

    Small control state; induction proves it for all depths

    R3 routing, R6 arbitration

    Formal proof

    Arbitration checker (lesson 5.10)

    Every combination of requests; a proof beats any traffic pattern

    R7 credits

    Formal proof

    Credit audit

    A conservation invariant

    R4, R5, R8 framing, lengths, CRC

    Scoreboard

    Formal if cheap

    Data over whole packets; the reference model is simple

    R9, R10 counters

    Simulation read-backs

    Formal with a small counter configuration

    Deep state (255 errors)

    R11, R12 registers

    Formal register app (lesson 7.7)

    Directed register tests

    Mechanical comparison with the register table

    R13 sleep and wake

    Assertions in simulation

    Formal with induction

    Timing rules over idle periods

    Performance and fairness bounds

    Simulation monitors

    Formal bounded-wait properties

    Statistics need long runs

    Handoffs that make them reinforce each other

    • Shared assertions: one property, checked in simulation every cycle and proved by formal (lesson 5.3).

    • Formal for coverage holes: a hole simulation cannot hit goes to formal, which reaches it or proves it unreachable (lesson 6.6).

    • Simulation traces as formal seeds: start a proof from a deep state reached in simulation, to look further than a bound from reset allows.

    • Formal counterexamples as directed tests: a counterexample replayed in simulation becomes a regression test.

    • One evidence ledger: each rule's column shows proof, test, coverage and waiver, whichever produced it (Part 14).

    How real teams split the work

    Practice

    Purpose

    Verification plans with a method per requirement

    Every rule has an owner and a kind of evidence

    Formal and simulation results merged into one coverage and status database

    One view at reviews

    Formal engineers embedded with block teams

    Properties written early, alongside the RTL

    What breaks

    A team (illustrative) assigned its coherence controller to formal and its data path to simulation. Formal proved the protocol properties, all within an abstraction that modelled the data path as always responding in one cycle. Simulation verified the data path with a protocol model that never issued back-to-back snoops. The bug lived in a back-to-back snoop with a slow data response: each team's assumption was the other team's untested case. A rule-based ledger would have shown "snoop with slow response" assumed by both and verified by neither.

    Why this matters

    Principal lens. Plan by rule, not by team or block: each rule gets its primary and secondary evidence, and every assumption one method makes is listed as an obligation for the other. Review the ledger for rules with no evidence and for assumptions nobody discharged; those are the escapes waiting to happen.

    Interview

    Asked: "How do you split a plan between formal and simulation?"

    Weak answer: Formal for small blocks, simulation for the rest.

    Strong answer: By rule, in one ledger. Control rules with short reach and 'never' semantics (FIFO bounds, arbitration, credit conservation, handshakes) get formal proofs; data transformations, deep counters, whole-system behaviour and performance get simulation; register and connectivity questions go to formal apps. Important rules get both. Then I connect them: shared assertions, formal for coverage holes, counterexamples replayed as tests, and every assumption one method makes listed as something the other must verify.

    Follow-ups: (1) What goes in the evidence ledger? (2) How can formal help close coverage?

    Check yourself Why is "formal owns the arbiter, simulation owns the rest" a weak split?

    Rules that cross the boundary (arbitration with credits, fairness over time) and each side's assumptions about the other fall between the two, with nobody owning them.

    Check yourself Which DCRouter rule would you give primary formal evidence and secondary simulation evidence, and why both?

    R6 arbitration: formal proves the winner choice for every request combination; the simulation arbitration checker confirms fairness under real traffic and catches anything outside the property set.

    Key takeaways

    • Plan by rule: each rule gets the method with the strongest evidence for it, and important rules get both.

    • Connect the methods: shared assertions, formal for holes, counterexamples as tests.

    • Keep one ledger, including every assumption one method leaves for the other.

    Keep going

    Next: Lesson 7.9, Proving DCRouter. DCRouter step 9: proving the arbiter, credits and FIFOs.

    Related topics

    • Part 7 overview: Formal and Simulation

    Previous

    79 / 160

    Next: Proving DCRouter

    Up next

    Up nextProving DCRouter

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • What Formal Does
    • Bounded Proofs
    • Induction and Full Proofs