网站建设的风险分析,泉山徐州网站开发,做网站怎么用国处服务器,备案系统网站接上篇csdn博客验证知识之在module里面get class里面的set参数-CSDN博客文章浏览阅读155次。验证知识之在module里面get class里面的set参数https://blog.csdn.net/pgl512228/article/details/141748039?spm1001.2014.3001.5501
我们是通过uvm_config_db去get到的class句柄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_endfunction new(string name module_get);super.new(name);endfunctionfunction 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)::set 将 module_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)) beginuvm_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。
总结
定义虚拟类 base_set_cfg并在其中声明纯虚拟函数 set_my_cfg。定义具体实现类 module_get继承自 base_set_cfg 并实现 set_my_cfg。在 module 中注册 module_get 实例到 uvm_config_db。在 env 中获取 base_set_cfg 指针并使用它来调用 set_my_cfg。
这样通过 uvm_config_db 可以在不同的组件之间共享配置对象并根据需要进行操作。