1

我的测试台中有如下代码片段

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 的原因可能是什么?

4

1 回答 1

2

我认为与'if'一行的分号不属于?

我认为这会消耗 if 语句,然后 uvm_error 执行,无论 if 如何评估:

if(!$cast(data_ext, data)); <- no semicolon
    `uvm_error(get_type_name(), "failed to cast");
于 2014-05-30T23:35:32.163 回答