1. 问题描述
在某项目调试过程中,发现通过tc_base.sv中new函数里的set_report_max_quit_count()设置最大error数量不生效,uvm_error数量仍旧是达到10个(默认)就会退出仿真。
2. 设置uvm_error到达一定数量结束仿真的方式
由白皮书可知,设置uvm_error到达一定数量结束仿真的方式有两种:
(1)通过set_report_max_quit_count(num)函数设置。环境的tc_base.sv时在new函数里添加了该函数,如下图:
(2)通过命令行+UVM_MAX_QUIT_COUNT=num设置。环境在makefile里设置num=10,如下图:
目前生效的是方式(2),当需要修改此数量时,发现通过修改tc_base.sv里new函数中的set_report_max_quit_count()不生效。
3. 原因分析
tc_base.sv里new函数在调用完set_report_max_quit_count(100)后,在build_phase阶段uvm_root会调用m_do_max_quit_settings()函数,如下图:
该函数内部会拿到命令行设置的+UVM_MAX_QUIT_COUNT=10,如下图。从而导致前面tc在new函数里设置的100被覆盖。
4. 结论
该问题本质上是两种方式设置的优先级问题,目前的环境中默认方式(2)优先级更高,优点是方式(2)可以不重新编译就可以修改MAX_QUIT_COUNT