[AXI] AXI Virtual FIFO Controller

AXI Virtual FIFO Controller IP 详细介绍

概述

AXI Virtual FIFO Controller(虚拟 FIFO 控制器)专为在 FPGA 和 SoC 系统中利用外部 DRAM 内存实现大容量 FIFO 存储设计,支持通过 AXI4-Stream 接口将外部内存段组织为多个虚拟 FIFO 块。它广泛应用于需要大容量数据缓冲的场景,如信号处理、图像处理、视频流传输和网络数据包处理,特别是在 Zynq SoC、UltraScale+ 和 Versal 架构的设计中。

AXI Virtual FIFO Controller 的核心功能是将外部 DRAM(如 DDR3、DDR4)划分为多个虚拟 FIFO 通道(最多 8 个),通过 AXI4 内存映射接口访问内存,并提供 AXI4-Stream 接口进行数据读写操作。它通过多通道仲裁、地址管理和 FIFO 状态信号,简化了外部内存作为 FIFO 的使用,相比传统 DMA 方案降低了设计复杂性。

该 IP 核的主要功能包括:

  • 多通道支持:支持最多 8 个独立的虚拟 FIFO 通道。
  • 协议支持:兼容 AXI4 内存映射和 AXI4-Stream 协议。
  • 大容量缓冲:利用外部 DRAM 实现高达 64 MB 每通道的 FIFO 容量。
  • 高性能:支持宽数据路径和优化仲裁,适合高带宽应用。

主要特性

AXI Virtual FIFO Controller IP 具有以下关键特性:

  1. 协议支持

    • AXI4 内存映射接口:用于访问外部 DRAM(如 DDR3、DDR4),支持内存读写操作。
    • AXI4-Stream 接口:提供写(主接口)和读(从接口),用于数据流传输。
    • 符合 AMBA AXI4 协议规范(IHI0022),支持 AXI4 和 AXI4-Stream。
  2. 多通道支持

    • 支持最多 8 个虚拟 FIFO 通道,每个通道独立管理内存分区。
    • 使用 AXI4-Stream 的 TDEST 信号作为通道标识符,支持包切换操作。
    • 每通道最大容量为 64 MB(受限于 4 KB 页面管理)。
  3. 数据宽度支持

    • 支持 AXI4-Stream 和 AXI4 内存映射接口的多种数据宽度:32、64、128、256、512、1024 位
    • AXI4 内存映射接口数据宽度与 AXI4-Stream 一致,确保高效传输。
  4. 突发长度支持

    • 支持 AXI4 内存映射接口的突发长度:512、1024、2048、4096 字节
    • 优化内存访问效率,减少总线开销。
  5. FIFO 状态信号

    • 提供每通道的 FIFO FullFIFO Empty 信号,指示缓冲区状态。
    • 支持用户监控 FIFO 填充状态,防止溢出或欠载。
  6. 仲裁机制

    • MM2S 加权轮询(Weighted Round Robin, WRR)仲裁:优化多通道读操作的吞吐量。
    • 每时钟周期进行通道仲裁,支持高性能数据传输。
  7. 地址管理

    • 支持可配置的 DRAM 基地址(Base Address),每个通道分配独立的内存分区。
    • 自动管理读写指针,跟踪每个 FIFO 分区的起始和结束地址。
  8. 时钟与复位

    • 支持单一时钟操作(aclk),不支持异步时钟模式。
    • 支持低电平有效复位(aresetn),同步到 aclk
    • 最大频率:200 MHz(Kintex-7,-2 速度等级),更高频率支持 UltraScale+。
  9. 工具与设备支持

    • 设计工具:Vivado Design Suite、ISE Design Suite。
    • 支持设备:Artix-7、Kintex-7、Virtex-7、Zynq-7000、Kintex UltraScale、Virtex UltraScale、Zynq UltraScale+ MPSoC、Versal AI Core、Versal Premium、Versal Prime。

功能模块

AXI Virtual FIFO Controller IP 的功能模块围绕多通道 FIFO 管理和数据传输设计,核心包括 AXI4-Stream 接口控制器、内存映射接口控制器、地址管理模块和仲裁模块。以下是主要模块及其功能:

1. AXI4-Stream 接口控制器

  • 功能:管理 AXI4-Stream 读写接口,处理数据流传输。
  • 机制
    • 写接口(主接口)
      • 接收外部模块的 AXI4-Stream 数据(s_axis_tdatas_axis_tvalid)。
      • 使用 TDEST 信号标识目标 FIFO 通道。
      • 将数据传递到内存映射接口控制器,写入 DRAM。
    • 读接口(从接口)
      • 从 DRAM 读取数据,输出到 AXI4-Stream(m_axis_tdatam_axis_tvalid)。
      • 使用 TDEST 标识数据来源通道。
    • 实现 TVALID/TREADY 握手,确保流控正确性。
  • 应用:连接信号处理模块(如 XADC、视频处理 IP)到虚拟 FIFO。

2. 内存映射接口控制器

  • 功能:通过 AXI4 接口访问外部 DRAM,执行读写操作。
  • 机制
    • 写操作
      • 将 AXI4-Stream 输入数据转换为 AXI4 写事务(m_axi_awaddrm_axi_wdata)。
      • 根据通道的内存分区地址写入 DRAM。
    • 读操作
      • 从 DRAM 读取数据(m_axi_araddrm_axi_rdata),转换为 AXI4-Stream 输出。
    • 支持大突发长度(512-4096 字节),优化内存带宽。
  • 应用:桥接虚拟 FIFO 和外部内存(如通过 MIG 访问 DDR)。

3. 每通道地址管理模块

  • 功能:管理每个虚拟 FIFO 通道的 DRAM 地址分区。
  • 机制
    • 为每个通道分配独立的内存分区(4 KB 页面对齐)。
    • 跟踪读写指针(Start/End Address),维护 FIFO 数据顺序。
    • 支持可配置的基地址(C_BASEADDR)和通道大小(最大 64 MB)。
  • 应用:确保多通道数据不冲突,支持大容量缓冲。

4. MM2S 加权轮询仲裁模块

  • 功能:管理多通道读操作的优先级和吞吐量。
  • 机制
    • 使用加权轮询(WRR)算法,分配 MM2S 通道的 DRAM 访问权限。
    • 每时钟周期执行通道仲裁,优化多通道读性能。
    • 确保公平性和高吞吐量,防止某一通道长时间占用总线。
  • 应用:支持高带宽、多通道数据流传输。

5. 时钟与复位模块

  • 功能:管理时钟和复位信号。
  • 机制
    • 时钟:单一 aclk,驱动所有接口(不支持异步时钟)。
    • 复位aresetn,低电平有效,同步到 aclk
    • 提供错误中断(axi_mm_err_intr),通知 DRAM 访问错误(如 RRESP=SLVERR)。
  • 应用:确保与 AXI 系统时钟和复位一致。

接口信号

以下是 AXI Virtual FIFO Controller IP 的主要接口信号及其功能:

  1. AXI4-Stream 写接口(S_AXIS,写主接口)

    • 类型:AXI4-Stream 从接口,接收外部数据流。
    • 信号
      • S_AXIS_TDATA[C_AXIS_WIDTH-1:0]:输入数据(32-1024 位)。
      • S_AXIS_TVALIDTREADY:流握手。
      • S_AXIS_TDEST[C_DEST_WIDTH-1:0]:通道标识符(0-7)。
      • S_AXIS_TLAST:包结束标志。
      • S_AXIS_TKEEP[C_AXIS_WIDTH/8-1:0]:字节有效信号。
    • 功能:接收数据并写入指定通道的 DRAM 分区。
    • 参数
      • C_AXIS_WIDTH:数据宽度。
      • C_DEST_WIDTHTDEST 宽度(取决于通道数量)。
  2. AXI4-Stream 读接口(M_AXIS,读从接口)

    • 类型:AXI4-Stream 主接口,输出数据流。
    • 信号
      • M_AXIS_TDATA[C_AXIS_WIDTH-1:0]:输出数据。
      • M_AXIS_TVALIDTREADY:流握手。
      • M_AXIS_TDESTTLASTTKEEP:同 S_AXIS。
    • 功能:从 DRAM 读取数据,输出到外部模块。
    • 参数:同 S_AXIS。
  3. AXI4 内存映射接口(M_AXI)

    • 类型:AXI4 主接口,访问外部 DRAM。
    • 信号
      • 读地址通道
        • M_AXI_ARADDR[C_ADDR_WIDTH-1:0]:读地址(32 或 64 位)。
        • M_AXI_ARVALIDARREADY:读地址握手。
        • M_AXI_ARLEN[7:0]:突发长度(0-255)。
      • 读数据通道
        • M_AXI_RDATA[C_DATA_WIDTH-1:0]:读数据(32-1024 位)。
        • M_AXI_RVALIDRREADY:读数据握手。
        • M_AXI_RRESP[1:0]:读响应(OKAY、SLVERR、DECERR)。
      • 写地址通道
        • M_AXI_AWADDRAWVALIDAWREADYAWLEN:写地址参数。
      • 写数据通道
        • M_AXI_WDATAWVALIDWREADY:写数据。
        • M_AXI_WSTRB[C_DATA_WIDTH/8-1:0]:写选通。
      • 写响应通道
        • M_AXI_BRESPBVALIDBREADY:写响应。
    • 功能:读写 DRAM,实现虚拟 FIFO 存储。
    • 参数
      • C_ADDR_WIDTH:地址宽度。
      • C_DATA_WIDTH:数据宽度(与 AXI4-Stream 一致)。
  4. FIFO 状态信号

    • fifo_full[7:0]:每通道 FIFO 满信号(高电平有效)。
    • fifo_empty[7:0]:每通道 FIFO 空信号(高电平有效)。
    • 功能:指示每个通道的缓冲区状态。
  5. 中断接口

    • axi_mm_err_intr:AXI4 内存映射错误中断(触发于 RRESP/BRESP 非 OKAY)。
    • 功能:通知 DRAM 访问错误。
  6. 时钟与复位接口

    • aclk:全局时钟。
    • aresetn:低电平有效复位。
    • 功能:提供时钟和复位控制。

配置方法

1. 在 Vivado 中添加 IP

  • 添加 AXI Virtual FIFO Controller
    • 在 Vivado IP Catalog 中搜索 AXI Virtual FIFO Controller,添加到设计。
    • 双击 IP 核,打开定制化对话框。
  • 配置参数
    • 通道配置
      • C_NUM_CHANNELS:通道数量(1-8)。
    • 接口参数
      • C_AXIS_WIDTH:AXI4-Stream 数据宽度(32、64、128、256、512、1024 位)。
      • C_AXI_MM_DATA_WIDTH:AXI4 内存映射数据宽度(与 C_AXIS_WIDTH 一致)。
      • C_ADDR_WIDTH:地址宽度(32 或 64 位)。
    • 内存配置
      • C_BASEADDR:DRAM 基地址。
      • C_CHANNEL_SIZE:每通道内存大小(4 KB 页面,最大 64 MB)。
    • 突发长度
      • C_MM_BURST_SIZE:AXI4 突发字节数(512、1024、2048、4096)。
  • RTL 生成
    • Vivado 生成 Verilog 代码,实例化控制器和地址管理逻辑。
    • 输出文件位于项目目录(如 project_name.srcs/sources_1/ip/axi_vfifo)。

2. 连接与驱动

  • 硬件连接
    • S_AXIS
      • 连接到 AXI4-Stream 主设备(如 XADC、视频处理模块)。
    • M_AXIS
      • 连接到 AXI4-Stream 从设备(如 AXI Stream FIFO、信号处理模块)。
    • M_AXI
      • 连接到内存控制器(如 MIG 或 AXI SmartConnect 到 DDR)。
    • FIFO 状态信号
      • 连接 fifo_fullfifo_empty 到控制逻辑,监控缓冲区状态。
    • 中断
      • 连接 axi_mm_err_intr 到中断控制器(如 Zynq GIC)。
    • 分配时钟和复位:
      • aclk:连接到系统时钟(与 MIG 或 DRAM 时钟同步)。
      • aresetn:连接到系统复位。
    • 使用 Vivado 地址编辑器为 M_AXI 接口分配 DRAM 地址空间。
  • 驱动程序
    • AXI Virtual FIFO Controller 为透明 IP,无需专用驱动。
    • 依赖上下游模块的驱动(如 MIG 控制器、AXI Stream FIFO)。
    • 可通过处理器(如 MicroBlaze)读取 fifo_full/fifo_empty 信号或处理 axi_mm_err_intr 中断。
    • 示例应用:使用 MicroBlaze 监控 DDR 内存中的 FIFO 数据。

3. 仿真与验证

  • 仿真环境
    • 使用 Vivado Simulator 或 ModelSim 进行 RTL 仿真。
    • 编写 SystemVerilog 测试平台,驱动 S_AXIS 数据和 TDEST 信号。
    • 使用 AXI Verification IP(PG267)模拟 AXI4 主设备和从设备,验证接口行为。
  • 验证内容
    • 检查多通道传输:验证不同 TDEST 的数据正确写入/读取对应 FIFO 通道。
    • 验证 FIFO 状态:确认 fifo_fullfifo_empty 信号的触发条件。
    • 测试突发操作:验证 AXI4 突发长度和数据完整性。
    • 验证错误处理:模拟 DRAM 错误(RRESP=SLVERR),检查 axi_mm_err_intr
    • 检查仲裁:验证多通道读操作的 WRR 公平性。
  • 波形分析
    • 使用 Vivado 波形查看器分析 AXI4 和 AXI4-Stream 信号。
    • 确认 TDEST、数据顺序和突发时序。
    • 检查中断信号的触发条件。

资源利用情况

AXI Virtual FIFO Controller 的资源占用取决于通道数量、数据宽度和突发配置。以下是典型资源利用情况(基于 7 系列、UltraScale 和 Zynq 设备,Vivado 综合):

  • 资源类型
    • LUT(查找表):1000-6000,取决于通道数量和数据宽度。
    • FF(触发器):2000-10000,与 LUT 占用相关。
    • BRAM:0-2,用于地址管理和缓冲(视通道数量)。
    • DSP 切片:0(不使用)。
  • 配置示例
    • 4 通道,64 位数据宽度,1024 字节突发:约 2000 LUT、4000 FF、1 BRAM。
    • 8 通道,128 位数据宽度,2048 字节突发:约 4000 LUT、8000 FF、2 BRAM。
    • 1 通道,32 位数据宽度,512 字节突发:约 1000 LUT、2000 FF。
  • 最大频率
    • 7 系列(-2 速度等级):200 MHz。
    • UltraScale+:300 MHz 或更高。

应用场景

AXI Virtual FIFO Controller IP 适用于以下场景:

  1. 信号与图像处理

    • 在 Zynq SoC 或 Versal 设计中,使用 DDR 存储大容量信号数据(如 XADC 输出)。
    • 支持高带宽信号缓冲,简化 DMA 配置。
  2. 视频流传输

    • 在视频处理流水线中,利用 DRAM 作为视频帧缓冲区。
    • 配合 AXI VDMA(PG020)实现高效视频数据流传输。
  3. 网络数据包处理

    • 在网络应用中,使用虚拟 FIFO 存储数据包,支持包切换(通过 TDEST)。
    • 简化 AXI Ethernet 接口的缓冲管理。
  4. 小容量 FPGA 优化

    • 在 BRAM 资源有限的小型 FPGA(如 Artix-7)中,利用外部 DDR 扩展 FIFO 容量。
    • 减少 FPGA 内部资源占用。
  5. 调试与验证

    • 在系统开发中,配合 Vivado ILA 验证 AXI4-Stream 数据流和 DRAM 访问。
    • 使用 MicroBlaze 读取 DDR 内容,检查 FIFO 数据。

注意事项

  1. 通道配置

    • 确保 C_NUM_CHANNELSTDEST 宽度匹配,防止通道标识错误。
    • 每通道最大 64 MB,需根据 DRAM 容量合理分配。
  2. 内存分配

    • 配置 C_BASEADDRC_CHANNEL_SIZE 时,避免与系统其他内存使用冲突(如 MicroBlaze 应用)。
    • 使用 Vivado 地址编辑器验证 DRAM 地址空间。
  3. TKEEP 与 TLAST

    • AXI Virtual FIFO 不存储 TKEEPTLAST 信号,用户需自行管理字节对齐和包边界。
    • 对于需要包边界的应用,需额外逻辑记录包长度。
  4. 时钟与复位

    • 确保 aclk 与 DRAM 控制器(如 MIG)时钟同步。
    • aresetn 需保持至少 16 个时钟周期,同步释放以防亚稳态。
  5. 性能优化

    • 选择较大的突发长度(C_MM_BURST_SIZE)以提高内存带宽。
    • 监控 fifo_fullfifo_empty 信号,动态调整数据流速率。

总结

AXI Virtual FIFO Controller IP(PG038)是一款高效的互连基础架构软核,支持通过 AXI4 和 AXI4-Stream 协议利用外部 DRAM 实现多通道虚拟 FIFO 存储。其多通道支持、大容量缓冲和高性能仲裁使其成为信号处理、视频流传输和网络数据包处理的理想选择,特别适合 BRAM 资源有限的小型 FPGA 和复杂 SoC 系统。

用户在配置时需注意通道数量、内存分配和 TKEEP/TLAST 管理,合理优化突发长度和时钟设置,并通过仿真验证数据流和仲裁性能。结合 Vivado 工具、MIG 控制器和 ILA 调试,AXI Virtual FIFO Controller 可显著简化大容量 FIFO 设计,提高系统性能。

FPGA设计工具推荐

  • SZ901
    SZ901 是一款基于XVC协议的FPGA网络下载器。

    • 最高支持53M
    • 支持4路JTAG独立使用
    • 支持端口合并
    • 支持国产FLASH烧写
    • 下载器无限扩展
    • 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
  • SZ501(PRO_A7)

    • SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
    • 双网口(RGMII)
    • 双SFP+
    • DDR
    • UART
    • IIC
### AXI DMA与FIFO配置详解 #### 一、AXI DMA简介 AXI Direct Memory Access (DMA) 是一种用于高效数据传输的技术,允许外设直接访问内存而无需CPU干预。这种机制极大地提高了系统的性能和效率[^1]。 #### 二、FIFO的作用 First-In-First-Out(FIFO)缓冲区在AXI DMA架构中扮演着重要角色。具体来说,在AXI DMA设计中有两个主要的FIFO结构:FIFO1 和 FIFO2。这两个队列分别负责接收来自不同方向的数据流并暂时存储它们直到可以被处理为止。这样的设置有助于平滑瞬态负载峰值以及协调发送端口之间的速率差异[^2]。 #### 三、配置方法概述 为了实现最佳效果, 对于AXI DMA及其关联的FIFO组件而言,合理的参数设定至关重要: - **深度调整**: 可以通过修改硬件描述文件中的相应寄存器来改变各FIFO的实际容量大小;这取决于预期的应用场景需求。 - **优先级管理**: 设置不同的权重给定到每一个通道上,从而影响其获取服务的机会比例。这对于多任务环境下的资源分配尤为关键。 - **中断控制**: 合理规划何时触发软件层面上的通知事件(比如当某个特定条件满足时),以便及时响应重要的状态变化而不至于造成不必要的开销。 ```verilog // Verilog伪代码展示如何初始化AXI_DMA模块的部分属性 module axi_dma_config ( input wire clk, output reg [7:0] fifo_depth_setting, ... ); always @(posedge clk) begin // 假设这里有一些逻辑判断过程... // 动态调节FIFO1,FIFO2的深度 fifo_depth_setting <= some_condition ? 8'hFF : 8'hAA; end ``` #### 四、实际应用案例分析 假设在一个图像采集系统里,摄像头产生的原始像素信息经由AXI总线传送到处理器内部进行后续运算之前会先经过AXI-DMA单元做预处理工作。此时如果希望减少丢帧现象的发生,则可以通过增大FIFO缓存量的方式提高吞吐量上限;与此同时适当降低其他非实时性强的任务所占用带宽份额也能达到优化整体表现的目的[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值