FIFO批量取出后无法原位放回,先进入暂存区等待下一次消费

FIFO 只负责按顺序保存和交付数据。消费者执行会推进读指针的 readpop 后,这一批数据已经离开 FIFO。

消费者取出一批、下一次消费发生前,这批数据仍需保留。它应放在消费者自己的暂存区,不能重新写回 FIFO。这里的消费者指从 FIFO 取出数据、并负责把这批数据交给下一消费环节的模块。

FIFO 回写乱序与消费者暂存区对比

FIFO 出队后无法原位回填

初始顺序为 A、B、C、D。消费者取出 A、B 后,FIFO 中只剩 C、D。生产者继续写入 E、F,队列变成 C、D、E、F。

普通 FIFO 的 write 只能追加到队尾。此时写回 A、B,顺序会变成 C、D、E、F、A、B。这只是重新入队,原有位置已经丢失。

消费者暂存区接管当前批次

消费者取出 A、B 后,立即把这一批放进自己的暂存区,再从暂存区交给下一消费环节。FIFO 可以继续接收后续数据,暂存区不会参与队列的入队和出队。

下一次消费发生前,消费者不再从 FIFO 取下一批。暂存区里的同一批数据一直保留,直到被下一次消费取走。

下一次消费才释放消费者暂存区

下一次消费发生后,消费者清空暂存区,再从 FIFO 取下一批。下一次消费前,暂存区保持不变。

下一次消费只决定暂存区何时释放,不会回退 FIFO 的读指针,也不会把数据送回队列。

本文由 AI 辅助生成,可能存在错误或遗漏,请以实际资料和官方文档为准。