The design patterns that matter in SystemVerilog testbenches: factory, callbacks, observer, configuration objects, singleton and strategy, with examples and best practices.
Browsing: System Verilog
SystemVerilog DPI explained with examples: importing C functions, exporting SystemVerilog tasks to C, context tasks, type mapping with svdpi.h, and using C++ and Python through DPI.
How to build a layered, self-checking SystemVerilog testbench: generator, driver, monitor, reference model, scoreboard and coverage, with code, debugging tips and the mapping to UVM.
How to write functional coverage in SystemVerilog: covergroups, coverpoints, bins, crosses, transition coverage, cover properties, where to sample and how to close coverage.
SystemVerilog assertions explained with a waveform: immediate vs concurrent, implication, sequences, $rose, $stable and $past, assert vs assume vs cover, formal verification and assertions worth adding to every design.
How SystemVerilog testbench threads work: fork-join, join_any and join_none, the classic loop bug, mailboxes, semaphores, events, disable fork and wait fork.
SystemVerilog constrained randomisation explained: rand and randc, constraint blocks, dist, implication, foreach, unique, soft, solve before, inline constraints and common mistakes.
SystemVerilog classes for testbenches: objects and handles, shallow vs deep copy, encapsulation, inheritance, virtual methods and polymorphism, abstract classes and parameterised classes.
SystemVerilog interfaces explained with a complete example: modports, clocking blocks with skews, assertions inside interfaces, virtual interfaces and parameterised interfaces.
What SystemVerilog adds to tasks and functions: return, void functions, default and named arguments, ref and const ref, typed arguments and automatic storage, with examples.