Silicon Lab
Design Verification Problems
Build a design, hunt its bugs, or repair what fails. Every answer runs on a real simulator.
All problems
Build starts from a specification: make it work, then make it small or fast. Bug Hunt asks for the checker or the test that catches broken designs. Repair hands you a failure: find the cause, then fix the design.
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
- 1.1.3 The false-pass monitor Fix Medium Browser
- 1.1.4 Partial-knowledge scoreboard Implement Hard Browser
- 1.2.1 Byte-lane extraction Implement Easy Browser
- 1.3.1 Header field decoder Implement Easy Browser
- 1.4.1 Safe opcode decoder Implement Easy Browser
- 1.4.2 State-transition validator Implement Medium Browser
- 1.5.6 Catch the broken formatters Break It Easy Browser
- 1.6.1 Register index Implement Easy Browser
- 1.6.6 Addresses that catch broken decoders Break It Medium Browser
- 1.7.2 Repair the transaction field Fix Easy Browser
- 1.7.6 Catch the bad read paths Verify Medium Browser
- 1.7.7 Header monitor Implement Hard Browser
Module 2 · Collections
- 2.1.1 Resize and preserve Implement Easy Verilator
- 2.2.1 First FIFO mismatch Implement Easy Verilator
- 2.2.2 Bounded queue operations Implement Medium Verilator
- 2.3.1 Outstanding request lookup Implement Easy Verilator
- 2.3.2 Duplicate-ID protection Implement Medium Verilator
- 2.3.3 Out-of-order response matcher Implement Hard Verilator
- 2.4.2 Wide population reduction Implement Easy Verilator
- 2.5.1 Missing beat indices Implement Easy Verilator
- 2.6.1 Value snapshot Implement Easy Verilator
- 2.6.2 Aliased collection repair Fix Medium Verilator
- 2.7.1 Flush pending requests Implement Easy Verilator
- 2.7.8 The stale expectation Debug Medium Verilator
Module 3 · Routines and Processes
- 3.1.1 Popcount function Implement Easy Verilator
- 3.2.1 Invocation-local accumulator Fix Easy Verilator
- 3.3.1 Wait for two workers Implement Easy Verilator
- 3.3.3 Cancellation scope repair Fix Medium Verilator
- 3.3.6 The timer that outlived its race Debug Medium Verilator
- 3.4.1 Persistent initialization flag Implement Easy Verilator
- 3.5.1 Exact-count consumer Implement Easy Verilator
- 3.6.1 Protected shared counter Fix Easy Verilator
- 3.7.1 Single-response deadline Implement Easy Verilator
- 3.7.2 Inclusive boundary checker Implement Medium Verilator
- 3.7.6 Catch the late responders Verify Hard Verilator
Module 4 · Classes
- 4.1.1 Construct a valid packet Implement Easy Verilator
- 4.2.6 The copy that shares its payload Fix Easy Verilator
- 4.2.7 Transactions that expose broken compares Break It Medium Verilator
- 4.3.1 Derived read transaction Implement Easy Verilator
- 4.4.1 Virtual response length Implement Easy Verilator
- 4.5.1 Safe downcast Implement Easy Verilator
- 4.5.3 Stale cast destination Fix Medium Verilator
- 4.6.1 Typed value box Implement Easy Verilator
- 4.7.1 Factory by opcode Implement Easy Verilator
- 4.7.2 Validated factory arguments Implement Hard Verilator
Module 5 · Randomization
- 5.1.1 Legal packet length Implement Easy Verilator
- 5.1.6 The packet that kept its old length Fix Easy Verilator
- 5.2.1 Legal value sets Implement Easy Verilator
- 5.2.6 Operations that expose broken legality checks Break It Medium Verilator
- 5.3.2 Balance mode frequency Implement Easy Verilator
- 5.4.1 Override a soft default Implement Easy Verilator
- 5.5.1 Freeze one random field Fix Easy Verilator
- 5.6.1 Replay one object stream Implement Easy Verilator
- 5.6.6 The burst that changed after the solve Debug Medium Verilator
- 5.7.1 Aligned burst request Implement Easy Verilator
- 5.7.9 Catch the generators that cross a bank Verify Medium Verilator
Module 6 · Connecting to the DUT
- 6.1.1 Typed bus connection Implement Easy Verilator
- 6.2.1 Pre-update versus post-update Fix Easy Verilator
- 6.2.6 Catch the broken pipelines Verify Medium Verilator
- 6.3.1 Clocking-view sampler Fix Easy Verilator
- 6.4.1 Configure one driver Implement Easy Verilator
- 6.4.3 Wrong-interface binding Fix Medium Verilator
- 6.5.9 Traces that expose broken hold checkers Break It Easy Verilator
- 6.5.2 Hold-until-accepted driver Implement Hard Verilator
- 6.6.6 Hold the offer Verify Easy Verilator
- 6.6.7 Count the beats Verify Medium Verilator
- 6.6.8 Answer in time Verify Medium Verilator
- 6.6.9 The right data for the right request Verify Medium Verilator
- 6.6.12 Tickets for a lost response Verify Medium Verilator
- 6.6.11 A read-channel assertion suite Verify Hard Verilator
- 6.6.13 A tagged channel assertion suite Verify Hard Verilator
- 6.7.1 Identify the sampling race Debug Medium Verilator
Module 7 · FIFO Verification
- 7.1.1 Acceptance truth table Implement Easy Verilator
- 7.1.6 Requests that expose broken FIFO rules Break It Medium Verilator
- 7.2.6 The read that was valid on an empty FIFO Fix Easy Verilator
- 7.2.2 Arbitrary-depth FIFO Implement Medium Verilator
- 7.3.1 Directed fill and drain Implement Easy Verilator
- 7.4.1 FIFO expected queue Implement Easy Verilator
- 7.4.6 The scoreboard that checks too early Debug Medium Verilator
- 7.5.8 Two coverpoints for the FIFO Implement Easy Verilator
- 7.5.9 The cross that can never close Fix Medium Verilator
- 7.6.1 Pointer-wrap sequence Break It Easy Verilator
- 7.6.6 Catch the FIFOs that break at wrap and reset Verify Hard Verilator
- 7.7.3 Premature test completion Fix Easy Verilator
Synchronous FIFO
- H1.9 Catch the faulty FIFOs Verify Hard Browser
Protocols · P1 Protocol Fundamentals
- P1.3.1 Implement a sink Implement Medium Browser
- P1.3.2 Catch the broken sources Verify Hard Browser
- P1.4.1 Beats into transactions Implement Easy Browser
- P1.5.1 The throughput that never rose Debug Medium Browser
- P1.6.1 The FIFO that overflowed Debug Medium Browser
- P1.6.2 A credit counter Implement Medium Browser
- P1.7.1 A scoreboard keyed by tag Implement Medium Browser
- P1.8.1 Fix the strobe Fix Easy Browser
- P1.9.1 A round-robin arbiter model Implement Medium Browser
- P1.10.1 Properties for the link Verify Hard Verilator
- P1.11.2 Break the links Break It Medium Browser
- P1.11.3 The beat that arrived late Debug Medium Browser
- P1.11.4 Fix the sink Fix Medium Browser
- P1.11.5 A monitor for the link Implement Medium Browser
- P1.11.1 Catch every broken link Verify Hard Browser
Protocols · P2 AXI
- P2.2.1 Catch the broken managers Verify Hard Browser
- P2.3.1 The write dependencies Verify Hard Browser
- P2.4.1 RDATA not held Debug Medium Browser
- P2.5.1 An issuer with N outstanding Implement Medium Browser
- P2.6.1 The address of every beat Implement Medium Browser
- P2.6.2 The WRAP boundary Fix Medium Browser
- P2.7.1 The lane mapper Implement Medium Browser
- P2.8.1 A byte-accurate write memory Implement Hard Browser
- P2.9.1 The strobe handling Fix Medium Browser
- P2.10.1 The same-ID order checker Verify Hard Browser
- P2.11.1 An ID-keyed scoreboard Implement Medium Browser
- P2.12.1 The stale read Debug Medium Browser
- P2.13.1 An exclusive monitor Implement Medium Browser
- P2.15.1 A Lite subordinate Fix Medium Browser
- P2.16.1 Six properties for the link Verify Hard Verilator
- P2.17.1 The AXI monitor Implement Hard UVM
- P2.18.2 Break the subordinates Break It Medium Browser
- P2.18.3 Break the managers Break It Medium Browser
- P2.18.4 The beat that landed in the wrong word Debug Medium Browser
- P2.18.5 The subordinate that reordered Fix Medium Browser
- P2.18.1 Catch every broken subordinate Verify Hard Browser
- P2.18.6 A beat-to-transaction monitor Implement Hard Browser
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.