|
|
|
|
|
|
|
|
|
|
|
|
Introduction
|
|
|
Vera is Object Oriented Programming Hardware verification language, which has been written keeping following in minds. |
|
|
|
|
|
- Encapsulation
- Inheritance
- Polymorphism
|
|
|
|
|
|
Encapsulation is the principle of grouping together common functionality and features into a code object. |
|
|
|
|
|
Inheritance is the principle of transferring the functionality and features of a parent to a child. Since the child is an autonomous unit, the properties and methods inherited by the child can be modified or added to without affecting the parent. |
|
|
|
|
|
Polymorphism allows the redefining of methods for derived classes while enforcing a common interface. |
|
|
|
|
|
|
|
|
|
|
|
Creating Instance
|
|
|
A class declaration is the template from which objects are created. When a class is constructed the object is built using all the properties and methods from the class declaration. |
|
|
|
|
|
To create an object (that is, an instance) of a declared class, there are two steps. First, declare a handle to the class (a handle is a reference to the class instance, or object): |
|
|
|
|
|
class_name handle_name; |
|
|
|
|
|
Then, call the new() class method: |
|
|
|
|
|
handle_name = new(); |
|
|
|
|
|
The above two steps can be merged into one for instancing a class at the time of declaration: |
|
|
|
|
|
class_name handle_name = new(); |
|
|
|
|
|
The new() method of the class is a method which is part of every class in Vera it is analogous to a constructor in C++ / Java. It has a default implementation which simply allocates memory for the object and returns a handle to the object. The OpenVera programmer has the option of declaring their own new() method. In such a case, the prototype that must be followed is: |
|
|
|
|
|
task new([arguments])
{
// body of method
}
|
|
|
|
|
|
Assignment |
|
|
Assignment of one object to another object is same as assigning a variable to another variable of other data tyes. In object assignment, the copy is a shallow copy because it does not make a copy of any nested objects. |
|
|
|
|
|
Example : Object Copy
|
|
|
|
|
|
1 class A{
2 integer j;
3 task new(){
4 j = 100;
5 }
6 }
7
8 class B {
9 integer i;
10 A a;
11 task new() {
12 i = 200;
13 }
14 }
15
16 program copy_object {
17 B b1 = new(); // Create an object of class B
18 B b2; //Create a null variable of class B
19 b1.a = new; //Create an object of class A
20 b2 = new b1; // Create an object that is a copy of b1,
21 //but only copies the handle a, not the object referenced by a.
22 b2.i = 300; // i is changed in b2, but not b1
23 printf("i in b2 = %0d\n", b2.i);// i equals 10
24 printf("i in b1 = %0d\n", b1.i);// i equals 1
25 //where as:
26 b2.a.j = 400; // Change j in the object referenced
27 // by a. j is shared by both b1 and b2
28 printf("j is %0d in b1 and %0d in b2\n", b1.a.j, b2.a.j);
29 }
You could download file copy_object.vr here
|
|
|
|
|
|
Simulation : Object Copy
|
|
|
|
|
|
i in b2 = 300
i in b1 = 200
j is 400 in b1 and 400 in b2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Copyright © 1998-2014 |
Deepak Kumar Tala - All rights reserved |
Do you have any Comment? mail me at:deepak@asic-world.com
|
|