当前位置:   article > 正文

FWFT FIFO的读写操作

fwft

FWFT:First Word Fall Through的缩写,是Xilinx的说法,Altera对应的概念是Show-ahead synchronous(SASO)。即数据在rdreq有效之前就有效。
需要注意的是当rdreq连续时,容易多读一个数据,所以读时需要对将空(almost_empty)进行判读,在FIFO BFM的代码读任务里有如下代码:

  1. 读取:
  2. if(fifo_rden==1'b1)
  3.     fifo_rden<=~fifo_alempty;
  4. else
  5.     fifo_rden<=~fifo_empty;
  6. 写入:
  7. if(fifo_wren==1'b1)
  8.     fifo_wren<=~fifo_alfull;
  9. else
  10.     fifo_wren<=~fifo_empty;

代码的目的就是在将空时读一次停一次或者写一次停一次。

另外一种做法:

  1. //寄存型读信号产生
  2. always @(posedge rd_clk) begin
  3. if(~rst_n) begin
  4. rd_en <= 1'b0;
  5. end else if (~almost_empty) begin
  6. rd_en <= 1'b1;
  7. end else begin
  8. rd_en <= ~empty & ~rden;
  9. end
  10. end

对应的写代码:

  1. //寄存型写信号产生
  2. always @(posedge wr_clk) begin
  3. if(~rst_n) begin
  4. wr_en <= 1'b0;
  5. end else if (~almost_full) begin
  6. wr_en <= 1'b1;
  7. end else begin
  8. wr_en <= ~full & ~wren;
  9. end
  10. end

特殊的情况下,例如如果不是连续的读写操作,例如在状态机里读一个数据,然后跳到下一个状态,则可以不用判读将空标志:

  1. ST1:
  2.     begin
  3.         if(fifo_empty==1'b0)
  4.         begin
  5.             fifo_rden <= 1'b1;
  6.         end
  7.         next_state <= ST2;
  8.     end
  9.  ST2:
  10.     begin
  11.         fifo_rden <= 1'b0;
  12.         next_state <= ST3;
  13.     end
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/747625
推荐阅读
相关标签
  

闽ICP备14008679号