//base sequence : things common to all sequence class axi_base_seq extends uvm_sequence #(axi_tx); uvm_phase phase; `uvm_object_utils(axi_base_seq) `NEW_OBJ task pre_body(); //raise objection phase = get_starting_phase(); if (phase !=null) begin phase.raise_objection(this); phase.phase_done.set_drain_time(this,100); end endtask task post_body(); //drop objection if (phase !=null) begin phase.drop_objection(this); end endtask endclass //functional sequence: things specific to current sequence class axi_wr_rd_seq extends axi_base_seq; axi_tx tx; axi_tx txQ[$]; `uvm_object_utils(axi_wr_rd_seq) `NEW_OBJ task body(); //write/read to same loc repeat(1) begin `uvm_do_with (req, {req.wr_rd==1;}); tx = new req; //shallow copy txQ.push_back(tx); end //read_tx repeat(1) begin tx = txQ.pop_front(); `uvm_do_with (req, {req.wr_rd==0; req.burst_len ==tx.burst_len; req.addr == tx.addr;}); end endtask endclass