| @@ -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 | |||||