Three parts covering the language features that matter for testbenches. Each part has a practice exam.
Verification guidelines, data types, arrays, and procedural flow — the grammar of the language.
Classes and OOP, constrained randomization, functional coverage, interfaces, and clocking blocks.