首页 > 技术 > 内容

AXI FIFO和AXI virtual FIFO两个IP的使用方法

时间:2025-12-06  作者:Diven  阅读:0

FPGA项目开发之AXI Stream FIFO IP

Xilinx Vivado中提供了AXI FIFO和AXI virtual FIFO类似IP,这篇文章主要通过实例来讲解这两个IP的使用方法。

AXI Virtual FIFO Controller

FIFO 是我们设计中常用的工具,因为使我们能够在进行信号和图像处理时缓冲数据。我们还使用异步FIFO来处理数据总线的时钟域交叉问题。

FIFO 的挑战是存储大量数据需要 FPGA 内的大量资源。当然,这在较小的 FPGA 中可能是一个问题,因为 BRAM 资源是有限的。
但在许多情况下,较小的 FPGA 可能会连接外部存储器,如 DDR3 或 DDR3L。开发人员可以使用此存储器通过直接存储器访问 (DMA) 在 DDR 存储器存储外部缓冲数据。

AMD-Xilinx 提供了一个称为 AXI Virtual FIFO Controller 的 IP 内核,以简化开发人员希望使用 DDR 存储器将信号或数据样本存储在外部 DDR 中作为 FIFO 的情况。

AXI Virtual FIFO Controller为开发人员提供可连接到信号处理路径的主从 AXI 流端口。与 DDR 存储器的接口由完整的 AXI 接口提供。

使用这些接口,AXI Virtual FIFO Controller能够在 DDR 中创建一个 FIFO,并且能够存储比使用内部 BRAM 更大数量的数据。

AXI Virtual FIFO Controller能够将多个通道数据存储在外部 DDR 中。需要注意的一件事是内存位置与其内存使用(例如,MICroBlaze 应用程序)可能会发生冲突。在 IP 定制时,我们能够分配的空间需要注意。

接下来创建一个以 Xilinx FPGA(S7-50 )为目标的小项目,项目主要演示AXI Virtual FIFO Controller的工作原理。在本设计中,XADC 是要写入 DDR 的 AXI Stream 数据的来源,DDR 可以通过 AXI Stream 输出其样本。

AXI Virtual FIFO Controller 的输出(读取通道)连接到 AXI Stream FIFO ,最后处理器通过 AXI4-Lite 接口读取数据。

下面显示了设计中的输入路径,其中包含由 XADC 生成的信号和一个subset convertor,用于将 TLast 信号添加到 AXI 流。AXI ILA 使 XADC 生成的数据能够与我们稍后在 DDR 存储器中看到的数据进行对比。然后,信号通过 AXI Virtual FIFO Controller进入 DDR。

输出路径类似。从 DDR 通过 SMC 进入 AXI Virtual FIFO Controller,然后输出到 AXI Stream FIFO,MICroBlaze 就可以访问。

将此下载到 FPGA 后,我们可以运行一个简单的 hello world 应用程序,暂停程序,并观察 AXI Virtual FIFO Controller缓冲数据的 DDR 内存位置。

该数据可以通过观察 Vivado  ILA 来对比。

输出路径需要 AXI Stream FIFO 断言 Tready 信号。为此,我们需要使用 MicroBlaze 上运行的软件配置 AXI Stream FIFO。

AXI Stream FIFO

在本节中,我们将继续检查输出路径,了解如何使用AXI Stream FIFO 从 DDR 中的 AXI Virtual FIFO Controller读取样本。

AXI Stream FIFO 允许开发人员能够从 AXI 内存映射外设访问 AXI 流,而无需实施完整的 DMA 解决方案。为了实现这一点,AXI Stream FIFO 提供了从 AXI MM 到 AXI 流的读写能力。就像此示例一样,这可用于与AXI Virtual FIFO Controller或 IP 进行交互,例如快速傅里叶变换,具有通过 AXIS 的配置数据。

为了与我们的设计交互,AXI Stream FIFO 提供了以下接口:

RX Stream Data – 这是要由 AXI Stream FIFO 接收的数据

TX Stream Data — 这是由 AXI Stream FIFO  传输的数据

TX Stream Control Data – 此接口支持 AXI 以太网 IP 内核的传输协议

AXI Lite – 用于访问配置寄存器和数据 Tx 和 Rx 数据的内存映射接口

AXI MM – 用于数据 Tx/Rx 的可选 AXI MM 接口

AXI Stream FIFO 提供了一个简单的寄存器接口,使用户能够定义以下内容:

Transmission Length——要传输的数据的长度

Transmission Vacancy – FIFO 中当前空的位置

Receive Length – 接收到的数据包的长度

Receive Occupancy – FIFO 中占用的插槽数

Receive / Transmission Destination – 边带 AXIS 信号 TIDest

Receive / Transmission ID – Side band AXIS 信号 TId

Receive / Transmission User – Side band AXIS 信号 TUser

系统/传输和接收中断

系统/传输和接收复位

通过写入 FIFO 或从 FIFO 读取的内存地址从 AXI Stream FIFO 写入或读取数据。

在此应用程序中,我们仅使用接收路径使用 MicroBlaze 从 AXI Virtual FIFO Controller读取样本。

在软件中设置非常简单。我们需要在软件中执行以下操作:

配置 AXI Stream FIFO

读取FIFO的占用情况

从 FIFO 中读出指定的字数

在应用软件中根据需要处理样品

 

#include #include "platform.h"#include "xil_printf.h"#include "xstreamer.h"#include "xllfifo.h"#define FIFO_DEV_ID     XPAR_AXI_FIFO_0_DEVICE_ID#define WORD_SIZE 4XLlFifo_Config *Config;XLlFifo FifoInstance;int main(){ int Status,i; u32 RxWord; static u32 ReceiveLength;    init_platform();    Config = XLlFfio_LookupConfig(FIFO_DEV_ID);    XLlFifo_CfgInitialize(&FifoInstance, Config, Config->BaseAddress);    print("Hello World");    print("Successfully ran Hello World application");  Status = XLlFifo_Status(&FifoInstance); XLlFifo_INTClear(&FifoInstance,0xffffffff); Status = XLlFifo_Status(&FifoInstance); if(Status != 0x0) {  xil_printf(" ERROR : Reset value of ISR0 : 0x%x"       "Expected : 0x0",       XLlFifo_Status(&FifoInstance));  return XST_FAILURE; }while(1){ while(XLlFifo_iRxOccupancy(&FifoInstance)) {    ReceiveLength = (XLlFifo_iRxGetLen(&FifoInstance))/WORD_SIZE;  for (i=0; i < ReceiveLength; i++) {   RxWord = XLlFifo_RxGetWord(&FifoInstance);   printf("%x ",RxWord);  } }}    cleanup_platform();    return 0;}

 

源程序如下:

https://github.com/ATaylorCEngFIET/MZ_439

查看 AXI Virtual FIFO Controlle和 AXI Stream FIFO 后,这些 IP 内核在我们希望缓冲大量数据并与 AXI 流交互而无需 DMA 开销的应用中都非常有用。


审核编辑:刘清

猜您喜欢


警示灯是重要的安全设备,应用于多个领域,以确保人们的生命安全和财产保护。在交通领域,警示灯常用于道路标识、交通信号灯以及应急车辆,提醒驾驶员和行人注意安全。在建...
2013-09-29 00:00:00
十字小盘头机螺钉三组合是应用于机械、电子及家具等领域的重要紧固件。由三个基本部分组成:头部、杆体和螺纹。头部呈小盘状,具有十字形槽口,便于使用十字螺丝刀进行安装...
2013-09-28 00:00:00
现代电子设备和工业应用中,连接器的选择非常重要。TERMINAL_10X12.5MM_TM是一款性能很好的连接器,应用于各种电子设备和工业自动化系统中。本文将对...
2025-04-25 03:30:13
现代电子设备中,封装技术的选择对性能和散热有着重要影响。LGA76_15X11.25MM作为新兴的封装形式,因其独特的尺寸和结构设计,逐渐受到了业界的关注。本文...
2025-04-21 20:00:40
贴片电阻2004并非表示阻值大小,而是指其封装尺寸。2004指的是英制尺寸,表示长宽分别为0.2英寸和0.04英寸,转换成公制单位约为5.08毫米 x 1.02...
2024-11-26 11:29:55
贴片电阻在电子电路中扮演着至关重要的角色,而其封装形式直接影响着其性能和应用。常见的贴片电阻封装,如01005、0201、0402、0603、0805、1206...
2024-11-26 11:29:27
压敏电阻是对电压变化敏感的电子元件,应用于电路保护、信号处理等领域。能够在特定的电压下迅速改变阻值,从而有效保护电路免受过电压的损害。本文将对压敏电阻的读数进行...
2025-04-15 14:01:11
PTC热敏电阻作为重要的电子元器件,因其独特的自恢复过流保护和温度检测功能,应用于电源保护、电机保护及温度控制等领域。作为业内知名品牌,SEI(世达柏科技)凭借...
2020-01-06 00:46:30
光纤激光打标机是高效、精确的标记设备,应用于工业生产中。其主要参数包括激光波长、功率、标记速度、重复频率和光束质量等。激光波长通常为1064nm,这使得光纤激光...
2010-01-12 00:00:00
发光二极管(LED)是应用于照明、显示和信号指示等领域的半导体器件。其工作原理是通过电流的流动使得半导体材料中的电子与空穴复合,进而释放出能量,以光的形式表现出...
2025-04-08 08:00:03