myFPGA.com.cnFPGA 技术与产业观察
← 返回栏目

FPGA UART 接口入门:波特率、帧格式与收发

myfpga.com.cn 编辑部 · 2026-10-05

UART 是通用异步收发器。它将并行数据串行发送,再在接收端还原数据;链路不共享时钟,需要双方事先约定波特率和帧格式。设计 FPGA UART 时,把收发逻辑、引脚电平和线缆接口分层看,会更容易定位问题。

从一帧 8N1 开始

常见的非反相逻辑电平 UART 空闲为高,起始位为低,之后发送数据、可选校验位和高电平停止位。8N1 表示 8 个数据位、无校验、1 个停止位;常见数据位顺序是最低位先发送:

空闲高 → 起始位0 → D0 D1 D2 D3 D4 D5 D6 D7 → 停止位1

这是一个 10 位的帧示例,不代表所有 UART 都只能采用该格式。两端必须匹配数据位数、校验、停止位和波特率。帧结构与接收错误介绍见 TI 的 UART 协议说明。

UART 帧只界定一个字符。项目若需要报文长度、命令、校验或重发,应在上层另行定义,不能把收到一个停止位当作整条业务命令完成。

波特率采样:尽量远离跳变边沿

设目标波特率为 B,一个位时间为 1/B。发送端按位节拍输出;接收端识别起始下降沿后,先在约半个位时间处确认仍为低,再按位间隔在各位中部采样。

8 倍或 16 倍过采样是常见实现选择,可以帮助定位采样点,也可结合中部多点判决;并不是 UART 统一要求的固定倍数。双方频率差、起始检测延迟与信号边沿都会影响采样裕量。相关机制见上述 TI 说明,不能将某个实现的容差推广到所有 UART。

FPGA 可用系统时钟产生位节拍或过采样使能。整数分频时,若每位为 N 个系统时钟,实际波特率为 f_clk/N;计算与目标的偏差,并把时钟源误差计入预算。不能整除时可考虑分数分频,但还要验证节拍间隔变化对收发采样的影响。

发送与接收分别管理

发送路径可分为数据装载、起始位、数据位、校验位和停止位。用 ready/valid 或等效握手明确何时接受一个字节;发送忙时不能静默覆盖尚未发送的数据。

接收路径先处理异步 RX 输入,再做起始确认、移位与校验,最后输出数据有效和错误状态。同步链用于降低亚稳态传播风险,其延迟要进入采样预算;状态机不能直接依赖未同步的异步输入。具体同步结构和时序例外应按目标工具方法验证,不要一刀切地忽略整个接收路径。

停止位不符合预期可标记帧错误,校验不符可标记校验错误;FIFO 或下游来不及接收时还需记录溢出。接收缓存容量、流控和错误后的恢复策略由应用确定。

UART、RS-232、RS-485 不是同一层

名称 主要描述什么 FPGA 侧需要确认什么
UART 异步字符帧及收发逻辑 波特率、格式、逻辑极性、缓存和采样
逻辑电平 UART 引脚 器件引脚侧的数字信号 I/O 电压、输入门限、容限和共地条件
RS-232 包含电气、连接及信号定义的接口标准 外部电平转换/收发器及接口连接
RS-485 平衡差分驱动器与接收器的电气要求 外部差分收发器、方向控制与总线设计

RS-232 数据线使用相对参考地的正负电压,逻辑映射也与上述非反相 UART 引脚不同。普通 FPGA I/O 不能被默认视为 RS-232 接口,应通过与其 I/O 条件匹配的收发器转换,并查阅具体接口与器件资料。电气层次见 TI 的 TIA/EIA-232-F 接口说明。

RS-485 定义差分电气特性,本身不规定 UART 帧或应用报文。UART 可以作为其承载的数据格式之一。两线半双工应用还需管理收发器使能:发送末个停止位完成并满足收发器时序后再释放总线,为另一端响应预留切换时间;终端、偏置、参考连接和隔离按实际拓扑设计。背景见 TI 的 RS-485 设计指南。

因此,综合出 UART RTL,并不意味着 FPGA 已具备 RS-232 或 RS-485 的线缆驱动能力。USB 转串口设备也应先确认输出侧究竟是逻辑电平、RS-232 还是 RS-485。

首次验证收发

先在仿真中检查连续帧、不同数据位组合、起始毛刺、错误停止位和下游阻塞。再做已确认电气兼容的回环或外部收发测试;非隔离逻辑电平连接需核对 TX/RX 方向及参考地。

在引脚波形上测位宽和空闲电平,在片上观察采样计数、移位结果及错误标志。内部回环可检查部分逻辑,但不能证明外部收发器、线缆和方向控制正确;更换帧格式或波特率后应重新验证。

延伸阅读

信息来源