是否应该销毁从系统verilog生成器模块生成的数据包以节省模拟时间?

时间:2017-11-01 03:56:19

标签: verilog system-verilog verification uvm

每当我调用generate_directed_packet时,都会创建一个新对象。在创建下一个包对象之前,我是否应该担心删除包对象。如果是这样,我该如何删除数据包对象?

function void generate_directed_packet();
packet = new();
void'(packet.randomize());
endfunction : generate_directed_packet

1 个答案:

答案 0 :(得分:2)

SystemVerilog具有自动内存管理功能。这意味着只要有一个包含该对象句柄的类变量,它就只保存一个对象。模拟器"删除"在没有更多具有该对象句柄的类变量之后的对象。 "删除"是引号,因为你不知道它什么时候删除对象。更有可能的是,它将空间保持到同一个对象的另一个new()并回收空间。

如果您使用的是UVM,典型的情况是您按序列生成数据包,并将它们发送给驱动程序。你真正在做的是创建序列中新对象的句柄,然后将句柄中的变量的句柄复制到驱动程序中的变量。

将句柄从一个变量复制到另一个变量时,将删除对旧对象的引用。因此,只要将数据结构中的句柄放入对象中,随着向对象句柄添加更多对象句柄而增长,旧对象的空间就会被回收。