
1. 什么是"实例化"?
实例化是指在内存中真正创建 了一个对象(Object) 或模块(Module)的实体。它分配了物理存储空间,并通常会调用构造函数(如 new())。
counter_if dutif(clk);- 这是典型的 Verilog/SystemVerilog 接口(Interface)实例化。
- 它创建了一个名为
dutif的接口实例,并且把信号clk连接了进去。此时,硬件仿真器中真的存在了一组名为dutif的信号线。
2. 什么是"句柄声明"?
句柄(Handle)本质上是一个指针 或引用 。声明句柄只是在告诉编译器:"我要用一个变量来指向某个类型的对象",但在这一刻,并没有创建实际的对象 ,内存中也没有该组件的实体 。此时句柄的值默认为 null。
比如以下属于句柄声明:
generator my_gen;driver my_driver;monitor my_monitor;scoreboard my_scb;
driver是数据类型(class定义在driver.sv文件中),my_driver是这个类的句柄。
| 特性 | 实例化 (Instantiation) | 句柄声明 (Handle Declaration) |
|---|---|---|
| 本质 | 创建实体(造房子) | 创建遥控器/指针(拿钥匙) |
| 内存 | 分配实际内存空间 | 仅分配存放地址的空间(初始为 null) |
| 对象状态 | 对象已存在,可以使用 | 对象不存在,直接使用会报错(Null Pointer Error) |
| 对应代码 | counter_if dutif(...) obj = new(); |
driver my_driver; transaction tr; |
| 后续动作 | 直接连接或使用 | 必须先 create 或 new 才能使用 |

virtual counter_if vif;-> 句柄 (指向硬件接口的指针)指向接口实例的指针(句柄)
在 SystemVerilog 中,类(Class)内部不能直接包含硬件模块或接口的实例 。类是软件对象,存在于仿真器的动态内存区;而接口是硬件结构,存在于静态仿真区。为了让软件(Monitor)能访问硬件信号(Interface),必须使用 virtual interface 这座"桥梁"。
- Interface 实例 (
dutif): 是一台真实的电视机(硬件,有屏幕、有电路板)。 - Virtual Interface (
vif): 是电视机的遥控器 (句柄)。- 你手里拿着遥控器(声明了
vif),但如果没装电池或者没对准电视(没赋值),它是没用的。 - 一旦你把遥控器和电视机配对(
vif = dutif),你就可以通过遥控器去读取电视的状态(采样信号)了。
- 你手里拿着遥控器(声明了