空指针引用错误问题,只需要理清各个指针之间的关系即可,首先我的TB包含关系为,test包含env包含agent和agent_cfg,在test中type_id了m_agent_cfg,并把top的interface通过m_agent_cfg传给了driver中,但是在agent中引用
//class agent...
if(m_agent_cfg.active == UVM_ACTIVE)begin//空指针在此报错
...
end
可以发现是由m_agent_config指针为空,因此顺藤摸瓜,找到m_agent_config是从哪里传进来的,
uvm_config_db#(agent_config)::get(this,"","agent_config",agent_config);//此处找寻
//发现在env中set
uvm_config_db#(agent_config)::set(this,"m_agent","agent_config",env_config.agent_config);
//有的但是为什么报空指针
因为前文中提到,在test中type_id了m_agent_cfg,但是env中并没有new,而你agent中的agent_config是从env中来,因此,只需要在test中,把agent_config赋值给env中的agent_config即可:
//在test_base.sv中
m_env_cfg.m_agent_cfg=m_agent_cfg
总结:指针指向问题,回溯即可