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