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

  • Part 0 · What Debugging Is6
  • Part 1 · Reproduce8
  • Part 2 · Observe9
  • Part 3 · Localise10
  • Part 4 · Hypothesise and Test6
    • A Hypothesis Must Predict
    • The Experiment That Splits Suspects
    • Keeping Several Hypotheses Alive
    • Confirmation Bias and Blaming the Tool
    • One Change at a Time
    • The Debug Log
  • Part 5 · Bug Classes16
  • Part 6 · Debug by Stage9
  • Part 7 · Hangs and Deadlocks7
  • Part 8 · Intermittent Failures7
  • Part 9 · Fix, Prove, Prevent7
  • Part 10 · Case Studies12
  • Part 11 · Debug as a Team5
  • Part 12 · Interview Prep5
Loading lesson

‹The Art of Hardware Debug
  1. Topics
  2. The Art of Hardware Debug
  3. Part 4 · Hypothesise and Test

Part 4 · Hypothesise and Test · All levels

Part 4 · Hypothesise and Test

How do I reason my way to the cause instead of trying things?

  • 6topics
  • 6lessons

Topics in this section

  1. 1A Hypothesis Must Predict1 lesson
  2. 2The Experiment That Splits Suspects1 lesson
  3. 3Keeping Several Hypotheses Alive1 lesson
  4. 4Confirmation Bias and Blaming the Tool1 lesson
  5. 5One Change at a Time1 lesson
  6. 6The Debug Log1 lesson
On this page

    Part 4 answers: How do I reason my way to the cause instead of trying things?

    Where Part 4 sits on the debug loop: Hypothesise, Test.

    Once the search space is small, debugging becomes science: a hypothesis that predicts something you have not seen yet, an experiment that splits the suspects, and the discipline to change one thing at a time and write down what each result ruled out.

    After this part you can

    • Write a hypothesis that makes a testable prediction.

    • Design the one experiment that splits several suspects.

    • Keep a debug log that someone else could pick up.

    Lessons in this part

    6 lessons, about 60 min

    1. 1A Hypothesis Must PredictYou can turn a vague suspicion into a hypothesis that names a mechanism, write down predictions it makes before running anything, and pick the prediction most likely to prove it wrong.10 min
    2. 2The Experiment That Splits SuspectsYou can list three to five suspects as mechanisms, tabulate what each candidate run would show under each, and choose the run that best splits them, weighing how likely each suspect is and what the run costs.10 min
    3. 3Keeping Several Hypotheses AliveYou can hold several hypotheses for one symptom, score each failure against each with a cheap discriminating feature, predict what each partial fix leaves behind, and recognise a failure that carries two bugs.10 min
    4. 4Confirmation Bias and Blaming the ToolYou can test a belief by looking for the result that would refute it, check a "simulator bug" claim with a minimal program, the language rules and a third run, and write a tool bug report someone can act on.11 min
    5. 5One Change at a TimeYou can split a multi-change patch or experiment into single changes, run them against the same baseline, and tell a change that fixes a bug from one that does nothing or one that hides it.9 min
    6. 6The Debug LogYou can keep a timestamped log of hypotheses, predictions, exact commands, results and rule-outs while debugging, and hand it over so someone else can continue from the last open question.10 min

    Revision sheet

    The part on one page, taken from each lesson's Remember box.

    A Hypothesis Must Predict

    • A hypothesis names a mechanism: which signal, which value, which path. "The DMA is flaky" names a place, not a mechanism.

    • Write the prediction before the run: a cycle, a seed, a value or a count you have not seen yet. Predicting what you already saw tests nothing.

    • Ask of every hypothesis: what result would kill it? If no result would, it is not a hypothesis yet.

    Rule of thumb: no experiment without a written prediction that could have come out wrong.

    The Experiment That Splits Suspects

    • Fill in the table first: one row per suspect, one column per candidate run, the predicted result in each cell. A column with one value everywhere is worth nothing.

    • Split the probability, not the count. If two suspects are far likelier, the run that separates those two often beats a 2:2 split.

    • Suspects may both be true. A result that convicts one does not acquit the other.

    Rule of thumb: fill in the suspects-by-outcomes table before you run anything, then run the column that splits it best per minute.

    Keeping Several Hypotheses Alive

    • The same message is not the same cause. Symptoms are many-to-one: two mechanisms can end in the same scoreboard line.

    • Score evidence by what it separates. A clue both hypotheses predict proves nothing; look for one that one predicts and the other forbids.

    • A fix that clears some failures confirms one hypothesis for those failures only. Predict exactly which ones should remain before you rerun.

    Rule of thumb: never file a failure under an explanation until you have checked a feature that the explanation predicts and its rival does not.

    Confirmation Bias and Blaming the Tool

    • Ask what you would see if you were wrong, then go and look for exactly that. Results that fit your idea are cheap; one that could break it is worth ten.

    • Two simulators that disagree are usually both right: a four-state one shows the X, a two-state one picks a value. Random start values show which the chip resembles.

    • Call it a tool bug only with a program of a few lines, the rule it breaks, and the output of two tools and their versions.

    Rule of thumb: before you blame the tool, shrink the design until the difference fits on one screen and name the rule the tool breaks.

    One Change at a Time

    • One change per run, against the same baseline command. A seed, a simulator, a test length or a bench edit is a change too.

    • A new failure message after a change means the change altered what the test measures. Find out why before you relax a check.

    • Two changes need four runs: neither, each alone, both. It costs minutes and tells you what each one did.

    Rule of thumb: if a run changed two things, it answered no question: split it before you believe it.

    The Debug Log

    • One line per event, written as it happens: time, kind (hypothesis, prediction, run, ruled out, note), and the words.

    • Log the exact command and its result line, not just pass or fail. Log what each result ruled out: that is the part memory loses first.

    • End every session with where you are: open hypotheses, the next experiment, the state of the tree.

    Rule of thumb: if a result is not in the log, the next person will run it again.

    Practise it

    • Practice question: Reset strategies in RTL

    • Code lab: DFF with asynchronous reset

    • Practice question: Counter with wrap and saturate modes

    • Practice question: FSM incomplete case and simulation vs synthesis mismatches

    • Code lab: Round-robin arbiter

    • Interview: run a mock interview on this topic

    Related topics

    • Course hub

    • Previous: Part 3 · Localise

    • Next: Part 5 · Bug Classes

    PreviousNext: A Hypothesis Must Predict

    Up next

    Up nextA Hypothesis Must Predict

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Part 0 · What Debugging Is
    • Part 1 · Reproduce
    • Part 2 · Observe