如何从PC向ZedBoard的FPGA设计发送串口数据并验证UART接收功能
基于pySerial实现PC与ZedBoard FPGA UART通信实测方案
1. 前期硬件与设计校验
- 确认你的UART接收设计的引脚约束正确:仿真用到的UART_RX信号必须绑定到ZedBoard板载USB-UART对应引脚,或外接USB转TTL模块的RX引脚,注意电平匹配,ZedBoard IO默认是3.3V标准
- 给ZedBoard上电,下载FPGA比特流,确认PC端能识别到对应的串口设备:Windows系统在设备管理器的端口列表查看COM号,Linux/macOS在
/dev目录下查找ttyUSB*或tty.usbserial-*格式的设备,记下端口号 - 确认你的UART设计参数:波特率、数据位长度、停止位、奇偶校验规则,后续pySerial配置必须和这些参数完全一致,否则会出现接收乱码或无响应问题
2. pySerial环境安装
通过pip直接安装官方包即可:pip install pyserial
3. 测试发送代码示例
以下基础代码可直接使用,替换对应参数为你的实际配置即可:
import serial import time # 串口参数必须和你的FPGA UART设计完全匹配 ser = serial.Serial( port='COM3', # 替换为你实际的串口端口号 baudrate=115200, # 替换为你的设计指定波特率 parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) if ser.is_open: print("串口打开成功") # 发送测试数据:如果要发送仿真时的二进制data_in_sim序列,直接转为bytes对象即可 test_data = b"Test UART data" # 替换为你需要发送的目标数据 ser.write(test_data) print(f"已发送数据:{test_data}") # 若需要接收FPGA返回数据可添加以下逻辑 time.sleep(0.1) recv_data = ser.read(ser.in_waiting) if recv_data: print(f"收到FPGA返回数据:{recv_data}") ser.close() else: print("串口打开失败,请检查端口是否被占用、硬件连接是否正常")
4. 异常排查要点
- 若FPGA无接收响应,优先用示波器抓UART_RX引脚波形,确认PC端有符合波特率要求的信号输出
- 检查FPGA端波特率分频系数计算是否和实机使用的时钟频率匹配,仿真验证通过不代表实机时钟配置没有偏差
- 发送二进制序列时直接传入bytes类型对象即可,和仿真激励的逻辑完全一致
内容的提问来源于stack exchange,提问作者abahadoran
相关产品推荐
相关产品推荐

