Dinglei_hello · 2021年09月13日

基于SystemVerilog和基于verilog的验证平台有什么不同

在基于Verilog或VHDL的验证平台中,验证平台和DUT连接在一起,验证平台中包含激励发送和响应监测模块,在仿真的开始DUT和验证平台就被加载到仿真器的内存当中并在整个仿真期间一直存在。也就是说,验证平台和DUT都是静态对象。

WeChat Image_20210913120045.gif

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
微信公众号:
芯片验证工程师.jpg

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏。
推荐阅读
关注数
19637
内容数
1303
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息