In reply to ravi_1822:
I did Try something like below, as automatic variable needs to be declatred inside fork…jone_none.
According to the below print msgs it looks like the things are happening in parallel but I got FATAL errors something like below.
Can you help me in resolving this.
fork
begin
for (int i = 0; i < p_sequencer.cfg.a_devices; i = i + 1) begin
$display(" 11 SAN_@@ a_devices %0d iteration %0d at time %0t",p_sequencer.cfg.a_devices,i,$time);
ram_seq[i] = wr_rd_random_v_seq::type_id::create($psprintf("SEQ[%0d]",i));
fork
begin
automatic int j =i;
`uvm_do_on(a_seq[j],p_sequencer.a_vseqr[j]);
end
join_none
end
end
11 SAN_@@ a_devices 2 iteration 0 at time 0
11 SAN_@@ a_devices 2 iteration 1 at time 0
UVM_FATAL ramb_wr_rd_v_seq.sv(3) @ 0: ********.a_seq[j] [DCLPSQ] *****.a_seq[j] Error casting p_sequencer, please verify that this sequence/sequence item is intended to execute on this type of sequencer
UVM_FATAL ramb_wr_rd_v_seq.sv(3) @ 0: ********.a_seq[j] [DCLPSQ] *****.a_seq[j] Error casting p_sequencer, please verify that this sequence/sequence item is intended to execute on this type of sequencer
where i have defined “wr_rd_random_v_seq” as below
class wr_rd_random_v_seq extends wr_rd_v_seq ;
uvm_object_utils(wr_rd_random_v_seq) uvm_declare_p_sequencer(a_wr_rd_v_seqr)
wr_rd_random_seq seq_port0;
wr_rd_random_seq seq_port1;
function new (string name = “wr_rd_random_v_seq”); // {
super.new(name);
endfunction : new // }
virtual task body(); // {
uvm_info ("SEQ","Starting Sequence wr_rd_random_v_seq",UVM_MEDIUM); fork // { begin // { uvm_do_on(seq_port0,p_sequencer.port_seqr[0]);
end // }
begin // {
`uvm_do_on(seq_port1,p_sequencer.port_seqr[1]);
end // }
join // }
endtask : body // }
endclass : wr_rd_random_v_seq // }