在 SystemVerilog 中,句柄(handle)是用来指向对象的“指针”。通过句柄,可以访问对象的成员变量和成员方法。
class A;
function new();
endfunction
endclass
program tb_top;
initial begin
A tr_A, tr_B, tr_C;
// 定义了三个A类型的句柄 tr_A、tr_B和tr_C,此时句柄没有指向任何对象,为 null
tr_A = new();// 通过new函数创建了一个A类型的对象,tr_A 句柄指向它;tr_B和tr_C 仍为 null
tr_B = tr_A; // 此时 tr_B 句柄也指向了 tr_A 指向的对象
tr_C = new();// 通过 new 函数创建了一个A类型的对象,tr_C 句柄指向它;tr_A 和 tr_B 不变
tr_A = tr_C; // 此时 tr_A 句柄指向了 tr_C 指向的对象
end
endprogram
class A;
// 类中定义的变量和方法
endclass
program tb_top;
initial begin
A tr_A; // 声明一个 A 类型的句柄 tr_A,此时句柄没有指向任何对象,为 null
tr_A = new(); // 通过 new 函数创建了一个 A 类型的对象,tr_A 句柄指向它
// 现在可以通过 tr_A 句柄来使用对象中的成员变量或成员方法
tr_A.addr = 32'h42; // 对象的成员变量赋值
tr_A.display(); // 调用对象的成员方法
end
endprogram