Hello all ,
i am getting one fatal error in connect phase of the driver class help me please what is mistake .
`ifndef driver
`define driver
import uvm_pkg::*;
`include"uvm_macros.svh"
`include"trans.sv"
`include "interface.sv"
`include"a_config.sv"
class driver extends uvm_driver#(trans);
`uvm_component_utils(driver)
virtual mem_if.DR vif;
trans data;
agt_config acfg;
extern function new(string name="driver",uvm_component parent);
extern function void build_phase(uvm_phase phase);
extern function void connect_phase(uvm_phase phase);
extern task run_phase(uvm_phase phase);
endclass
function driver::new(string name="driver",uvm_component parent);
super.new(name,parent);
endfunction
function void driver::build_phase(uvm_phase phase);
super.build_phase(phase);
if(!uvm_config_db#(agt_config)::get(this,"","agent_config",acfg))
`uvm_fatal("FATAL_ERROR","agt_config cannot get have you set it??")
endfunction
function void driver::connect_phase(uvm_phase phase);
vif=acfg.vif;
endfunction
task driver::run_phase(uvm_phase phase);
forever
begin
seq_item_port.get_next_item(data);
@(vif.driver_cb);
vif.driver_cb.a_in<=data.a_in;
vif.driver_cb.b_in<=data.b_in;
vif.driver_cb.c_in<=data.c_in;
seq_item_port.item_done();
end
endtask
`endif
…===================ENVIRONMENT CLASS============//
`ifndef mem_environment
`define mem_environment
import uvm_pkg::*;
`include"uvm_macros.svh"
`include"trans.sv"
`include"env_config.sv"
`include"agent.sv"
`include"a_config.sv"
`include"virtual_sequencer.sv"
`include"scoreboard.sv"
class mem_environment extends uvm_env;
`uvm_component_utils(mem_environment)
scoreboard sb;
agent agt;
agt_config acfg;
virtual_sequencer vsqr;
env_config ecfg;
extern function new(string name="mem_environment",uvm_component parent);
extern function void build_phase(uvm_phase phase);
extern function void connect_phase(uvm_phase phase);
endclass
function mem_environment::new(string name="mem_environment",uvm_component parent);
super.new(name,parent);
endfunction
function void mem_environment::build_phase(uvm_phase phase);
super.build_phase(phase);
if(!uvm_config_db#(env_config)::get(this,"","econfig",ecfg))
`uvm_fatal("FATAL_ERROR_IN_ENVIRONMENT","env_config cannot get have you set it??")
acfg=ecfg.acfg;
if(ecfg.agent==1)
begin
uvm_config_db#(agt_config)::set(this,"*","agent_config",acfg);
agt=agent::type_id::create("agt",this);
end
if(ecfg.has_v_sequencer==1)
begin
vsqr=virtual_sequencer::type_id::create("vsqr",this);
end
if(ecfg.has_scoreboard==1)
begin
sb=scoreboard::type_id::create("sb",this);
end
endfunction
function void mem_environment::connect_phase(uvm_phase phase);
if(ecfg.has_v_sequencer==1)
begin
agt.sqr=vsqr.sqr;
end
///connect scoreboard with monitor
if(ecfg.has_scoreboard==1)
begin
agt.mon.monport.connect(sb.fifo.analysis_export);
end
endfunction
`endif
//=========================TEST CLASS ======================//
`ifndef test_base
`define test_base
import uvm_pkg::*;
`include"uvm_macros.svh"
`include"mem_environment.sv"
`include"env_config.sv"
`include"a_config.sv"
`include"virtual_sequencer.sv"
class test_base extends uvm_test;
`uvm_component_utils(test_base)
agt_config acfg;
virtual_sequencer vsqr;
env_config ecfg;
mem_environment envh;
extern function new(string name="test_base",uvm_component parent);
extern function void build_phase(uvm_phase phase);
extern function mem_configure();
extern function void end_of_elaboration_phase(uvm_phase phase);
endclass
function test_base::new(string name="test_base",uvm_component parent);
super.new(name,parent);
endfunction
function test_base::mem_configure();
if(ecfg.agent==1)
begin
acfg=agt_config::type_id::create("acfg",this);
if(!uvm_config_db#(virtual mem_if)::get(this,"","uvw",acfg.vif))
`uvm_error(get_type_name,"virtual intf cannot get have you set it??")
if(ecfg.agent_active==1)
acfg.is_active=UVM_ACTIVE;
else
acfg.is_active=UVM_PASSIVE;
end
endfunction
function void test_base::build_phase(uvm_phase phase);
super.build_phase(phase);
ecfg=env_config::type_id::create("ecfg");
mem_configure();
acfg=ecfg.acfg;
uvm_config_db#(env_config)::set(this,"*","econfig",ecfg);
envh=mem_environment::type_id::create("envh",this);
endfunction
function void test_base::end_of_elaboration_phase(uvm_phase phase);
super.end_of_elaboration_phase(phase);
uvm_top.print_topology();
endfunction
`endif