目录
类型转换$cast
1. $cast做枚举类型转换
枚举类型的缺省类型为双状态int,可以使用简单的赋值表达式把枚举类型变量的值直接赋值给非枚举变量 如int,但SV不允许在没有进行显示类型转换的情况下把int变量直接赋值给枚举变量。SV要求显式的类型转换的目的在于让你意识到可能的数据越界情况。
typedef enum bit[1:0] {RED=0,BLUE,GREEN} COLOR_E;
COLOR_E color,c2;
int c;
initial begin
color = BLUE; // 赋值一个已知的合法的值
c = color; // 将枚举变量赋值给int,此时为 1
c = c+1; // int型变量递增
if(!$cast(color,c)) // 将整型显示转换回枚举类型,如果越界会报错
$display("cast failed for c=%0d",c); // c的值此时为2
$display("Color is %0d/%s",color,color.name());
c++; // c的值为3,对于枚举类型已然越界
c2 = COLOR_E'(c); // 不做类型检查,下句c2.name()由于越界而打印不出
$display("c2 is %0d/$s",c2,c2.name()); // 打印:c2 is 3/
end
2. $cast 做句柄类型转换
这里涉及到类型转换,向上类型转换和向下类型转换:
向上类型转换:向上类型转换没问题,可以直接将父类句柄指向子类对象ÿ