zhiyaormb 2024-09-10 16:32 采纳率: 23.1%
浏览 20
已结题

zynq7015,PCIE读写延时偏大

读写数据量不大,尤其是写。但是对实时性要求比较高。
win10/11,xilinx的ZYNQ7015的开发板,XDMA的驱动,H2C0写,C2H0读,小数据量读写,每次读或者写都要差不多70us(写一般只有几十个字节,读固定4096字节,重复256次,取平均时间)。增加数据长度的话时间延长不大。时间是用std::chrono来测量的,逻辑分析仪上抓波形得到的时间也基本与此一致。
用user进行几十个字节的数据量的写,似乎写的时间可以大幅降低。DMA反而比user还慢?
从这两点上来看,似乎时间不是消耗在了数据传输上。这个也不像TCPIP那样需要几次握手什么的,感觉纯粹就是准备DMA的过程消耗了比较多的时间。
以写为例,驱动这边(代码就不贴了,只说大概流程)EvtIoWriteDma这里,GetQueueContext,WdfDmaTransactionInitializeUsingRequest之后就是WdfRequestMarkCancelableEx这几个函数准备DMA,紧接着就WdfDmaTransactionExecute,EnginePollTransfer传输数据。
不知道这种现象算不算正常,有没有改善的思路?

  • 写回答

25条回答 默认 最新

  • 阿里嘎多学长 2024-09-10 16:33
    关注
    获得0.30元问题酬金

    AIGC生成:


    Zynq7015 PCIe 读写延时偏大解决方案

    你遇到的问题是 Zynq7015 开发板上的 PCIe 读写延时偏大,特别是在写操作中。为了解决这个问题,我们需要分析可能的原因和解决方案。

    可能的原因

    1. XDMA 驱动的实现问题:XDMA 驱动可能存在实现问题,导致 PCIe 读写延时偏大。
    2. PCIe 总线的带宽限制:PCIe 总线的带宽限制可能会导致读写延时偏大。
    3. Zynq7015 处理器的性能限制:Zynq7015 处理器的性能限制可能会导致读写延时偏大。

    解决方案

    1. 优化 XDMA 驱动:可以尝试优化 XDMA 驱动的实现,例如使用 DMA 的批量传输机制来提高传输速度。
    2. 优化 PCIe 总线配置:可以尝试优化 PCIe 总线的配置,例如使用 PCIe 3.0 的总线来提高传输速度。
    3. 优化 Zynq7015 处理器的配置:可以尝试优化 Zynq7015 处理器的配置,例如使用高性能的处理器核心来提高处理速度。

    示例代码

    以下是一个使用 XDMA 驱动实现 PCIe 读写操作的示例代码:

    #include <xdma.h>
    #include <pcie.h>
    
    int main() {
        // 初始化 XDMA 驱动
        xdma_init();
    
        // 配置 PCIe 总线
        pcie_config_t config;
        config.burst_size = 128;
        config.transfer_size = 1024;
        pcie_config(&config);
    
        // 读取数据
        uint32_t data[1024];
        xdma_read(data, 1024);
    
        // 写入数据
        uint32_t write_data[1024];
        xdma_write(write_data, 1024);
    
        // 关闭 XDMA 驱动
        xdma_close();
    
        return 0;
    }
    

    示例输入和示例输出

    输入:读取 1024 字节的数据

    输出:读取的数据

    流程图

    以下是一个 PCIe 读写操作的流程图:

    graph LR
        A[读取数据] -->|XDMA|> B[DMA 读取数据]
        B -->|PCIe|> C[PCIe 总线传输数据]
        C -->|Zynq7015|> D[处理器处理数据]
        D -->|XDMA|> E[DMA 写入数据]
        E -->|PCIe|> F[PCIe 总线传输数据]
        F -->|Zynq7015|> G[处理器处理数据]
    

    希望这个解决方案能够帮助你解决 PCIe 读写延时偏大的问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 9月18日
  • 创建了问题 9月10日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?