SystemVerilog Advanced
Develop a reusable verification environment using SystemVerilog language features after completing the class, interface, and simulation foundations.
About this course
Develop a reusable verification environment using SystemVerilog language features after completing the class, interface, and simulation foundations. Start by strengthening object ownership and polymorphism, then construct legal randomized transactions with checked constraint solving and reproducible seeds. Coordinate concurrent components through mailboxes, events, and semaphores while handling reset, timeouts, and orderly shutdown. Turn a written verification plan into functional covergroups and temporal assertions, paying particular attention to sampling, vacuity, and what each metric can actually demonstrate. Integrate a driver, monitor, reference model, and scoreboard, then investigate failures through focused regressions and documented coverage gaps. The environment remains plain SystemVerilog so that language concepts are visible before a later UVM course introduces a standardized framework. A compatible simulator is required for the advanced exercises; feature availability and licensing must be checked in advance.
Where to start
Build the knowledge in these courses first, or bring equivalent practical experience:
What you’ll learn
- Design class hierarchies with explicit object ownership, copying, and virtual dispatch.
- Write legal constrained randomized stimulus and diagnose failed randomization calls.
- Coordinate concurrent components with bounded waiting and deterministic reset handling.
- Create requirement-linked covergroups with deliberate sampling and meaningful crosses.
- Write and validate temporal assertions with correct sampling and reset semantics.
- Connect a monitor, reference model, and scoreboard with explicit ordering rules.
- Run reproducible seed regressions and explain uncovered or waived verification goals.
- Explain which plain SystemVerilog patterns prepare for a separate UVM methodology course.
Course syllabus
10 sections · 52 topics
01. Object ownership and reusable class design5 topics
- Review handle aliasing, null access, shallow copies, and nested-object copy requirements.
- Use inheritance, virtual methods, abstract behavior, and safe downcasting deliberately.
- Apply parameterized classes and typed containers to transaction reuse.
- Separate transaction data from driver, monitor, and checking responsibilities.
- Establish object creation and ownership rules at every component boundary.
02. Constrained random transaction generation5 topics
- Declare rand and randc properties and compare object randomization with std::randomize.
- Express legal ranges with inside, implication, conditional constraints, and foreach.
- Constrain related fields and dynamic array sizes without accidental overconstraint.
- Check every randomize return value and report the failing scenario.
- Set and preserve seeds so an observed failure can be rerun.
03. Constraint control and scenario composition5 topics
- Apply inline and inherited constraints while tracking active constraint sets.
- Use constraint_mode, rand_mode, and soft constraints for controlled test variation.
- Compare dist weighting and solve-before ordering without assuming uniform outcomes.
- Use pre_randomize and post_randomize for documented preparation and derived values.
- Diagnose contradictory constraints and validate legal traffic with small sanity experiments.
04. Concurrent processes and communication5 topics
- Compare fork-join, join_any, and join_none with process lifetime examples.
- Use wait fork and scoped cancellation while protecting unrelated threads.
- Pass typed transactions through bounded mailboxes and explain producer backpressure.
- Use semaphores for shared-resource ownership and events with explicit synchronization assumptions.
- Implement timeout, stop, and drain paths that expose deadlocks instead of hanging silently.
05. Timing, sampling, and reset architecture5 topics
- Relate driving and observation to relevant event regions and nonblocking updates.
- Select clocking-block sampling and driving skews for a specified interface contract.
- Separate accepted transfers from offered transactions and account for stalls.
- Define reset cancellation, queued-transaction flushing, and restart behavior.
- Reproduce and repair a testbench race using a waveform and scheduling explanation.
06. Functional coverage from a verification plan5 topics
- Translate requirements into measurable coverpoints and identify code versus functional coverage.
- Create bins for meaningful values, boundaries, and transitions with documented intent.
- Define crosses selectively and justify ignored combinations without hiding reachable cases.
- Choose event-based or explicit sample methods and sample only qualifying transactions.
- Review per-instance behavior, report merging, and uncovered bins without treating coverage as proof of correctness.
07. Temporal assertions and sampled behavior6 topics
- Distinguish immediate checks from clocked concurrent assertions and explain sampled-value behavior.
- Build sequences with delays, ranges, and repetition from cycle-accurate requirements.
- Compare overlapping and nonoverlapping implication using concrete timing traces.
- Use disable iff with awareness of its reset-abort semantics and sampled versus current values.
- Apply $past, $rose, $fell, and $stable while accounting for initialization and clock history.
- Detect vacuous success, add cover properties, and test properties with deliberate violations.
08. Reference models and scoreboards5 topics
- Define an independent behavioral model from the specification rather than duplicating RTL structure.
- Implement in-order expected queues and separate matching from value comparison.
- Handle latency, transaction identifiers where needed, and reset-related model flushing.
- Publish immutable observations or explicit copies so later mutation cannot corrupt results.
- Report missing, extra, reordered, and incorrect transfers with useful transaction context.
09. Integrating a plain SystemVerilog environment5 topics
- Connect generator, driver, monitor, model, scoreboard, and coverage collector through explicit APIs.
- Configure components using constructors and typed configuration data.
- Derive focused tests through polymorphism without depending on UVM phases or factory APIs.
- Coordinate startup, reset completion, stimulus completion, scoreboard drain, and shutdown.
- Inject a known DUT or checker defect to confirm that the verification environment detects it.
10. Regression analysis and coverage closure6 topics
- Build a test-and-seed matrix with timeouts, exit status, and reproducible logs.
- Classify stimulus, DUT, checker, assertion, and infrastructure failures before fixing them.
- Merge compatible coverage data and trace each gap back to a requirement or missing scenario.
- Use targeted tests or constraint changes to address reachable gaps and document justified exclusions.
- Prepare a review containing commands, failing seeds, assertion evidence, coverage limits, and unresolved risks.
- Map reusable language patterns to the motivation for a separate UVM follow-on without teaching UVM here.
Course requirements
- A compatible SystemVerilog simulator supporting the required class features, constraint solver, covergroups, concurrent assertions, and clocking blocks; run feature checks for the installed version.
- Appropriately licensed local simulator access or an authorized browser-based service with the required capabilities and run limits.
- Waveform and log inspection tools, plus access to the simulator's coverage reports or database utilities.
- A shell and basic scripting environment for passing seeds, collecting exit status, and organizing regression artifacts.
- Icarus Verilog and Verilator alone must not be assumed sufficient for every exercise; their SystemVerilog support is partial and changes across versions.
Prerequisites
- SystemVerilog types, arrays, packages, tasks, functions, and automatic lifetimes.
- Classes, constructors, inheritance basics, handles, and virtual interfaces.
- Interface and clocking-block connections, reset sequencing, and self-checking directed tests.
- Verilog RTL simulation and waveform-based debugging.
Who this course is for
- Learners comfortable with basic SystemVerilog classes, interfaces, and clocking blocks.
- Verification learners preparing to build reusable environments before learning UVM.
- RTL engineers adding constrained stimulus, functional coverage, and assertions to simulation.
Practice projects
Apply the topics in sequence through these planned exercises.
Constrained transaction generator
Proposed exercise: generate bounded packet fields and legal operation sequences, detect conflicting constraints, preserve failing seeds, and compare intended versus observed distributions.
Coverage-guided register-slice environment
Proposed exercise: extend a specified ready/valid register-slice testbench with concurrent stimulus and checking, randomized stalls, reset recovery, transfer properties, functional coverage, and a reproducible regression report.
Curriculum references
Primary documentation and teaching resources that inform this learning sequence.
- Accellera: Available IEC/IEEE Standards
Separates SystemVerilog language standardization from UVM methodology standardization.
- Siemens Verification Academy: SystemVerilog OOP course announcement
Official academy explanation of classes, inheritance, and polymorphism as foundations usable before UVM.
- Siemens Verification Academy: Introduction to Functional Coverage
Supports coverage classifications and verification-metric planning; complete training content may require access.
- Siemens Verification Horizons: DAC 2020 newsletter
Points to technical treatment of the SVA engine and independent assertion attempts.
- Verilator: Input Languages
Explicitly documents limited classes and partial assertion and functional-coverage support.
- Icarus Verilog: Official README
Warns that SystemVerilog support is incomplete; language mode is not a guarantee that every verification construct works.
Course outline and pricing are subject to confirmation before enrolment opens.
