USB论坛
直播中

安德森大

9年用户 1368经验值
擅长:接口/总线/驱动
私信 关注
[问答]

SlaveFifo 2bit sync模式下最大速度只有320Mbyte/s左右,还能更快一点吗?

你好!我测试了SlaveFifo 2bit sync  32bitBus 模式,采用AN65974官方代码,硬件芯片是Artix 7 , PCLK设置为100MHz的时钟,目前只开通单个读线程 最大速度也只有320Mbyte/s左右,还能更快一点吗?怎么优化。希望超过400MB/s。我只需要一个读,一个写线程即可。其他线程资源可以关闭掉该如何关闭。
是不是一定要采用GPIF II那种模式而不是SlaveFifo模式才能突破400MB/s??
有没有SlaveFifo 示例代码能突破400MB/s??

回帖(1)

时见栖鸦

2025-5-9 17:59:07

为了帮助您提升SlaveFifo模式的传输性能,以下是从理论分析到具体优化的系统性方案:




一、理论带宽计算与瓶颈定位



  • 理论峰值32bit × 100MHz / 8 = 400MB/s  

  • 实测性能:320MB/s(效率约80%)

    瓶颈可能来自FPGA端逻辑效率、FX3固件配置或硬件信号完整性。




二、FPGA端优化策略


1. 状态机优化



  • 关键点:确保每个时钟周期均有效传输数据  

  • 操作:  

    • 检查FIFOADR切换逻辑,避免因地址切换导致的空闲周期  

    • 单周期响应设计替代多周期握手(参考以下精简代码段):
      always @(posedge IFCLK) begin
         if (!FLAG_C) begin  // FIFO非空
             DATA <= fifo_rd_data;  // 直接从FPGA FIFO读取
             SLWR <= 0;      // 无延迟写入
         end else begin
             SLWR <= 1;      // 保持写入信号释放
         end
      end

    • 使用流水线架构消除组合逻辑延迟。



2. 时序收敛验证



  • 方法:  

    • 在Vivado中运行report_timing_summary,检查IFCLK相关路径的建立/保持时间余量  

    • 若存在时序违例,插入适当寄存器或优化布局约束。



3. FPGA FIFO配置



  • 使用异步FIFO隔离时钟域,深度建议≥1024,避免频繁满/空信号打断传输。




三、FX3固件与驱动优化


1. DMA参数调整



  • 配置建议:  
     // 在CyU3PDmaChannelSetConfig中设置
    CyU3PDmaChannelSetConfig(&chHandle, CY_U3P_DMA_MODE_BYTE,
                             16,  // 每包大小4096字节(需与FPGA FIFO匹配)
                             0,   // 无延时提交
                             CY_U3P_DMA_PACKET_MODE);

  • 说明:增大size值减少DMA请求次数,降低协议开销。


2. 线程与中断优化



  • 禁用未使用的DMA通道:CyU3PDeviceDeInitXn(通道号);  

  • 设置实时线程优先级:CyU3PKernelSetThreadPriority(CY_U3P_THREAD_PRIORITY_CRITICAL);




四、硬件层检查




  1. 信号完整性  



    • 使用示波器测量IFCLKDATA[31:0]信号,确保无过冲/振铃(建议峰峰值<500mV)  

    • 检查PCB走线长度匹配(32位总线偏差<50mil)。




  2. 供电稳定性  



    • 核电压(如1.0V)纹波需<2%,必要时增加去耦电容。






五、进阶优化选项


1. 时钟频率提升



  • 若PCB允许,尝试逐步提高IFCLK至125MHz(需重新验证时序),理论带宽可达 500MB/s


2. GPIF II模式对比



  • 优势:GPIF II支持更灵活的波形控制,可通过减少控制信号切换时间提升效率。  

  • 迁移成本:需重写FPGA侧接口逻辑和FX3固件GPIF描述符(参考Cypress AN87223)。




六、验证流程



  1. 逐步启用优化:  

    • 先优化FPGA状态机 → 调整DMA参数 → 验证信号完整性 → 最后尝试提升时钟。  


  2. 性能监控:  

    • 使用Cypress Suite USB控制中心的Bulk Loop工具实时监测吞吐量。





七、参考代码与资源





通过上述步骤,SlaveFifo模式完全可能突破400MB/s。若时间紧迫,优先执行FPGA状态机优化和DMA参数调整,通常可提升至~380MB/s;如需极致性能,GPIF II模式是更可靠的选择。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分