English | 中文
自适应波特率 UART 收发器 — 自动检测 9600/19200/38400/57600/115200
本项目由 SynthPilot 全流程驱动完成 — 从 RTL 编写、仿真验证、综合实现到比特流生成,全部通过 AI + MCP 自动化工具链一次性交付。
🔗 了解更多:synthpilot.dev 💬 交流 QQ 群:1007696121
- 自动波特率检测 — 最小脉宽跟踪 + ±4% 容差匹配,3 次确认后锁定
- 5 种标准波特率 — 9600 / 19200 / 38400 / 57600 / 115200
- 16x 过采样 — 中点采样,抗噪声干扰
- 环回验证 — RX 数据自动回显至 TX,便于测试
- LED 状态指示 — 锁定 / RX 活动 / TX 活动 / 帧错误
- 极低资源占用 — 176 LUT / 155 FF(xc7z020 的 0.33%)
uart_top
├── auto_baud_detect 脉宽测量 → 波特率匹配 → 锁定
├── baud_gen (×2) 可配置 16x 过采样分频器 (RX/TX 各一)
├── uart_rx 8N1 接收, 双 FF 同步, 中点采样
└── uart_tx 8N1 发送, LSB first
├── rtl/
│ ├── auto_baud_detect.v 波特率自动检测
│ ├── baud_gen.v 波特率分频器
│ ├── uart_rx.v UART 接收器
│ ├── uart_tx.v UART 发送器
│ └── uart_top.v 顶层模块(含环回)
├── sim/
│ └── uart_tb.v 测试文件(6 组 14 项测试)
├── constrs/
│ └── uart_pins.xdc 引脚与时序约束 (PYNQ-Z2)
└── LICENSE
| 参数 | 值 | 说明 |
|---|---|---|
| CLK_FREQ | 50 MHz | 系统时钟 |
| 过采样倍率 | 16x | 标准 UART 采样 |
| 检测容差 | ±4% | 波特率匹配窗口 |
| 锁定阈值 | 3 次 | 连续匹配次数 |
| DIV (115200) | 27 | 50M / 115200 / 16 |
| DIV (9600) | 325 | 50M / 9600 / 16 |
| 指标 | 值 |
|---|---|
| Setup WNS | +7.288 ns |
| Hold WHS | +0.199 ns |
| LUT / FF | 176 / 155 |
| 功耗 | 0.107 W |
| 目标器件 | xc7z020clg400-2 |
| 测试组 | 内容 | 结果 |
|---|---|---|
| G1 | 115200 波特率检测 | ✅ |
| G2 | 115200 环回回显 (0xA5, 0x3C, 0xFF) | ✅ |
| G3 | 复位后 9600 重检测 | ✅ |
| G4 | 边界数据 (0x00, 0xFF, 0xAA) | ✅ |
| G5 | 复位后 38400 检测 | ✅ |
| G6 | 帧错误检测与恢复 | ✅ |
- 在 Vivado 中创建工程,目标器件选择
xc7z020clg400-2 - 添加
rtl/下全部源文件,设置uart_top为顶层 - 添加
constrs/uart_pins.xdc约束文件(按实际板卡修改引脚) - 添加
sim/uart_tb.v到仿真文件集 - 运行仿真 → 综合 → 实现 → 生成比特流