在基于Verilog或VHDL的验证平台中,验证平台和DUT连接在一起,验证平台中包含激励发送和响应监测模块,在仿真的开始DUT和验证平台就被加载到仿真器的内存当中并在整个仿真期间一直存在。也就是说,验证平台和DUT都是静态对象。
SystemVerilog是对于Verilog的扩展,但是这种扩展几乎是一个新语言的诞生,因为SystemVerilog增加了对于面向对象技术(Object Orientated Programming,OOP)的支持从而更加适合于EDA仿真验证。
SystemVerilog语言增强的关键就是class,基于class构建测试平台更符合当今验证环境越来越复杂的现状。
目前工业界最通用的UVM就是提供了一些用于创建通用测试平台的SystemVerilog基类库,这个基类库可以在任何支持IEEE 1800标准的仿真器上运行。
class是所需要创建对象的模板,只有在实际创建对象的时候才会占用内存,当该对象不被使用后就会自动被后台进程回收内存。class中定义了成员变量和方法,这个方法可以是不消耗时间的function,也可以是消耗时间的task。
在创建类对象之前,这个类的定义必须要已经存在于内存当中,因此在SystemVerilog测试平台中需要在module中定义不同验证组件类,因为module中存在的都是静态对象,其在仿真过程中会一直存在。同理,一个class定义中不能包含一个module。因为class是动态对象,会在仿真过程中被回收。
下面是一个如何在静态module中创建对象和回收对象的示例:
一个包含数据message和相应的函数的class:
class example;
string message;
function void set_message(string ip_string);
message = ip_string;
endfunction: set_message
function void print();
$display("%s", message);
endfunction: print
endclass: example
在module中仿真开始创建对象和释放对象内存:
module tb;
example C; // Null handle after elaboration
initial begin
C = new(); // Handle points to C object in memory
C.set_message("This object has been created");
#10;
C.print();
C = null; // C has been dereferenced, object can be garbage collected
end
endmodule: tb
END
作者:验证哥布林
原文链接:https://mp.weixin.qq.com/s/aq7iP6JybfIePIPONe25eA
微信公众号:
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏。