Choose your
next lesson.
Start with the language. Follow the question you want to answer.
How do I describe it?
SystemVerilog
Types, collections, processes, classes, randomization and connecting to the design: the language of the testbench.
49 lessons ready-
01
Storing data
7 lessonsChoose data types that keep unknown values visible, lay bits out the way the wire does, and report failures clearly.
-
02
Collections
7 lessonsHold bursts, queues of expected responses and outstanding IDs in the collection that fits, and keep every lookup honest.
-
03
Routines and processes
7 lessonsWrite tasks and functions that behave when called concurrently, start and stop processes on purpose, and pass work between them without lost wakeups or deadlocks.
-
04
Classes
7 lessonsModel transactions as objects: create one per transaction, copy them deliberately, extend them for error injection, and let each object answer for itself.
-
05
Randomization
7 lessonsGenerate legal bus bursts with constraints, control and measure how often each kind appears, and make a failing random test reproducible.
-
06
Connecting to the DUT
7 lessonsBundle the pins into interfaces, drive and sample them at well-defined points in each time step, and check the handshake on every edge.
-
07
FIFO capstone
7 lessonsSpecify a FIFO, build it, and verify it with a complete layered testbench that reuses everything from Modules 1 to 6.
How does the whole bench fit?
UVM
Build reusable, layered testbenches with the Universal Verification Methodology.
61 lessons ready-
U1
UVM architecture and phases
4 lessonsMap a layered testbench onto UVM components, follow the order in which phases visit the component tree, and keep the run phase open exactly as long as work is in flight.
-
U2
Objects, factory and configuration
4 lessonsCopy and compare transactions safely, let a test swap classes through the factory, and deliver configuration and virtual interfaces to the components that need them.
-
U3
Communication between components
6 lessonsHow UVM code reaches other code: virtual and pure virtual methods and interface classes, TLM-1 ports, exports and imps with the direction of every call and every data move, blocking and non-blocking calls through FIFOs and channels, analysis broadcast, and the sequencer-driver link and callbacks as the same pattern.
-
U4
Sequences, drivers and responses
3 lessonsSend items from a sequence through the sequencer to a driver, read the handshake in a log, route responses back to the right sequence, and drive a clocked bus that pushes back.
-
U5
Sequencer and sequence control
5 lessonsMeasure the six arbitration modes and the priority rules on one bench, give a sequence the driver with lock and grab, keep one out with is_relevant, learn the sequence lifecycle, read the macros, libraries and default sequences that start stimulus, and synchronise with events, barriers and a heartbeat.
-
U6
Drivers for real buses
3 lessonsFill a pipelined bus with a multi-threaded get/put driver, answer a bus master from a reactive agent whose responder sequence decides every reply, and stack a packet layer over a byte link with a translator sequence and a reconstruction monitor.
-
U7
Monitors, analysis and in-order scoreboards
4 lessonsTurn pin activity into transactions at the edge where the design takes them, decide who copies a transaction and when, and check results in order with a scoreboard that accounts for every input and ends only after a quiet window, and route the assertions of a bound interface checker into the same UVM verdict.
-
U8
Scoreboard architectures
4 lessonsSplit checking into prediction and evaluation, key predictions by tag when a design answers out of order, decide what makes a transaction correct, and measure latency and bookkeeping so that zero errors cannot hide zero checks.
-
U9
Reference models
5 lessonsWhere the prediction comes from: choosing a checking strategy, an untimed model and its sync point, a C model behind DPI, TLM-2.0 sockets, and an instruction-set model compared at each retire as in a virtual-platform flow.
-
U10
Coordinated stimulus and reset
3 lessonsDrive several interfaces from one virtual sequence, reset the design in the middle of traffic without leaving the sequencer, driver or scoreboard behind, and put deadlines on every wait so a stuck test fails fast with a useful message.
-
U11
Reusable agents and selective overrides
3 lessonsReuse one agent at block and chip level: make it passive where another block drives the pins, give each copy its own configuration object, and replace the driver inside one agent only.
-
U12
Extension and reuse
3 lessonsExtend a component without editing it, with callbacks and the choice between callback, override and knob; reuse a block environment inside a subsystem with its checks intact; and connect a bench to a legacy BFM that has no interface.
-
U13
Register models and prediction
3 lessonsDescribe the incrementer's registers in a UVM register model, tell its desired value from its mirror, drive real APB transfers through an adapter, and keep the mirror right when other code writes the bus.
-
U14
Register layer II
4 lessonsReach the register slice through its frontdoor and a hand-written backdoor, run the built-in register tests, model quirky registers, program a configuration from the model, and assemble generated models into a chip with two ports.
-
U15
Coverage, debugging and scale
3 lessonsPlace coverage where it proves what the design did and trace it to the plan; find a bench bug from its symptom with the library's debug tools; and measure and remove the costs that make a large bench slow or make its memory grow.
-
U16
Diagnostics, regression and capstone
4 lessonsMake reports support a verdict, record how random stimulus was seeded, close coverage holes on purpose, and assemble a complete UVM bench for a four-entry FIFO, then verify an APB peripheral with the whole track's machinery and localise a planted bug from the report.
Did it happen at the right time?
Assertions
Describe correct behaviour once with SystemVerilog Assertions and let the simulator check it every cycle.
14 lessons ready-
A1
Foundations
3 lessonsWhat an assertion checks and when: immediate, deferred and concurrent assertions, the values a clock edge samples, and the attempt every edge starts, which can pass, fail or pass vacuously.
-
A2
Sequences
2 lessonsDescribe timing with fixed delays, ranges and repetition, see the threads one attempt forks, put two obligations on one trigger, and count protocol events with auxiliary code.
-
A3
Properties
3 lessonsWhat the end of a test means for weak and strong properties, how to say that a condition holds until an event, and how reset and abort conditions end attempts.
-
A4
Transactions
2 lessonsCarry a value from a request to its response with local variables, and pair responses with the requests they answer.
-
A5
Assertions and procedural code
1 lessonConcurrent assertions placed inside always blocks, with the clock and enable they take from the procedure, and sequences used as events that wake procedural code.
-
A7
Packaging and reuse
1 lessonWrite rules once as named sequences and properties, keep them in a module of rules, and bind them into designs you cannot edit.
-
A8
Capstones
2 lessonsPlan and write complete assertion suites, for a FIFO and for a tagged request/response channel, that fire on every faulty design and stay silent on the correct one.
What have I missed?
Functional coverage
Measure what your tests have actually exercised, and find the cases they missed.
8 lessons ready-
0C
Functional coverage
8 lessonsProve what your tests exercised: build coverage models with covergroups, find the holes, and close them with constraints.
No lessons match that search. Try a shorter topic or clear the search.