在需要读mem 的数据往fifo写时:
读mem的rd_en需要看fifo的将满信号, mem_rd_en = mem_data_valid & ~fifo_afull;
写fifo时,fifo的wr_en需要看fifo的满信号, fifo_wr_en = mem_rd_en_delay & ~fifo_full;
为了:
mem返回的读数据mem_rdata会相比 mem_rd_en 延迟几拍,
即 mem_rd_en_delay与mem_rdata同拍。fifo写将mem_rdata作为fifo的fifo_wdata。
所以需要fifo_full_th - fifo_aull_th个深度作为 延迟路径上的 数据缓存。
即 mem_rd_delay_num <= (fifo_full_th - fifo_aull_th); 则不会丢数据。
可以认为fifo_afull是 读mem的反压信号。 提前在fifo_full时,反压上游的数据发送。(mem上游,fifo下游)
Note:
mem的 wptr/rptr 一定要跟着 mem_rd_en/mem_wr_en增加,不能跟着mem_rd_en/mem_wr_en的打拍信号或者与其他逻辑信号处理后的信号 增加。
网友评论