[FPGA AXI IP] AXI Central Direct Memory Access

AXI Central Direct Memory Access (AXI CDMA) IP 详细介绍

概述

AXI Central Direct Memory Access(AXI CDMA)专为嵌入式处理系统设计,提供高带宽的直接内存访问(DMA)功能,支持在内存映射的源地址和目标地址之间通过 AXI4 协议进行数据传输。它广泛应用于 FPGA 和 SoC 系统设计,特别是在需要高效数据移动的场景,如视频处理、信号处理、网络数据包处理和硬件加速器集成。

该 IP 核的主要功能包括:

  • 高带宽 DMA:在 AXI4 内存映射接口上实现高效数据传输,支持最大 1024 位数据宽度。
  • 简单 DMA 模式:通过寄存器直接配置源和目标地址,适合简单数据移动任务。
  • 可选 Scatter Gather(SG)模式:通过硬件自动化处理描述符,卸载 CPU 的控制任务。
  • AXI4-Lite 控制接口:提供初始化、状态查询和控制功能,适合与 MicroBlaze 或其他处理器配合使用。

主要特性

AXI CDMA IP 具有以下关键特性:

  1. AXI4 协议兼容性

    • 符合 ARM AMBA AXI4 和 AXI4-Lite 协议规范(参考 UG761)。
    • AXI4 主接口:用于主数据路径(M_AXI),支持 32、64、128、256、512 和 1024 位数据宽度。
    • AXI4-Lite 从接口:用于寄存器访问(S_AXI_LITE),固定 32 位数据宽度。
    • 可选 AXI4 Scatter Gather 主接口:用于 Scatter Gather 模式,固定 32 位数据宽度。
  2. 操作模式

    • 简单 DMA 模式:通过 AXI4-Lite 寄存器直接配置源地址、目标地址和传输长度,适合单次或少量传输。
    • Scatter Gather 模式(可选):通过描述符链表实现自动化 DMA 传输,卸载 CPU 管理任务,支持描述符预取和并行处理。
  3. 高性能设计

    • 最大频率:在 Virtex-6 FPGA 上可达 180 MHz(AXI4 接口),在 Zynq-7000 上可达更高频率(参考 PG034 表 2-1)。
    • 吞吐量:支持高达 99% 的 AXI4 总线带宽利用率(64 字节突发,150 MHz,参考 PG034 表 2-2)。
    • 突发支持:最大突发长度可配置为 16、32、64、128 或 256 个数据节拍。
    • 数据重对齐引擎(DRE)(可选):支持 32 位和 64 位数据宽度下任意字节偏移的读写操作。
  4. 存储转发(Store and Forward)

    • 可选内部 FIFO,支持存储转发模式,减少总线竞争,提高吞吐量。
    • FIFO 深度可配置,适用于突发传输场景。
  5. 时钟与复位

    • 支持同步和异步时钟模式:
      • 同步模式:AXI4 主接口(m_axi_aclk)和 AXI4-Lite 接口(s_axi_lite_aclk)使用相同频率。
      • 异步模式:两者可运行在不同频率,s_axi_lite_aclk 可低于或等于 m_axi_aclk(通过参数 C_AXI_LITE_IS_ASYNC=1 启用)。
    • 提供两个硬件复位信号:m_axi_aresetn(主接口复位)和 s_axi_lite_aresetn(AXI4-Lite 接口复位)。
  6. 工具与设备支持

    • 设计工具:Vivado Design Suite、ISE Design Suite、嵌入式开发套件(EDK)。
    • 支持设备:Zynq-7000、Virtex-7、Kintex-7、Artix-7、Virtex-6、Spartan-6。
    • 免费随 Vivado 和 ISE 设计套件提供,无需额外许可(参考 web:19)。

功能模块

AXI CDMA IP 的核心功能是提供高效的内存映射数据传输,其主要功能模块包括以下几个方面:

1. 寄存器模块(Registers)

  • 功能:通过 AXI4-Lite 从接口提供控制和状态寄存器,用于配置 DMA 操作和查询状态。
  • 寄存器空间(参考 PG034,第 18-25 页):
    • 控制寄存器(CDMACR):配置中断、错误处理、软复位等。
    • 状态寄存器(CDMASR):报告 DMA 状态、错误和中断。
    • 源地址寄存器(SA):设置传输的源地址。
    • 目标地址寄存器(DA):设置传输的目标地址。
    • 字节传输寄存器(BTT):设置传输字节数(最大 8 MB)。
    • Scatter Gather 寄存器(如 CURDESC、TAILDESC):管理描述符链表。
  • 应用:处理器(如 MicroBlaze)通过 AXI4-Lite 接口写入寄存器,启动和监控 DMA 操作。

2. Scatter Gather 引擎(Scatter Gather Engine,可选)

  • 功能:通过 AXI4 主接口(M_AXI_SG)从系统内存中获取和更新 DMA 传输描述符,自动化复杂传输序列。
  • 机制
    • 支持描述符预取和内部队列,允许描述符处理与数据传输并行执行。
    • 描述符包含源地址、目标地址、传输长度等信息,形成链表结构。
    • 支持循环和非循环描述符处理。
  • 应用:适合需要连续或复杂传输模式的场景,如视频流或网络数据包处理。

3. 控制/状态逻辑(Cntl/Sts Logic)

  • 功能:协调 DMA 操作,管理 DataMover 的命令加载和状态更新。
  • 机制
    • 在简单 DMA 模式下,根据寄存器配置生成传输命令。
    • 在 Scatter Gather 模式下,协调 Scatter Gather 引擎和 DataMover。
  • 应用:确保 DMA 操作的正确执行和状态反馈。

4. 数据移动器(DataMover)

  • 功能:通过 AXI4 主接口(M_AXI)执行高吞吐量数据传输。
  • 机制
    • 支持 4 KB 地址边界保护和自动突发分割。
    • 提供字节级数据重对齐(DRE),支持 32 位和 64 位数据宽度下的任意字节偏移。
    • 支持多请求队列,允许并行处理多个传输请求。
  • 应用:实现从源内存到目标内存的高效数据移动。

5. 复位模块(Reset Module)

  • 功能:协调硬件复位(m_axi_aresetns_axi_lite_aresetn)和软复位(通过 CDMACR 寄存器)。
  • 机制:复位所有寄存器、队列和逻辑,初始化为默认状态。
  • 注意:硬件复位不保证 AXI4 传输的优雅完成,可能中断正在进行的传输。

接口说明

以下是 AXI CDMA IP 的主要接口及其功能:

  1. AXI4-Lite 从接口(S_AXI_LITE)

    • 类型:32 位 AXI4-Lite 从接口。
    • 信号
      • S_AXI_LITE_AWADDRAWVALIDAWREADY:写地址通道。
      • S_AXI_LITE_WDATAWVALIDWREADY:写数据通道。
      • S_AXI_LITE_BRESPBVALIDBREADY:写响应通道。
      • S_AXI_LITE_ARADDRARVALIDARREADY:读地址通道。
      • S_AXI_LITE_RDATARRESPRVALIDRREADY:读数据通道。
    • 功能:提供寄存器访问接口,用于配置和监控 DMA 操作。
    • 时钟s_axi_lite_aclk
  2. AXI4 主接口(M_AXI)

    • 类型:AXI4 主接口,用于主数据路径。
    • 信号
      • M_AXI_ARADDRARVALIDARREADY:读地址通道。
      • M_AXI_RDATARRESPRVALIDRREADY:读数据通道。
      • M_AXI_AWADDRAWVALIDAWREADY:写地址通道。
      • M_AXI_WDATAWVALIDWREADY:写数据通道。
      • M_AXI_BRESPBVALIDBREADY:写响应通道。
    • 功能:执行从源地址到目标地址的内存映射数据传输。
    • 数据宽度:可配置为 32、64、128、256、512 或 1024 位。
    • 时钟m_axi_aclk
  3. AXI4 Scatter Gather 主接口(M_AXI_SG,可选)

    • 类型:32 位 AXI4 主接口,用于 Scatter Gather 描述符传输。
    • 信号:与 M_AXI 类似,但固定 32 位数据宽度。
    • 功能:从系统内存中读取和更新 Scatter Gather 描述符。
    • 时钟m_axi_aclk
  4. 时钟与复位接口

    • m_axi_aclk:主数据路径和 Scatter Gather 接口的时钟。
    • s_axi_lite_aclk:AXI4-Lite 接口的时钟,可与 m_axi_aclk 同步或异步。
    • m_axi_aresetn:主接口低电平有效复位信号。
    • s_axi_lite_aresetn:AXI4-Lite 接口低电平有效复位信号。
  5. 中断接口

    • Interrupt:输出中断信号,指示 DMA 完成、错误或其他事件。
    • 功能:通知处理器 DMA 状态变化,需配合中断控制器使用。

配置方法

1. 在 Vivado 中添加 IP

  • 打开 Vivado 的 IP Catalog,搜索 AXI Central DMA,将其添加到设计。
  • 双击 IP 核,打开定制化对话框,配置以下参数:
    • 基本设置
      • 数据宽度(C_M_AXI_DATA_WIDTH):选择 32、64、128、256、512 或 1024 位。
      • 突发长度(C_M_AXI_BURST_LEN):选择 16、32、64、128 或 256。
    • 高级选项
      • 异步模式(Enable Asynchronous Mode):启用 C_AXI_LITE_IS_ASYNC=1,允许 s_axi_lite_aclkm_axi_aclk 不同。
      • 数据重对齐引擎(Include DRE):启用 C_INCLUDE_DRE=1,支持字节偏移(仅限 32/64 位)。
      • 存储转发(Include Store and Forward):启用 C_INCLUDE_SF=1,添加内部 FIFO。
      • Scatter Gather(Include SG):启用 C_INCLUDE_SG=1,支持描述符自动化。
      • 地址管道深度:配置读/写地址管道深度(C_READ_ADDR_PIPE_DEPTHC_WRITE_ADDR_PIPE_DEPTH)。
    • 其他
      • 配置延迟定时器分辨率(C_DLYTMR_RESOLUTION),用于 Scatter Gather 模式的中断延迟。

2. 连接与驱动

  • 硬件连接
    • S_AXI_LITE 接口连接到处理器(如 MicroBlaze 或 Zynq PS)的 AXI4-Lite 主接口。
    • M_AXI 接口连接到 AXI4 内存控制器(如 AXI Interconnect)。
    • 若启用 Scatter Gather,将 M_AXI_SG 接口连接到内存控制器。
    • 分配时钟(m_axi_aclks_axi_lite_aclk)和复位(m_axi_aresetns_axi_lite_aresetn)信号。
  • 驱动程序
    • 使用 Xilinx 提供的 standalone 驱动程序(位于 SDK 目录 <install_directory>/doc/usenglish/xilinx_drivers.htm)。
    • Linux 驱动支持信息见 Xilinx Wiki(参考 web:19)。
    • 驱动程序提供 API 用于配置寄存器、启动传输和处理中断。

3. 仿真与验证

  • 使用 Vivado 仿真工具验证 DMA 操作:
    • 检查 S_AXI_LITE 接口的寄存器读写。
    • 验证 M_AXI 接口的源到目标数据传输。
    • 若启用 Scatter Gather,验证描述符链表的正确处理。
  • 确保时钟频率满足吞吐量需求,检查突发长度对系统性能的影响。

资源利用情况

AXI CDMA IP 的资源占用取决于数据宽度、Scatter Gather 和其他配置。以下是典型资源利用情况(基于 Virtex-6、Spartan-6 和 Zynq-7000,Vivado 生成):

  • 资源类型
    • LUT(查找表):500-3000,取决于数据宽度和 Scatter Gather。
    • FF(触发器):500-2500,与 LUT 占用相关。
    • BRAM:0-4,根据是否启用存储转发 FIFO。
    • DSP 切片:不使用。
  • 配置示例
    • 32 位数据宽度,无 Scatter Gather:约 500 LUT、600 FF、0 BRAM。
    • 64 位数据宽度,启用 Scatter Gather 和 DRE:约 1500 LUT、1200 FF、2 BRAM。
    • 256 位数据宽度,启用存储转发:约 2500 LUT、2000 FF、4 BRAM。
  • 最大频率
    • Virtex-6:180 MHz(AXI4)、135 MHz(AXI4-Lite)。
    • Spartan-6:90 MHz(AXI4)、80 MHz(AXI4-Lite)。
    • Zynq-7000:更高频率(参考 web:9)。

具体资源利用数据需参考 Vivado 生成的报告,建议用户根据目标设备和配置验证资源占用。


应用场景

AXI CDMA IP 适用于以下场景:

  1. 高带宽数据传输

    • 在内存和外设之间移动大块数据,如视频帧或网络数据包。
    • 配合 AXI Interconnect 用于 SoC 系统中的内存访问。
  2. 视频处理

    • 将视频数据从 DDR 内存传输到处理模块(如编码器、解码器)。
    • 使用 Scatter Gather 模式处理连续视频流。
  3. 信号处理

    • 在信号处理系统中移动采集数据到处理核心(如 FFT、滤波器)。
    • 利用 DRE 支持非对齐数据传输。
  4. 网络数据包处理

    • 在网络处理器中实现数据包的快速搬移。
    • Scatter Gather 模式适合动态数据包序列。
  5. Zynq SoC 集成

    • 在 Zynq-7000 的 PS 和 PL 之间传输数据,配合 AXI Interconnect 和内存控制器。

注意事项

  1. 突发长度选择

    • 较大的突发长度(如 64 或 256)可提高吞吐量(高达 99% 总线利用率),但可能增加其他模块的延迟(参考 PG034 表 2-2)。
    • 需权衡系统性能,建议通过仿真测试不同突发长度。
  2. 异步模式

    • 启用异步模式(C_AXI_LITE_IS_ASYNC=1)时,s_axi_lite_aclk 可低于 m_axi_aclk,但需确保时钟域同步逻辑正确(参考 web:1)。
    • 异步模式增加少量 LUT 和 FF 占用。
  3. 复位管理

    • 硬件复位(m_axi_aresetns_axi_lite_aresetn)会中断正在进行的 AXI4 传输,需确保复位时机(参考 PG034,第 7 页)。
    • 软复位(通过 CDMACR)可用于非关键场景。
  4. Scatter Gather 配置

    • 描述符链表需正确初始化,地址需对齐到 8 字节边界(参考 PG034,第 25 页)。
    • 中断延迟定时器(C_DLYTMR_RESOLUTION)需根据应用调整,以优化中断频率。

总结

AXI Central Direct Memory Access(AXI CDMA)IP(PG034)是一款高性能的 DMA 软核,专为嵌入式系统中的内存映射数据传输设计。其支持简单 DMA 和 Scatter Gather 两种模式,通过 AXI4 和 AXI4-Lite 接口提供高效数据移动和灵活控制。该 IP 核以其高吞吐量、可配置数据宽度和硬件自动化特性,广泛应用于视频处理、信号处理、网络数据包处理和 Zynq SoC 集成等领域。

FPGA设计工具推荐

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

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

    • SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
    • 双网口(RGMII)
    • 双SFP+
    • DDR
    • UART
    • IIC
在 Python 中,可以使用 statsmodels 模块中的 OLS 类来进行OLS回归模型的拟合和预测。下面是一个简单的示例代码: ```python import numpy as np import pandas as pd import statsmodels.api as sm # 生成随机数据 np.random.seed(123) X = np.random.rand(100) Y = 2*X + 0.5 + np.random.normal(0, 0.1, 100) # 将数据存放在DataFrame对象中 data = pd.DataFrame({'X': X, 'Y': Y}) # 添加截距项 data = sm.add_constant(data) # 拟合OLS回归模型 model = sm.OLS(data['Y'], data[['const', 'X']]) result = model.fit() # 输出回归结果 print(result.summary()) ``` 在上面的代码中,我们首先生成了一个简单的随机数据集,其中 X 是自变量,Y 是因变量。然后,我们将数据存放在了一个 pandas 的 DataFrame 对象中,并使用 sm.add_constant() 函数添加了截距项。接着,我们使用 sm.OLS() 函数拟合了OLS回归模型,并将结果保存在了 result 变量中。最后,我们使用 result.summary() 方法输出了回归结果的详细信息。 需要注意的是,在使用 statsmodels 进行OLS回归模型拟合时,需要显式地添加截距项,否则结果会有偏差。此外,我们还可以使用 result.predict() 方法来进行预测,即: ```python # 进行预测 new_data = pd.DataFrame({'X': [0.1, 0.2, 0.3]}) new_data = sm.add_constant(new_data) prediction = result.predict(new_data) # 输出预测结果 print(prediction) ``` 在上面的代码中,我们首先生成了一个新的数据集 new_data,然后使用 result.predict() 方法对其进行预测,并将结果保存在了 prediction 变量中。最后,我们使用 print() 函数输出了预测结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值