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.

Module 1 · Storing Data

  1. 1.1.1 Unknown-bit counter 675 Implement Easy Browser
  2. 1.1.3 The false-pass monitor 1050 Fix Medium Browser
  3. 1.1.4 Partial-knowledge scoreboard 1350 Implement Hard Browser
  4. 1.2.1 Byte-lane extraction 750 Implement Easy Browser
  5. 1.3.1 Header field decoder 750 Implement Easy Browser
  6. 1.4.1 Safe opcode decoder 825 Implement Easy Browser
  7. 1.4.2 State-transition validator 1200 Implement Medium Browser
  8. 1.5.6 Catch the broken formatters 825 Break It Easy Browser
  9. 1.6.1 Register index 750 Implement Easy Browser
  10. 1.6.6 Addresses that catch broken decoders 1050 Break It Medium Browser
  11. 1.7.2 Repair the transaction field 825 Fix Easy Browser
  12. 1.7.6 Catch the bad read paths 1275 Verify Medium Browser
  13. 1.7.7 Header monitor 1425 Implement Hard Browser

Module 2 · Collections

  1. 2.1.1 Resize and preserve 750 Implement Easy Verilator
  2. 2.2.1 First FIFO mismatch 825 Implement Easy Verilator
  3. 2.2.2 Bounded queue operations 1050 Implement Medium Verilator
  4. 2.3.1 Outstanding request lookup 750 Implement Easy Verilator
  5. 2.3.2 Duplicate-ID protection 975 Implement Medium Verilator
  6. 2.3.3 Out-of-order response matcher 1350 Implement Hard Verilator
  7. 2.4.2 Wide population reduction 825 Implement Easy Verilator
  8. 2.5.1 Missing beat indices 825 Implement Easy Verilator
  9. 2.6.1 Value snapshot 750 Implement Easy Verilator
  10. 2.6.2 Aliased collection repair 1050 Fix Medium Verilator
  11. 2.7.1 Flush pending requests 750 Implement Easy Verilator
  12. 2.7.8 The stale expectation 1125 Debug Medium Verilator

Module 3 · Routines and Processes

  1. 3.1.1 Popcount function 600 Implement Easy Verilator
  2. 3.2.1 Invocation-local accumulator 750 Fix Easy Verilator
  3. 3.3.1 Wait for two workers 750 Implement Easy Verilator
  4. 3.3.3 Cancellation scope repair 1125 Fix Medium Verilator
  5. 3.3.6 The timer that outlived its race 1125 Debug Medium Verilator
  6. 3.4.1 Persistent initialization flag 825 Implement Easy Verilator
  7. 3.5.1 Exact-count consumer 825 Implement Easy Verilator
  8. 3.6.1 Protected shared counter 900 Fix Easy Verilator
  9. 3.7.1 Single-response deadline 900 Implement Easy Verilator
  10. 3.7.2 Inclusive boundary checker 1050 Implement Medium Verilator
  11. 3.7.6 Catch the late responders 1350 Verify Hard Verilator

Module 4 · Classes

  1. 4.1.1 Construct a valid packet 750 Implement Easy Verilator
  2. 4.2.6 The copy that shares its payload 750 Fix Easy Verilator
  3. 4.2.7 Transactions that expose broken compares 1050 Break It Medium Verilator
  4. 4.3.1 Derived read transaction 825 Implement Easy Verilator
  5. 4.4.1 Virtual response length 750 Implement Easy Verilator
  6. 4.5.1 Safe downcast 825 Implement Easy Verilator
  7. 4.5.3 Stale cast destination 1125 Fix Medium Verilator
  8. 4.6.1 Typed value box 825 Implement Easy Verilator
  9. 4.7.1 Factory by opcode 825 Implement Easy Verilator
  10. 4.7.2 Validated factory arguments 1425 Implement Hard Verilator

Module 5 · Randomization

  1. 5.1.1 Legal packet length 825 Implement Easy Verilator
  2. 5.1.6 The packet that kept its old length 825 Fix Easy Verilator
  3. 5.2.1 Legal value sets 825 Implement Easy Verilator
  4. 5.2.6 Operations that expose broken legality checks 1050 Break It Medium Verilator
  5. 5.3.2 Balance mode frequency 825 Implement Easy Verilator
  6. 5.4.1 Override a soft default 825 Implement Easy Verilator
  7. 5.5.1 Freeze one random field 900 Fix Easy Verilator
  8. 5.6.1 Replay one object stream 825 Implement Easy Verilator
  9. 5.6.6 The burst that changed after the solve 1125 Debug Medium Verilator
  10. 5.7.1 Aligned burst request 825 Implement Easy Verilator
  11. 5.7.9 Catch the generators that cross a bank 1200 Verify Medium Verilator

Module 6 · Connecting to the DUT

  1. 6.1.1 Typed bus connection 825 Implement Easy Verilator
  2. 6.2.1 Pre-update versus post-update 750 Fix Easy Verilator
  3. 6.2.6 Catch the broken pipelines 1125 Verify Medium Verilator
  4. 6.3.1 Clocking-view sampler 825 Fix Easy Verilator
  5. 6.4.1 Configure one driver 900 Implement Easy Verilator
  6. 6.4.3 Wrong-interface binding 975 Fix Medium Verilator
  7. 6.5.9 Traces that expose broken hold checkers 900 Break It Easy Verilator
  8. 6.5.2 Hold-until-accepted driver 1425 Implement Hard Verilator
  9. 6.6.6 Hold the offer 825 Verify Easy Verilator
  10. 6.6.7 Count the beats 975 Verify Medium Verilator
  11. 6.6.8 Answer in time 975 Verify Medium Verilator
  12. 6.6.9 The right data for the right request 975 Verify Medium Verilator
  13. 6.6.12 Tickets for a lost response 1050 Verify Medium Verilator
  14. 6.6.11 A read-channel assertion suite 1500 Verify Hard Verilator
  15. 6.6.13 A tagged channel assertion suite 1500 Verify Hard Verilator
  16. 6.7.1 Identify the sampling race 1125 Debug Medium Verilator

Module 7 · FIFO Verification

  1. 7.1.1 Acceptance truth table 750 Implement Easy Verilator
  2. 7.1.6 Requests that expose broken FIFO rules 1050 Break It Medium Verilator
  3. 7.2.6 The read that was valid on an empty FIFO 900 Fix Easy Verilator
  4. 7.2.2 Arbitrary-depth FIFO 1125 Implement Medium Verilator
  5. 7.3.1 Directed fill and drain 750 Implement Easy Verilator
  6. 7.4.1 FIFO expected queue 900 Implement Easy Verilator
  7. 7.4.6 The scoreboard that checks too early 1125 Debug Medium Verilator
  8. 7.5.8 Two coverpoints for the FIFO 825 Implement Easy Verilator
  9. 7.5.9 The cross that can never close 1050 Fix Medium Verilator
  10. 7.6.1 Pointer-wrap sequence 825 Break It Easy Verilator
  11. 7.6.6 Catch the FIFOs that break at wrap and reset 1350 Verify Hard Verilator
  12. 7.7.3 Premature test completion 900 Fix Easy Verilator

Synchronous FIFO

  1. H1.9 Catch the faulty FIFOs 1350 Verify Hard Browser

Protocols · P1 Protocol Fundamentals

  1. P1.3.1 Implement a sink 1125 Implement Medium Browser
  2. P1.3.2 Catch the broken sources 1350 Verify Hard Browser
  3. P1.4.1 Beats into transactions 750 Implement Easy Browser
  4. P1.5.1 The throughput that never rose 1200 Debug Medium Browser
  5. P1.6.1 The FIFO that overflowed 1200 Debug Medium Browser
  6. P1.6.2 A credit counter 975 Implement Medium Browser
  7. P1.7.1 A scoreboard keyed by tag 1200 Implement Medium Browser
  8. P1.8.1 Fix the strobe 900 Fix Easy Browser
  9. P1.9.1 A round-robin arbiter model 975 Implement Medium Browser
  10. P1.10.1 Properties for the link 1350 Verify Hard Verilator
  11. P1.11.2 Break the links 1125 Break It Medium Browser
  12. P1.11.3 The beat that arrived late 1200 Debug Medium Browser
  13. P1.11.4 Fix the sink 975 Fix Medium Browser
  14. P1.11.5 A monitor for the link 975 Implement Medium Browser
  15. P1.11.1 Catch every broken link 1425 Verify Hard Browser

Protocols · P2 AXI

  1. P2.2.1 Catch the broken managers 1350 Verify Hard Browser
  2. P2.3.1 The write dependencies 1350 Verify Hard Browser
  3. P2.4.1 RDATA not held 1200 Debug Medium Browser
  4. P2.5.1 An issuer with N outstanding 1125 Implement Medium Browser
  5. P2.6.1 The address of every beat 1200 Implement Medium Browser
  6. P2.6.2 The WRAP boundary 1125 Fix Medium Browser
  7. P2.7.1 The lane mapper 1050 Implement Medium Browser
  8. P2.8.1 A byte-accurate write memory 1425 Implement Hard Browser
  9. P2.9.1 The strobe handling 1125 Fix Medium Browser
  10. P2.10.1 The same-ID order checker 1425 Verify Hard Browser
  11. P2.11.1 An ID-keyed scoreboard 1200 Implement Medium Browser
  12. P2.12.1 The stale read 1350 Debug Medium Browser
  13. P2.13.1 An exclusive monitor 1200 Implement Medium Browser
  14. P2.15.1 A Lite subordinate 1125 Fix Medium Browser
  15. P2.16.1 Six properties for the link 1425 Verify Hard Verilator
  16. P2.17.1 The AXI monitor 1350 Implement Hard UVM
  17. P2.18.2 Break the subordinates 1275 Break It Medium Browser
  18. P2.18.3 Break the managers 1275 Break It Medium Browser
  19. P2.18.4 The beat that landed in the wrong word 1275 Debug Medium Browser
  20. P2.18.5 The subordinate that reordered 1275 Fix Medium Browser
  21. P2.18.1 Catch every broken subordinate 1425 Verify Hard Browser
  22. P2.18.6 A beat-to-transaction monitor 1425 Implement Hard Browser

UVM Practice

  1. U1.4.1 The error test that never broke a checksum 900 Fix Easy UVM
  2. U2.4.1 Pack a frame whose payload has its own length 1125 Implement Medium UVM
  3. U3.2.1 Two environments that never talk 900 Fix Easy UVM
  4. U3.4.1 The trace window that never drops quietly 1050 Implement Medium UVM
  5. U4.3.1 The burst driver that outran its receiver 900 Fix Easy UVM
  6. U5.1.1 Catch the sequencers that grant out of turn 1275 Verify Medium UVM
  7. U5.3.1 A background sequence that leaves cleanly when killed 825 Implement Easy UVM
  8. U6.1.1 Keep a two-clock memory busy 1350 Implement Hard UVM
  9. U6.2.1 Play the memory, including its protected page 1125 Implement Medium UVM
  10. U6.3.1 Pack bytes into words, and flush the odd one 1350 Implement Hard UVM
  11. U7.2.1 A scoreboard among careless listeners 1125 Verify Medium UVM
  12. U7.4.1 The checker that fails nothing 900 Fix Easy UVM
  13. U8.2.1 Interleaved read bursts 1350 Implement Hard UVM
  14. U8.4.1 A latency meter with two bounds 1050 Implement Medium UVM
  15. U9.3.1 Three channels and a model that disagrees 1125 Fix Medium UVM
  16. U10.2.1 The scoreboard that remembered through reset 1050 Fix Medium UVM
  17. U12.1.1 Inject a bad check on one lane, on chosen beats 1050 Implement Medium UVM
  18. U13.2.1 Registers that all read zero 900 Fix Easy UVM
  19. U14.2.1 The overflow flag that would not stay set 900 Fix Easy UVM
  20. U15.2.1 The poison test with a short ledger 1125 Fix Medium UVM
  21. U16.4.1 The interrupt that clears itself 1425 Verify Hard UVM