The UVM Agent is the base class for user-defined transactions that leverage the stimulus generation and control capabilities of the sequence-sequencer mechanism.
Coding Guidelines
Tip
Use conditional compilation guards to avoid compiling the same include file more than once.
`ifndefGPIO_UVC_AGENT_SV`define GPIO_UVC_AGENT_SVclassgpio_uvc_agentextendsuvm_agent;`uvm_component_utils(gpio_uvc_agent)uvm_analysis_port#(gpio_uvc_sequence_item)analysis_port;gpio_uvc_configm_config;gpio_uvc_sequencerm_sequencer;gpio_uvc_driverm_driver;gpio_uvc_monitorm_monitor;externfunctionnew(stringname,uvm_componentparent);externfunctionvoidbuild_phase(uvm_phasephase);externfunctionvoidconnect_phase(uvm_phasephase);endclass:gpio_uvc_agentfunctiongpio_uvc_agent::new(stringname,uvm_componentparent);super.new(name,parent);endfunction:newfunctionvoidgpio_uvc_agent::build_phase(uvm_phasephase);if(!uvm_config_db#(gpio_uvc_config)::get(this,"","config",m_config))begin`uvm_fatal(get_name(),"Could not retrieve gpio_uvc_config from config db")endif(m_config.is_active==UVM_ACTIVE)beginm_sequencer=gpio_uvc_sequencer::type_id::create("m_sequencer",this);m_driver=gpio_uvc_driver::type_id::create("m_driver",this);endm_monitor=gpio_uvc_monitor::type_id::create("m_monitor",this);analysis_port=new("analysis_port",this);endfunction:build_phasefunctionvoidgpio_uvc_agent::connect_phase(uvm_phasephase);if(m_config.is_active==UVM_ACTIVE)beginm_driver.seq_item_port.connect(m_sequencer.seq_item_export);endm_monitor.analysis_port.connect(this.analysis_port);endfunction:connect_phase`endif// GPIO_UVC_AGENT_SV