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
    • Controllability
    • Observability
    • Bug Propagation and Masking
    • Black Box, White Box, Grey Box
    • Hooks and Test Modes
    • Design for Verification
    • Drills: Observability and Controllability
  • Part 4: Stimulus11
  • Part 5: Checking11
  • Part 6: Coverage10
  • Part 7: Formal and Simulation10
  • 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 3: Observability and Controllability
  1. Topics
  2. First Principles of Verification Strategy
  3. Part 3: Observability and Controllability
  4. Observability

Part 3 · Observability and Controllability · Working (W)

Observability

A wrong internal value is only a found bug if something sees it. Observability is how directly the testbench can see the state that matters; much of a design's state reaches the pins late, indirectly or never. What DCRouter shows at its pins, what it hides, and how the course's tests make hidden state visible.

On this page

    Note

    Level: Working (W) · Answers: Can we see and steer what matters?

    Before this: Controllability

    Bug Zoo BUG_9 loses a credit whenever a send and a credit return happen in the same cycle. Under heavy traffic that happens constantly; an output that started with 4 credits soon has 1. Yet every packet still arrives intact, in order, at the right output. The credit count lives inside DCRouter and no pin shows it. The only outside symptom is that the output gets slower, and a functional scoreboard does not measure speed.

    How directly can the testbench see the state where a bug lives?

    The obvious answer, and why it breaks

    The obvious answer is to check the outputs: every bug that matters must eventually show up there. Eventually is the problem. Some wrong state takes thousands of cycles to affect an output; some only affects performance; some affects an output only in a later, different test. A check at the outputs can be correct and still blind to state that has not yet surfaced.

    The idea: the path from state to pins

    Observability is the ease of seeing a state from the outputs: whether a wrong value appears at all, how soon, and how clearly it points back to its cause.

    Packet data is observable on every flit; lock state only through a register read; credit counts only through their effect on throughput.

    What DCRouter shows, and what it hides

    Internal state

    How it reaches the outside

    Observability

    Flit data and order

    out_data on every send

    High: wrong data is visible the cycle it leaves

    Error decisions

    out_err on the tail

    High

    FIFO occupancy

    in_rdy goes low only when full

    Partial: only the full boundary is visible

    Output locks

    STATUS bits, when software reads them

    Low: only if a test reads at the right time

    Credit counts

    Indirectly, as fewer sends

    Very low: no functional failure, only lost throughput

    Round-robin pointers

    Which input wins, over many packets

    Low: needs a fairness measurement

    Error and packet counters

    Register reads

    Medium: visible when read, but a wrong count can sit unread

    Making hidden state visible

    • Audits: drive a state where the hidden value must show. Lesson 4.8's credit audit stalls a sink and counts flits: exactly 4 must leave, so lost credits become a functional failure.

    • Read-back at the end: compare every counter with what the testbench saw (PKT_CNT against packets received).

    • Measurements: fairness and throughput monitors make performance state visible (Part 5).

    • Internal checks: assertions bound to internal signals see the value the moment it goes wrong (lesson 3.4).

    • Design features: ask for status bits or debug counters for important hidden state (lesson 3.6).

    How real teams handle it

    Practice

    Purpose

    End-of-test checks of all counters and status

    Wrong values that never reached a data pin are still caught

    Assertions inside the design

    Catch the wrong value at its source, with a precise failure point

    Performance monitors in the testbench

    Turn hidden throughput loss into a measured number

    What breaks

    In lesson 4.8, the same DCRouter traffic without the final credit audit would pass with BUG_9 present: every packet arrives intact. Only the audit, which turns the hidden credit count into a count of flits, catches it. Observability was added by the test, not provided by the design.

    Why this matters

    Senior lens. For each important piece of state, ask how a wrong value would reach a check, and how soon. If the answer is "through performance" or "only if someone reads the register at the right moment", add an audit, an end-of-test read-back or an internal assertion. Bugs in invisible state survive the longest.

    Interview

    Asked: "What is observability?"

    Weak answer: Being able to see the outputs in a waveform.

    Strong answer: How easily a wrong internal value becomes visible to a check: whether it reaches an output at all, how soon, and how clearly it points back to the cause. Data paths are usually observable; counters, credits, arbitration pointers and performance state often aren't, because a wrong value there may only cost throughput or show up thousands of cycles later. I improve it with audits that force hidden state to show, end-of-test read-backs, internal assertions and, where it's worth it, debug registers in the design.

    Follow-ups: (1) How would you detect a lost credit? (2) Why are internal assertions good for debug?

    Check yourself Why does BUG_9 pass a scoreboard that checks every flit?

    Losing credits only makes DCRouter send less often; every packet still arrives intact and in order, so no flit is wrong.

    Check yourself How does a credit audit make the credit count observable?

    With the sink stalled, the number of flits that leave equals the credits the output holds; any number other than 4 is a visible failure.

    Key takeaways

    • A bug is found only if a wrong value reaches a check.

    • Data paths are observable; counters, credits, pointers and performance state often are not.

    • Add observability with audits, read-backs, internal assertions and design features.

    Keep going

    Next: Lesson 3.3, Bug Propagation and Masking. A test that triggered the bug and still passed.

    Related topics

    • Part 3 overview: Observability and Controllability

    Previous

    34 / 160

    Next: Bug Propagation and Masking

    Up next

    Up nextBug Propagation and Masking

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Black Box, White Box, Grey Box
    • Hooks and Test Modes
    • Design for Verification