system-verilog - 创建子句柄数组

标签 system-verilog

在 SystemVerilog 中,我有一个基类 A 和派生类 BCD。我想创建一个 A 类型的数组,其中包含 BCD 的句柄。有没有比下面我丑陋的解决方案更简洁的方法?

module test; 
  A arr[3];
  B b;
  C c;
  D d;

  initial begin
    b = new();
    c = new();
    d = new();
    arr[0] = b;
    arr[1] = c;
    arr[2] = d;
  end
endmodule

最佳答案

如果你的意思是不使用中间类变量,你可以这样做

arr[0] = B::new();

这是 SystemVerilog 的一个相对较新的功能,一些工具尚不支持此功能。为了解决这个问题,您可以创建一个静态 create 方法来为您调用构造函数,这样您就可以在函数的参数等位置创建类对象,而无需声明中间变量。

class B;
  static function C create;
     create = new;
  endfunction
endclass

arr[1] = C::create();

somefunction(C::create()); // C::new() would not work here

如果您使用 UVM 库,则可以免费获得该库

class C extends uvm_object;
`uvm_object_utils(C)
...
endclass
arr[3] = C::type_id::create();

关于system-verilog - 创建子句柄数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52333669/

相关文章:

verilog - 是否存在任何开源、完整的系统 verilog 语法?

system-verilog - 索引嵌套数组时读取错误数据

verilog - 有没有办法获取 Verilog 模块实例化的名称?

verilog - 如何在 System Verilog 中刷新文件缓冲区?

verilog - 使用always@* |意义和缺点

regex - 系统verilog正则表达式

system-verilog - "ref "在 systemverilog 中是什么意思?

system-verilog - uvm_event 和系统verilog 事件的区别

system-verilog - 覆盖组的接口(interface)对象

dependency-management - 是否有任何非特定语言的良好依赖管理工具?