I am a newbie trying to learn UVM. I am trying to run the below code for my understanding. However, the sequence is not working and it is getting stuck at the request from the driver.
class mem_sequencer extends uvm_sequencer #(mem_seq_item);
`uvm_component_utils(mem_sequencer)
function new(string name, uvm_component parent);
super.new(name,parent);
endfunction
endclass
class mem_sequence extends uvm_sequence#(mem_seq_item);
`uvm_object_utils(mem_sequence)
function new(string name="mem_sequence");
super.new(name);
endfunction
virtual task body();
req=mem_seq_item::type_id::create("req");
wait_for_grant();
assert(req.randomize());
send_request(req);
// wait_for_item_done();
// get_response(rsp);
endtask
endclass
class mem_driver extends uvm_driver #(mem_seq_item);
`uvm_component_utils(mem_driver)
function new(string name, uvm_component parent);
super.new(name,parent);
endfunction
task run();
forever begin
seq_item_port.get_next_item(req);
$display("got instruction", $time);
end
endtask
endclass
module seq_item_tb;
mem_sequencer sequencer;
mem_driver driver;
mem_sequence sequence_s;
initial begin
sequencer=mem_sequencer::type_id::create("sequencer",null);
driver = mem_driver::type_id::create("driver",null);
sequence_s=mem_sequence::type_id::create("seq");
driver.seq_item_port.connect(sequencer.seq_item_export);
sequence_s.print();
fork
begin
run_test();
sequence_s.start(sequencer);
end
#2000 global_stop_request();
join
end
endmodule