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

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日

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备