Skip to content

Commit 4e902b9

Browse files
committed
Fix FIFO output pause logic
Signed-off-by: Alex Forencich <alex@alexforencich.com>
1 parent 7823b91 commit 4e902b9

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

rtl/axis_async_fifo.v

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -861,17 +861,20 @@ if (PAUSE_ENABLE) begin : pause
861861

862862
always @(posedge m_clk) begin
863863
if (FRAME_PAUSE) begin
864-
if (m_axis_tvalid && m_axis_tready) begin
865-
if (m_axis_tlast) begin
864+
if (pause_reg) begin
865+
// paused; update pause status
866+
pause_reg <= m_pause_req || s_pause_req_sync3_reg;
867+
end else if (m_axis_tvalid_out) begin
868+
// fame transfer; set frame bit
869+
pause_frame_reg <= 1'b1;
870+
if (m_axis_tready && m_axis_tlast) begin
871+
// end of frame; clear frame bit and update pause status
866872
pause_frame_reg <= 1'b0;
867873
pause_reg <= m_pause_req || s_pause_req_sync3_reg;
868-
end else begin
869-
pause_frame_reg <= 1'b1;
870-
end
871-
end else begin
872-
if (!pause_frame_reg) begin
873-
pause_reg <= m_pause_req || s_pause_req_sync3_reg;
874874
end
875+
end else if (!pause_frame_reg) begin
876+
// idle; update pause status
877+
pause_reg <= m_pause_req || s_pause_req_sync3_reg;
875878
end
876879
end else begin
877880
pause_reg <= m_pause_req || s_pause_req_sync3_reg;

rtl/axis_fifo.v

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -517,17 +517,20 @@ if (PAUSE_ENABLE) begin : pause
517517

518518
always @(posedge clk) begin
519519
if (FRAME_PAUSE) begin
520-
if (m_axis_tvalid && m_axis_tready) begin
521-
if (m_axis_tlast) begin
520+
if (pause_reg) begin
521+
// paused; update pause status
522+
pause_reg <= pause_req;
523+
end else if (m_axis_tvalid_out) begin
524+
// fame transfer; set frame bit
525+
pause_frame_reg <= 1'b1;
526+
if (m_axis_tready && m_axis_tlast) begin
527+
// end of frame; clear frame bit and update pause status
522528
pause_frame_reg <= 1'b0;
523529
pause_reg <= pause_req;
524-
end else begin
525-
pause_frame_reg <= 1'b1;
526-
end
527-
end else begin
528-
if (!pause_frame_reg) begin
529-
pause_reg <= pause_req;
530530
end
531+
end else if (!pause_frame_reg) begin
532+
// idle; update pause status
533+
pause_reg <= pause_req;
531534
end
532535
end else begin
533536
pause_reg <= pause_req;

0 commit comments

Comments
 (0)