You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用UVM工厂find_override_by_name判断类重载是否成功?

UVM工厂类重载判断方法修正

问题分析

你当前代码返回null主要有三个核心问题:

  1. 上下文参数错误:find_override_by_name的第二个参数(上下文路径)不需要拼接多余的.,全局重载查询直接传空字符串""即可,组件范围查询传当前组件的get_full_name()。
  2. phase调用顺序错误:需先调用父类的end_of_elaboration_phase,确保工厂完成所有重载注册后再执行查询。
  3. 打印格式错误:%m用于打印层级路径,无法正确显示uvm_object_wrapper的类型信息,需用%s配合get_type_name()输出。

修正后的代码

virtual function void end_of_elaboration_phase(uvm_phase phase);
    uvm_object_wrapper wrapper1;

    // 先执行父类phase,确保工厂重载注册完成
    super.end_of_elaboration_phase(phase);

    // 全局重载查询:上下文传空字符串
    wrapper1 = factory.find_override_by_name("write_ahb_item", "");
    // 若仅查询当前组件范围内的重载,改用下方语句
    // wrapper1 = factory.find_override_by_name("write_ahb_item", this.get_full_name());

    // 清晰输出重载结果
    if(wrapper1 != null) begin
        $display("write_ahb_item 重载成功,目标类型: %s", wrapper1.get_type_name());
    end else begin
        $display("write_ahb_item 未重载");
    end

    uvm_top.print_topology();
endfunction

额外验证方法

除了find_override_by_name,还可以通过以下方式确认重载是否生效:

  • 打印工厂完整重载映射:调用factory.print();,直接查看所有类的重载关系。
  • 实例化后验证类型:创建对象后通过get_type_name()确认实际类型:
    write_ahb_item item;
    item = write_ahb_item::type_id::create("item", this);
    $display("实际创建对象类型: %s", item.get_type_name());
    

内容的提问来源于stack exchange,提问作者bu-ral

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:32:20