From 21c59b9753e78eb1f989fea735cbc5ea31d5acd7 Mon Sep 17 00:00:00 2001 From: mounika Date: Wed, 8 May 2024 12:13:18 +0100 Subject: [PATCH] seq --- axi_seq.sv | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 axi_seq.sv diff --git a/axi_seq.sv b/axi_seq.sv new file mode 100644 index 0000000..2d13ad9 --- /dev/null +++ b/axi_seq.sv @@ -0,0 +1,117 @@ + +//write sequence +class axi_wr_seq extends uvm_sequence #(axi_seq_item); + `uvm_object_utils(axi_wr_seq) + + seq_item txn; + + function new(string name="axi_wr_seq"); + super.new(name); + endfunction + + task body(); + txn=seq_item::type_id::create(txn); + start_item(txn); + assert(txn.randomize() with {txn.write==1;txn.awaddr==0x04;txn.wdata==0x2b1a;}); + finish_item(txn); + endtask + +endclass + +//read sequence +class axi_rd_seq extends uvm_sequence #axi_(seq_item); + `uvm_object_utils(axi_rd_seq) + + seq_item txn; + + function new(string name="axi_rd_seq"); + super.new(name); + endfunction + + task body(); + txn=seq_item::type_id::create(txn); + start_item(txn); + assert(txn.randomize() with {txn.write==0;txn.araddr==0x04;}); + finish_item(txn); + endtask + +endclass + +//unaligned sequence +class axi_rd_seq extends uvm_sequence #(axi_seq_item); + `uvm_object_utils(axi_rd_seq) + + seq_item txn; + + function new(string name="axi_rd_seq"); + super.new(name); + endfunction + + task body(); + txn=seq_item::type_id::create(txn); + // if(txn.awaddr%2**awsize!=0) + // begin + txn.aligned_addr.constraint_mode(0); + // end + start_item(txn); + assert(txn.randomize() with {txn.write==1;txn.awaddr==0x07;txn.awsize==3;}); + finish_item(txn); + endtask + +endclass + + +//locked access sequence +class axi_locked_access_seq extends uvm_sequence #(axi_seq_item); + `uvm_object_utils(axi_locked_acess_seq) + + seq_item txn; + + function new(string name="axi_locked_access_seq"); + super.new(name); + endfunction + + task body(); + begin + txn=seq_item::type_id::create(txn); + start_item(txn); + assert(txn.randomize() with {txn.write==1;txn.awaddr==0x04;txn.awlock==2'b10;txn.awid==01;}); + finish_item(txn); + end + + begin + txn=seq_item::type_id::create(txn); + start_item(txn); + assert(txn.randomize() with {txn.write==1;txn.awaddr==0x04;txn.awlock==2'b10;txn.awid==02;}); + finish_item(txn); + end + + + endtask + +endclass + + + +//write read sequence +class axi_rd_seq extends uvm_sequence #(axi_seq_item); + `uvm_object_utils(axi_rd_seq) + + seq_item txn; + axi_wr_seq wr_seq; + axi_rd_seq rd_seq; + + + function new(string name="axi_rd_seq"); + super.new(name); + endfunction + + task body(); + begin + txn=seq_item::type_id::create(txn); + `uvm_do(wr_seq); + `uvm_do(rd_seq); + end + endtask + +endclass