基于xilinx 平台的dma调试体会

年前最后一天,心不能飞。

1. AXI协议介绍

Xilinx ZYNQ或者UltraScale+ 芯片集成了ARM核和传统FPGA,具有硬件集成度高,ARM和FPGA的通信速率快,外部接口可灵活配置等优点。很适合应用在视觉、AI等领域。ARM和FPGA的数据交互大致有中断、寄存器和AXI等几种方式。
a. 中断, xilinx的soc芯片提供了专门的中断接口,由pl给到ps;
b. 寄存器, ps产生控制信号或者提供参数给到pl使用,或者ps读取pl侧的逻辑状态;
c. 当ps和pl需要频繁地的交互大量数据时,通常需要用到axi-dma;

在ZYNQ或者UltraScale+ 中支持三种AXI总线, 分别是
AXI4: 主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256的数据突发传输。
AXI-LITE: 轻量级的地址映射单次传输接口,占用很少的逻辑单元。
AXI-Stream: 面向高速数据流传输,去掉地址项,允许无限制的数据突发传输规模。

ZYNQ里pl和ps的接口共有9个接口
AXI-ACP:加速一致性接口,用来管理dma之类不带缓冲的AXI外设,PS端是slave接口,通过该接口PL
端可以直接访问PS部分的cache, 故PL逻辑可以直接从cache中拿到cpu的计算结果,同时第
一时间将逻辑加速运算的结果送至CPU. 用于传输少量数据。
AXI-HP: 高性能axi接口,共4个主要是为了PL访问PS上的存储器(DDR 和 OCM)而设计的高速数据通
路。
AXI-GP: 通用axi接口,共4个,包括两个32位主设备接口和两个32位从设备接口。

2. DMA介绍以及调试体会

PL和PS之间的接口(ACP,GP,HP)只支持AXI4和AXI-Lite协议,PL端的AXI-Stream协议是不能直接与PS相连的,需要先经过AXI4和AXI-lite转换,比如dma/vdma 的ip就是在pl的内部实现了AXI_Stream到AXI4的转换。PL和PS通过dma的方式进行数据传输时,PL输出的数据通过AXIS总线将数据先存入该模块中的FIFO,再将FIFO中的数据读出通过AXI4总线将数据发送给PS。xinlinx提供了dma的ip,也可以手动编写dma代码,并不复杂,可以更加方便调试。如果使用提供的ip, 配置好相关参数,通过axi-lite接口将长度,地址等信息配置下去即,相对来说较为简单;如果是手写dma,则重点要注意**m_axi_s2mm_awvalid 信号

每次通过AXI4总线发送一次burst传输之前先要发送控制请求m_axi_s2mm_awvalid ,并伴随发送起始地址、burst长度等信息。等待m_axi_s2mm_awready应答才可以进行burst传输。在目前的设计中,当一次m_axi_s2mm_awvalid发送,并且等到m_axi_s2mm_awready应答后,除非等待当前的burst传输完成,否则不再发送 m_axi_s2mm_awvalid请求。发送m_axi_s2mm_awvalid请求条件分为两种情况。

s2mm_ressize >= burst_size
这种情况表明至少还需要一个满burst才能将剩余的数据全部传输完成。此时当fifo_burst_cnt大于0时,表明fifo中至少还存在一个burst以上的数据量, 即可发是哪个控制请求。
s2mm_ressize < burst_size

这种情况表明只需再进行最后一次burst传输即可将剩下所有数据传输完,并且剩余的数据量不能占满一个burst. 此时fifo_burst_cnt恒为0,当fifo中的字节数量等于s2mm_ressize时表明剩余所有数据都已经写入fifo, 即可以发送m_axi_s2mm_awvalid请求,在这种burst传输下,当burst前面时钟周期已经将fifo中的数据都传输完成,burst内后面的时钟周期数据全部为0,并把对应的m_axi_s2mm_wstrb置0.

3. 提高dma传输效率的方法尝试
对于某些加速应用,pl和ps需要频繁地的交互,这个时候dma的传输效率显得尤为关键,有以下几种方法 可以尝试:

1: 通QoS设置优先级,通过写寄存器将其中的某个HP口的优先级设置提高,其他的HP口的优先级次之。 参考ug1085和ug585。
参考ug1085的437页读写仲裁这一部分,可以通过修改PCFGR和PCFGW来实现优先级的设定。HP Port使用的为DDRC的port3-5,可以修改PCFGR_3-5和PCFGW3-5,相关寄存器描述见此链接:https://www.xilinx.com/html_docs/registers/ug1087/ug1087-zynq-ultrascale-registers.html

2 : 对于utralscale +系列的芯片,由下图(pg1085)可知,PS_DDR控制器有6个AXI-Slave接口,与PL直接相关的是S3, S4, S5。 HPC0/HPC1都连接到了CCI interconnect. DP和HP0连接到了S3, HP1和HP2连接到了S4上,HP3和 FP DMA连接到了S5。如果需要提高带宽,要充分利用PS-DDR控制器的AXI Slave接口,如果可能,HP1和HP2最好不要同时使用,因为HP1和HP2都连接到了S4上,彼此会竞争带宽。

from pg1085
3 : 将DMA的读写突发长度适当的加大也有利于提高传输效率;

以上内容编写较为匆忙,可能有些许纰漏,欢迎指出讨论。

Xilinx DMA(直接内存访问)是一种用于高性能数据传输的技术。它允许外设设备(如网络接口卡、磁盘控制器等)直接访问系统内存,而无需CPU的干预。使用Xilinx DMA,可以实现高带宽、低延迟的数据传输,提高系统的性能和效率。 Xilinx DMA的使用步骤如下: 1. 配置DMA引擎:使用Xilinx提供的工具,对DMA引擎进行配置。配置包括设置传输模式、数据宽度、传输方向等参数。 2. 分配DMA缓冲区:在系统内存中分配一块连续的物理内存空间作为DMA缓冲区。该缓冲区用于存储传输的数据。 3. 初始化DMA传输:设置DMA引擎的传输参数,如源地址、目的地址、传输长度等。 4. 启动DMA传输:通过写入控制寄存器等方式,启动DMA传输。DMA引擎开始从源地址读取数据,然后将数据传输到目的地址。 5. 等待传输完成:在DMA传输过程中,可以通过轮询或者中断的方式等待传输完成。 6. 处理传输结果:获取传输结果,检查传输是否成功,处理错误情况。 7. 释放DMA资源:在传输完成之后,释放DMA引擎和DMA缓冲区等资源,确保系统正常运行。 需要注意的是,在使用Xilinx DMA进行数据传输时,需要合理设置DMA传输参数,避免数据丢失、数据乱序等问题。此外,为了确保DMA传输的正确性和可靠性,还应该进行一定的错误检测和纠正措施。 总之,Xilinx DMA是一项强大的数据传输技术,可以显著提高系统的性能和效率。通过合理配置和使用,可以实现高带宽、低延迟的数据传输,满足不同应用场景的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值