如何实时更新module get到的cfg class句柄里面的值

接上篇csdn博客验证知识之在module里面get class里面的set参数-CSDN博客文章浏览阅读155次。验证知识之在module里面get class里面的set参数https://blog.csdn.net/pgl512228/article/details/141748039?spm=1001.2014.3001.5501

我们是通过uvm_config_db去get到的class句柄,但是当get的值,更换了,module不知道什么时候重新get,所以为了独立,写了下面的文章:

第一部分:定义虚拟类 base_set_cfg

virtual class base_set_cfg extends uvm_object;
    function new(string name = "base_set_cfg");
        super.new(name);
    endfunction

    // 纯虚拟函数,子类需要实现
    pure virtual function void set_my_cfg(test_cfg cfg);
endclass

解释:

  • base_set_cfg 是一个虚拟类,继承自 uvm_object
  • 定义了一个纯虚拟函数 set_my_cfg,要求子类实现该函数。

第二部分:在module里定义 module_get

class module_get extends base_set_cfg;
    `uvm_object_utils_begin(module_get)
    `uvm_object_utils_end

    function new(string name = "module_get");
        super.new(name);
    endfunction

    function void set_my_cfg(test_cfg cfg);
        // 实现基类的纯虚拟函数
        this.set_my_cfg = cfg;
    endfunction
endclass

解释:

  • module_get 类继承自 base_set_cfg,并实现了 set_my_cfg 方法。
  • 使用 uvm_object_utils 宏注册该类以便于 UVM 工具的工厂机制。

第三部分:在 module 中通过 uvm_config_db 发送指针

module my_module;
    initial begin
        // 在配置数据库中注册 `module_get` 类的实例
        uvm_config_db#(base_set_cfg)::set(null, "*", "get_cfg", module_get::type_id::create("module_get"));
    end
endmodule

解释:

  • 使用 uvm_config_db#(base_set_cfg)::setmodule_get 的实例注册到配置数据库中。
  • 这样,在其他地方可以通过 uvm_config_db 获取到这个实例。

第四部分:在 env 中获取并使用指针

class my_env extends uvm_env;
    base_set_cfg set_cfg;
    test_cfg cfg;

    function void build_phase(uvm_phase phase);
        super.build_phase(phase);

        // 从配置数据库中获取 `base_set_cfg` 类型的指针
        if (!uvm_config_db#(base_set_cfg)::get(null, get_full_name(), "get_cfg", set_cfg)) begin
            `uvm_fatal("GET_CFG_FAIL", "Get get_cfg failed")
        end

        // 随机化配置
        cfg.randomize();

        // 调用 `set_my_cfg` 方法
        set_cfg.set_my_cfg(cfg);
    endfunction
endclass

解释:

  • build_phase 中,使用 uvm_config_db#(base_set_cfg)::get 从配置数据库中获取 base_set_cfg 的指针。
  • 如果获取失败,使用 uvm_fatal 输出错误信息。
  • 随机化配置 cfg,然后通过调用 set_my_cfg 方法将 cfg 传递给 set_cfg

总结

  1. 定义虚拟类 base_set_cfg,并在其中声明纯虚拟函数 set_my_cfg
  2. 定义具体实现类 module_get,继承自 base_set_cfg 并实现 set_my_cfg
  3. module 中注册 module_get 实例到 uvm_config_db
  4. env 中获取 base_set_cfg 指针,并使用它来调用 set_my_cfg

这样,通过 uvm_config_db 可以在不同的组件之间共享配置对象,并根据需要进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NobleGasex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值