In reply to Sandeep Gaur:
Few changes are need in your code:
- driver : driver need to send the response back
- sequence : sequence need to collect the response for each transaction
//Change in driver
forever
begin //{
spi_trans spi_seq_item;
seq_item_port.get_next_item(spi_seq_item);
/*...other code ... */
//Need to send the response back which have read data
//seq_item_port.item_done();
seq_item_port.item_done(spi_seq_item);
end //}
//change in sequence
class spi_sequence extends uvm_sequence#(spi_trans);
/*...other code ... */
task body();
spi_trans spi_seq_item;
for(int i=0; i<2; i=i+1)
begin //{
spi_seq_item = spi_trans::type_id::create("spi_seq_item");
start_item(spi_seq_item);
case(i)
0 : begin //{
void'(spi_seq_item.randomize() with {pkt_type == WRITE; bit_order == MSB; mode == MODE0; address == 'h01F0; write_data == 'hAAAA_5555; });
end //}
1 : begin //{
void'(spi_seq_item.randomize() with {pkt_type == READ; bit_order == MSB; mode == MODE0; address == 'h01F0; });
end //}
endcase
`uvm_info(get_type_name(),$sformatf("SEQ_0: Write and read spi_seq_item.write_data : %0h spi_seq_item.read_data : %0h spi_seq_item.address : %0h", spi_seq_item.write_data, spi_seq_item.read_data, spi_seq_item.address),UVM_LOW)
finish_item(spi_seq_item);
//#10000ns;
//change : Need to collect the responce back for each transaction
get_response(rsp);
//This is not require if you use rsp.read_data, rsp.address etc.
$cast(spi_seq_item,rsp);
`uvm_info(get_type_name(),$sformatf("SEQ_1: Write and read spi_seq_item.write_data : %0h spi_seq_item.read_data : %0h spi_seq_item.address : %0h", spi_seq_item.write_data, spi_seq_item.read_data, spi_seq_item.address),UVM_LOW)
end //}
endtask : body
endclass : spi_sequence