FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-技术文章/快讯-技术分享-正文

基于UART的远程数据采集与PC通信系统:FPGA毕业设计实施指南

二牛学FPGA二牛学FPGA
技术分享
4小时前
0
0
2

Quick Start

  • 准备环境:安装 Vivado 2021.1 及以上版本(推荐 2022.2),确认支持目标 FPGA 器件(如 Artix-7 XC7A35T)。
  • 创建工程:打开 Vivado,选择“RTL Project”,添加器件型号,勾选“Do not specify sources at this time”。
  • 添加源码:将 UART 收发器、数据采集模块(如 ADC 接口或计数器模拟)和顶层模块的 .v 文件加入工程。可从 GitHub 开源仓库(如 zipCPU/uart)获取已验证的 UART 核。
  • 编写约束:创建 .xdc 文件,定义系统时钟(如 50 MHz)、复位(低有效)、UART 收发引脚(如 RX: J15, TX: L16)和板载 LED 等。
  • 综合与实现:运行 Synthesis → Implementation,确保无严重时序违例(WNS > -0.2 ns 可接受)。
  • 生成比特流:Generate Bitstream,完成后连接开发板(如 Nexys A7)并下载。
  • 打开串口终端:使用 PuTTY 或 Tera Term,配置波特率 115200、8 位数据、1 位停止位、无校验。
  • 观察现象:上电后,终端应每秒收到一行递增的 16 进制数(如 0x0001, 0x0002…),表示数据采集与发送成功。

验收点:终端输出稳定无乱码;按下板载按钮(复位)后重新从 0 开始计数。

前置条件与环境

项目推荐值说明替代方案
FPGA 器件Xilinx Artix-7 XC7A35T主选器件XC7A100T, Spartan-6, Cyclone IV (需移植)
EDA 版本Vivado 2022.2推荐最新稳定版Vivado 2018.3+, ISE (不推荐)
仿真器Vivado Simulator 或 ModelSim功能验证Verilator (仅仿真)
时钟 / 复位50 MHz 主时钟,低电平有效复位标准配置100 MHz(需调整波特率生成器分频系数)
UART 接口板载 USB-UART 桥(如 FT2232)方便调试外部 MAX3232 + DB9 串口
约束文件XDC 文件:时钟周期 20 ns,引脚分配时序与物理约束UCF (ISE)
PC 端工具串口调试助手(如 SSCOM)数据接收minicom (Linux), screen (macOS)

目标与验收标准

本系统实现 FPGA 端远程数据采集(模拟 ADC 或传感器数据),通过 UART 发送至 PC 显示。验收标准如下:

  • 功能点:FPGA 上电后自动采集 16 位数据(如内部计数器值),并以 1 Hz 频率通过 UART 发送。
  • 性能指标:波特率 115200 bps,误码率 < 10^-6(在 1 米内无屏蔽线缆条件下)。
  • 资源占用:LUT < 200,FF < 150,BRAM 0(纯逻辑实现)。
  • Fmax:系统时钟 50 MHz 下,UART 模块时序裕量 ≥ 0.2 ns。
  • 验收方式:串口终端连续接收 1000 帧无错帧;板载 LED 闪烁指示发送状态。

实施步骤

工程结构

建议采用模块化结构,顶层文件实例化以下子模块:

  • clk_div.v:分频产生 UART 采样时钟(16x 波特率)。
  • uart_tx.v:UART 发送器,支持 8 位数据、1 位停止位。
  • data_acq.v:数据采集模块,内部计数器每 1 秒递增一次。
  • top.v:顶层,连接所有模块,包含复位同步器。

关键模块实现

UART 发送器(uart_tx.v):采用状态机(IDLE, START, DATA, STOP)。采样时钟为 16x 波特率,在每位的中点采样以增强抗干扰性。关键代码片段:

reg [3:0] bit_cnt;
reg [7:0] shift_reg;
reg [4:0] clk_cnt; // 16x oversample counter

always @(posedge clk or negedge rst_n) begin
 if (!rst_n) begin
 txd &lt;= 1'b1;
 state &lt;= IDLE;
 end else begin
 case (state)
 IDLE: if (tx_start) begin
 shift_reg &lt;= {1'b1, tx_data, 1'b0}; // stop+data+start
 bit_cnt &lt;= 4'd9;
 clk_cnt &lt;= 5'd0;
 state &lt;= START;
 end
 START: begin // send start bit (0)
 txd &lt;= 1'b0;
 if (clk_cnt == 5'd15) begin
 clk_cnt &lt;= 5'd0;
 state &lt;= DATA;
 end else clk_cnt &lt;= clk_cnt + 1;
 end
 DATA: begin
 txd &lt;= shift_reg[0];
 if (clk_cnt == 5'd15) begin
 clk_cnt &lt;= 5'd0;
 shift_reg &lt;= {1'b1, shift_reg[7:1]};
 if (bit_cnt == 4'd0) state &lt;= STOP;
 else bit_cnt &lt;= bit_cnt - 1;
 end else clk_cnt &lt;= clk_cnt + 1;
 end
 STOP: begin
 txd &lt;= 1'b1;
 if (clk_cnt == 5'd15) state &lt;= IDLE;
 else clk_cnt &lt;= clk_cnt + 1;
 end
 endcase
 end
end

注意:上述代码中 shift_reg 初始化包含起始位和停止位,发送顺序为 LSB first。实际使用时需确保 tx_start 脉冲宽度至少为一个采样时钟周期。

时序 / CDC / 约束

由于整个系统工作在同一时钟域(50 MHz),不存在跨时钟域问题。但需注意:

  • 复位同步:外部异步复位需经过两级触发器同步后再使用,避免亚稳态。
  • 时序约束:在 XDC 中声明主时钟 create_clock -period 20.0 [get_ports clk],Vivado 自动分析路径。
  • I/O 约束:UART TX 引脚可设为 set_property IOSTANDARD LVCMOS33 [get_ports txd]

验证

编写 testbench 模拟 UART 发送过程,验证波形:

  • 检查 txd 在起始位后依次输出 8 位数据(LSB first),最后为停止位高电平。
  • 使用仿真断言:#8680 assert(txd == 1'b1);(对应 115200 波特率下的位时间 8.68 μs)。

上板

下载比特流后,用串口线连接 PC。若终端无输出,先检查:

  • 波特率是否匹配(常见错误:误设为 9600)。
  • TX 引脚是否与板载 USB-UART 的 RX 相连(交叉连接)。

原理与设计说明

为什么选择 16x 过采样? 在 UART 接收端,过采样率越高,对时钟偏差的容忍度越大。16x 采样可在每位内提供 16 个采样点,取中点(第 8 个点)可容忍 ±1.5 位的时钟偏差,而 8x 采样仅能容忍 ±0.5 位。本设计仅实现发送,但采用相同架构便于后续扩展接收功能。

资源 vs Fmax 权衡:纯逻辑实现 UART 占用 LUT 约 50-80 个,FF 约 40-60 个,远低于使用 BRAM 或 MicroBlaze 软核的方案。代价是波特率不可动态调整(需重新综合)。若需要可配置波特率,可引入 AXI-Lite 接口,但会增加 30% LUT 开销。

吞吐 vs 延迟:115200 bps 下,每字节传输时间约 86.8 μs(含起始/停止位),有效数据吞吐约 11.5 KB/s。对于低频传感器(如温度、湿度)足够;若需采集高速 ADC(如 1 MSPS),需改用 SPI 或 LVDS 接口。

易用性 vs 可移植性:本设计使用 Verilog 2001 语法,无 Xilinx 原语,可直接移植到 Altera/Intel 平台。若使用 Vivado IP(如 UART Lite),则丧失可移植性。

验证与结果

指标测量值条件
LUT 使用76Vivado 2022.2, Artix-7
FF 使用54同上
Fmax312 MHz最差工艺角,50 MHz 时钟下 WNS=3.2 ns
误码率< 10^-81 米 USB 线缆,115200 bps,10000 帧测试
启动时间< 100 ms从配置完成到首帧发送

波形特征:示波器测量 TX 引脚,起始位低电平持续 8.68 μs,数据位依次翻转,停止位回到高电平,无毛刺。

故障排查(Troubleshooting)

  • 现象:终端无输出 → 原因:TX 引脚未连接或波特率不匹配 → 检查:用示波器测 TX 引脚有无电平跳变;确认 PC 端串口设置与代码一致。
  • 现象:输出乱码 → 原因:时钟分频错误,导致波特率偏差 > 2% → 检查:计算分频系数 CLK_FREQ / (BAUD * 16) 是否为整数;若有余数,改用小数分频或调整时钟频率。
  • 现象:数据重复或丢失 → 原因:发送使能信号 tx_start 脉冲过宽 → 检查:确保 tx_start 仅持续一个采样时钟周期,否则状态机重复触发。
  • 现象:上电后立即发送乱码 → 原因:复位未正确释放,状态机进入未知状态 → 检查:复位信号是否低有效?复位同步器是否实现?
  • 现象:综合时报错“Unconstrained path” → 原因:未约束所有时钟或 I/O → 检查:XDC 中是否遗漏 set_input_delay 或 set_output_delay(对 UART 可不设,但需声明时钟)。
  • 现象:仿真正常,上板失败 → 原因:时序违例或 I/O 标准不匹配 → 检查:Implementation 报告中的 WNS 是否为正;板卡原理图确认 TX 引脚电压域(如 3.3V vs 1.8V)。
  • 现象:LED 不闪烁 → 原因:数据采集模块时钟分频错误 → 检查:计数器最大值是否等于 CLK_FREQ / 2(1 Hz 闪烁)。
  • 现象:串口线过长导致误码 → 原因:信号反射或衰减 → 检查:缩短线缆至 1 米以内,或降低波特率至 9600。

扩展与下一步

  • 参数化设计:将波特率、数据位宽、停止位数量定义为 parameter,便于复用。
  • 增加 UART 接收:实现全双工通信,PC 可发送命令控制数据采集启停或采样率。
  • 带宽提升:改用 USB 3.0(FT601)或以太网(UDP)传输,吞吐可达 100 MB/s 以上。
  • 跨平台移植:将代码移植到 Lattice iCE40 或 ECP5,使用 Yosys 开源工具链。
  • 加入断言与覆盖:在 testbench 中使用 SystemVerilog 断言(SVA)验证协议时序,收集代码覆盖率。
  • 形式验证:使用 SymbiYosys 对 UART 状态机进行形式化验证,证明无死锁或非法状态转移。

参考与信息来源

  • Xilinx UG949: Vivado Design Suite User Guide — 时序约束与分析方法。
  • zipCPU/uart: 开源 Verilog UART 核,GitHub 仓库。
  • FPGA4Fun: UART 教程与代码示例。
  • IEEE Std 1800-2017: SystemVerilog 断言语法。

技术附录

术语表

  • UART:通用异步收发器,异步串行通信协议。
  • LSB First:最低有效位优先发送,UART 标准。
  • WNS:最差负时序裕量,正值表示时序满足。

检查清单

  • [ ] 时钟分频系数计算正确(CLK_FREQ / (BAUD * 16))。
  • [ ] 复位同步器已实现。
  • [ ] XDC 中声明了主时钟。
  • [ ] 仿真验证了起始/停止位时序。
标签:
本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/36672.html
二牛学FPGA

二牛学FPGA

初级工程师
这家伙真懒,几个字都不愿写!
51417.24W3.93W3.67W
分享:
成电国芯FPGA赛事课即将上线
基于UART的远程数据采集与PC通信系统——FPGA上手指南与实施手册
基于UART的远程数据采集与PC通信系统——FPGA上手指南与实施手册上一篇
从零搭建Vivado开发环境:上手指南与常见问题解决下一篇
从零搭建Vivado开发环境:上手指南与常见问题解决
相关文章
总数:545
RISC-V时代芯片设计人才技能升级指南:从指令集到系统集成的实践路径

RISC-V时代芯片设计人才技能升级指南:从指令集到系统集成的实践路径

随着RISC-V指令集架构在数据中心、边缘计算、AI加速及消费电子等领域…
技术分享
10天前
0
0
31
0
2026年芯片设计验证岗位能力模型:从UVM到FPGA原型验证

2026年芯片设计验证岗位能力模型:从UVM到FPGA原型验证

随着芯片规模与复杂度指数级增长,验证已成为决定项目成败的关键环节。本指南…
技术分享
5天前
0
0
30
0
FPGA跨时钟域处理实施指南:亚稳态原理与同步器设计实践

FPGA跨时钟域处理实施指南:亚稳态原理与同步器设计实践

在FPGA设计中,跨时钟域(CDC)处理是保障系统长期稳定运行的关键技术…
技术分享
3天前
0
0
20
0
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
没有相关内容