基于xilinx的axi-fifo的应用

作为一个有一定工作经验(划水好多年)的FPGA工程师,很多模块都已经学习过或者使用过,但是如果让我重新实现,感觉又是一脸懵。因此,这是我发文档的原因。对于自己来说,这是一个总结归纳的过程,对读者,可能是一次解惑。

后期,将会逐渐分享DDR/ETH/SERDES/PCIe/SPI/FFT/FIR等等应用、调试经历。2022.8.4@gz

如果有疑惑的地方,可以站内信->共同探讨!

  • 概述

在FPGA的开发过程中,FIFO几乎是所有工程中都会使用的一个存储器IP。在很多场合,例如数据的跨时域处理,流水线命令等,可以说是最佳选择。

普通的FIFO(native),不管是在altera/xilinx/lattice等平台,一般使用者都非常熟悉。一般就是wren/rden/din/dout/clk/rst/full/almostfull/empty/almostempty/dcnt等信号的配合使用。由于xilinx平台在IP设计中,大量的使用axi总线,在zynq/SOC设计中,使用了非常多的AXI-FIFO。因此,有必要说明一下基于axi接口的fifo应该如何使用。

本文讲述的是fifo generator中的axi stream类型的FIFO的使用;

  • IP的生成

Step 1:修改名称、选择axi stream、根据需要选择同一时钟或者跨时钟

Step 2:本文中选择16bit=2byte宽度

Step 3:设置FIFO的实现方式(使用block-ram),深度256个数据

Step 4:检查重要信息,写入到读出有2个时钟延时

  • IP说明

1、模块框图:slave:full->ready,wr_en->valid master:empty->valid,rd_en->ready

2、时序说明:在本质上,axi接口的fifo只是使用了native fifo的控制状态信号做了修改,

变成了具有握手机制的valid与ready信号 。

  • 应用仿真

  • 1、仿真文件说明

2、应用以及仿真时序

1、仿真代码

3、仿真时序图

从上图可以看出,只要fifo内存在有效数据,tvalid就会有效,但是只有ready信号有效的时候,输出信号tdata更新。

因此,使用的时候,需要配合valid&ready来指示tdata,这就是axi协议中的握手。


版权声明:本文为Multiroad原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>