当前位置:首页 > > 芯片验证工程师
[导读]在基于Verilog或VHDL的验证平台中,验证平台和DUT连接在一起,验证平台中包含激励发送和响应监测模块,在仿真的开始DUT和验证平台就被加载到仿真器的内存当中并在整个仿真期间一直存在。也就是说,验证平台和DUT都是静态对象。SystemVerilog是对于Verilog的扩...

在基于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: printendclass: 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 endendmodule: tb

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭