| @@ -0,0 +1,166 @@ | |||||
| class axi_base_test extends uvm_test; | |||||
| `uvm_component_utils(axi_base_test) | |||||
| // Components | |||||
| axi_env env; | |||||
| axi_write_seq#(.D_WIDTH(D_WIDTH), .A_WIDTH(A_WIDTH)) wr_seq; | |||||
| axi_read_seq#(.D_WIDTH(D_WIDTH), .A_WIDTH(A_WIDTH)) rd_seq; | |||||
| // variables | |||||
| env_config env_cfg; | |||||
| test_config test_cfg; | |||||
| function new(string name, uvm_component parent); | |||||
| super.new(name, parent); | |||||
| test_cfg = new("test_cfg"); | |||||
| test_cfg.no_write_cases = 1; | |||||
| test_cfg.no_read_cases = 1; | |||||
| endfunction //new() | |||||
| // Function: build_phase | |||||
| extern function void build_phase(uvm_phase phase); | |||||
| // Function: end_of_elaboration_phase | |||||
| extern function void end_of_elaboration_phase(uvm_phase phase); | |||||
| // Function: run_phase | |||||
| extern task run_phase(uvm_phase phase); | |||||
| endclass //axi_base_test extends uvm_test | |||||
| function void axi_base_test::build_phase(uvm_phase phase); | |||||
| test_cfg.burst_type = 1; | |||||
| uvm_config_db#(test_config)::set(null, "uvm_test_top.seq", "config", test_cfg); | |||||
| wr_seq = new("wr_seq"); | |||||
| rd_seq = new("rd_seq"); | |||||
| env = axi_env::type_id::create("env", this); | |||||
| endfunction: build_phase | |||||
| function void axi_base_test::end_of_elaboration_phase(uvm_phase phase); | |||||
| super.end_of_elaboration_phase(phase); | |||||
| uvm_top.print_topology(); | |||||
| endfunction: end_of_elaboration_phase | |||||
| task axi_base_test::run_phase(uvm_phase phase); | |||||
| phase.raise_objection(this); | |||||
| fork | |||||
| wr_seq.start(env.master.w_seqr); | |||||
| #200 | |||||
| rd_seq.start(env.master.r_seqr); | |||||
| // end | |||||
| join | |||||
| phase.drop_objection(this); | |||||
| endtask: run_phase | |||||
| // **************************************************************************************** | |||||
| // Directed Test Cases | |||||
| // **************************************************************************************** | |||||
| class axi_write_test extends axi_base_test; | |||||
| `uvm_component_utils(axi_write_test) | |||||
| function new(string name, uvm_component parent); | |||||
| super.new(name, parent); | |||||
| endfunction //new() | |||||
| function void build_phase(uvm_phase phase); | |||||
| super.build_phase(phase); | |||||
| endfunction: build_phase | |||||
| function void end_of_elaboration_phase(uvm_phase phase); | |||||
| super.end_of_elaboration_phase(phase); | |||||
| endfunction: end_of_elaboration_phase | |||||
| task run_phase(uvm_phase phase); | |||||
| phase.raise_objection(this); | |||||
| wr_seq.start(env.master.w_seqr); | |||||
| phase.drop_objection(this); | |||||
| endtask: run_phase | |||||
| endclass //write_test extends axi_base_test | |||||
| class axi_read_test extends axi_base_test; | |||||
| `uvm_component_utils(axi_read_test) | |||||
| function new(string name, uvm_component parent); | |||||
| super.new(name, parent); | |||||
| endfunction //new() | |||||
| function void build_phase(uvm_phase phase); | |||||
| super.build_phase(phase); | |||||
| endfunction: build_phase | |||||
| function void end_of_elaboration_phase(uvm_phase phase); | |||||
| super.end_of_elaboration_phase(phase); | |||||
| endfunction: end_of_elaboration_phase | |||||
| task run_phase(uvm_phase phase); | |||||
| phase.raise_objection(this); | |||||
| wr_seq.start(env.master.w_seqr); | |||||
| // rd_seq.start(env.master.r_seqr); | |||||
| phase.drop_objection(this); | |||||
| endtask: run_phase | |||||
| endclass //write_test extends axi_base_test | |||||
| class axi_fixed_test extends axi_base_test; | |||||
| `uvm_component_utils(axi_fixed_test) | |||||
| function new(string name, uvm_component parent); | |||||
| super.new(name, parent); | |||||
| endfunction //new() | |||||
| function void build_phase(uvm_phase phase); | |||||
| test_cfg.burst_type = 0; | |||||
| uvm_config_db#(test_config)::set(null, "uvm_test_top.seq", "config", test_cfg); | |||||
| wr_seq = new("wr_seq"); | |||||
| rd_seq = new("rd_seq"); | |||||
| env = axi_env::type_id::create("env", this); | |||||
| endfunction: build_phase | |||||
| task run_phase(uvm_phase phase); | |||||
| super.run_phase(phase); | |||||
| endtask: run_phase | |||||
| endclass //axi_fixed_test extends axi_base_test | |||||
| class axi_incr_test extends axi_base_test; | |||||
| `uvm_component_utils(axi_incr_test) | |||||
| function new(string name, uvm_component parent); | |||||
| super.new(name, parent); | |||||
| endfunction //new() | |||||
| function void build_phase(uvm_phase phase); | |||||
| test_cfg.burst_type = 2; | |||||
| uvm_config_db#(test_config)::set(null, "uvm_test_top.seq", "config", test_cfg); | |||||
| wr_seq = new("wr_seq"); | |||||
| rd_seq = new("rd_seq"); | |||||
| env = axi_env::type_id::create("env", this); | |||||
| endfunction: build_phase | |||||
| task run_phase(uvm_phase phase); | |||||
| super.run_phase(phase); | |||||
| endtask: run_phase | |||||
| endclass //axi_fixed_test extends axi_base_test | |||||
| class axi_wrap_test extends axi_base_test; | |||||
| `uvm_component_utils(axi_wrap_test) | |||||
| function new(string name, uvm_component parent); | |||||
| super.new(name, parent); | |||||
| endfunction //new() | |||||
| function void build_phase(uvm_phase phase); | |||||
| test_cfg.burst_type = 2; | |||||
| uvm_config_db#(test_config)::set(null, "uvm_test_top.seq", "config", test_cfg); | |||||
| wr_seq = new("wr_seq"); | |||||
| rd_seq = new("rd_seq"); | |||||
| env = axi_env::type_id::create("env", this); | |||||
| endfunction: build_phase | |||||
| task run_phase(uvm_phase phase); | |||||
| super.run_phase(phase); | |||||
| endtask: run_phase | |||||
| endclass //axi_fixed_test extends axi_base_test | |||||