Zybo Z7板FPGA逻辑绕开ZYNQ PS直连外部CPU传数据可行吗?
方案可行性与实现指南
完全可行,绕开PS直接让PL对接UART是提升这类高速采样场景效率的最优路径之一,以下是具体实现要点:
硬件层面确认
Zybo Z7板载的UART转USB芯片(通常是FT2232H)的UART收发引脚(TX/RX)直接引到PL的IO Bank中。你需要:
- 查阅Zybo Z7官方原理图,找到对应UART_TX和UART_RX的PL引脚编号
- 在Vivado工程中添加引脚约束文件(
.xdc),将自定义UART模块的IO端口绑定到这些引脚上
PL侧逻辑设计
1. 自定义UART控制器+FIFO缓冲
由于采样速度远高于UART波特率,必须添加异步FIFO做跨时钟域缓冲:
- 在采样时钟(计数器/环形振荡器时钟)域下,将采样数据写入FIFO
- 在UART时钟(由PL时钟分频得到,匹配目标波特率)域下,从FIFO读出数据并通过UART发送至电脑
- 按需计算FIFO深度,确保采样数据不会溢出丢失
2. 内置握手机制
在PL逻辑中直接实现闭环握手,全程脱离PS控制:
- 采样启动:计数器触发后,持续将数据写入FIFO
- 采样结束:触发FIFO读使能,同时向电脑发送采样结束标记帧(比如固定字节序列
0xAA 0xBB) - 等待确认:PL侧UART接收模块监听电脑发来的确认帧(比如
0xCC),收到后立即重置计数器并启动下一轮采样
电脑端脚本适配
修改Python脚本配合PL的握手机制:
- 持续监听USB串口,收到采样结束标记帧后立即回复确认帧
- 读取采样数据时做好帧同步,避免和握手帧混淆
- 尽可能提高串口波特率(FT2232H支持最高12Mbps左右的波特率),进一步压缩传输耗时
关键注意事项
- 跨时钟域同步:采样时钟和UART时钟分属不同域,FIFO的读写指针必须用格雷码同步,避免亚稳态
- 波特率校准:PL内的UART时钟分频系数要精确,确保和电脑端串口波特率完全匹配
- 引脚冲突检查:确认所选PL引脚未被板载其他外设(如SD卡、HDMI)占用
- 分步测试:先单独验证UART收发功能,再接入采样框架,最后添加握手机制,逐步排查问题
内容的提问来源于stack exchange,提问作者Rahul Jayachandran
相关产品推荐
相关产品推荐

