Systemverilog动态铸造问题

时间:2014-05-30 22:51:58

标签: verilog system-verilog uvm

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

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,我就不会遇到任何运行时错误。如果使用动态强制转换检查$ cast是否返回1,那么总是使用它是一个很好的编码习惯吗?

在上述情况下,施法者不返回1的原因可能是什么?

1 个答案:

答案 0 :(得分:2)

我认为分行就是'如果'不属于?

我认为使用if语句,然后执行uvm_error,无论如何计算:

if(!$cast(data_ext, data)); <- no semicolon
    `uvm_error(get_type_name(), "failed to cast");