我的测试台中有如下代码片段
function void write_to_port( my_data_type_base data );
my_data_type_extended data_ext;
if(!$cast(data_ext, data));
`uvm_error(get_type_name(), "failed to cast");
`uvm_info(get_name(), $psprintf("data_ext :\n%s", data_ext.sprint()), UVM_MEDIUM)
// write data_ext out to another port....
endfunction
当我运行它时,我得到 uvm_error 为“无法投射”。我不确定为什么 $cast 没有返回 1。如您所见,我在使用 uvm_info 进行转换后打印出扩展类数据项。我可以看到它正在正确投射。如果我不使用带有 if 条件的 $cast,我不会收到任何运行时错误。总是使用 if 和动态转换来检查 $cast 是否返回 1 不是一个好的编码习惯吗?
在上述情况下 cast 不返回 1 的原因可能是什么?