六、XDMA框架下的桌面采集和PCIE传输项目

前言:PCIE两个主要的框架包括XDMA、RIFFA。前面介绍了RIFFA的使用,下面介绍XDMA框架的使用。

一、XDMA框架介绍

XDMA是xilinx官方提供的7系列FPGA的pcie应用程序开发的一个框架,其中可以支持用户AXI、AXISTREAM总线交互,主要特点是PC端应用程序可以很方便的通过AXI时序访问FPGA侧逻辑。
补充:实际更多使用AXI总线,AXISTREAM总线效率不容易提升。

Q:PCIE DMA主要来做什么?
A:PCIe DMA 主要用来解决数据在 FPGA 和 PC 之间高速通信的问题。


Q:XDMA 的效率怎么样?
A:实测传输带宽大约在满带宽的70%-80% 左右。

XDMA VS RIFFA

数据位宽上
  • RIFFA:最大数据位宽128bit(如果想提高需要手动改框架代码,难度高)
  • XDMA:最大数据位宽256bit(支持PCIE 3.0)
效率上

XDMA < RIFFA
相同任务下:RIFFA的带宽达到800MB/s左右,而XDMA只有500MB/s左右。
在这里插入图片描述
在这里插入图片描述

开发的难易程度上

XDMA < RIFFA

二、项目介绍

项目概况
PC 机捕获视频,通过 PCIE 驱动 H2C 通道把视频数据下发到 DDR3,AXI 通道读取视频数据驱动 HDMI 显示到显示器。
USER Device 我们创建一个 axi lite 从设备用于存储上位机下发的配置数据。
中断我们通过 user device 产生一个标志触发 Interrupt,上位机读取此标志。
在这里插入图片描述

  • H2C(host 2 card)是 PC 机下发数据到 FPGA 板卡的通道。
  • C2H (card 2 host)是 PC 机读板卡的数据通道。
  • USER 是通过 XDMA 的 axi-lite 接口访问 user device 接口,这里这个 user device 可以是任意的从机。
  • Event 接口是事件接口,通过 xdma 的中断引脚给 PC 机传递中断事件,但是这个不会中断 pc 的 CPU ,而是可以 CPU 循环读取此事件标志。

三、重难点

3.1 XDMA ip配置

Basic标签页

需要配置选项
Mode:配置模式,选择 Basic 配置模式就可以了,Advanced 高级配置一般用不到;
Lane Width:链路宽度,对于达芬奇 Pro 开发板,选择 x2;
Max Link Speed:最大链路速度,选择 5.0GT/s,即PCIe 2.0 的传输速率;
Reference Clock:参考时钟频率,选择 100MHz;
AXI Clock:AXI 时钟频率,选择 125 MHz;
DMA Interface Option:DMA 接口选项,选择 AXI4 Memory Mapped接口。

在这里插入图片描述
关于 Basic 标签页的部分选项介绍如下
Functional Mode:功能模式,对于 A7 系列的 FPGA 芯片,只支持 DMA 模式;
Mode:配置模式,可以选择基本(Basic)配置模式或高级(Ad

### 回答1: 在 XDMA 设备中,中断处理程序是用来处理 DMA 完成和错误事件的。中断处理程序的实现通常会包括以下步骤: 1. 确定中断源:读取 XDMA 的中断状态寄存器,以确定触发中断的源头。 2. 处理中断:根据中断源,执行相应的处理操作。例如,在 DMA 完成中断时,可以读取 DMA 完成寄存器来确定已经完成的传输数量。 3. 清除中断:在处理完中断后,需要清除中断状态寄存器。这可以通过写入相应的位来完成。 以下是一个示例 XDMA 中断处理程序的代码: ```c void xdma_irq_handler(void *data) { struct xdma_dev *dev = data; u32 irq_status; irq_status = xdma_read(dev, XDMA_IRQ_STATUS_OFFSET); if (irq_status & XDMA_IRQ_COMPLETE_MASK) { u32 complete = xdma_read(dev, XDMA_DMA_COMPLETE_OFFSET); /* process DMA completion */ xdma_write(dev, XDMA_IRQ_STATUS_OFFSET, XDMA_IRQ_COMPLETE_MASK); } if (irq_status & XDMA_IRQ_ERROR_MASK) { u32 error = xdma_read(dev, XDMA_DMA_ERROR_OFFSET); /* process DMA error */ xdma_write(dev, XDMA_IRQ_STATUS_OFFSET, XDMA_IRQ_ERROR_MASK); } } ``` 在这个例子中,中断处理程序首先读取中断状态寄存器,然后根据中断源执行相应的操作。最后,它会清除中断状态寄存器,以便下一次中断可以正常触发。请注意,中断处理程序应该是尽可能快的,以免影响系统的性能。 ### 回答2: xdma的中断处理程序主要用于处理xdma设备发生中断时的相关操作。以下是xdma的中断处理程序的基本步骤: 1. 中断服务程序的入口:当xdma设备触发中断时,中央处理器(CPU)会跳转到中断服务程序的入口,即中断处理程序的起始地址。 2. 寄存器保存和恢复:在处理中断之前,中断处理程序需要保存当前的寄存器状态,以免发生寄存器数据丢失。保存的寄存器包括CPU寄存器、状态寄存器、栈指针等。当中断处理完成后,需要将之前保存的寄存器状态恢复。 3. 中断处理逻辑:中断处理程序根据中断类型和中断原因来执行相应的处理逻辑。对于xdma设备中断,可能的处理逻辑包括: - 确定中断源:中断处理程序需要确定是哪个xdma设备发生了中断,以便进行后续的处理。 - 中断状态处理:读取中断状态寄存器,判断中断原因,例如传输完成、传输错误等。 - 数据处理:根据中断原因,处理中断所涉及的数据。比如,如果是传输完成,可以触发相应的后续操作,如通知应用程序传输完成。 - 清除中断标志:处理完中断后,需要清除相应的中断标志或寄存器状态,以准备下一次中断。 4. 中断结束:中断处理程序执行完成后,会跳转回中断服务程序的返回地址,中央处理器继续执行原有的程序流程。 总之,xdma的中断处理程序是用来处理xdma设备中断的,其主要包括保存和恢复寄存器状态、中断处理逻辑和中断结束等步骤。在中断处理过程中,通过读取中断状态寄存器来确定中断原因,并根据不同的中断原因执行相应的处理逻辑。处理完成后,需要清除中断标志以便下一次中断的准备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值