From 153c9e5bd9972f5894e85f43db8df4cac849015f Mon Sep 17 00:00:00 2001 From: kalal_mounika Date: Wed, 22 May 2024 11:57:27 +0000 Subject: [PATCH] Upload files to '' --- axi_test.sv | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 axi_test.sv diff --git a/axi_test.sv b/axi_test.sv new file mode 100644 index 0000000..e2ae8b6 --- /dev/null +++ b/axi_test.sv @@ -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