当前位置:   article > 正文

FPGA之FIFO篇_fpga fifo

fpga fifo

FIFO简介

  • first-in-first-out
  • FIFO一般用于不同时钟域之间的数据传输,也常用来实现不同位宽的接口的数据匹配
  • fifo从输入时钟 的角度来分,有两种类型:单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO).
  • FIFO的常见参数:
    • FIFO的宽度:FIFO一次独写操作的数据位宽N
    • FIFO的深度 :FIFO可以存储多少个宽度为N位的数据
    • 空标志:对于双时钟FIFO又分为读空标志rdempty和写空标志wrempty。FIFO已空或将要空时由FIFO的状态电路送出的一个信号, 以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出。
    • 满标志:对于双时钟FIFO又分为读满标志rdfull和写满标志wrfull。FIFO已满或将要写满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出。
    • 读时钟:读FIFO时所遵循的时钟,在每个时钟的上升沿触发。
    • 写时钟:写FIFO时所遵循的时钟,在每个时钟的上升沿触发。

实验任务

  • 生成FIFO IP core  ,并实现FIFO为空时就开始向FIFO中写入自加数据,直到FIFO写满为止;当FIFO写满时则开始从FIFO中读出数据,直到FIFO读空为止。

硬件接口

软件框图

  1. module ip_fifo(
  2. input sys_clk,
  3. input sys_rst_n
  4. );
  5. wire wrreq;
  6. wire [7:0] data;
  7. wire wrempty;
  8. wire wrfull;
  9. wire wrusedw;
  10. wire rdreq;
  11. wire [7:0] q;
  12. wire rdempty;
  13. wire rdfull;
  14. wire rdusedw;
  15. /****************************************
  16. main code
  17. ****************************************/
  18. fifo_rd u_fifo_rd(
  19. .sys_clk (sys_clk ),
  20. .sys_rst_n (sys_rst_n ),
  21. .rdreq (rdreq ),
  22. .data (q ),
  23. .rdempty (rdempty ),
  24. .rdfull (rdfull )
  25. );
  26. fifo_wr u_fifo_wr(
  27. //system clock and reset
  28. .sys_clk(sys_clk),
  29. .sys_rst_n(sys_rst_n),
  30. //user interface
  31. .wrempty(wrempty),
  32. .wrfull(wrfull),
  33. .data(data),
  34. .wrreq(wrreq) // write request
  35. );
  36. fifo fifo_inst (
  37. .wrclk ( sys_clk ),
  38. .wrreq ( wrreq ),
  39. .data ( data ),
  40. .wrempty ( wrempty ),
  41. .wrfull ( wrfull ),
  42. .wrusedw ( wrusedw ),
  43. .rdclk ( sys_clk ),
  44. .rdreq ( rdreq),
  45. .q ( q),
  46. .rdempty ( rdempty ),
  47. .rdfull ( rdfull),
  48. .rdusedw ( rdusedw )
  49. );
  50. endmodule

 

  1. module fifo_wr(
  2. //system clock and reset
  3. input sys_clk,
  4. input sys_rst_n,
  5. //user interface
  6. input wrempty, // ip core cause
  7. input wrfull, // ip core cause
  8. output reg [7:0] data,
  9. output wrreq // write request
  10. );
  11. //reg define
  12. reg wrreq_t;
  13. reg [1:0] flow_cnt;
  14. /**************************************
  15. ** main code
  16. **************************************/
  17. assign wrreq=~wrfull & wrreq_t; //fifo not full and write request
  18. always @(posedge sys_clk or negedge sys_rst_n) begin
  19. if(!sys_rst_n)begin
  20. wrreq_t<=1'b0;
  21. data<=8'd0;
  22. flow_cnt<=2'd0;
  23. end
  24. else begin
  25. case(flow_cnt)
  26. 2'd0: begin
  27. if(wrempty)begin
  28. wrreq_t<=1'b1;
  29. flow_cnt<=flow_cnt+1'b1;
  30. end
  31. else
  32. flow_cnt<=flow_cnt;
  33. end
  34. /
  35. 2'd1: begin
  36. if(wrfull)begin
  37. wrreq_t<=1'b0;
  38. data<=8'd0;
  39. flow_cnt<=2'd0;
  40. end
  41. else begin
  42. wrreq_t<=1'b1;
  43. data<=data+1'b1;
  44. end
  45. end
  46. /*************************************/
  47. default : flow_cnt<=2'd0;
  48. endcase
  49. end
  50. end
  51. endmodule

 

  1. module fifo_rd(
  2. input sys_clk,
  3. input sys_rst_n,
  4. input [7:0] data,
  5. input rdfull,
  6. input rdempty,
  7. output rdreq //
  8. );
  9. //reg define
  10. reg rdreq_t;
  11. reg [7:0] data_fifo;
  12. reg [1:0] flow_cnt ;
  13. assign rdreq=~rdempty & rdreq_t;
  14. //fifo read data
  15. always @(posedge sys_clk or negedge sys_rst_n)begin
  16. if(!sys_rst_n)begin
  17. rdreq_t<=1'b0;
  18. data_fifo<=8'd0;
  19. end
  20. else begin
  21. case(flow_cnt)
  22. 2'd0:begin
  23. if(rdfull)begin
  24. rdreq_t<=1'b1;
  25. flow_cnt<=flow_cnt+1'b1;
  26. end
  27. else
  28. flow_cnt<=flow_cnt;
  29. end
  30. 2'd1:begin
  31. if(rdempty)begin
  32. rdreq_t<=1'b0;
  33. data_fifo<=8'd0;
  34. flow_cnt<=2'd0;
  35. end
  36. else begin
  37. rdreq_t<=1'b1;
  38. data_fifo<=data;
  39. end
  40. end
  41. default: flow_cnt<=2'd0;
  42. endcase
  43. end
  44. end
  45. endmodule

例化IP core 详情参见正点原子开拓者开发板手册

仿真结果

实验总结

在实验过程中主要注意写请求和读请求的产生,还有读模块和写模块与IP core的配合关系  以及读写的转换时刻。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/879372
推荐阅读
相关标签
  

闽ICP备14008679号