FPGA + FX3 实现 USB3.0 与 PC 通信开发心得记录
FPGA + FX3 实现 USB3.0 与 PC 通信开发心得记录 🏄
1️⃣ 综述
本学习计划主要围绕 Cypress FX3 芯片的 USB3.0 接口开发,涵盖:
- FX3 硬件设计与调试
- FX3 固件(FW)编写
- 上位机软件开发(基于 Python + libusb)
- 与 FPGA 的高速数据交互(DMA + FIFO)
开发目标包括:
- 基于正点原子教程中的读写/回环测试固件,完成基础通信测试
- 实现简单的上位机功能:数据接收、数据发送
- 在此基础上添加图像显示、波形显示等功能
- 实现可控数据流的传输机制(按需触发或控制)
2️⃣ FPGA 端开发记录
✅ 参考资料
- 正点原子 USB3.0 FMC 模块资料
- R厂 USB3.0 FMC 模块参考设计
✅ 开发要点(FX3 GPIF 接口)
FX3 与 FPGA 通信使用 GPIF II 接口,核心是对 FIFO 的控制:
| 信号 | 功能说明 |
|---|---|
FLAGA/B |
写 FIFO 的空满标志 |
FLAGC/D |
读 FIFO 的空满标志 |
data[31:0] |
数据线,三态输出 |
addr[1:0] |
地址选择(2'b00: 写,2'b11: 读) |
pclk |
GPIF 时钟(典型为 100MHz) |
slcs_n |
片选,通常一直拉低 |
slrd_n |
读使能(低有效) |
slwr_n |
写使能(低有效) |
sloe_n |
数据方向控制(0: 读,1: 写) |
pktend_n |
数据包结束标志(类似 AXI LAST) |
⚠️ 注意事项:
- FX3 为 SDR 模式,稳定传输时需将时钟相位反转(180°)
- FPGA 实现通常只需一个状态机即可完成基本读写
- 数据流搬运逻辑是核心部分,需处理好时序与突发读写
3️⃣ 上位机开发记录
✅ 常见开发方式:
- 使用
libusb驱动 + 开源库(支持 Python/C++ 等) - 使用某日本厂商提供的
.dll(支持 Python,但疑似存在固件兼容性问题)- 症状:每连续读取两次就卡死,需设备复位
- 使用 Cypress 官方 CyAPI 驱动 和 C++/C# 进行开发(支持 Visual Studio)
✅ 当前采用方案:
💡
libusb驱动 +pyusb实现高速上位机开发,可轻松实现 2Gbps+ 的传输速率,支持 1080P@60Hz 图像流传输
建议开发工具链:
libusb-win32或使用zadig工具安装 libusb 驱动pyusb+numpy+opencv等进行数据接收、显示与处理- 使用
AI帮助写 PyQt5 上位机
4️⃣ FX3 固件开发
目前使用 正点原子教程 中的双 FIFO 固件为基础,已完成:
- 读写通道初始化配置
- 回环模式测试(Loopback)
- 基本 DMA 配置与 Endpoint 映射
实际使用过程中,若无特殊应用,固件配置基本够用,仅需根据 Endpoint 和 FIFO 容量进行调整即可。
📌 下一步:
- 添加 图像显示 与 波形显示模块
- 加入 异常检测:如 USB 断开、重连管理
- 上位机多线程优化,提升接收性能

浙公网安备 33010602011771号