在学习项目过程中经常遇到$cast()
,常用到只是做类型的转换,复杂一点的就涉及到父类和子类,经常会忘记谁赋值给谁,谁指向谁,思路不清楚,故写下此文记忆下。
根据文章$cast向下类型转换确定
① 子类转换为父类,称为向上转换
father = child; // 向上转换,也称父类指向子类
$cast(father, child); // 向上转换
总结就是右边转换成左边
② 父类转换为子类,成为向下转换
child = father; // 向下转换,也称子类指向父类
$cast(child, father); // 向下转换
这种情况存在风险
类型转换
普通的类型转换不涉及子类和父类的关系
if (!$cast(t1, t2)) begin
`uvm_fatal()
return;
end
这是项目中经常用到的类型转换的方法,将t2转换为t1的类型,如果转换失败则报错
父类和子类的转换
父类和子类的转换只有向下转换才需要特别注意
思路就是:
① 父类father需要指向child1
father = child1;
② 才可以$cast(child2, father)
也就是说fathera指向的对象需要和child2对象类型一致,才可以用$cast()
转换