build_phase()与build()的关系

先来给结论,如果build_phase继承自uvm_component的话,那么build_phase里面会调用build函数。
下面我们通过源码和例子来进行分析。

代码

运行结果

  • build被调用了。
  • 尝试注释掉super.build_phase,你会发现build就没有被调用。

super.build_phase里面到底做了什么呢?

uvm_component.svh源代码分析

  • build_phase调用了build()
  • super.build()里面apply_config_settings(print_config_matches)自动获取config_db::set设置的参数。这部分源代码可以进一步进行分析。

查看zhangqiang的那本书,你就会看到super.build_phase是干了什么呢?
对于build_phase来说,uvm_component对其做的最重要的事情就是3.5.3节所示的自动获取通过config_db::set设置的参数。
如果要关掉这个功能,可以在自己的build_phase中不调用super.build_phase。

话又说回来,那我们什么情况下可以省略config_db::get呢?

  • uvm_component必须使用uvm_component_utils宏注册;
  • pre_num必须使用uvm_field_int宏注册
  • 在调用set函数的时候,set函数的第三个参数必须与要get函数中变量的名字相一致,即必须是pre_num。

代码

结果:
my_scoreboard pre_num = 100

原文地址:https://www.cnblogs.com/xuqing125/p/15761692.html