Silicon Lab
Design Verification Problems
Build a design, hunt its bugs, or repair what fails. Every answer runs on a real simulator.
Implement 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.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.6.1 Register index Implement Easy 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.7.1 Flush pending requests Implement Easy Verilator
Module 3 · Routines and Processes
- 3.1.1 Popcount function Implement Easy Verilator
- 3.3.1 Wait for two workers Implement Easy Verilator
- 3.4.1 Persistent initialization flag Implement Easy Verilator
- 3.5.1 Exact-count consumer Implement Easy Verilator
- 3.7.1 Single-response deadline Implement Easy Verilator
- 3.7.2 Inclusive boundary checker Implement Medium Verilator
Module 4 · Classes
- 4.1.1 Construct a valid packet Implement Easy 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.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.2.1 Legal value sets Implement Easy Verilator
- 5.3.2 Balance mode frequency Implement Easy Verilator
- 5.4.1 Override a soft default Implement Easy Verilator
- 5.6.1 Replay one object stream Implement Easy Verilator
- 5.7.1 Aligned burst request Implement Easy Verilator
Module 6 · Connecting to the DUT
- 6.1.1 Typed bus connection Implement Easy Verilator
- 6.4.1 Configure one driver Implement Easy Verilator
- 6.5.2 Hold-until-accepted driver Implement Hard Verilator
Module 7 · FIFO Verification
- 7.1.1 Acceptance truth table Implement 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.5.8 Two coverpoints for the FIFO Implement Easy Verilator
Protocols · P1 Protocol Fundamentals
- P1.3.1 Implement a sink Implement Medium Browser
- P1.4.1 Beats into transactions Implement Easy Browser
- P1.6.2 A credit counter Implement Medium Browser
- P1.7.1 A scoreboard keyed by tag Implement Medium Browser
- P1.9.1 A round-robin arbiter model Implement Medium Browser
- P1.11.5 A monitor for the link Implement Medium Browser
Protocols · P2 AXI
- P2.5.1 An issuer with N outstanding Implement Medium Browser
- P2.6.1 The address of every beat Implement Medium Browser
- P2.7.1 The lane mapper Implement Medium Browser
- P2.8.1 A byte-accurate write memory Implement Hard Browser
- P2.11.1 An ID-keyed scoreboard Implement Medium Browser
- P2.13.1 An exclusive monitor Implement Medium Browser
- P2.17.1 The AXI monitor Implement Hard UVM
- P2.18.6 A beat-to-transaction monitor Implement Hard Browser
UVM Practice
- U2.4.1 Pack a frame whose payload has its own length Implement Medium UVM
- U3.4.1 The trace window that never drops quietly Implement 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
- U8.2.1 Interleaved read bursts Implement Hard UVM
- U8.4.1 A latency meter with two bounds Implement Medium UVM
- U12.1.1 Inject a bad check on one lane, on chosen beats Implement Medium UVM
No problems in this format yet.