微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在功能中放置工厂注册时出现空项错误

如何解决在功能中放置工厂注册时出现空项错误

我正在尝试编写一个函数,该函数创建一个向工厂注册项目,然后对该项目进行一些基本操作的函数。我遇到的问题是,当我尝试执行此代码时,出现空项目错误

我想要的代码示例摘录为:

modified_sequence_item example_msg_item

function new (string name = ex_sequence);
  super.new(name); 
  create_message(example_msg_item,"example_msg_item",32'hDEADBEEF);
endfunction

function create_message(modified_sequence_item msg_item,string msg_name,bit[31:0] data);
    msg_item = modified_sequence_item::type_id::create(msg_name);
    msg_item.data_field = data;
endfunction

不幸的是,这不起作用。我收到以下错误

UVM_FATAL @ 5710: reporter [NullITM] attempting to start a null item from sequence 'main'

但是,以下代码确实有效:

modified_sequence_item example_msg_item

function new (string name = ex_sequence);
  super.new(name); 
  example_msg_item = modified_sequence_item::type_id_create("example_msg_item");
  example_msg_item.data_field = 32'hDEADBEEF;
endfunction

看看这两位代码,对我来说,除了嵌套在第一位代码中的函数中的动作外,它们几乎是相同的。这使我相信这个问题很可能是传递数据作为函数的问题。

有人对我如何修改一个代码示例以使其没有空项错误有任何建议吗?

解决方法

函数声明的两个问题:

  • 在函数内部创建的句柄在退出函数时需要复制出来,因此msg_item需要声明为output参数。
  • 您忘记将返回类型声明为void。否则,默认值为1位4状态结果(IEEE Std 1800-2017,第13.4节函数implicit_data_type

function void create_message(
                             output modified_sequence_item msg_item,input string msg_name,bit[31:0] data);
  msg_item = modified_sequence_item::type_id::create(msg_name);
  msg_item.data_field = data;
endfunction

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。