| |
1.UVM打印信息默认冗余度阈值是什么?
默认冗余度阈值为UVM_MEDIUM,当打印信息冗余度级别低于阈值时(如UVM_LOW),则打印,否则不打印。可以通过get_report_verbosity_level()来获得component内打印信息冗余度阈值,该函数返回值为整数。
typedef enum {
UVM_NONE = 0,
UVM_LOW = 100,
UVM_MEDIUM = 200,
UVM_HIGH = 300,
UVM_FULL = 400,
UVM_DEBUG = 500
} uvm_verbosity;
另外可以通过set_report_verbosity_level()对冗余度阈值进行设置,如设置当前component打印信息冗余度阈值,可在connect_phase之前,如设置其他component(需要层次化引用),需在connect_phase中设置。
2.设置打印信息冗余度阈值的方式有哪些?
set_report_verbosity_level()函数;
通过命令行+UVM_VERBOSITY= 进行设置(相当于在base_test中通过set_report_verbosity_level_hier()函数将base_test及其以下所有component冗余度阈值设置为指定级别)。
3.信息严重性可以重载吗?
可以,可通过以下两种方式实现:
通过set_report_severity_override()实现,可以指定id和component;
在命令行+uvm_set_severity=<comp>,<id>,<current severity>,<new severity>。
4.如何设置最大error数量退出数?
set_report_max_quit_count();
命令行+UVM_MAX_QUIT_COUNT=<num>,NO(NO代表不可重载,YES代表可以)
5.uvm_config_db各个参数的意义是什么?
uvm_config_db#()::set(A,B,C,D)中第一个参数和第二个参数合起来组成寄信的相对路径,其中第一个参数应为component实例的指针;第三个参数代表寄信的目标成员;第四个参数代表具体的值。当set的第一个参数为null时,代表uvm_top,等价于uvm_root::get().
uvm_config_db#()::get(A,B,C,D)中的第一个参数和第二个参数合起来组成收信的相对路径(因此通常设置为this,""),其中第一个参数应为component实例的指针;第三个参数应与set中的第三个参数保持一致,第四个参数是设置的变量。第三个参数可以理解为变量的代号,第四个参数理解为变量本身,通常情况下二者保持一致更方便。
6.uvm_config_db::get()可以省略的前提是什么?
所在component使用uvm_component_utils进行注册;
传递的变量使用filed_automation机制注册;
对应的set函数的第三个参数与get函数的变量名称相同(即所省略的get函数的第三四个参数保持一致)。
满足以上条件时,调用super.build_phase时会自动执行省略的get语句。
7.uvm_config_db::set()可以省略的前提是什么?
set语句不可以省略。
8.uvm_component_utils_begin/uvm_object_utils_begin的作用?
供需要同时使用factory机制和field_automation注册的类使用,与uvm_xxx_utils_end成对出现。
9.function phase和task phase是依据什么进行区分的?
是否消耗仿真时间。
10.UVM中哪些phase是task phase,哪些是function phase?
task phase 包括:run_phase及与其并行的12个run-time phase(包括pre_reset_phase,reset_phase,post_reset_phase,pre_configure_phase,configure_phase,post_configure_phase,pre_main_phase,main_phase,post_main_phase,pre_shutdown_phase,shutdown_phase,post_shutdown_phase)
function phase包括:build_phase,connect_phase,end_of_elaboration_phase,start_of_simulation_phase,extract_phase,check_phase,report_phase,final_phase等。
11.phase的执行顺序?
对于不同phase之间来说,自上而下执行。
对于不同component的同一phase来说,function phase中的build_phase是自上而下执行的(此处自上而下指UVM层次结构的自上而下),其他phase都是自下而上执行;task phase中同一phase自下而上执行,但不同的是只是自下而上启动,无需等待其他component执行完毕(相当于fork...join_none)。如果是同一层次兄弟关系,按照实例化名字的字典顺序执行。对于叔侄关系的component,深度优先原则。
12.phase之间的跳转有何限制?
run-time phase向前跳转只能跳往run_time phase中的phase,向后可跳转run-time phase中的phase或者function phase,不可跳往run_phase。
欢迎扫描二维码关注