systemverilog中隐式转换和显式转换(静态转换和动态转换)

systemverilog中的类型转换

显式转换包含动态转换和静态转换
静态转换需要在转换的表达式前加上单引号,该方式并不会对转换值做检查,如果发生转换失败,无法获取相应的警告信息。
在verilog中,对整数和实数类型,或者不同位宽的向量之间进行隐式转换。
静态转换
静态转换失败,不会有任何提示。
例1 unsigned’(signed_vec)
byte old_vec = ‘b1000_0001; // -1
bit [7:0] new_vec;
new_vec = unsigned’(old_ver); // new_vec = ‘d129
例2 int i
real r;
i = int’(10.0 - 0.1); //转换是非强制的
r = real‘(42); //转换是非强制的

动态转换需要使用使用系统函数$cast(tgt, src);
动态转换:例如 $cast(target, source)
关于动态转换$cast有专门的一篇文章来做详细说明。

这两种转换需要操作符号和系统函数介入,因此称为显示转换

以下转换没有操作符号和系统函数接入,因此称为隐式转换;
logic [3:0] x_vec = 'b111x;
bit [2:0] b_vec;
b_vec = x_vec; // b_vec = 'b110
上面转换中由四值无符号类型转换为二值无符号类型;

Guess you like

Origin blog.csdn.net/Michael177/article/details/120876107