@@ -209,6 +209,11 @@ package m_axis_sequencer_pkg;
209209 @ queue_empty;
210210 endtask : wait_empty_descriptor_queue
211211
212+ // clear queue
213+ task clear_descriptor_queue ();
214+ descriptor_q.delete ();
215+ endtask : clear_descriptor_queue
216+
212217 // generate transfer with transfer descriptors
213218 protected task generator ();
214219 `INFOV ((" generator start" ), 55 );
@@ -220,12 +225,13 @@ package m_axis_sequencer_pkg;
220225 fork
221226 begin
222227 @ disable_ev;
223- case (stop_policy)
224- STOP_POLICY_DESCRIPTOR_QUEUE : @ queue_empty;
225- STOP_POLICY_PACKET : @ packet_done;
226- STOP_POLICY_DATA_BEAT : @ beat_done;
227- STOP_POLICY_IMMEDIATE : ;
228- endcase
228+ if (this .queue_empty_sig == 0 )
229+ case (stop_policy)
230+ STOP_POLICY_DESCRIPTOR_QUEUE : @ queue_empty;
231+ STOP_POLICY_PACKET : @ packet_done;
232+ STOP_POLICY_DATA_BEAT : @ beat_done;
233+ STOP_POLICY_IMMEDIATE : ;
234+ endcase
229235 end
230236 forever begin
231237 if (descriptor_q.size () > 0 ) begin
@@ -269,6 +275,7 @@ package m_axis_sequencer_pkg;
269275 enabled = 0 ;
270276 byte_count = 0 ;
271277 - >> disable_ev;
278+ # 1step;
272279 endtask : stop
273280
274281 task run ();
@@ -351,7 +358,22 @@ package m_axis_sequencer_pkg;
351358 keep[i] = 1'b1 ;
352359 break ;
353360 end else
354- @ byte_stream_ev;
361+ fork begin
362+ fork
363+ @ byte_stream_ev;
364+ begin
365+ @ disable_ev;
366+ if (tc== 0 && i== 0 ) begin
367+ case (stop_policy)
368+ STOP_POLICY_PACKET : - >> packet_done;
369+ STOP_POLICY_DATA_BEAT : - >> beat_done;
370+ default : ;
371+ endcase
372+ end
373+ end
374+ join_any
375+ disable fork ;
376+ end join
355377 end
356378 DATA_GEN_MODE_AUTO_INCR : begin
357379 data[i] = byte_count++ ;
@@ -398,12 +420,13 @@ package m_axis_sequencer_pkg;
398420 fork
399421 begin
400422 @ disable_ev;
401- case (stop_policy)
402- STOP_POLICY_DESCRIPTOR_QUEUE : @ queue_empty;
403- STOP_POLICY_PACKET : @ packet_done;
404- STOP_POLICY_DATA_BEAT : @ beat_done;
405- STOP_POLICY_IMMEDIATE : ;
406- endcase
423+ if (this .queue_empty_sig == 0 )
424+ case (stop_policy)
425+ STOP_POLICY_DESCRIPTOR_QUEUE : @ queue_empty;
426+ STOP_POLICY_PACKET : @ packet_done;
427+ STOP_POLICY_DATA_BEAT : @ beat_done;
428+ STOP_POLICY_IMMEDIATE : ;
429+ endcase
407430 end
408431 forever begin
409432 @ data_av_ev;
0 commit comments