Bug Hunt
Practice on real simulators
Every problem is checked against a correct reference and a bank of realistic bugs. Filter by track, format and difficulty.
All problems
Branches follow problem ratings. Choose any available problem.
0 / 0 solved
Pick a node to explore its challenge.
- Easy
- Medium
- Hard
- Expert
- Solved
- Started
- Your next challenges
- Sign in to open
- Draft
Sign in to earn a rating and open every challenge.
Module 1 · Storing data
- 1.1.1 Unknown-bit counter Implement Easy Browser in review
- 1.1.3 The false-pass monitor Fix Medium Browser in review
- 1.1.4 Partial-knowledge scoreboard Implement Hard Browser in review
- 1.2.1 Byte-lane extraction Implement Easy Browser in review
- 1.3.1 Header field decoder Implement Easy Browser in review
- 1.4.1 Safe opcode decoder Implement Easy Browser in review
- 1.4.2 State-transition validator Implement Medium Browser in review
- 1.5.6 Catch the broken formatters Break it Easy Browser in review
- 1.6.1 Register index Implement Easy Browser in review
- 1.6.6 Addresses that catch broken decoders Break it Medium Browser in review
- 1.7.2 Repair the transaction field Fix Easy Browser in review
- 1.7.6 Catch the bad read paths Verify Medium Browser in review
- 1.7.7 Header monitor Implement Hard Browser in review
Module 2 · Collections
- 2.1.1 Resize and preserve Implement Easy Verilator in review
- 2.2.1 First FIFO mismatch Implement Easy Verilator in review
- 2.2.2 Bounded queue operations Implement Medium Verilator in review
- 2.3.1 Outstanding request lookup Implement Easy Verilator in review
- 2.3.2 Duplicate-ID protection Implement Medium Verilator in review
- 2.3.3 Out-of-order response matcher Implement Hard Verilator in review
- 2.4.2 Wide population reduction Implement Easy Verilator in review
- 2.5.1 Missing beat indices Implement Easy Verilator in review
- 2.6.1 Value snapshot Implement Easy Verilator in review
- 2.6.2 Aliased collection repair Fix Medium Verilator in review
- 2.7.1 Flush pending requests Implement Easy Verilator in review
- 2.7.8 The stale expectation Debug Medium Verilator in review
Module 3 · Routines and processes
- 3.1.1 Popcount function Implement Easy Verilator in review
- 3.2.1 Invocation-local accumulator Fix Easy Verilator in review
- 3.3.1 Wait for two workers Implement Easy Verilator in review
- 3.3.3 Cancellation scope repair Fix Medium Verilator in review
- 3.3.6 The timer that outlived its race Debug Medium Verilator in review
- 3.4.1 Persistent initialization flag Implement Easy Verilator in review
- 3.5.1 Exact-count consumer Implement Easy Verilator in review
- 3.6.1 Protected shared counter Fix Easy Verilator in review
- 3.7.1 Single-response deadline Implement Easy Verilator in review
- 3.7.2 Inclusive boundary checker Implement Medium Verilator in review
- 3.7.6 Catch the late responders Verify Hard Verilator in review
Module 4 · Classes
- 4.1.1 Construct a valid packet Implement Easy Verilator in review
- 4.2.6 The copy that shares its payload Fix Easy Verilator in review
- 4.2.7 Transactions that expose broken compares Break it Medium Verilator in review
- 4.3.1 Derived read transaction Implement Easy Verilator in review
- 4.4.1 Virtual response length Implement Easy Verilator in review
- 4.5.1 Safe downcast Implement Easy Verilator in review
- 4.5.3 Stale cast destination Fix Medium Verilator in review
- 4.6.1 Typed value box Implement Easy Verilator in review
- 4.7.1 Factory by opcode Implement Easy Verilator in review
- 4.7.2 Validated factory arguments Implement Hard Verilator in review
Module 5 · Randomization
- 5.1.1 Legal packet length Implement Easy Verilator in review
- 5.1.6 The packet that kept its old length Fix Easy Verilator in review
- 5.2.1 Legal value sets Implement Easy Verilator in review
- 5.2.6 Operations that expose broken legality checks Break it Medium Verilator in review
- 5.3.2 Balance mode frequency Implement Easy Verilator in review
- 5.4.1 Override a soft default Implement Easy Verilator in review
- 5.5.1 Freeze one random field Fix Easy Verilator in review
- 5.6.1 Replay one object stream Implement Easy Verilator in review
- 5.6.6 The burst that changed after the solve Debug Medium Verilator in review
- 5.7.1 Aligned burst request Implement Easy Verilator in review
- 5.7.9 Catch the generators that cross a bank Verify Medium Verilator in review
Module 6 · Connecting to the DUT
- 6.1.1 Typed bus connection Implement Easy Verilator in review
- 6.2.1 Pre-update versus post-update Fix Easy Verilator in review
- 6.2.6 Catch the broken pipelines Verify Medium Verilator in review
- 6.3.1 Clocking-view sampler Fix Easy Verilator in review
- 6.4.1 Configure one driver Implement Easy Verilator in review
- 6.4.3 Wrong-interface binding Fix Medium Verilator in review
- 6.5.9 Traces that expose broken hold checkers Break it Easy Verilator in review
- 6.5.2 Hold-until-accepted driver Implement Hard Verilator in review
- 6.6.6 Hold the offer Verify Easy Verilator in review
- 6.6.7 Count the beats Verify Medium Verilator in review
- 6.6.8 Answer in time Verify Medium Verilator in review
- 6.6.9 The right data for the right request Verify Medium Verilator in review
- 6.6.12 Tickets for a lost response Verify Medium Verilator in review
- 6.6.11 A read-channel assertion suite Verify Hard Verilator in review
- 6.6.13 A tagged channel assertion suite Verify Hard Verilator in review
- 6.7.1 Identify the sampling race Debug Medium Verilator in review
Module 7 · FIFO verification
- 7.1.1 Acceptance truth table Implement Easy Verilator in review
- 7.1.6 Requests that expose broken FIFO rules Break it Medium Verilator in review
- 7.2.6 The read that was valid on an empty FIFO Fix Easy Verilator in review
- 7.2.2 Arbitrary-depth FIFO Implement Medium Verilator in review
- 7.3.1 Directed fill and drain Implement Easy Verilator in review
- 7.4.1 FIFO expected queue Implement Easy Verilator in review
- 7.4.6 The scoreboard that checks too early Debug Medium Verilator in review
- 7.5.8 Two coverpoints for the FIFO Implement Easy Verilator in review
- 7.5.9 The cross that can never close Fix Medium Verilator in review
- 7.6.1 Pointer-wrap sequence Break it Easy Verilator in review
- 7.6.6 Catch the FIFOs that break at wrap and reset Verify Hard Verilator in review
- 7.7.3 Premature test completion Fix Easy Verilator in review
Synchronous FIFO
- H1.9 Catch the faulty FIFOs Verify Hard Browser in review
UVM practice
- U1.4.1 The error test that never broke a checksum Fix Easy UVM
- U2.4.1 Pack a frame whose payload has its own length Implement Medium UVM
- U3.2.1 Two environments that never talk Fix Easy UVM
- U3.4.1 The trace window that never drops quietly Implement Medium UVM
- U4.3.1 The burst driver that outran its receiver Fix Easy UVM
- U5.1.1 Catch the sequencers that grant out of turn Verify Medium UVM
- U5.3.1 A background sequence that leaves cleanly when killed Implement Easy UVM
- U6.1.1 Keep a two-clock memory busy Implement Hard UVM
- U6.2.1 Play the memory, including its protected page Implement Medium UVM
- U6.3.1 Pack bytes into words, and flush the odd one Implement Hard UVM
- U7.2.1 A scoreboard among careless listeners Verify Medium UVM
- U7.4.1 The checker that fails nothing Fix Easy UVM
- U8.2.1 Interleaved read bursts Implement Hard UVM
- U8.4.1 A latency meter with two bounds Implement Medium UVM
- U9.3.1 Three channels and a model that disagrees Fix Medium UVM
- U10.2.1 The scoreboard that remembered through reset Fix Medium UVM
- U12.1.1 Inject a bad check on one lane, on chosen beats Implement Medium UVM
- U13.2.1 Registers that all read zero Fix Easy UVM
- U14.2.1 The overflow flag that would not stay set Fix Easy UVM
- U15.2.1 The poison test with a short ledger Fix Medium UVM
- U16.4.1 The interrupt that clears itself Verify Hard UVM
No problems match these filters.