Debugging takes more than half of FPGA development time: simulation, logic analyzers, and board-level verification working together locate problems fast instead of guessing.
testbench is the most cost-effective debugging method. Choose any of iverilog/Verilator/Vivado Simulator; write “stimulus + assertions” tests — don’t just look at waveforms, use assertions to auto-check protocol timing. Coverage thinking: code coverage (every line/branch exercised) + functional coverage (key scenarios tested).
Simulation’s blind spot is cross-clock and real interfaces (DDR, Ethernet PHY timing). Use on-chip logic analyzers (Vivado ILA / ChipScope / SignalTap) to capture real signals. Key point: reserve debug probe signals in the design in advance, avoiding “board in hand but no probe to tap.”
Reproduce → isolate → locate → fix → regress. Worst practice is “patch and pray”: change one thing at a time and regress all cases after each change. High-frequency causes of “simulation passes but board fails” concentrate in asynchronous handling, reset timing, and unconstrained clocks — check these three first.