SystemVerilog design and verification for Verilog users
Standard Level - 5 daysview dates and locations
How much SystemVerilog training do you need? Watch the video now!
SystemVerilog (IEEE 1800™), the successor to the Verilog® hardware description language, has become the dominant language standard for functional verification. SystemVerilog significantly enhances the capabilities of Verilog in a number of areas, offering productivity improvements for RTL designers, assertions, and constrained random stimulus generation for verification engineers.
Comprehensive SystemVerilog provides a complete and integrated training program to fulfil the requirements of design and verification engineers and those wishing to evaluate SystemVerilog's applicability to both design and verification applications. It is structured to enable engineers to develop their skills to cover the full breadth of SystemVerilog features for both design and verification. This includes the requirements of verification engineers who wish to exploit the potential of class-based verification and object oriented techniques using SystemVerilog, as well as RTL coding, assertions and test benches. Design engineers who do not intend to use SystemVerilog for class-based verification should attend the shorter training course SystemVerilog for Designers, which shares the same content as Days 1 to 3 of Comprehensive SystemVerilog.
Workshops comprise approximately 50% of class time, and are based around carefully designed exercises to reinforce and challenge the extent of learning.
Doulos is an independent company, enabling delegates to receive the benefit of objective tuition while learning in the context of their chosen tool and methodology. Leading tools supported for this course include:
- Aldec Riviera-PRO
- Cadence Incisive®
- Mentor Graphics Questa®
- Synopsys VCS®
Other tools may be available on request. Please contact Doulos if your preferred tools are not listed here.
Who should attend?
- Design engineers who wish to make full use of SystemVerilog's class-based verification capabilities for test bench development as well as learning SystemVerilog for RTL design.
- Verification engineers aiming to deploy coverage driven verification approaches for the first time using SystemVerilog
- Verification engineers wishing to migrate to SystemVerilog class-based verification from other established verification languages and test bench automation techniques
- Engineers and managers who wish to evaluate the full range of SystemVerilog's capabilities for design and verification
- EDA support engineers who wish to gain a comprehensive understanding of how their customers' engineering teams can most productively use SystemVerilog in both design and verification domains
What will you learn?
The course is structured into distinct sections.
- SystemVerilog for Designers (days 1-3) lays the foundations for learning the SystemVerilog language for design and for verification. This includes:
- SystemVerilog Basics (¾ day) lays the foundation for learning the SystemVerilog language for design and for verification.
- SystemVerilog RTL (½ day) teaches the synthesizable RTL language features of SystemVerilog. For hardware designers, this assumes an understanding of RTL synthesis with Verilog or VHDL. For verification engineers, this provides some familiarity with the RTL constructs as used by hardware designers.
- SystemVerilog Assertions (¾ day) teaches the principles of assertion-based design and verification and the features of the SystemVerilog Assertion language.
- Module-based SystemVerilog Verification (1 day) teaches the verification features of SystemVerilog that can be used in module-based code. It also provides a foundation for class-based verification.
- SystemVerilog Basics (¾ day) lays the foundation for learning the SystemVerilog language for design and for verification.
- Class-based SystemVerilog Verification (days 4-5) describes how to write sophisticated constrained-random, coverage-driven, object-oriented testbenches. This material leverages Doulos's years of experience in teaching object-oriented verification concepts, making these challenging topics accessible to engineers with a wide variety of backgrounds. This course has been specifically tailored to provide the ideal preparation for learning UVM or a similiar verification methodology.
Comprehensive SystemVerilog provides the essential SystemVerilog language foundations for learning the OVM, VMM, or UVM verification methodologies. Doulos also offers follow-on training in each of these specific methodologies. For further details, see OVM Adopter Class, VMM Adopter Class, and UVM Adopter Class.
A good working knowledge of Verilog is essential:
- For engineers with no HDL knowledge or experience the Doulos Comprehensive Verilog course, or equivalent, is an essential precursor.
- For engineers with no Verilog knowledge, but with working experience of VHDL, Doulos offer a Fast Track Verilog for VHDL Users class in a format tailored to equip delegates with the necessary foundation for SystemVerilog.
- For onsite courses, precursor training in Verilog can be tailored to the specific team profile and combined with appropriate SystemVerilog modules to fully address team needs (see Modular SystemVerilog).
If you require any of these precursor training options please contact the Doulos team to discuss what will best suit your needs, or complete an online enquiry.
Training materialsDoulos class materials are renowned for being the most comprehensive and user friendly available. Their style, content and coverage is unique in the HDL training world, and has made them sought after resources in their own right. The materials include:
- Fully indexed class notes creating a complete reference manual
- Workbook full of practical examples and solutions to help you apply your knowledge
- Doulos SystemVerilog Golden Reference Guide for language, syntax, semantics and tips
Structure and Content
SystemVerilog for Designers (days 1-3)
IntroductionWhat is SystemVerilog? • Language Evolution • SystemVerilog Language Features • Caveats • The UVM Family Tree • Books and Resources
Verilog versus SystemVerilogLogic Type • Reg, Logic, and Bit • Nets versus Variables - Refresh • Wire versus Var
Programming Language FeaturesC-Like Language Features • Static vs Automatic Variables • Static vs Automatic Tasks • ++, --, and Assignment Operators • Labeling • Time Units • Do While Loop • Immediate Assertions • join_none and join_any • Enhanced Tasks and Functions • Task and Function Arguments • Void Functions • Argument and Return Types • Type string • $sformat and $sformatf
Bus-Functional ModelingSimple Module-Based BFM • Testbench using BFM • Separate Test from Test Harness
Basic Data Types4-state and 2-state Types • Initial Values • Caveats with Signed Types • Enumerations • Type-Checking of Enumerations • struct • typedef struct • Packed Struct • Packed and Unpacked Arrays • Indexing Multidimensional Arrays • Packages • Packages and Ports
InterfacesSimple Interface • Package versus Interface • Instantiating an Interface • Accessing Interface Members • Ports and Parameters on Interfaces • Pin-Level Interface • Modports • Generic Interface Ports • Task/Function in Interface • Calling Task through Interface Port
RTL ProcessesSystemVerilog and RTL Synthesis • Combinational Logic • Clocked Processes • always_comb, always_latch, always_ff • Synthesis-Friendly If / Case • priority case • unique if • unique case • Wild Equality Operators • case inside • inside Operator
RTL TypesSynthesizable Data Types • Enums for Finite State Machines • Base Types and Values • Rules for Overriding the Enum Values • Packed Struct (Review) • Packed Union • Multidimensional Arrays • Nets, Ports and Data Types • Types and Packages • Type Parameters • Synthesis of Interfaces • Multiple Drivers on a Bus • How to Differentiate Connections? • Modport Expressions • Modport Expressions with Generate
The SVA LanguageWhat are Properties? • Property versus Assertion • Benefits Of Assertions • Who Writes Properties? • Immediate and Concurrent Assertions • Immediate Assertions • Assertion Failure Severity • Concurrent Assertions • Temporal Behaviour • Clocks and Default Clocks • Holds and Implication • Non-overlapped Implication • Simulation of Assertions • Assertion Coverage • Simulation and Cover Property • Binding
Properties, Assertions and SequencesImplication • Properties are checked on every clock • |=> and |-> • $rose() and $fell() • $rose() vs posedge • $past() • $sampled() • Properties using Expressions • Named Properties • Sequences – Basic Syntax • Concatenation • Repetition • Consecutive Repetition • Unbounded Repetitions • Zero Repetitions • Non-Consecutive and Goto Repetition • Sequence versus Implication • $rose() and $fell() versus Sequence
More on Properties & Sequences (Optional Topic)Sequence Operators • Sequence Or • Sequence and • Non-Length-Matching and • Sequence Length-Matching and • Throughout • Within • first_match • Property Operators • Beware Negating Implications • Operator Precedence • Named Sequences and Properties • Sequence Completion • Variables and Procedures in Sequences • Detecting the Endpoint of a Sequence • Turning Assertions Off
Module-based SystemVerilog Verification
Clocking BlocksClocking Block Syntax • Input and Output Skew • Creating a Clocking Block • Testbench and Clocking Block • Cycle Delays and Clocking • Input and Output Skew Syntax Summary • Scheduler Regions • Stimulus and Response • Signal Aliasing • Multiple Clocking Blocks • Driving a Net • Clocking Blocks in Interfaces • Clocking Blocks versus Programs
RandomizationConstrained Random Verification • Random Numbers in SystemVerilog • std::randomize • Constraint Syntax • Seeding and Random Stability • Saving & Restoring Seeds • Random Sequence of Valid Actions • Randcase • Randsequence
CoverageFunctional Coverage • Coverage Bins • Further Options • Transition Coverage • Cross Coverage • Adjusting Stimulus Using Coverage
Arrays and QueuesDynamic Arrays • Queues • Working with Queues • Queue Methods • Nesting, Assignment Patterns, and %p • Array-like Containers • Associative Arrays • Associative Array Methods • Foreach
Other Language Features (Optional Topic)$root and $unit • Enumeration Methods • Arrays for Multidimensional Structures • Initializing an Unpacked Array • Replication in an Assignment Pattern • Packed Arrays and Structures • Pass-by-Copy • Pass-by-Reference • const ref • Array Querying Functions • $bits • Bit-stream Casting • Array Manipulation Methods • Array Locator Methods • Array Ordering Methods • Array Reduction Methods • Other IEEE 1800-2009 Features
The Direct Programming Interface (Optional Topic)DPI Simulation Flow • Command-line Switches • Importing a C Function • Changing the Imported Function Name • Mapping Data Types of Arguments • Exporting a Function to C • Sandwiches and Transparency • Importing and Exporting Tasks • Scalar Bit and Logic Arguments • Packed Arrays • Decoding the Canonical Representation • String Arguments • Open Array Arguments • Task Return Values • Task Disable Flow • Pure and Context
Class-based SystemVerilog Verification (days 4-5)
Classes for TransactionsConstrained Random Verification • Representing Transaction Data • SystemVerilog Classes • Object = Instance of Class • Constructor • Constructor Arguments
Class Members and CopyingStatic Data Members • Constant Data Members • Randomized Data Members • Data Members of Class Type • Forward Typedef • Object Copy with new • Shallow Copy • Deep or Shallow Copy?
Virtual InterfacesTest Harness and Testbench • Modules versus Classes • Creating the Testbench • Virtual Interface • Building a test harness • Adding a clocking block • Connecting the virtual interface • Accessing a Task through a Modport • Testbench Static Structure • BFM or Driver Class • Testbench Object Structure
Extending Classes for StimulusImproved Generator Class • Constrained randomization • Creating an Extended Class • The Inheritance Relationship • Inheriting Class Members • Control Knobs and Constraints • Methods of Extended Class • Derived-class Object, Base-class Variable • Virtual Methods • General-Purpose Infrastructure
TLM and ChannelsReusable Verification Environments • Transaction Level Modeling • Using Channels • Generic Channel and Transaction Classes • Out-of-Block Declarations • Connecting Channels • Getting Data from a Generic Channel • Safe Downcasting with $cast • Type Parameterization of Classes • Running Components with fork...join • fork...join_none • Identifying Forked Processes
Component HierarchyTestbench Component Hierarchy • Implementing Relationships • Base Classes (review) • Abstract Class and Pure Virtual Methods • Interface Classes in IEEE 1800-2012 • Component Base Class • Launching a Task with fork...join_none • Customising a Component • Constructing a Component
Monitors and CheckersKinds of BFM-Like Component • Monitors and Checkers • Bus Protocol Checking • Modports for Driver and Monitor • Monitor Implementation • Using the Monitored Transactions • Checker Implementation • Mutual Exclusion • Semaphore Class • Checker with Mutual Exclusion
Functional CoverageCoverage Driven Verification • Verification Planning • From Features to Tests • Covergroups • Embedded Covergroups • Procedural Sampling • Arguments and Options • Coverage Bins • Bins and Coverage • Cross Coverage • Cross Coverage and Labels • Cross Coverage Example • Controlling Cross Bins
More on Constraints (Optional Topic)Inline Constraints • Overriding Constraints • Procedural Control of Randomization • Procedural Control of Constraints • Constraint Ordering • Function Calls within a Constraint • Constraining Dynamic Arrays • Constraining an Array-of-Objects • Arrays within a Constraint • Hierarchical Constraints • unique • Soft Constraints
Processes and Events (Optional Topic)The std Package • What is a “process”? • fork...join_none • fork...join_any • wait fork • disable fork • Identifying Processes • Fine-grain Process Control • Process Control Example • Mailbox Class • Using Mailboxes • Enhanced Events
|January 14th, 2019||Boston, MA||Enquire|
|February 4th, 2019||Munich, DE||Enquire|
|February 4th, 2019||San Jose, CA||Enquire|
|March 4th, 2019||Austin, TX||Enquire|
|March 11th, 2019||Sacramento, CA||Enquire|
|March 18th, 2019||Ringwood, UK||Enquire|
|March 18th, 2019||San Diego, CA||Enquire|
|March 25th, 2019||Chicago, IL||Enquire|
|April 1st, 2019||Munich, DE||Enquire|
|April 1st, 2019||Denver, CO||Enquire|
|April 8th, 2019||Milwaukee, WI||Enquire|
|April 15th, 2019||Columbia, MD||Enquire|
|April 29th, 2019||San Jose, CA||Enquire|
|May 6th, 2019||Stockholm, SE||Enquire|
|May 6th, 2019||Copenhagen, DK||Enquire|
|May 6th, 2019||Austin, TX||Enquire|
|June 3rd, 2019||Munich, DE||Enquire|
|July 15th, 2019||Ringwood, UK||Enquire|
|July 15th, 2019||Boston, MA||Enquire|
|July 15th, 2019||Chicago, IL||Enquire|
|July 22nd, 2019||Munich, DE||Enquire|
|August 5th, 2019||Ankara, TR||Enquire|
|August 12th, 2019||San Jose, CA||Enquire|
|indicates CONFIRMED TO RUN courses.|
Looking for team-based training, or other locations?
Complete an on-line form and a Doulos representative will get back to you »
Price on request
Back to top