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.