You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在SystemVerilog的program块内创建类对象?测试需生成事务类句柄

在SystemVerilog的program块内部创建类对象是完全可行的

当然可以在SystemVerilog的program块内部创建并使用类对象,这在验证测试代码里是非常常见的做法——program块本身就是用于编写测试激励、控制仿真流程的,而类(尤其是事务类)是SystemVerilog验证中封装数据和行为的核心机制,二者搭配使用是标准的验证范式。

你的示例代码写法是正确的,只要类的定义在program块可见的范围内(比如示例中类定义在program块外部,或者也可以把类定义在program块内部),就可以正常声明句柄、实例化对象并调用类的方法。

补充几个关键细节:

  • 类的作用域:只要program块能访问到类的定义(比如全局作用域、或者program块内部嵌套定义的类),就可以正常使用。你示例中把MyClass定义在program外部,属于全局作用域,完全没问题。
  • 实例化时机:在initial块内通过new()操作符实例化类对象是标准做法,符合仿真流程的执行逻辑。
  • 时序注意事项:program块属于非阻塞区域(non-blocking region),如果类方法里涉及到与硬件信号的交互,要注意时序同步问题,避免出现竞争冒险。

举个完整可运行的示例:

class MyClass; 
  function void someMethod();
    $display("Calling someMethod from MyClass instance");
  endfunction
endclass

program MyProgram;
  initial begin
    MyClass myObj; // 声明类句柄
    myObj = new;   // 实例化类对象
    myObj.someMethod(); // 调用类方法
  end
endprogram

这段代码编译运行后会输出Calling someMethod from MyClass instance,验证功能正常。

内容的提问来源于stack exchange,提问作者Kiran Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:50:10