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_new5 天前
数字芯片验证技能树概述(一)
ic验证
不会武功的火柴4 个月前
UVM验证入门(18)-Callback机制
systemverilog·ic验证·uvm方法学
愤怒学习的白菜4 个月前
0 trivial:UVM的空壳平台
学习·uvm·ic验证
不会武功的火柴4 个月前
UVM验证入门(15)-uvm_agent代理
systemverilog·ic验证·uvm方法学
SuperGQB8 个月前
UVM验证(三)—UVM机制(1)
systemverilog·ic验证·uvm方法
-interface1 年前
25届数字IC验证秋招总结
秋招·uvm·ic验证
lj想拿50w1 年前
脚本学习(1)验证目录自动化生成脚本
python·脚本·ic验证
lj想拿50w1 年前
systemverilog刷题小记
systemverilog·ic验证
小妖11601 年前
uvm_info、uvm_warning,uvm_error、uvm_fatal
uvm·ic验证