SystemVerilog OOP Mastery · All levels

Encapsulation with local and protected

Encapsulation controls who can touch class state, preventing accidental corruption of protocol invariants. In SystemVerilog, local hides members from everyone except the defining class, while protected exposes them only to subclasses.

Overview

Encapsulation controls who can touch class state, preventing accidental corruption of protocol invariants. In SystemVerilog, local hides members from everyone except the defining class, while protected exposes them only to subclasses.

Use local for internals that must never be manipulated outside the class, including in derived classes. This is ideal for IDs, bookkeeping counters, and hidden state transitions where unrestricted writes would invalidate assumptions.

In this topic

diagram
1. Concept Explained
2. Code Examples
3. SystemVerilog vs C++/Java
4. Pitfalls
5. Exercises
6. Interview Questions

Read the concept first, study the code examples, compare against C++/Java, then test yourself with the exercises and interview questions.

Class vs handle vs object memory model

diagram
CLASS VS HANDLE VS OBJECT IN MEMORY

compile-time blueprint                    runtime state
+---------------------------+             +-------------------------+
| class packet;             |             | stack frame             |
|   rand bit [7:0] addr;    |             |   packet p ------------+----+
|   function void display() |             |                         |    |
| endclass                  |             +-------------------------+    |
+---------------------------+                                          |
                                                                       v
                                                           +-------------------------+
                                                           | heap object @0x1004     |
                                                           | addr = 8'h3C            |
                                                           | display() body executes |
                                                           +-------------------------+

Class defines behavior. Handle stores a reference. Object lives on heap.

Related topics