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 等,检查值是否越界并报错。

相关推荐
Ether IC Verifier1 天前
SystemVerilog 数据类型详解
php·systemverilog·uvm·ic验证
Ether IC Verifier6 天前
IC 验证工程师新手入门指南
systemverilog·ic验证·dpu
暴风雨中的白杨9 天前
cocotb环境安装
ic验证·cocotb
不会武功的火柴10 天前
SystemVerilog语法(8)-有限状态机(FSM)
嵌入式硬件·fpga开发·自动化·ic验证·rtl·uvm方法学
不会武功的火柴12 天前
SystemVerilog语法(7)-接口(interface)
嵌入式硬件·fpga开发·仿真·ic验证·rtl
不会武功的火柴20 天前
ModelSim入门实战(三): 批处理一键仿真与波形调试
嵌入式硬件·fpga·仿真·modelsim·ic验证·rtl
xwz_new25 天前
浅谈NOC
ic验证
xwz_new25 天前
浅谈SOC
ic验证
xwz_new1 个月前
SystemVerilog之每日一问
ic验证
xwz_new1 个月前
数字芯片验证工具之Mac安装Icarus Verily+ GTKWave+VScode(免费)
macos·ic验证