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. Formal Apps

Part 7 · Formal and Simulation · Senior (S)

Formal Apps

Formal apps answer one well-defined question each, automatically, without hand-written properties: are two designs equivalent, is every connection right, can an X reach an output, do the registers match their specification, are clock-domain crossings safe? What each app answers, what it needs, and which DCRouter questions each would settle.

On this page

    Note

    Level: Senior (S) · Answers: When should we prove instead of test?

    Before this: Where Simulation Wins

    Writing good formal properties is skilled work, which is one reason many teams use formal less than they could. Yet some of the most widely used formal tools in chip design need no properties at all. Synthesis teams prove every netlist equivalent to its RTL; integration teams prove every top-level wire connects where the specification says. These apps ask one fixed question, generate the properties themselves, and answer it exhaustively.

    What questions can formal apps answer, and when should you use them?

    The obvious answer, and why it breaks

    The obvious way to check that a netlist matches its RTL, or that an SoC's pins connect correctly, is to rerun simulation on the new version. Simulation samples; a synthesis bug that changes one gate's behaviour under one rare input pattern, or a swapped wire used only in test mode, can pass every regression. These questions have a precise, mechanical form ("are these two the same?", "is A connected to B?"), which is exactly what formal answers completely.

    The idea: one question each

    App

    Question

    Needs

    Equivalence checking

    Do two versions (RTL and netlist, or RTL before and after a change) behave identically?

    Both designs; for sequential changes, a mapping or a sequential equivalence engine

    Connectivity checking

    Does every specified connection exist, through the specified path and conditions?

    A connection table, often a spreadsheet from integration

    X-propagation

    Can an unknown value (uninitialised register, undriven net) reach an output or a control decision?

    The design and its reset scheme

    Register checking

    Do register addresses, reset values and access types match the register specification?

    The machine-readable register map (lesson 2.4)

    Clock-domain crossing (CDC)

    Is every crossing between clocks synchronised correctly?

    Clock definitions; mostly structural analysis plus formal for protocols

    Unreachability (cover analysis)

    Can this coverage bin or code ever be reached?

    The design, its assumptions and the coverage database (lesson 6.6)

    Deadlock and liveness apps

    Can the design reach a state from which it never progresses?

    The design and fairness assumptions

    Which DCRouter questions each would settle

    App

    DCRouter question

    Bug Zoo connection

    Register checking

    Do CTRL's reset value, the ERR_CNT and PKT_CNT access types and the unmapped-address response match the register table?

    BUG_17, BUG_18; part of BUG_16 and BUG_19

    Equivalence checking

    After a timing fix in the arbiter, is the router still equivalent to the version that passed regression?

    Any of the 24 bugs introduced by an edit

    X-propagation

    With the FIFO memories uninitialised, can an X reach out_data or a grant?

    Reset bugs like BUG_17's class

    Unreachability

    Is "CTRL lp_en 0" reachable? (yes; it is a legal write)

    Lesson 6.6's holes

    Connectivity

    In an SoC, does DCRouter's sleeping output reach the power controller?

    Integration bugs (lesson 1.5)

    Using apps well

    • Run them as part of the flow, not as one-off checks: equivalence after every synthesis, connectivity after every integration change.

    • Feed them the real specifications: the register table and the connection table are the oracles (lesson 2.4).

    • Read their waivers carefully: an equivalence check with unmapped points or a CDC run with blanket waivers has proved less than its pass suggests.

    How real teams use formal apps

    Practice

    Purpose

    Equivalence checking at every synthesis and ECO

    Netlists proved to match the verified RTL

    Connectivity checks generated from integration spreadsheets

    SoC wiring proved, not sampled

    Register checks from IP-XACT or SystemRDL

    Every register's address, reset and access proved (fact V4)

    CDC and reset-domain analysis on every release

    Structural crossing bugs found before simulation

    What breaks

    A team (illustrative) ran equivalence checking on every netlist but had, months earlier, marked a block's scan-chain reordering as "don't verify" to silence an early mismatch. A later ECO changed functional logic inside that region. The equivalence check passed, because the region was excluded, and the change broke a rarely used mode in silicon. Exclusions in an app are assumptions like any other (lesson 7.4).

    Why this matters

    Senior lens. Make formal apps part of the default flow: they are cheap, need no property writing, and answer questions simulation answers badly. Spend expert formal effort on property verification where apps do not reach, and audit every app exclusion as carefully as any assumption.

    Interview

    Asked: "What is equivalence checking for?"

    Weak answer: To check the RTL against the specification.

    Strong answer: To prove that two implementations behave identically: RTL against the synthesised netlist, the netlist before and after an ECO, or RTL before and after a change that should not alter function. It needs no properties and no stimulus and is exhaustive, so it replaces rerunning the whole regression on every netlist. It does not check either version against the specification; that is what simulation and property verification are for. Its exclusions and unmapped points are assumptions and need review.

    Follow-ups: (1) What is sequential equivalence? (2) Name two other formal apps and their questions.

    Check yourself Which formal app would most directly catch BUG_17 (port 3 disabled after reset), and what does it need?

    Register checking: it compares CTRL's reset value with the machine-readable register map, which says 0x3F.

    Check yourself Why does equivalence checking not replace functional verification?

    It proves two implementations are the same, not that either is right; a bug in the verified RTL is faithfully preserved in an equivalent netlist.

    Key takeaways

    • Formal apps answer one fixed question each, exhaustively and without hand-written properties.

    • Equivalence, connectivity, X-propagation, register, CDC and unreachability apps belong in the default flow.

    • Their exclusions are assumptions and must be reviewed.

    Keep going

    Next: Lesson 7.8, Combining Formal and Simulation. Splitting a verification plan between proof and test.

    Related topics

    • Part 7 overview: Formal and Simulation

    • Formal course: Equivalence Checking

    Previous

    78 / 160

    Next: Combining Formal and Simulation

    Up next

    Up nextCombining Formal and Simulation

    Sign in to save progress

    Practice this lessonReport an error

    See also

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