
Welcome and Congratulations for joining this course.
If you are new to Verification domain and exploring the possibilities of learning through simplified course content then you have chosen the right course.
Following are the course outcomes expected after successful completion of this course:
Outcome 1: Ability to justify the need of verification and verification language SystemVerilog
Outcome 2: Ability to describe design and testbench concepts
Outcome 3: Ability to write your SystemVerilog code
Outcome 4: Ability to implement Various SystemVerilog Data Types including User Defined Data Types
Outcome 5: Ability to use interface concepts of SystemVerilog
Outcome 6: Ability to simulate SystemVerilog code with simulation tool and interpret simulation log
Primary reference book for this course: Chris Spear, “System Verilog for Verification: A guide to learning the testbench language features”, Springer, 2nd Edition.
Other references are:
1. Stuart Sutherland, Simon Davidmann, and Peter Flake, “System Verilog for Design: A guide to using system verilog for hardware design and modeling”, Springer, 2nd Edition.
2. Ben Cohen, Srinivasan Venkataramanan, Ajeetha Kumari and Lisa Piper, “SystemVerilog Assertions Handbook”, VhdlCohen Publishing, 3rd edition
3. System Verilog Language Reference manual
4. S Prakash Rashinkar, Peter Paterson and Leena Singh, “System on Chip Verification Methodologies and Techniques”, Kluwer Academic, 1st Edition.
Let us start learning.
Verify that the design matches intent and specifications and identify functional errors across blocks and subsystems, using SystemVerilog and UVM-based methods.
Verification checks that the design conforms to its specification by driving it with diverse stimuli, observing responses, and comparing outputs to expected results, with independence between designer and verification engineer.
Explore how shrinking transistors, rising design complexity, and physical property challenges create timing and capacity issues, verification gaps, and the need for reusable designs and careful post-processing.
Explore verification technology options including simulation-based verification, formal verification, and hardware-assisted emulation to accelerate design validation and ensure timing and functional correctness.
Explore verification methodology and approaches for system and hardware, including system-level verification with behavioral simulation, formal methods, and top-down, bottom-up, and unification approaches for blocks and systems.
Design and follow a verification plan with defined features, checkpoints, and milestones to guide verification engineers through the design cycle. Incorporate feature extraction, regression analysis, and coverage for traceable progress.
In this session you have learned what is the necessity of verification and how to write verification plan. There are many technology challenges, however various technology options, tools and methodologies are also available for improving verification of design.
You can learn more in the following manner:
Visit websites of various companies and find out percentage of verification engineers working in the company and their job roles
Visit websites and find out the products that are failed due to insufficient efforts devoted to verification
Consider any design of your choice, for example ethernet switch, MP3 player etc and try to write specifications for the same
For the above design and its specifications try an attempt to write verification plan
If you have successfully solved quiz and above mentioned tasks then confidently you can move to next session
Let's get started next session. Best of luck.
Learn how to build a verification bench around a design in SystemVerilog, apply inputs and stimulus, collect outputs, and compare with expectations to validate functionality.
Apply stimulus to the design under test and capture responses with a testbench. Monitor and automatically compare actual results to the expected responses to assess correctness and coverage.
Explore two verification strategies—directed (inadequate) testing and constrained random testing—and learn to plan, constrain randomness, achieve functional coverage, and maintain reusable test benches.
Design layered testbenches for verification using agents, drivers, monitors, and scoreboards to generate and observe transactions. Build scenarios with functional coverage and randomization to validate designs.
Learn how verification languages boost productivity by automating stimulus, reporting, and coverage analysis, compare hardware verification languages with design languages, and examine programmable interfaces such as C++ for verification tasks.
Explore why SystemVerilog was created to address Verilog's modeling and verification gaps. Identify features like constrained randomization, functional coverage, assertions, and C/C++ DPI integration that boost productivity and maintainability.
Learn tool support for SystemVerilog, including browser-based playgrounds, simulators, and test benches, with guidance on selecting vendors like Synopsys, Cadence, and Mentor Graphics.
Design a one-bit full adder in SystemVerilog with inputs A, B, C and outputs sum and carry, then illustrate multi-bit extension and test bench simulation.
Explore built-in functions and operators in SystemVerilog, including display and monitor, time, finish, and stop, and learn how arithmetic, logical, and relational operators drive verification tasks.
In this session you have learned fundamentals of testbench and writing your first SystemVerilog program.
You can learn more in the following manner:
Visit websites of various companies and make an exhaustive list of tool-sets used for verification
Make a separate list of proprietary tools and open source tools used in the verification domain. List down limitations and advantages of these tools.
Solve the attached assignments. Write SystemVerilog Code where ever possible and simulate it in EDA Playground.
If you have successfully solved quiz and above mentioned tasks then confidently you can move to next session
Let's get started next session. Best of luck.
The logic type in SystemVerilog provides a four-state data type that replaces wire and reg, enabling faster simulation, reducing synthesis confusion, and supporting signed and unsigned variants.
Master fixed size arrays in SystemVerilog by declaring, initializing, indexing, and slicing arrays of specified length, with elements, indices, and vector operations demonstrated.
Explore packed and unpacked arrays in SystemVerilog, including how to declare, size, and access array elements, and manage bit-level storage and unused elements.
Explore dynamic arrays in SystemVerilog, learning how to declare, resize, and initialize arrays, manipulate their elements, and pass values to adapt memory size in verification tasks.
Explore how queues manage homogeneous data, supporting push front and back, pop operations, indexed insertions and deletions, and size checks, with bounded and unbounded examples.
Explore associative arrays in SystemVerilog for sparse memory modeling using non traditional indices, including strings. Learn key operations like for each, size, exists, first, last, next, prev, and delete.
Learn core SystemVerilog array methods, covering reduction meters, locator meters, and ordering meters, with hands-on examples of min, max, unique, find, sort, and shuffle, including arrays of objects.
The lecture weighs when to use fixed, dynamic, queues, and associative memory structures based on size knowledge, data sparsity, and access patterns, emphasizing memory efficiency and access-time trade-offs.
In this session you have learned basic data types and various types of arrays like fixed array, dynamic array, associative array. Basics of queue are also covered in this section.
You can learn more in the following manner:
Simulate the SystemVerilog codes described in this section in EDA playground
Solve the attached assignments. Write SystemVerilog Code where ever possible and simulate it in EDA Playground.
If you have successfully solved quiz and above mentioned tasks then confidently you can move to next session
Let's get started next session. Best of luck.
Explore user defined data types in systemverilog, including typedefs, structures (packed and unpacked), unions, and enums, with practical examples of initialization, assignment, and reuse.
Explore SystemVerilog packages that centralize data types, typedefs, enums, and structs to avoid include duplication. Learn to declare, import, and access package members with the scope resolution operator.
Explore type conversion and type casting in SystemVerilog, and understand assignment semantics, left-to-right versus right-to-left evaluation, and handling of vector and signed data.
Explore enumerations in SystemVerilog, define typedefs for enumerated types, assign default and custom values, use base types, and convert between enum and integers in test bench and state machines.
Learn string manipulation in SystemVerilog, using operators, concatenation, and substring, with length, indexing, and conversions to decimal, octal, binary, and lowercase.
Learn how SystemVerilog handles simulation time with time scale, time units, and time precision, including printing and formatting time in nanoseconds and picoseconds.
In this session you have learned user defined data types like enumerations, strings and time.
You can learn more in the following manner:
Simulate the SystemVerilog codes described in this section in EDA playground
Solve the attached assignments. Write SystemVerilog Code where ever possible and simulate it in EDA Playground.
If you have successfully solved quiz and above mentioned tasks then confidently you can move to next session
Let's get started next session. Best of luck.
Compare continuous and procedural assignments in SystemVerilog, learn how always and initial blocks model combinational and sequential logic, avoid unintended latches, and use let constructs and packages for text replacement.
Explore blocking and non-blocking assignments in Verilog, using = for blocking and <= for non-blocking to illustrate sequential versus parallel updates within clocked blocks.
Explore flow control in SystemVerilog, including if, case, for and while loops, unique and priority conditions, timing with clock edges, and control flow in initial, always, and final blocks.
Explore functions in SystemVerilog, learning how functions enable code reuse, declare return types, pass arguments by position, by name, or by reference, and manage automatic versus static storage.
Explore the differences between functions and tasks in SystemVerilog, including static vs automatic storage, by-reference and by-name arguments, and how default values and outputs work.
Explore how local data storage and variable initialization behave in SystemVerilog, revealing memory space allocation for tasks, race conditions, and the automatic storage solution.
In this session you have learned how to control the flow of various statements. You also learned very important concepts of function and task in SystemVerilog.
You can learn more in the following manner:
Simulate the SystemVerilog codes described in this section in EDA playground
Solve the attached assignments. Write SystemVerilog Code where ever possible and simulate it in EDA Playground.
If you have successfully solved quiz and above mentioned tasks then confidently you can move to next session
Let's get started next session. Best of luck.
Discover how SystemVerilog interfaces simplify connecting design and test benches by bundling bus signals into reusable blocks, replacing complex port mappings and boosting maintainability and reusability.
Explore how to create a SystemVerilog interface, including connectivity, synchronization, and functionality, and learn how interfaces connect top-level designs, benches, and RTL modules for reusable signal sharing.
Learn how to implement and verify protocol functions inside a SystemVerilog interface. Analyze synthesis behavior, advantages, and trade-offs of interfaces for reusable, consistent connections between modules.
Explore how clocking blocks enable timing and synchronization in Verilog testbenches, defining skew, sampling relative to the clock, and interface driven signals.
Explain how program blocks control test benches in SystemVerilog, applying blocking versus non-blocking assignments in the reactive region to avoid races, manage scope, and finalize with exit or finish.
Explore advanced interfaces and cross module reference in SystemVerilog, including virtual interfaces, mailbox IPC, and dynamic interface connections across top modules.
In this session you have learned the concepts of interface in SystemVerilog. It is very important concept to improve the connectivity between various blocks of testbench. You also learned how to implement clocking and program blocks in SystemVerilog.
You can learn more in the following manner:
Simulate the SystemVerilog codes described in this section in EDA playground
Solve the attached assignments. Write SystemVerilog Code where ever possible and simulate it in EDA Playground.
If you have successfully solved quiz and above mentioned tasks then confidently you can move to next session
Let's get started next session. Best of luck.
Popular questions generally asked in interviews related to topics covered in this course can be found int resource.
This course is introduced for learners who wants to learn fundamental concepts of Verification and basic concepts of SystemVerilog. It is assumed that learner is aware of the Verilog hardware description language. In this course, learners will be introduced to why verification is to be done and what is verification. One of the verification language SystemVerilog constructs will be introduced. Layered testbench and its various components will be discussed. Learner's will also be introduced to various data types, procedural control statements and interfaces in SystemVerilog. Course is being taught with various examples and learner can monitor self-progress by attempting quiz and assignment in each section.