RAL hang with Layered Sequences

I am trying to use RAL with layered sequences. In this case, a high level SPI packet is translated to basic SPI packets.

Translation Seq


class hl_2_spi_translation_seq extends uvm_sequence;
uvm_sequencer #(spi_hl_transfer) hl_seqr;
spi_sequencer                    spi_seqr;

...

virtual task body();
spi_hl_transfer   hl_seq;

forever begin
    hl_seqr.get_next_item(hl_seq);
    
    if(hl_seq.kind==UVM_READ) begin
    
      do_read(hl_seq);
    end
    else if (hl_seq.kind==UVM_WRITE) begin // UVM_WRITE
      
      do_write(hl_seq);
    end
    else begin end//kept for future use
    
    `uvm_info(get_name(),"finishing hl_seq item",UVM_MEDIUM)
    hl_seqr.item_done(hl_seq);

  end//forever

  endtask: body

endclass

Env is as shown below:


class top_env extends uvm_env;
spi_env                      I_spi_env;
spi_hl_reg_adapter           I_spi_hl_reg_adapter;
uvm_sequencer #(spi_hl_transfer,spi_hl_transfer) I_spi_hl_sequencer;

function build_phase(uvm_phase phase);
...
   I_spi_env = spi_env::type_id::create("I_spi_env", this);
   I_spi_hl_reg_adapter = spi_hl_reg_adapter::type_id::create("I_spi_hl_reg_adapter", this);
   I_spi_hl_sequencer   = uvm_sequencer#(spi_hl_transfer,spi_hl_transfer)::type_id::create("I_spi_hl_sequencer",this);
...
endfunction

function connect_phase(uvm_phase phase);
...
regmodel.default_map.set_sequencer(I_spi_hl_sequencer,I_spi_hl_reg_adapter);
...
endfunction


hl_seqr is High Level Sequencer here, this is connected to RAL model’s default map along with its adapter.

Now when I try doing:

 regmodel.reg_A.read(data,status); 

The sequence hangs after calling above read(). I see that translation sequence completed the first read transfer. Please suggest how can I proceed on debugging.

In reply to rajatk:

Found the issue, RAL was hanging in uvm_reg_map.svh class.



task uvm_reg_map::do_bus_read (uvm_reg_item rw,
                               uvm_sequencer_base sequencer,
                               uvm_reg_adapter adapter);

  ...
bus_req = adapter.reg2bus(rw_access);
  ...
rw.parent.finish_item(bus_req);
bus_req.end_event.wait_on(); // here was the hang !!
  ...
endtask

After adding hl_seqr.end_tr(hl_seq) in translation sequence hang issue was resolved.