先来给结论,如果build_phase继承自uvm_component的话,那么build_phase里面会调用build函数。
下面我们通过源码和例子来进行分析。
- build被调用了。
- 尝试注释掉super.build_phase,你会发现build就没有被调用。
super.build_phase里面到底做了什么呢?
- 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