$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句柄子类,不符合条件