|
| 1 | +class apb_error_addr_sequence extends uvm_sequence#(apb_transaction); |
| 2 | + `uvm_object_utils(apb_error_addr_sequence) |
| 3 | + |
| 4 | + int last_addr; |
| 5 | + |
| 6 | + //constructor |
| 7 | + function new(string name = "apb_error_addr_sequence"); |
| 8 | + super.new(name); |
| 9 | + endfunction |
| 10 | + |
| 11 | + virtual task body(); |
| 12 | + apb_transaction write_trans; |
| 13 | + apb_transaction read_trans; |
| 14 | + |
| 15 | + //generate the write transaction |
| 16 | + write_trans = apb_transaction::type_id::create("write_trans"); |
| 17 | + write_trans.PSEL = 1; |
| 18 | + write_trans.PWRITE = 1; |
| 19 | + write_trans.PENABLE = 1; |
| 20 | + //write_trans.PADDR = $urandom_range(0,25); |
| 21 | + //write_trans.PWDATA = $urandom_range(5,50); |
| 22 | + start_item(write_trans); |
| 23 | + write_trans.constraint_mode(0); |
| 24 | + assert(write_trans.randomize() with {PADDR >33;}); |
| 25 | + last_addr = write_trans.PADDR; |
| 26 | + `uvm_info("WSEQUENCE",$sformatf("Write Transaction Generated: PRESET =%0d, PSEL =%0d, PWRITE =%0d, PENABLE =%0d, ADDR =%0d, PWDATA =%0d ", write_trans.PRESET,write_trans.PSEL,write_trans.PWRITE,write_trans.PENABLE,write_trans.PADDR,write_trans.PWDATA),UVM_LOW) |
| 27 | + finish_item(write_trans); |
| 28 | + #5; |
| 29 | + |
| 30 | + //generate read transaction |
| 31 | + read_trans = apb_transaction::type_id::create("read_trans"); |
| 32 | + read_trans.PSEL = 1; |
| 33 | + read_trans.PWRITE = 0; |
| 34 | + read_trans.PENABLE = 1; |
| 35 | + read_trans.PADDR = last_addr; |
| 36 | + |
| 37 | + start_item(read_trans); |
| 38 | + `uvm_info("RSEQUENCE",$sformatf("Read Transaction Generated: PRESET =%0d, PSEL =%0d, PWRITE =%0d, PENABLE =%0d, ADDR =%0d ", read_trans.PRESET,read_trans.PSEL,read_trans.PWRITE,read_trans.PENABLE,read_trans.PADDR),UVM_LOW) |
| 39 | + finish_item(read_trans); |
| 40 | + |
| 41 | + endtask |
| 42 | +endclass |
0 commit comments