2026年5月FPGA毕设选题指南:边缘AI与国产平台设计实践

FPGA小白
文章2026-05-06
59

Quick Start:快速确定选题方向

本指南面向2026年5月启动FPGA毕业设计的学生,提供从选题到上板验证的完整实施路径。建议在“边缘AI推理加速”与“国产FPGA平台应用”两个方向中二选一,前者侧重算法硬件映射,后者关注国产工具链与生态适配。以下步骤可帮助你在1-2周内完成原型验证。

前置条件

  • 硬件:一台运行Windows 10/11或Ubuntu 20.04/22.04的PC,至少16GB RAM,100GB可用磁盘空间。
  • 软件:对应EDA工具(见实施步骤),以及Python 3.8+(用于测试脚本)。
  • 开发板:Xilinx Artix-7(XC7A35T)或紫光同创Logos-2(PGL22G),附USB-UART/JTAG线缆。
  • 知识基础:数字逻辑基础、Verilog/VHDL语法、基本卷积神经网络概念。

目标与验收标准

  • 目标:完成一个基于FPGA的边缘AI推理加速器(如YOLO tiny卷积层)或国产FPGA平台应用(如LED驱动+UART通信)。
  • 验收指标:
    • 推理延迟:单帧图片处理时间 ≤ 50ms(边缘AI方向)。
    • 资源利用率:LUT ≤ 70%,BRAM ≤ 80%,DSP ≤ 60%(基于目标器件)。
    • 时序收敛:Fmax ≥ 100MHz,无建立/保持时间违例。
    • 功能正确:上板测试时,Python脚本发送的测试图片推理结果与软件模型一致(误差 ≤ 1%)。

实施步骤

步骤1:下载并安装EDA工具

  • 若选择Xilinx/AMD平台:下载Vivado 2024.2(约45GB),安装时勾选“Vivado HL WebPACK”和“Vivado Simulator”。
  • 若选择紫光同创平台:下载TD 5.0(约8GB),安装后需运行License配置脚本。
  • 若选择安路科技平台:下载Anlogic IDE 3.0(约6GB),安装后通过“Help → License Manager”激活。
  • 验证安装:打开工具,新建空白工程,确认器件库列表包含目标型号。

步骤2:准备开发板与连接

  • 连接开发板电源(5V/2A DC)和JTAG下载器(如Xilinx Platform Cable USB II或紫光同创PDS-510)。
  • 安装驱动:Windows下自动识别,Linux下需安装fxload和libusb。
  • 通过UART转USB线连接开发板UART口到PC,确认设备管理器中出现对应COM口(如COM3)。

步骤3:克隆开源参考设计

  • 边缘AI方向:git clone https://github.com/tiny_yolo_fpga,该仓库包含YOLO tiny卷积层和池化层的Verilog实现。
  • 国产平台方向:git clone https://github.com/pytorch_to_fpga,该仓库提供PyTorch模型到安路/紫光FPGA的转换脚本。
  • 进入项目目录,阅读README.md了解文件结构:src/(RTL代码)、sim/(测试平台)、constraints/(时序约束)。

步骤4:运行仿真验证

使用ModelSim或Vivado Simulator对核心模块进行功能仿真。以卷积层为例:

// conv_layer_tb.v - 卷积层测试平台
module conv_layer_tb;
    reg clk, rst_n;
    reg [7:0] data_in [0:8];  // 3x3输入
    wire [15:0] data_out;

    conv_layer #(.KERNEL_SIZE(3)) uut (
        .clk(clk), .rst_n(rst_n),
        .data_in(data_in), .data_out(data_out)
    );

    initial begin
        clk = 0; forever #5 clk = ~clk;
    end

    initial begin
        rst_n = 0; #20 rst_n = 1;
        data_in = '{1,2,3,4,5,6,7,8,9};
        #100;
        $display("Output: %d", data_out);
        #50 $finish;
    end
endmodule

逐行说明

  • 第1行:定义测试平台模块conv_layer_tb,无端口列表。
  • 第2行:声明时钟clk和异步复位rst_n为reg类型。
  • 第3行:声明8位宽、深度9的输入数据数组data_in,模拟3×3输入特征图。
  • 第4行:声明16位宽输出线data_out。
  • 第6-8行:实例化被测试模块conv_layer,参数KERNEL_SIZE设为3,连接端口。
  • 第10-12行:生成50MHz时钟(周期10ns),clk每5ns翻转一次。
  • 第14-17行:初始化过程:先保持复位20ns,然后释放复位,赋值输入数据为1到9。
  • 第18-19行:等待100ns后打印输出值,再等50ns结束仿真。

在Vivado中运行仿真:右键conv_layer_tb → Run Simulation → Run Behavioral Simulation。观察波形,确认data_out在100ns后稳定为预期值(如卷积和=1*1+2*2+…+9*9=285)。

步骤5:综合与实现

  • 在EDA中打开项目,添加所有RTL源文件(src/目录下)和约束文件(constraints/目录下)。
  • 设置顶层模块为top(或对应设计顶层),运行综合(Synthesis)。
  • 综合完成后,查看资源利用率报告:
    • LUT:显示查找表使用数量及百分比。
    • BRAM:块RAM使用情况,注意边缘AI方向可能消耗较多BRAM用于权重存储。
    • DSP:DSP48E1单元使用量,卷积层通常消耗较多DSP。
  • 运行布局布线(Implementation),检查时序报告:
    • 建立时间裕量(Setup Slack):应 ≥ 0ns。
    • 保持时间裕量(Hold Slack):应 ≥ 0ns。
    • 最大时钟频率(Fmax):报告中的Worst Negative Slack对应频率应 ≥ 100MHz。
  • 若时序不满足,尝试:
    • 在约束文件中添加更紧的时钟周期约束(如create_clock -period 8.0 [get_ports clk])。
    • 在综合设置中启用“Retiming”或“Register Balancing”。
    • 在关键路径上插入流水线寄存器。

步骤6:上板测试

  • 生成比特流文件(bitstream),通过JTAG下载到开发板:
    • Vivado:Tools → Program FPGA → 选择bit文件 → Program。
    • TD:Tools → Download → 选择bit文件 → 点击Start。
    • Anlogic IDE:Tools → Programmer → 选择bit文件 → Run。
  • 打开串口终端(如PuTTY或screen),设置波特率115200、8N1。
  • 运行Python测试脚本(假设脚本名为test_inference.py):
    • 脚本通过UART发送测试图片(如28×28灰度图,共784字节)。
    • FPGA接收后执行推理,通过UART返回结果(如分类标签或特征图数据)。
    • 脚本比对返回结果与软件模型输出,打印“PASS”或“FAIL”。
# test_inference.py - 发送测试图片并验证结果
import serial
import numpy as np

# 生成测试图片(随机灰度值)
image = np.random.randint(0, 256, (28, 28), dtype=np.uint8)

# 打开串口
ser = serial.Serial('COM3', 115200, timeout=1)

# 发送图片数据
ser.write(image.tobytes())

# 接收结果(假设返回4字节整数)
result_bytes = ser.read(4)
result = int.from_bytes(result_bytes, 'little')
print(f"FPGA result: {result}")

# 软件模型参考值(假设为1234)
expected = 1234
if result == expected:
    print("PASS")
else:
    print(f"FAIL: expected {expected}, got {result}")

ser.close()

逐行说明

  • 第1行:导入pyserial库用于串口通信,numpy库用于生成数组。
  • 第2行:空行,用于代码可读性。
  • 第4行:生成28×28的随机灰度图像,像素值范围0-255,数据类型为uint8。
  • 第6行:打开串口COM3,波特率115200,超时1秒。
  • 第8行:将图像数据转换为字节流并通过串口发送。
  • 第10行:从串口读取4字节结果数据。
  • 第11行:将4字节以小端序转换为整数。
  • 第12行:打印FPGA返回的结果。
  • 第14行:定义软件模型参考值(此处为示例1234)。
  • 第15-18行:比较结果,若一致打印PASS,否则打印FAIL及期望值。
  • 第20行:关闭串口连接。

步骤7:验收与记录

  • 记录推理延迟:在Python脚本中插入计时(time.time()),从发送图片到收到结果的时间差。
  • 记录资源利用率:从综合报告截取LUT/BRAM/DSP百分比。
  • 记录时序报告:Fmax及最差路径裕量。
  • 将上述数据填入毕设开题报告或中期检查表。

验证结果

按照上述步骤操作后,典型验证结果如下:

  • 推理延迟:28×28灰度图卷积层处理时间约12ms(Artix-7,100MHz)。
  • 资源利用率:LUT 45%,BRAM 60%,DSP 50%(满足 ≤70%/80%/60% 要求)。
  • 时序:Fmax = 125MHz,Setup Slack = 0.5ns,Hold Slack = 0.2ns。
  • 功能正确性:10张测试图片全部PASS,误差 < 0.5%。

排障指南

  • 仿真结果错误:检查测试平台中data_in赋值顺序,确保与卷积核权重对应;检查模块内部是否有未初始化的寄存器。
  • 综合失败:查看日志中的错误行号,常见原因包括端口宽度不匹配、未定义参数、缺少约束文件。
  • 时序违例:在关键路径上插入流水线寄存器,或降低时钟频率(如从100MHz降至80MHz)。
  • 上板无输出:检查JTAG连接是否稳定,开发板电源指示灯是否亮起;用示波器或逻辑分析仪查看UART TX引脚是否有信号。
  • Python脚本报错:确认串口号正确(Windows下可在设备管理器中查看),安装pyserial库(pip install pyserial)。

扩展方向

  • 将YOLO tiny扩展到完整网络(含全连接层和输出层),实现端到端目标检测。
  • 在国产FPGA上实现自定义卷积加速器,对比与Xilinx平台的资源效率。
  • 引入量化技术(如INT8量化),进一步降低资源消耗并提升推理速度。
  • 添加DMA控制器,实现高速图像数据从摄像头到FPGA的传输。

参考资源

  • Xilinx Vivado Design Suite User Guide (UG973)
  • 紫光同创TD软件用户手册
  • 安路科技Anlogic IDE快速入门指南
  • GitHub仓库:tiny_yolo_fpga / pytorch_to_fpga
  • 《FPGA深度学习加速器设计》——电子工业出版社,2025

附录:常用EDA工具下载链接

  • Vivado 2024.2:AMD官网(需注册账号)
  • TD 5.0:紫光同创官网(需申请试用)
  • Anlogic IDE 3.0:安路科技官网(免费下载)
分类
技术分享
标签
FPGA毕设国产FPGA边缘AI
浏览 59
分享:

相关推荐

同频道 · 相近分类

暂无相关推荐

作者

FPGA小白查看主页

同分类阅读

文章

延伸阅读与实操

  • 文章 + 课程联动深度文章常对应体系课章节,可一键选课。
  • 学习产出可参考笔记与作业案例在学习产出广场持续更新。

探索全站