Hi,
I’m seeing a case where a particular sequence is not getting arbitrated by the sequencer.
The detailed scenario is as follows,
I have sequence 1 and sequence 2 performing some register write operation. Both the sequences are run through same sequencer. But there exists some synchronization between two sequences. The two sequences run in infinite loop till some test end condition is met. But when two sequences are started in a fork join block, sequence 1 is waiting for a flag to be set by sequence 2 and sequence 2 wants to do some register writes before setting the flag. But the register write operation is not getting arbitrated by the sequencer. When I debugged in detail, I found out that register operation sits indefinitely inside arbitration queue.
Virtual sequence,
fork
run_seq1();
run_seq2();
join
sequence1,
forever begin
if (flag) begin
do some register writes
if (test_end_cond)
break;
end
end
sequence2,
forever begin
do some register writes
flag = 1
if (test_end_cond)
break;
end
In sequence2, execution is stuck at register writes because, the writes are not getting arbitrated from the sequencer. In addition, sequence 1 has not generated any register operations as it is waiting for flag to be set. One observation is when I removed flag condition and allow both sequences to run parallel, the register operations are being arbitrated. Not able to identify the problem in this explained scenario.