1.如何创建一个类
class Transaction;
bit [31:0] addr,crc,data[8];
function void display;
$display("Transaction:%h",addr);
endfunction:display
function void calc_crc;
crc = addr^data.xor;
endfunction:calc_crc
endclass:Transaction
2.如何理解类,句柄和对象三者的关系
//类是一个包含变量的基本构件块,如创建一个简单类:
class:Transaction;
...
endclass:Transaction
//句柄是指向对象的指针,如声明一个句柄:
Transaction tr;
//对象是类的一个实际例子,如创建一个对象:
tr = new();
3.如何调用new()函数
class:Transaction;
...
endclass:Transaction
class Driver;
Transaction tr;
function new();
tr = new();//调用Transaction的new函数
endfunction
endclass:Driver
4.new()和new[]的区别
- new()函数的作用是创建对象
- new[]操作是建立了一个含有多元素的数组
5.一个句柄创建多个对象
Transaction t1,t2; //声明两个句柄
t1 = new(); //为第一个Transaction对象分配地址
t2 = t1; //t1和t2都指向该对象
t2 = new(); //为第二个Transaction对象分配地址
6.如何解除对象的分配
Transaction t;
t = new();
t = null; //解除分配
7.如何使用对象
Transaction t;
t = new();
t.addr = 32'h42;//设置函数的值
t.display(); //调用函数的一个子程序
8.静态变量和全局变量的区别
静态变量:该变量将被这个类的所有实例所共享,并且的它的范围仅限于这个类
全局变量:整个测试平台都可以访问整个变量
9.如何创建一个简单的静态变量类
class Transaction;
static int count = 0; //已创建的对象的目的
int id; //实例的唯一id
function new();
id = count ++ ;
endfunction
endclass
Transaction t1,t2;
initial begin
t1 = new();
t2 = new();
$display("Second id = %d",t2.id,t2.count);
end
10.如何访问静态变量
class Transaction
static int count = 0;
...
endclass
initial begin
run_test();
$diaplay("%d transaction were created",Transaction::count);//引用静态句柄
end