system verilog之$cast

1.含义

OK = $cast(子类句柄,父类句柄);

$cast是sv 类继承最常用的系统函数;用于带运行检查的强制类型转换;专门解决父类和子类的类型转换问题。

父类句柄可以指向子类,但是不能直接赋值给子类(编译器不知道父类要指给哪个子类,所以编译会报错);必须用$cast做安全转换。

2.常用场景

2.1 类继承向下转换

2.1.1 UVM取出transaction必须用

Transaction tr;

MyPacket pkt;

// 从 sequencer 拿到父类句柄

seq_item_port.get_next_item(tr);

// 必须转成真实子类

if($cast(pkt, tr)) begin

// 访问 pkt.data, pkt.addr 等子类成员

end

2.1.2 多态环境下访问子类的成员

父类没有子类成员,需要访问子类成员时必须用。

2.1.3 数组/队列里存放父类,需要取出子类

2.1.4 component/config都需要用$cast

2.5 枚举类型安全转换

  • 从寄存器、协议包、内存里读状态值,转成 enum
  • DUT 输出 int 信号 → 转成状态机枚举
  • 激励随机或后门读写后强转枚举

2.6 接口/虚接口的安全赋值

s v规定,不同接口类型不能直接赋值,必须用$cast;

  • UVM config_db 取出虚接口
  • 基类接口句柄 → 子类接口
  • 多态接口传递

2.7 有符号/无符号整数的安全转换

比如 int ↔ bit、byte ↔ logic 等,检查值是否越界并报错。

相关推荐
xwz_new6 天前
SystemVerilog之每日一问
ic验证
xwz_new12 天前
数字芯片验证工具之Mac安装Icarus Verily+ GTKWave+VScode(免费)
macos·ic验证
xwz_new15 天前
UVM之TLM通信基础概念
ic验证
xwz_new19 天前
Verilog之CDC 跨时钟域
ic验证
xwz_new20 天前
UVM之sequencer
ic验证
xwz_new20 天前
Verilog之常见时钟分频
ic验证
xwz_new1 个月前
数字芯片验证技能树概述(一)
ic验证
不会武功的火柴4 个月前
UVM验证入门(18)-Callback机制
systemverilog·ic验证·uvm方法学
愤怒学习的白菜4 个月前
0 trivial:UVM的空壳平台
学习·uvm·ic验证