$cast用法

$cast用法

$cast(dest, source) 的作用是:

• 检查 source当前指向的对象是否是 dest 类型或其子类;

• 如果是,就把该对象的引用赋给 dest(dest指向source当前所指向的对象),并返回 1;

• 否则返回 0,且不修改 dest。

练习题1:

复制代码
class Fruit;
endclass

class Apple extends Fruit;
endclass

class Orange extends Fruit;
endclass

module tb;
  Fruit f1 = new Apple();
  Fruit f2 = new Orange();
  Fruit f3 = new Fruit();
  Apple a;

  initial begin
    if ($cast(a, f1)) $display("f1 -> Apple: OK");
    else               $display("f1 -> Apple: FAIL");

    if ($cast(a, f2)) $display("f2 -> Apple: OK");
    else               $display("f2 -> Apple: FAIL");

    if ($cast(a, f3)) $display("f3 -> Apple: OK");
    else               $display("f3 -> Apple: FAIL");
  end
endmodule

输出结果

复制代码
f1 -> Apple: OK
f2 -> Apple: FAIL
f3 -> Apple: FAIL

分析:

转换 对象实际类型 目标类型 是否兼容? 结果
$cast(a, f1) Apple Apple ✅ 是自身 OK
$cast(a, f2) Orange Apple ❌ 无关类 FAIL
$cast(a, f3) Fruit Apple ❌ 父类不是子类 FAIL

句柄f1指向的对象类型为Apple,句柄a的类型是Apple,source句柄当前指向的对象是dest 句柄类型,符合条件

句柄f2指向的对象类型为Orange,句柄a的类型是Apple,source句柄当前指向的对象不是 dest 句柄类型,也不是dest句柄子类,不符合条件

句柄f3指向的对象类型为Fruit,句柄a的类型是Apple,source句柄当前指向的对象不是 dest句柄 类型,也不是dest句柄子类,不符合条件

相关推荐
fei_sun3 天前
【SystemVerilog】连接设计和测试平台(待补充)
systemverilog
fei_sun13 天前
【SystemVerilog验证】数据类型(待补充)
数据结构·systemverilog
不会武功的火柴15 天前
SystemVerilog语法(11)-面向对象编程下篇
面向对象·fpga·systemverilog·ic验证
Ether IC Verifier18 天前
SystemVerilog 数据类型详解
php·systemverilog·uvm·ic验证
Ether IC Verifier23 天前
IC 验证工程师新手入门指南
systemverilog·ic验证·dpu
Nick.Q23 天前
Ubuntu 24.04 从零跑通 OpenTitan:IC 验证工程师实录(Verilator + VCS + Verdi)
linux·ubuntu·systemverilog
不会武功的火柴1 个月前
SystemVerilog语法(9)-验证基础与简单Testbench
嵌入式硬件·fpga开发·fpga·systemverilog·硬件描述语言·rtl·uvm验证
谷公子的藏经阁2 个月前
DVCon 2025 论文精华导读及下载链接
ai·论文·systemverilog·uvm·dvcon
高新打工人5 个月前
关于systemverilog中的随机化的使用
systemverilog
蓝天下的守望者5 个月前
SystemVerilog中 `timescale的使用问题
systemverilog·uvm·vcs