| |
agent有一个配置对象,用于定义:
按照惯例,UVM agent具有UVM_ACTIVE_PASSIVE_e类型的变量,用于定义agent是否为active(UVM_ACTIVE):如果是active那sequencer和driver被构造,或passive(UVM_PASSIVE)既没有构造driver或也没有构造sequencer。此参数称为active,默认情况下设置为UVM_ACTIVE。
是否构建其他子组件由其他应具有描述性名称的变量控制。例如,如果存在功能覆盖monitor,则控制功能覆盖monitor是否构建的bit位可称为has_functional_coverage。
配置对象将包含driver和monitor使用的虚拟接口的句柄。在test中配置和构造配置对象,并且在test中将虚拟接口句柄分配给从testbench module传来的虚拟接口。
配置对象还可能包含影响agent行为或配置方式的其他变量。例如,在apb agent的配置对象中,存在设置存储器映射并确定针对哪些地址激活哪些apb PSEL线的变量。
配置类应将其所有变量设置为公共默认值。
以下代码示例显示了apb agent的配置对象。
//
// Class Description:
//
//
class apb_agent_config extends uvm_object;
// UVM Factory Registration Macro
//
`uvm_object_utils(apb_agent_config)
// Virtual Interface
virtual apb_if APB;
//------------------------------------------
// Data Members
//------------------------------------------
// Is the agent active or passive
uvm_active_passive_enum active = UVM_ACTIVE;
// Include the APB functional coverage monitor
bit has_functional_coverage = 0;
// Include the APB RAM based scoreboard
bit has_scoreboard = 0;
//
// Address decode for the select lines:
int no_select_lines = 1;
logic[31:0] start_address[15:0];
logic[31:0] range[15:0];
//------------------------------------------
// Methods
//------------------------------------------
// Standard UVM Methods:
extern function new(string name = "apb_agent_config");
endclass: apb_agent_config
function apb_agent_config::new(string name = "apb_agent_config");
super.new(name);
endfunction