Simulation performance massively degraded at top level testing

Hey,

I started top level testing not long ago and simulation performance has become unbearable for some reason.
Attached is testbench and basetest code from both block and top level.
In general six instances are transmitting 96*540 words into the dut and takes those out at the output with some manipulation.
in block level I only tested it on one instance and it worked really fast.
I can’t really see much of an improvement if I try to “cut-off” the number of virtual sequences I start which leads me to believe something is seriously wrong with my code.
Please let me know with anything else that you might need to help.
Much thanks in advance!

_here is the base test code on block level:
_
**

class hwTesterBaseTest extends uvm_test;
	`uvm_component_utils(hwTesterBaseTest)

	hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterE;
	hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfg;
	VirtualSequence vSeq;
	virtual hwTesterTopIf hwTesterTopVif;
	
	//Default Constructor
	extern function new(string name="hwTesterBaseTest", uvm_component parent);

	//Class functions and tasks
	extern virtual function void build_phase(uvm_phase phase);
	extern task reset_phase(uvm_phase phase);
	extern virtual function void connect_phase(uvm_phase phase);
	extern virtual function void SetEnvironmentConfiguration();
	extern virtual function void SetAxiInstancesConfiguration();
	extern virtual function void initVseq(VirtualSequence vSeq);

endclass : hwTesterBaseTest


function void hwTesterBaseTest::build_phase(uvm_phase phase);
	hwTesterEnvCfg = hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCfg", this);
	hwTesterE = hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterE", this);
	hwTesterE.hwTesterEnvCfg = this.hwTesterEnvCfg;
	vSeq = VirtualSequence::type_id::create("vSeq", this);
	SetEnvironmentConfiguration();
	SetAxiInstancesConfiguration();
	
	//Get top Interface from factory database
	if (!uvm_config_db #(virtual hwTesterTopIf)::get(this, "", "hwTesterTopVif", hwTesterTopVif)) 
		`uvm_fatal("hwTesterBaseTest", "NO_VIF:: Unable to get hwTesterTopIf")	
endfunction : build_phase


function hwTesterBaseTest::new(string name="hwTesterBaseTest", uvm_component parent);
	super.new(name,parent);
endfunction : new


function void hwTesterBaseTest::SetEnvironmentConfiguration();
	hwTesterEnvCfg.hwTesterAgentCfg = hwTesterAgentConfig::type_id::create("hwTesterAgentCfg", this);
	hwTesterEnvCfg.hwTesterAgentCfg.isActive = UVM_ACTIVE;
	hwTesterEnvCfg.hwTesterAgentCfg.virtualIfDataBaseName = "hwTesterVif"; 
	hwTesterEnvCfg.hwTesterCoverageEn = 1;
endfunction: SetEnvironmentConfiguration


function void hwTesterBaseTest::SetAxiInstancesConfiguration();
	//create axi master configuration object - registers channel
	hwTesterEnvCfg.axiConfig = axi_lite_config#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("axiConfig",this);
	hwTesterEnvCfg.axiConfig.m_vif_db_name = "axiBRAMVif"; 
	hwTesterEnvCfg.axiConfig.m_api_vif_db_name = "axiBRAMApiVif";
	hwTesterEnvCfg.axiConfig.m_is_active = UVM_ACTIVE;
	// I changed coverage from 1 to 0, I don't care about AXi Coverage
	hwTesterEnvCfg.axiConfig.m_coverage_en =1'b0;
	hwTesterEnvCfg.axiConfig.m_stop_drive_on_reset=1'b1;
	// I change it to 1, I need to check if it works
	hwTesterEnvCfg.axiConfig.m_nonblocking_en =1'b0;
	
	// Axi STREAM
	// HW Tester Master Agent
	hwTesterEnvCfg.axiSMasterAgentConfig = AxiSAgentConfig::type_id::create("axiSMasterAgentConfig", this);
	hwTesterEnvCfg.axiSMasterAgentConfig.isActive = UVM_ACTIVE;
	hwTesterEnvCfg.axiSMasterAgentConfig.virtualIfDataBaseName = "axiSMasterVif";
	hwTesterEnvCfg.axiSMasterAgentConfig.isMaster = 1'b1;
	// HW Tester Slave Agent
	hwTesterEnvCfg.axiSSlaveAgentConfig = AxiSAgentConfig::type_id::create("axiSSlaveAgentConfig", this);
	hwTesterEnvCfg.axiSSlaveAgentConfig.isActive = UVM_ACTIVE;
	hwTesterEnvCfg.axiSSlaveAgentConfig.virtualIfDataBaseName = "axiSSlaveVif";
	hwTesterEnvCfg.axiSSlaveAgentConfig.isMaster = 1'b0;
endfunction


function void hwTesterBaseTest::initVseq(VirtualSequence vSeq);
	vSeq.hwTesterEnvCfg = this.hwTesterEnvCfg;
	vSeq.hwTesterVif = this.hwTesterTopVif.hwTesterVif;
	vSeq.axiStreamMasterVif = this.hwTesterTopVif.axiSMasterVif;
	if(hwTesterEnvCfg.hwTesterAgentCfg.isActive) begin
		vSeq.hwTesterSeqr = hwTesterE.hwTesterAg.hwTesterSeqr;
	end
	if(hwTesterEnvCfg.axiConfig.m_is_active) begin
		vSeq.axiSeqr = hwTesterE.axiAg.m_sequencer;
	end
	if(hwTesterEnvCfg.axiSMasterAgentConfig.isActive) begin
		vSeq.axiSMasterSeqr = hwTesterE.axiSMasterAg.axiSSeqr;
	end
	if(hwTesterEnvCfg.axiSSlaveAgentConfig.isActive) begin
		vSeq.axiSSlaveSeqr = hwTesterE.axiSSlaveAg.axiSSeqr;
	end
endfunction


task hwTesterBaseTest::reset_phase(uvm_phase phase);
	phase.raise_objection(this);
	`uvm_info(get_type_name(), $psprintf("reset_phase - %m  started"), UVM_LOW)
	@(posedge hwTesterTopVif.reset);
	phase.drop_objection(this);
	`uvm_info(get_type_name(), $psprintf("reset_phase - %m  finshed"), UVM_LOW)
endtask

function void hwTesterBaseTest::connect_phase(uvm_phase phase);
	initVseq(vSeq);
endfunction

_here is the base test code at top level:
_
**

class hwTesterTopBaseTest extends uvm_test;
	`uvm_component_utils(hwTesterTopBaseTest)

	hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCam1;
	hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCam2;
	hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCam3;
	hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCam4;
	hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCam5;
	hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCam6;

	hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfgCam1;
	hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfgCam2;
	hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfgCam3;
	hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfgCam4;
	hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfgCam5;
	hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfgCam6;

	VirtualSequence vSeqCam1;
	VirtualSequenceTop vSeqCam2;
	VirtualSequenceTop vSeqCam3;
	VirtualSequenceTop vSeqCam4;
	VirtualSequenceTop vSeqCam5;
	VirtualSequenceTop vSeqCam6;
	
	frameRateEnum frameRate;

	virtual hwTesterTopModuleIf hwTesterTopVif;
	
	ConfigTop cfgTop;
	
	//Default Constructor
	extern function new(string name="hwTesterTopBaseTest", uvm_component parent);

	//Class functions and tasks
	extern virtual function void build_phase(uvm_phase phase);
	extern task reset_phase(uvm_phase phase);
	extern virtual function void connect_phase(uvm_phase phase);
	extern virtual function void setEnvironmentConfiguration(hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfg, string interfaceName, bit coverageEn = 1, uvm_active_passive_enum isActive = UVM_ACTIVE);
	extern virtual function void setAxiInstancesConfiguration(hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfg, string interfaceName, string apiInterfaceName, string axiSMasterVifName, string axiSSlaveVifName, uvm_active_passive_enum isActive = UVM_ACTIVE);
	extern virtual function void initVseq(VirtualSequenceTop vSeq, string camera);
	extern function void initVseqCam1(VirtualSequence vSeq);
	extern function void connectAnalysisPortsToAxiCam1(hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvObj);
	

endclass : hwTesterTopBaseTest


function void hwTesterTopBaseTest::build_phase(uvm_phase phase);
	// create objects of env and env config
	hwTesterEnvCfgCam1 = hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCfgCam1", this);
	hwTesterEnvCfgCam2 = hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCfgCam2", this);
	hwTesterEnvCfgCam3 = hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCfgCam3", this);
	hwTesterEnvCfgCam4 = hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCfgCam4", this);
	hwTesterEnvCfgCam5 = hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCfgCam5", this);
	hwTesterEnvCfgCam6 = hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCfgCam6", this);

	hwTesterEnvCam1 = hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCam1", this);
	hwTesterEnvCam2 = hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCam2", this);
	hwTesterEnvCam3 = hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCam3", this);
	hwTesterEnvCam4 = hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCam4", this);
	hwTesterEnvCam5 = hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCam5", this);
	hwTesterEnvCam6 = hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("hwTesterEnvCam6", this);
	
	// assign objects with correct handles
	hwTesterEnvCam1.hwTesterEnvCfg = this.hwTesterEnvCfgCam1;
	hwTesterEnvCam2.hwTesterEnvCfg = this.hwTesterEnvCfgCam2;
	hwTesterEnvCam3.hwTesterEnvCfg = this.hwTesterEnvCfgCam3;
	hwTesterEnvCam4.hwTesterEnvCfg = this.hwTesterEnvCfgCam4;
	hwTesterEnvCam5.hwTesterEnvCfg = this.hwTesterEnvCfgCam5;
	hwTesterEnvCam6.hwTesterEnvCfg = this.hwTesterEnvCfgCam6;


	// create virtual sequences foreach camera
	vSeqCam1 = VirtualSequence::type_id::create("vSeqCam1", this);
	vSeqCam2 = VirtualSequenceTop::type_id::create("vSeqCam2", this);
	vSeqCam3 = VirtualSequenceTop::type_id::create("vSeqCam3", this);
	vSeqCam4 = VirtualSequenceTop::type_id::create("vSeqCam4", this);
	vSeqCam5 = VirtualSequenceTop::type_id::create("vSeqCam5", this);
	vSeqCam6 = VirtualSequenceTop::type_id::create("vSeqCam6", this);
	
	// configure each camera
	setEnvironmentConfiguration(hwTesterEnvCfgCam1,"hwTesterVifCam1");
	setEnvironmentConfiguration(hwTesterEnvCfgCam2,"hwTesterVifCam1", ,UVM_PASSIVE);
	setEnvironmentConfiguration(hwTesterEnvCfgCam3,"hwTesterVifCam1", ,UVM_PASSIVE);
	setEnvironmentConfiguration(hwTesterEnvCfgCam4,"hwTesterVifCam1", ,UVM_PASSIVE);
	setEnvironmentConfiguration(hwTesterEnvCfgCam5,"hwTesterVifCam1", ,UVM_PASSIVE);
	setEnvironmentConfiguration(hwTesterEnvCfgCam6,"hwTesterVifCam1", ,UVM_PASSIVE);
	setAxiInstancesConfiguration(hwTesterEnvCfgCam1,"axiBRAMVifCam1","axiBRAMApiVifCam1", "axiSMasterVifCam1", "axiSSlaveVifCam1");
	setAxiInstancesConfiguration(hwTesterEnvCfgCam2,"axiBRAMVifCam1","axiBRAMApiVifCam1", "axiSMasterVifCam2", "axiSSlaveVifCam2", UVM_PASSIVE);
	setAxiInstancesConfiguration(hwTesterEnvCfgCam3,"axiBRAMVifCam1","axiBRAMApiVifCam1", "axiSMasterVifCam3", "axiSSlaveVifCam3", UVM_PASSIVE);
	setAxiInstancesConfiguration(hwTesterEnvCfgCam4,"axiBRAMVifCam1","axiBRAMApiVifCam1", "axiSMasterVifCam4", "axiSSlaveVifCam4", UVM_PASSIVE);
	setAxiInstancesConfiguration(hwTesterEnvCfgCam5,"axiBRAMVifCam1","axiBRAMApiVifCam1", "axiSMasterVifCam5", "axiSSlaveVifCam5", UVM_PASSIVE);
	setAxiInstancesConfiguration(hwTesterEnvCfgCam6,"axiBRAMVifCam1","axiBRAMApiVifCam1", "axiSMasterVifCam6", "axiSSlaveVifCam6", UVM_PASSIVE);
	
	cfgTop = ConfigTop::type_id::create("cfgTop", this);
	// put it in build_phase so connect_phase of env will catch the change
	hwTesterEnvCam1.cfgTop = this.cfgTop;
	hwTesterEnvCam2.cfgTop = this.cfgTop;
	hwTesterEnvCam3.cfgTop = this.cfgTop;
	hwTesterEnvCam4.cfgTop = this.cfgTop;
	hwTesterEnvCam5.cfgTop = this.cfgTop;
	hwTesterEnvCam6.cfgTop = this.cfgTop;
	
	hwTesterEnvCam1.hwTesterEnvCfg.cam = "cam1";
	hwTesterEnvCam2.hwTesterEnvCfg.cam = "cam2";
	hwTesterEnvCam3.hwTesterEnvCfg.cam = "cam3";
	hwTesterEnvCam4.hwTesterEnvCfg.cam = "cam4";
	hwTesterEnvCam5.hwTesterEnvCfg.cam = "cam5";
	hwTesterEnvCam6.hwTesterEnvCfg.cam = "cam6";
	//Get top Interface from factory database
	if (!uvm_config_db #(virtual hwTesterTopModuleIf)::get(this, "", "hwTesterTopModuleVif", hwTesterTopVif)) 
		`uvm_fatal("hwTesterTopBaseTest", "NO_VIF:: Unable to get hwTesterTopIf")	
endfunction : build_phase


function hwTesterTopBaseTest::new(string name="hwTesterTopBaseTest", uvm_component parent);
	super.new(name,parent);
endfunction : new


function void hwTesterTopBaseTest::setEnvironmentConfiguration(hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfg, string interfaceName, bit coverageEn = 1, uvm_active_passive_enum isActive = UVM_ACTIVE);
	hwTesterEnvCfg.hwTesterAgentCfg = hwTesterAgentConfig::type_id::create("hwTesterAgentCfg", this);
	hwTesterEnvCfg.hwTesterAgentCfg.isActive = isActive;
	hwTesterEnvCfg.hwTesterAgentCfg.virtualIfDataBaseName = interfaceName; 
	hwTesterEnvCfg.hwTesterCoverageEn = coverageEn;
endfunction: setEnvironmentConfiguration


function void hwTesterTopBaseTest::setAxiInstancesConfiguration(hwTesterEnvConfig#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvCfg, string interfaceName, string apiInterfaceName, string axiSMasterVifName, string axiSSlaveVifName, uvm_active_passive_enum isActive = UVM_ACTIVE);
	//create axi master configuration object - registers channel
	hwTesterEnvCfg.axiConfig = axi_lite_config#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH)::type_id::create("axiConfig",this);
	hwTesterEnvCfg.axiConfig.m_vif_db_name = interfaceName; 
	hwTesterEnvCfg.axiConfig.m_api_vif_db_name = apiInterfaceName;
	hwTesterEnvCfg.axiConfig.m_is_active = isActive;
	// I changed coverage from 1 to 0, I don't care about AXi Coverage
	hwTesterEnvCfg.axiConfig.m_coverage_en =1'b0;
	hwTesterEnvCfg.axiConfig.m_stop_drive_on_reset=1'b1;
	// I change it to 1, I need to check if it works
	hwTesterEnvCfg.axiConfig.m_nonblocking_en =1'b0;
	
	// Axi STREAM
	// HW Tester Master Agent
	hwTesterEnvCfg.axiSMasterAgentConfig = AxiSAgentConfig::type_id::create("axiSMasterAgentConfig", this);
	hwTesterEnvCfg.axiSMasterAgentConfig.isActive = UVM_ACTIVE;
	hwTesterEnvCfg.axiSMasterAgentConfig.virtualIfDataBaseName = axiSMasterVifName;
	hwTesterEnvCfg.axiSMasterAgentConfig.isMaster = 1'b1;
	// HW Tester Slave Agent
	hwTesterEnvCfg.axiSSlaveAgentConfig = AxiSAgentConfig::type_id::create("axiSSlaveAgentConfig", this);
	hwTesterEnvCfg.axiSSlaveAgentConfig.isActive = UVM_ACTIVE;
	hwTesterEnvCfg.axiSSlaveAgentConfig.virtualIfDataBaseName = axiSSlaveVifName;
	hwTesterEnvCfg.axiSSlaveAgentConfig.isMaster = 1'b0;
endfunction


function void hwTesterTopBaseTest::initVseqCam1(VirtualSequence vSeq);
	vSeq.hwTesterEnvCfg = this.hwTesterEnvCfgCam1;
	vSeq.cfgTop = this.cfgTop;
	vSeq.hwTesterVif = this.hwTesterTopVif.hwTesterVifCam1;
	vSeq.axiStreamMasterVif = this.hwTesterTopVif.axiSMasterVifCam1;
	if(hwTesterEnvCfgCam1.hwTesterAgentCfg.isActive) begin
		vSeq.hwTesterSeqr = hwTesterEnvCam1.hwTesterAg.hwTesterSeqr;
	end
	if(hwTesterEnvCfgCam1.axiConfig.m_is_active) begin
		vSeq.axiSeqr = hwTesterEnvCam1.axiAg.m_sequencer;
	end
	if(hwTesterEnvCfgCam1.axiSMasterAgentConfig.isActive) begin
		vSeq.axiSMasterSeqr = hwTesterEnvCam1.axiSMasterAg.axiSSeqr;
	end
	if(hwTesterEnvCfgCam1.axiSSlaveAgentConfig.isActive) begin
		vSeq.axiSSlaveSeqr = hwTesterEnvCam1.axiSSlaveAg.axiSSeqr;
	end
endfunction

function void hwTesterTopBaseTest::initVseq(VirtualSequenceTop vSeq, string camera);
	case(camera)
		"cam2": begin
			vSeq.hwTesterEnvCfg = this.hwTesterEnvCfgCam2;
			vSeq.cfgTop = this.cfgTop;
			vSeq.hwTesterVif = this.hwTesterTopVif.hwTesterVifCam1;
			vSeq.axiStreamMasterVif = this.hwTesterTopVif.axiSMasterVifCam2;
			if(hwTesterEnvCfgCam2.axiSMasterAgentConfig.isActive) begin
				vSeq.axiSMasterSeqr = hwTesterEnvCam2.axiSMasterAg.axiSSeqr;
			end
			if(hwTesterEnvCfgCam2.axiSSlaveAgentConfig.isActive) begin
				vSeq.axiSSlaveSeqr = hwTesterEnvCam2.axiSSlaveAg.axiSSeqr;
			end
		end
		"cam3": begin
			vSeq.hwTesterEnvCfg = this.hwTesterEnvCfgCam3;
			vSeq.cfgTop = this.cfgTop;
			vSeq.hwTesterVif = this.hwTesterTopVif.hwTesterVifCam1;
			vSeq.axiStreamMasterVif = this.hwTesterTopVif.axiSMasterVifCam3;
			if(hwTesterEnvCfgCam3.axiSMasterAgentConfig.isActive) begin
				vSeq.axiSMasterSeqr = hwTesterEnvCam3.axiSMasterAg.axiSSeqr;
			end
			if(hwTesterEnvCfgCam3.axiSSlaveAgentConfig.isActive) begin
				vSeq.axiSSlaveSeqr = hwTesterEnvCam3.axiSSlaveAg.axiSSeqr;
			end
		end
		"cam4": begin
			vSeq.hwTesterEnvCfg = this.hwTesterEnvCfgCam4;
			vSeq.cfgTop = this.cfgTop;
			vSeq.hwTesterVif = this.hwTesterTopVif.hwTesterVifCam1;
			vSeq.axiStreamMasterVif = this.hwTesterTopVif.axiSMasterVifCam4;
			if(hwTesterEnvCfgCam4.axiSMasterAgentConfig.isActive) begin
				vSeq.axiSMasterSeqr = hwTesterEnvCam4.axiSMasterAg.axiSSeqr;
			end
			if(hwTesterEnvCfgCam4.axiSSlaveAgentConfig.isActive) begin
				vSeq.axiSSlaveSeqr = hwTesterEnvCam4.axiSSlaveAg.axiSSeqr;
			end
		end
		"cam5": begin
			vSeq.hwTesterEnvCfg = this.hwTesterEnvCfgCam5;
			vSeq.cfgTop = this.cfgTop;
			vSeq.hwTesterVif = this.hwTesterTopVif.hwTesterVifCam1;
			vSeq.axiStreamMasterVif = this.hwTesterTopVif.axiSMasterVifCam5;
			if(hwTesterEnvCfgCam5.axiSMasterAgentConfig.isActive) begin
				vSeq.axiSMasterSeqr = hwTesterEnvCam5.axiSMasterAg.axiSSeqr;
			end
			if(hwTesterEnvCfgCam5.axiSSlaveAgentConfig.isActive) begin
				vSeq.axiSSlaveSeqr = hwTesterEnvCam5.axiSSlaveAg.axiSSeqr;
			end
		end
		"cam6": begin
			vSeq.hwTesterEnvCfg = this.hwTesterEnvCfgCam6;
			vSeq.cfgTop = this.cfgTop;
			vSeq.hwTesterVif = this.hwTesterTopVif.hwTesterVifCam1;
			vSeq.axiStreamMasterVif = this.hwTesterTopVif.axiSMasterVifCam6;
			if(hwTesterEnvCfgCam6.axiSMasterAgentConfig.isActive) begin
				vSeq.axiSMasterSeqr = hwTesterEnvCam6.axiSMasterAg.axiSSeqr;
			end
			if(hwTesterEnvCfgCam6.axiSSlaveAgentConfig.isActive) begin
				vSeq.axiSSlaveSeqr = hwTesterEnvCam6.axiSSlaveAg.axiSSeqr;
			end
		end
	endcase
endfunction


task hwTesterTopBaseTest::reset_phase(uvm_phase phase);
	phase.raise_objection(this);
	`uvm_info(get_type_name(), $psprintf("reset_phase - %m  started"), UVM_LOW)
	@(posedge hwTesterTopVif.resetN);
	phase.drop_objection(this);
	`uvm_info(get_type_name(), $psprintf("reset_phase - %m  finshed"), UVM_LOW)
endtask

function void hwTesterTopBaseTest::connect_phase(uvm_phase phase);
	initVseqCam1(vSeqCam1);
	initVseq(vSeqCam2, "cam2");
	initVseq(vSeqCam3, "cam3");
	initVseq(vSeqCam4, "cam4");
	initVseq(vSeqCam5, "cam5");
	initVseq(vSeqCam6, "cam6");
	connectAnalysisPortsToAxiCam1(hwTesterEnvCam2);
	connectAnalysisPortsToAxiCam1(hwTesterEnvCam3);
	connectAnalysisPortsToAxiCam1(hwTesterEnvCam4);
	connectAnalysisPortsToAxiCam1(hwTesterEnvCam5);
	connectAnalysisPortsToAxiCam1(hwTesterEnvCam6);
endfunction


function void hwTesterTopBaseTest::connectAnalysisPortsToAxiCam1(hwTesterEnv#(ParametersPkg::AXI_ADDR_WIDTH, ParametersPkg::AXI_DATA_WIDTH) hwTesterEnvObj);
	hwTesterEnvCam1.axiAg.m_analysis_port.connect(hwTesterEnvObj.hwTesterRefModel.AxiMonitorExp);
	hwTesterEnvCam1.hwTesterAg.hwTesterAgentAnalysisPort.connect(hwTesterEnvObj.hwTesterRefModel.hwTesterMonitorExp);
	hwTesterEnvCam1.hwTesterAg.hwTesterAgentAnalysisPort.connect(hwTesterEnvObj.hwTesterCov.hwTesterMonitorExp);
endfunction

_here is the testbench code at block level:
_**

module hwTesterTB();
	import uvm_pkg::*;
	`include "uvm_macros.svh"
	import hwTesterTestPkg::*;
	
	//Import parameters package here
	
	//==============================================
	//                   CLOCK
	//==============================================
	bit axiClk=0;
	int halfPeriod150MHz = 3333;
	always #(halfPeriod150MHz*1ps) axiClk = ~axiClk;

	//==============================================
	//                 RESET
	//==============================================
	wire sysReset;
	wire cpuRst;
	assign sysReset = hwTesterTopVif.hwTesterVif.sysReset;
	assign cpuRst = hwTesterTopVif.hwTesterVif.cpuRst;
	assign hwTesterTopVif.axiSSlaveVif.pixelCounterIn = hwTesterTopVif.axiSMasterVif.pixelCounterOut; 
//	initial begin 
//		sysReset=1'b0;
//		repeat(1000)begin 
//			@(posedge axiClk);
//		end 
//		sysReset =1'b1;
//	end 
	
	
	//==============================================
	//                 DUT (IP) , BRAM size is 1Mx32
	//==============================================
	HW_TESTER_TOP#(.LINE_LEN_CONST(ParametersPkg::FRAME_WIDTH),
			.FRAME_LEN_CONST(ParametersPkg::FRAME_HEIGHT)) dut(
			//Axi Ports if any
			.s_axi_aclk              (axiClk),    
			.s_axi_aresetn               (sysReset),  
			.cpu_rstn(cpuRst),
			.control_register   (hwTesterTopVif.hwTesterVif.csmControl),
			.status_register    (hwTesterTopVif.hwTesterVif.csmStatus),
			.base_register      (hwTesterTopVif.hwTesterVif.csmBaseAddress),
			.s_axis_video_TVALID(hwTesterTopVif.axiSMasterVif.tvalid),    
			.s_axis_video_TREADY(hwTesterTopVif.axiSMasterVif.tready),    
			.s_axis_video_TDATA (hwTesterTopVif.axiSMasterVif.tdata),
			.s_axis_video_TUSER (hwTesterTopVif.axiSMasterVif.tuser),
			.s_axis_video_TLAST (hwTesterTopVif.axiSMasterVif.tlast),    
			.m_axis_video1_TVALID(hwTesterTopVif.axiSSlaveVif.tvalid),    
			.m_axis_video1_TREADY(hwTesterTopVif.axiSSlaveVif.tready),    
			.m_axis_video1_TDATA (hwTesterTopVif.axiSSlaveVif.tdata),
			.m_axis_video1_TUSER (hwTesterTopVif.axiSSlaveVif.tuser),
			.m_axis_video1_TLAST (hwTesterTopVif.axiSSlaveVif.tlast),    
			.S00_AXI_ARESET_OUT_N (),
			.S00_AXI_ACLK (axiClk),
			.S00_AXI_AWID (1'b1),
			.S00_AXI_AWADDR (hwTesterTopVif.axiBRAMVif.awaddr),
			.S00_AXI_AWLEN (8'h00),
			.S00_AXI_AWSIZE (3'b010),
			.S00_AXI_AWBURST (2'b00),
			.S00_AXI_AWLOCK (1'b0),
			.S00_AXI_AWCACHE (4'h0),
			.S00_AXI_AWPROT (hwTesterTopVif.axiBRAMVif.awprot),
			.S00_AXI_AWQOS (4'h0),
			.S00_AXI_AWVALID (hwTesterTopVif.axiBRAMVif.awvalid),
			.S00_AXI_AWREADY (hwTesterTopVif.axiBRAMVif.awready),
			.S00_AXI_WDATA (hwTesterTopVif.axiBRAMVif.wdata),
			.S00_AXI_WSTRB (hwTesterTopVif.axiBRAMVif.wstrb),
			.S00_AXI_WLAST (1'b1),
			.S00_AXI_WVALID (hwTesterTopVif.axiBRAMVif.wvalid),
			.S00_AXI_WREADY (hwTesterTopVif.axiBRAMVif.wready),
			.S00_AXI_BID (),
			.S00_AXI_BRESP (hwTesterTopVif.axiBRAMVif.bresp),
			.S00_AXI_BVALID (hwTesterTopVif.axiBRAMVif.bvalid),
			.S00_AXI_BREADY (hwTesterTopVif.axiBRAMVif.bready),
			.S00_AXI_ARID (1'b1),
			.S00_AXI_ARADDR (hwTesterTopVif.axiBRAMVif.araddr),
			.S00_AXI_ARLEN (8'h00),
			.S00_AXI_ARSIZE (3'b010),
			.S00_AXI_ARBURST (2'b00),
			.S00_AXI_ARLOCK (1'b0),
			.S00_AXI_ARCACHE (4'h0),
			.S00_AXI_ARPROT (hwTesterTopVif.axiBRAMVif.arprot),
			.S00_AXI_ARQOS (4'h0),
			.S00_AXI_ARVALID (hwTesterTopVif.axiBRAMVif.arvalid),
			.S00_AXI_ARREADY (hwTesterTopVif.axiBRAMVif.arready),
			.S00_AXI_RID (),
			.S00_AXI_RDATA (hwTesterTopVif.axiBRAMVif.rdata),
			.S00_AXI_RRESP (hwTesterTopVif.axiBRAMVif.rresp),
			.S00_AXI_RLAST (),
			.S00_AXI_RVALID (hwTesterTopVif.axiBRAMVif.rvalid),
			.S00_AXI_RREADY (hwTesterTopVif.axiBRAMVif.rready)
			//Control ports
							   
		);

	
	//==============================================
	//                  TOP INTERFACE
	//==============================================
	hwTesterTopIf hwTesterTopVif(
			.config_db_name("hwTesterTopVif"),
			.axiClk(axiClk),
			.resetN(sysReset),
			.cpuRst(cpuRst)
		);
	// Axi Inst if any
	axi4_lite_master_vip AxiInst(
			.aclk             (axiClk),
			.aresetn          (sysReset),
			// write address
			.m_axi_awaddr     (hwTesterTopVif.axiBRAMVif.awaddr),
			.m_axi_awprot     (hwTesterTopVif.axiBRAMVif.awprot),
			.m_axi_awvalid    (hwTesterTopVif.axiBRAMVif.awvalid),
			.m_axi_awready    (hwTesterTopVif.axiBRAMVif.awready),
   		
			//write data
			.m_axi_wdata      (hwTesterTopVif.axiBRAMVif.wdata),
			.m_axi_wstrb      (hwTesterTopVif.axiBRAMVif.wstrb),
			.m_axi_wvalid     (hwTesterTopVif.axiBRAMVif.wvalid),
			.m_axi_wready     (hwTesterTopVif.axiBRAMVif.wready),
 
    		
			//write response
			.m_axi_bresp      (hwTesterTopVif.axiBRAMVif.bresp),
			.m_axi_bvalid     (hwTesterTopVif.axiBRAMVif.bvalid),
			.m_axi_bready     (hwTesterTopVif.axiBRAMVif.bready),
    		
			// read address
			.m_axi_araddr     (hwTesterTopVif.axiBRAMVif.araddr),
			.m_axi_arprot     (hwTesterTopVif.axiBRAMVif.arprot),
			.m_axi_arvalid    (hwTesterTopVif.axiBRAMVif.arvalid),
			.m_axi_arready    (hwTesterTopVif.axiBRAMVif.arready),
   		
			//read data
			.m_axi_rdata      (hwTesterTopVif.axiBRAMVif.rdata),   
			.m_axi_rresp      (hwTesterTopVif.axiBRAMVif.rresp),   
			.m_axi_rvalid     (hwTesterTopVif.axiBRAMVif.rvalid),  
			.m_axi_rready     (hwTesterTopVif.axiBRAMVif.rready)
		);	
	

	//==============================================
	//                 SVA
	//==============================================
	hwTesterSVA sva(
			.clk(axiClk),
			.rst_n(sysReset),
			.cpuRst(cpuRst),
			.treadySlave(hwTesterTopVif.axiSSlaveVif.tready),
			.tvalidSlave(hwTesterTopVif.axiSSlaveVif.tvalid),
			 .tuserSlave(hwTesterTopVif.axiSSlaveVif.tuser),
			 .tlastSlave(hwTesterTopVif.axiSSlaveVif.tlast),
			 .treadyMaster(hwTesterTopVif.axiSMasterVif.tready),
			 .tvalidMaster(hwTesterTopVif.axiSMasterVif.tvalid),
			 .tuserMaster(hwTesterTopVif.axiSMasterVif.tuser),
			 .tlastMaster(hwTesterTopVif.axiSMasterVif.tlast),
			 .pixelCounterIn(hwTesterTopVif.axiSSlaveVif.pixelCounterIn),
			 .pixelCounterOut(hwTesterTopVif.axiSSlaveVif.pixelCounterOut),
			 .csmControl(hwTesterTopVif.hwTesterVif.csmControl),
			 .csmStatus(hwTesterTopVif.hwTesterVif.csmStatus),
			 .errorInjection(hwTesterTopVif.errorInjection)
			 );

	initial begin 
		run_test();
	end //initial
	
endmodule[/b]

_here is the testbench code at top level:
_**


``` verilog
module hwTesterTopTB();
	import uvm_pkg::*;
	`include "uvm_macros.svh"
	import hwTesterTestPkg::*;

	
	//Import parameters package here
	
	//==============================================
	//                   CLOCK
	//==============================================
	bit axiClk=0;
	int halfPeriod150MHz = 3333;
	always #(halfPeriod150MHz*1ps) axiClk = ~axiClk;

	//==============================================
	//                 RESET
	//==============================================
	wire sysReset;
	wire cpuRst;
	assign sysReset = hwTesterTopModuleVif.hwTesterVifCam1.sysReset;
	assign cpuRst = hwTesterTopModuleVif.hwTesterVifCam1.cpuRst;
	assign hwTesterTopModuleVif.axiSSlaveVifCam1.pixelCounterIn = hwTesterTopModuleVif.axiSMasterVifCam1.pixelCounterOut; 
	assign hwTesterTopModuleVif.axiSSlaveVifCam2.pixelCounterIn = hwTesterTopModuleVif.axiSMasterVifCam2.pixelCounterOut; 
	assign hwTesterTopModuleVif.axiSSlaveVifCam3.pixelCounterIn = hwTesterTopModuleVif.axiSMasterVifCam3.pixelCounterOut; 
	assign hwTesterTopModuleVif.axiSSlaveVifCam4.pixelCounterIn = hwTesterTopModuleVif.axiSMasterVifCam4.pixelCounterOut; 
	assign hwTesterTopModuleVif.axiSSlaveVifCam5.pixelCounterIn = hwTesterTopModuleVif.axiSMasterVifCam5.pixelCounterOut;
	assign hwTesterTopModuleVif.axiSSlaveVifCam6.pixelCounterIn = hwTesterTopModuleVif.axiSMasterVifCam6.pixelCounterOut; 
//	initial begin 
//		sysReset=1'b0;
//		repeat(1000)begin 
//			@(posedge axiClk);
//		end 
//		sysReset =1'b1;
//	end 
		 	
		 	
	
	//==============================================
	//                 DUT (IP) , BRAM size is 1Mx32
	//==============================================
	HW_TESTER_TOP#(.LINE_LEN_CONST(ParametersPkg::FRAME_WIDTH),
			.FRAME_LEN_CONST(ParametersPkg::FRAME_HEIGHT)) dut(
			//Axi Ports if any
			.s_axi_aclk              (axiClk),    
			.s_axi_aresetn               (sysReset),  
			.cpu_rstn(cpuRst),
			.control_register   (hwTesterTopModuleVif.hwTesterVifCam1.csmControl),
			.status_register    (hwTesterTopModuleVif.hwTesterVifCam1.csmStatus),
			.base_register      (hwTesterTopModuleVif.hwTesterVifCam1.csmBaseAddress),
			
			.s_axis_video_TVALID0(hwTesterTopModuleVif.axiSMasterVifCam1.tvalid),    
			.s_axis_video_TREADY0(hwTesterTopModuleVif.axiSMasterVifCam1.tready),    
			.s_axis_video_TDATA0(hwTesterTopModuleVif.axiSMasterVifCam1.tdata),     
			.s_axis_video_TUSER0(hwTesterTopModuleVif.axiSMasterVifCam1.tuser),     
			.s_axis_video_TLAST0(hwTesterTopModuleVif.axiSMasterVifCam1.tlast),     
  
			.s_axis_video_TVALID1(hwTesterTopModuleVif.axiSMasterVifCam2.tvalid),    
			.s_axis_video_TREADY1(hwTesterTopModuleVif.axiSMasterVifCam2.tready),    
			.s_axis_video_TDATA1(hwTesterTopModuleVif.axiSMasterVifCam2.tdata),     
			.s_axis_video_TUSER1(hwTesterTopModuleVif.axiSMasterVifCam2.tuser),     
			.s_axis_video_TLAST1(hwTesterTopModuleVif.axiSMasterVifCam2.tlast),     
 
			.s_axis_video_TVALID2(hwTesterTopModuleVif.axiSMasterVifCam3.tvalid),    
			.s_axis_video_TREADY2(hwTesterTopModuleVif.axiSMasterVifCam3.tready),    
			.s_axis_video_TDATA2(hwTesterTopModuleVif.axiSMasterVifCam3.tdata),     
			.s_axis_video_TUSER2(hwTesterTopModuleVif.axiSMasterVifCam3.tuser),     
			.s_axis_video_TLAST2(hwTesterTopModuleVif.axiSMasterVifCam3.tlast),     
  
			.s_axis_video_TVALID3 (hwTesterTopModuleVif.axiSMasterVifCam4.tvalid),   
			.s_axis_video_TREADY3 (hwTesterTopModuleVif.axiSMasterVifCam4.tready),   
			.s_axis_video_TDATA3  (hwTesterTopModuleVif.axiSMasterVifCam4.tdata),   
			.s_axis_video_TUSER3  (hwTesterTopModuleVif.axiSMasterVifCam4.tuser),   
			.s_axis_video_TLAST3  (hwTesterTopModuleVif.axiSMasterVifCam4.tlast),   
			
			.s_axis_video_TVALID4 (hwTesterTopModuleVif.axiSMasterVifCam5.tvalid),   
			.s_axis_video_TREADY4 (hwTesterTopModuleVif.axiSMasterVifCam5.tready),   
			.s_axis_video_TDATA4  (hwTesterTopModuleVif.axiSMasterVifCam5.tdata),   
			.s_axis_video_TUSER4  (hwTesterTopModuleVif.axiSMasterVifCam5.tuser),  
			.s_axis_video_TLAST4  (hwTesterTopModuleVif.axiSMasterVifCam5.tlast),   
			
			.s_axis_video_TVALID5 (hwTesterTopModuleVif.axiSMasterVifCam6.tvalid),   
			.s_axis_video_TREADY5 (hwTesterTopModuleVif.axiSMasterVifCam6.tready),   
			.s_axis_video_TDATA5  (hwTesterTopModuleVif.axiSMasterVifCam6.tdata),   
			.s_axis_video_TUSER5  (hwTesterTopModuleVif.axiSMasterVifCam6.tuser),   
			.s_axis_video_TLAST5  (hwTesterTopModuleVif.axiSMasterVifCam6.tlast),   
			
			.m_axis_video_TVALID0 (hwTesterTopModuleVif.axiSSlaveVifCam1.tvalid),   
			.m_axis_video_TREADY0 (hwTesterTopModuleVif.axiSSlaveVifCam1.tready),   
			.m_axis_video_TDATA0  (hwTesterTopModuleVif.axiSSlaveVifCam1.tdata),   
			.m_axis_video_TUSER0  (hwTesterTopModuleVif.axiSSlaveVifCam1.tuser),   
			.m_axis_video_TLAST0  (hwTesterTopModuleVif.axiSSlaveVifCam1.tlast), 
			
			.m_axis_video_TVALID1 (hwTesterTopModuleVif.axiSSlaveVifCam2.tvalid),   
			.m_axis_video_TREADY1 (hwTesterTopModuleVif.axiSSlaveVifCam2.tready),   
			.m_axis_video_TDATA1  (hwTesterTopModuleVif.axiSSlaveVifCam2.tdata),   
			.m_axis_video_TUSER1  (hwTesterTopModuleVif.axiSSlaveVifCam2.tuser),   
			.m_axis_video_TLAST1  (hwTesterTopModuleVif.axiSSlaveVifCam2.tlast), 
			
			.m_axis_video_TVALID2 (hwTesterTopModuleVif.axiSSlaveVifCam3.tvalid),   
			.m_axis_video_TREADY2 (hwTesterTopModuleVif.axiSSlaveVifCam3.tready),   
			.m_axis_video_TDATA2  (hwTesterTopModuleVif.axiSSlaveVifCam3.tdata),   
			.m_axis_video_TUSER2  (hwTesterTopModuleVif.axiSSlaveVifCam3.tuser),   
			.m_axis_video_TLAST2  (hwTesterTopModuleVif.axiSSlaveVifCam3.tlast),
			
			.m_axis_video_TVALID3 (hwTesterTopModuleVif.axiSSlaveVifCam4.tvalid),   
			.m_axis_video_TREADY3 (hwTesterTopModuleVif.axiSSlaveVifCam4.tready),   
			.m_axis_video_TDATA3  (hwTesterTopModuleVif.axiSSlaveVifCam4.tdata),   
			.m_axis_video_TUSER3  (hwTesterTopModuleVif.axiSSlaveVifCam4.tuser),   
			.m_axis_video_TLAST3  (hwTesterTopModuleVif.axiSSlaveVifCam4.tlast),
			
			.m_axis_video_TVALID4 (hwTesterTopModuleVif.axiSSlaveVifCam5.tvalid),   
			.m_axis_video_TREADY4 (hwTesterTopModuleVif.axiSSlaveVifCam5.tready),   
			.m_axis_video_TDATA4  (hwTesterTopModuleVif.axiSSlaveVifCam5.tdata),   
			.m_axis_video_TUSER4  (hwTesterTopModuleVif.axiSSlaveVifCam5.tuser),   
			.m_axis_video_TLAST4  (hwTesterTopModuleVif.axiSSlaveVifCam5.tlast), 
			
			.m_axis_video_TVALID5 (hwTesterTopModuleVif.axiSSlaveVifCam6.tvalid),   
			.m_axis_video_TREADY5 (hwTesterTopModuleVif.axiSSlaveVifCam6.tready),   
			.m_axis_video_TDATA5  (hwTesterTopModuleVif.axiSSlaveVifCam6.tdata),   
			.m_axis_video_TUSER5  (hwTesterTopModuleVif.axiSSlaveVifCam6.tuser),   
			.m_axis_video_TLAST5  (hwTesterTopModuleVif.axiSSlaveVifCam6.tlast), 
			
			.S00_AXI_ARESET_OUT_N (),
			.S00_AXI_ACLK (hwTesterTopModuleVif.axiClk),
			.S00_AXI_AWID (1'b1),
			.S00_AXI_AWADDR (hwTesterTopModuleVif.axiBRAMVifCam1.awaddr),
			.S00_AXI_AWLEN (8'h00),
			.S00_AXI_AWSIZE (3'b010),
			.S00_AXI_AWBURST (2'b00),
			.S00_AXI_AWLOCK (1'b0),
			.S00_AXI_AWCACHE (4'h0),
			.S00_AXI_AWPROT (hwTesterTopModuleVif.axiBRAMVifCam1.awprot),
			.S00_AXI_AWQOS (4'h0),
			.S00_AXI_AWVALID (hwTesterTopModuleVif.axiBRAMVifCam1.awvalid),
			.S00_AXI_AWREADY (hwTesterTopModuleVif.axiBRAMVifCam1.awready),
			.S00_AXI_WDATA (hwTesterTopModuleVif.axiBRAMVifCam1.wdata),
			.S00_AXI_WSTRB (hwTesterTopModuleVif.axiBRAMVifCam1.wstrb),
			.S00_AXI_WLAST (1'b1),
			.S00_AXI_WVALID (hwTesterTopModuleVif.axiBRAMVifCam1.wvalid),
			.S00_AXI_WREADY (hwTesterTopModuleVif.axiBRAMVifCam1.wready),
			.S00_AXI_BID (),
			.S00_AXI_BRESP (hwTesterTopModuleVif.axiBRAMVifCam1.bresp),
			.S00_AXI_BVALID (hwTesterTopModuleVif.axiBRAMVifCam1.bvalid),
			.S00_AXI_BREADY (hwTesterTopModuleVif.axiBRAMVifCam1.bready),
			.S00_AXI_ARID (1'b1),
			.S00_AXI_ARADDR (hwTesterTopModuleVif.axiBRAMVifCam1.araddr),
			.S00_AXI_ARLEN (8'h00),
			.S00_AXI_ARSIZE (3'b010),
			.S00_AXI_ARBURST (2'b00),
			.S00_AXI_ARLOCK (1'b0),
			.S00_AXI_ARCACHE (4'h0),
			.S00_AXI_ARPROT (hwTesterTopModuleVif.axiBRAMVifCam1.arprot),
			.S00_AXI_ARQOS (4'h0),
			.S00_AXI_ARVALID (hwTesterTopModuleVif.axiBRAMVifCam1.arvalid),
			.S00_AXI_ARREADY (hwTesterTopModuleVif.axiBRAMVifCam1.arready),
			.S00_AXI_RID (),
			.S00_AXI_RDATA (hwTesterTopModuleVif.axiBRAMVifCam1.rdata),
			.S00_AXI_RRESP (hwTesterTopModuleVif.axiBRAMVifCam1.rresp),
			.S00_AXI_RLAST (),
			.S00_AXI_RVALID (hwTesterTopModuleVif.axiBRAMVifCam1.rvalid),
			.S00_AXI_RREADY (hwTesterTopModuleVif.axiBRAMVifCam1.rready)
			//Control ports
							   
		);

	
	//==============================================
	//                  TOP INTERFACE
	//==============================================
	hwTesterTopModuleIf hwTesterTopModuleVif(
			.config_db_name("hwTesterTopModuleVif"),
			.axiClk(axiClk),
			.resetN(sysReset),
			.cpuRst(cpuRst)
		);
	
	
	// Axi Inst if any
	axi4_lite_master_vip AxiInstCam1(
			.aclk             (axiClk),
			.aresetn          (sysReset),
			// write address
			.m_axi_awaddr     (hwTesterTopModuleVif.axiBRAMVifCam1.awaddr),
			.m_axi_awprot     (hwTesterTopModuleVif.axiBRAMVifCam1.awprot),
			.m_axi_awvalid    (hwTesterTopModuleVif.axiBRAMVifCam1.awvalid),
			.m_axi_awready    (hwTesterTopModuleVif.axiBRAMVifCam1.awready),
   		
			//write data
			.m_axi_wdata      (hwTesterTopModuleVif.axiBRAMVifCam1.wdata),
			.m_axi_wstrb      (hwTesterTopModuleVif.axiBRAMVifCam1.wstrb),
			.m_axi_wvalid     (hwTesterTopModuleVif.axiBRAMVifCam1.wvalid),
			.m_axi_wready     (hwTesterTopModuleVif.axiBRAMVifCam1.wready),
 
    		
			//write response
			.m_axi_bresp      (hwTesterTopModuleVif.axiBRAMVifCam1.bresp),
			.m_axi_bvalid     (hwTesterTopModuleVif.axiBRAMVifCam1.bvalid),
			.m_axi_bready     (hwTesterTopModuleVif.axiBRAMVifCam1.bready),
    		
			// read address
			.m_axi_araddr     (hwTesterTopModuleVif.axiBRAMVifCam1.araddr),
			.m_axi_arprot     (hwTesterTopModuleVif.axiBRAMVifCam1.arprot),
			.m_axi_arvalid    (hwTesterTopModuleVif.axiBRAMVifCam1.arvalid),
			.m_axi_arready    (hwTesterTopModuleVif.axiBRAMVifCam1.arready),
   		
			//read data
			.m_axi_rdata      (hwTesterTopModuleVif.axiBRAMVifCam1.rdata),   
			.m_axi_rresp      (hwTesterTopModuleVif.axiBRAMVifCam1.rresp),   
			.m_axi_rvalid     (hwTesterTopModuleVif.axiBRAMVifCam1.rvalid),  
			.m_axi_rready     (hwTesterTopModuleVif.axiBRAMVifCam1.rready)
		);	

	

	//==============================================
	//                 SVA
	//==============================================
//	hwTesterSVA sva(
//			.clk(axiClk),
//			.rst_n(sysReset),
//			.cpuRst(cpuRst),
//			.treadySlave(hwTesterTopModuleVif.axiSSlaveVifCam1.tready),
//			.tvalidSlave(hwTesterTopModuleVif.axiSSlaveVifCam1.tvalid),
//			 .tuserSlave(hwTesterTopModuleVif.axiSSlaveVifCam1.tuser),
//			 .tlastSlave(hwTesterTopModuleVif.axiSSlaveVifCam1.tlast),
//			 .treadyMaster(hwTesterTopModuleVif.axiSMasterVifCam1.tready),
//			 .tvalidMaster(hwTesterTopModuleVif.axiSMasterVifCam1.tvalid),
//			 .tuserMaster(hwTesterTopModuleVif.axiSMasterVifCam1.tuser),
//			 .tlastMaster(hwTesterTopModuleVif.axiSMasterVif.tlast),
//			 .pixelCounterIn(hwTesterTopModuleVif.axiSSlaveVifCam1.pixelCounterIn),
//			 .pixelCounterOut(hwTesterTopModuleVif.axiSSlaveVifCam1.pixelCounterOut),
//			 .csmControl(hwTesterTopModuleVif.hwTesterVif.csmControl),
//			 .csmStatus(hwTesterTopModuleVif.hwTesterVif.csmStatus),
//			 .errorInjection(hwTesterTopModuleVif.errorInjection)
//			 );
	
	
	
	
	

	initial begin 
		run_test();
	end //initial
	
endmodule

In reply to nnn314:

In all my UVM projects I have séen a slow down comimg directly out of the UVM testbench.
The typical candidates slowing down the simulation are any assertions and the DUT.
You should check this.

In reply to chr_sue:

Thanks for replying. So, I turned assertions completely off. both immediate and concurrent and it didn’t help.
Just to understand, you are referring to the dut causing this slowness as in I should see a very large delta between I/P to O/P in terms of time?

In reply to nnn314:

Yes, this is what I mean.
To check this you could also comment-out the DUT instantiation in your toplevel UVM testbench module.

In reply to chr_sue:

Will do, Thanks!