作为一个有一定工作经验(划水好多年)的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协议中的握手。
本文档详细介绍了FPGA开发中AXI FIFO的使用,包括IP的生成步骤、模块特性以及如何在实际应用中进行仿真。AXI FIFO作为数据传输的重要组件,通过AXI接口提供了数据流的握手机制,确保了数据传输的正确性和时序控制。通过实例,阐述了如何配合valid和ready信号来指示有效数据,以满足AXI协议的要求。








1308

被折叠的 条评论
为什么被折叠?



