System Verilog Oops
System Verilog Oops
Procedural Approach
Focus is on procedures All data is shared: no protection More difficult to modify Hard to manage complexity
Introduction to OOP
Object-oriented programming is a method of implementation in which programs are organized as cooperative collections of objects, each of which represents an instance of some class, and whose classes are all members of one or more hierarchy of classes united via inheritance relationships
Basic OOP
OOPs breaks a testbench into blocks that work together to accomplish the verification goal
OOP cont..
Why OOP?
Highly abstract system level modelling
Classes are intended for verification
Class
A class is a user-defined data type. Classes consist of data (called properties) and tasks and functions to access the data (called methods). Classes are used in object-oriented programming. In SystemVerilog, classes support the following aspects of object-orientation encapsulation, data hiding, inheritance and polymorphism
Class Declaration
class register; local bit[31:0] contents; function void write(bit[31:0] d) contents = d; endfunction
function bit[31:0] read(); return contents; endfunction endclass
Objects
Organized into groups with similar characteristics They are said to be related by a common characteristic Object-Oriented programming seeks to provide mechanisms for modelling these relationships
What is Handle?
It is a pointer to an object. An oop handle is like the address of the object but is stored in a pointer that only refer to one type.
Ex: class Transaction; logic addr,data; endclass initial begin Transaction tr; tr=new(); end
Class Transaction Handle tr
Memory
Variables..
Variables
Class Example:
class register; local bit[31:0] contents; function void write(bit[31:0] d) contents = d; endfunction
module top; register r; bit[31:0] d; initial begin r = new(); r.write(32h00ff72a8); d = r.read(); end endmodule
Class Encapsulation
A class encapsulation is a process of hiding all internal details of an object from out side world.
Encapsulation is the ability to hide data and methods from out side world and only expose data and methods that are required. Advantage of encapsulation Protection Consistency Allows change DATA ENCAPSULATION
Encapsulation example:
class base; local int i; endclass
program main; initial begin base b = new(); b.i = 123; end endprogram
Polymorphism
Polymorphism refers to the ability to assume different forms. In OOP, it indicates a languages ability to handle objects differently based on their runtime type. When objects communicate with one another, we say that they send and receive messages.
The sending object only needs to be aware that the receiving object can perform a particular behaviour.
Example:
class A ; virtual task disp (); $display(" This is class A "); endtask endclass class EA extends A ; task disp (); $display(" This is Extended class A "); endtask endclass program main ; EA my_ea; A my_a;
initial begin my_a = new(); my_a.disp(); my_ea = new(); my_a = my_ea; my_a.disp(); end endprogram
INHERITANCE
Definition (Inheritance) Inheritance is the mechanism which allows a class B to inherit properties of a class A. We say B inherits from A. Objects of class B thus have access to attributes and methods of class A without the need to redefine them.
The following definition defines two terms with which we are able to refer to participating classes when they use inheritance.
INHERITANCE (Cont...)
The idea of inheritance is simple but powerful: When you want to create a new class and there is already a class that includes some of the code that you want, you can derive your new class from the existing class. In doing this, you can reuse the fields and methods of the existing class without having to write (and debug!) them yourself.
Example:
class parent; task printf(); $display(" THIS IS PARENT CLASS "); endtask endclass class subclass extends parent; task printf(); $display(" THIS IS SUBCLASS "); endtask endclass program main; initial begin parent p; subclass s; p = new(); s = new(); p.printf(); s.printf(); end endprogram
Comparison
C++ No relation to
verilog