• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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
上面转换中由四值无符号类型转换为二值无符号类型;

posted on 2021-10-27 22:02  SOC验证工程师  阅读(561)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3