作为一个有一定工作经验(划水好多年)的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更新。文章来源:https://www.toymoban.com/news/detail-487381.html
因此,使用的时候,需要配合valid&ready来指示tdata,这就是axi协议中的握手。文章来源地址https://www.toymoban.com/news/detail-487381.html
到了这里,关于基于xilinx的axi-fifo的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!