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