01
卷积加速概述
卷积神经网络基础 · 为什么需要硬件加速 · FPGA vs GPU vs ASIC对比 · 课程整体流程介绍
基础导论
02
开发环境搭建
Vivado安装与配置 · Vitis HLS安装 · 仿真工具ModelSim/Questasim · 版本管理Git基础
环境工具
03
卷积算法基础
卷积计算数学原理 · Padding与Stride · 多通道卷积 · Winograd算法简介
算法数学
04
HLS基础入门
HLS概念与流程 · C/C++综合基础 · 接口综合(ap_int、hls::stream)· 流水线与数据流
HLS入门
05
HLS卷积实现
单通道3x3卷积HLS实现 · 循环优化(PIPELINE、UNROLL)· 数组分割(ARRAY_PARTITION)· 性能评估
HLS优化
06
HLS卷积优化
数据复用与缓存 · 分块(Tiling)策略 · 乒乓操作(Ping-pong Buffer)· 定点量化(ap_fixed)
优化存储
07
RTL设计基础
Verilog基础语法回顾 · 状态机设计 · 同步与异步复位 · 时序约束入门
RTLVerilog
08
RTL卷积单元设计
乘加器(MAC)设计 · 移位寄存器链 · 行缓冲(Line Buffer)设计 · 控制逻辑编写
RTL卷积
09
AXI4总线协议
AXI4-Stream协议详解 · AXI4-Lite配置接口 · AXI4-Full数据搬运 · 握手信号时序
总线协议
10
DMA控制器设计
AXI DMA IP核配置 · Scatter-Gather模式 · 描述符链 · 中断处理
DMA存储
11
系统集成(Block Design)
Vivado IP Integrator使用 · 自定义IP封装 · AXI Interconnect配置 · 时钟与复位管理
集成Vivado
12
仿真验证策略
Testbench编写技巧 · C/RTL协同仿真 · 波形调试(Vivado Simulator)· 覆盖率收集
验证仿真
13
上板前检查清单
时序收敛检查 · 资源利用率分析 · 功耗评估 · 管脚分配(XDC文件)
检查上板
14
Zynq平台介绍
Zynq架构(PS+PL)· PS端Linux系统搭建 · 设备树配置 · PL端时钟配置
Zynq平台
15
PS-PL通信机制
共享内存(DDR)· 中断机制 · GPIO控制 · AXI DMA驱动开发
通信驱动
16
Linux驱动开发
字符设备驱动基础 · MMAP内存映射 · IOCTL控制接口 · 中断处理程序
Linux驱动
17
应用程序开发
OpenCV图像读取与预处理 · 数据格式转换(NHWC vs NCHW)· 推理流水线设计
应用OpenCV
18
上板调试基础
串口打印(UART)· ILA(集成逻辑分析仪)使用 · VIO虚拟IO调试 · SDK调试器
调试ILA
19
性能测量方法
计时器(APB Timer)· 性能计数器 · DMA传输时间测量 · 端到端延迟分析
性能测量
20
常见问题排查
时序违例修复 · 死锁问题分析 · 数据一致性校验 · 内存访问越界
调试问题
21
多核卷积加速
多PE(处理单元)架构 · 数据广播与分发 · 结果汇聚 · 负载均衡
多核架构
22
稀疏卷积加速
稀疏性原理 · 零值跳过逻辑 · 稀疏矩阵编码(CSR/CSC)· 硬件加速器设计
稀疏优化
23
Winograd卷积加速
Winograd算法推导 · F(2x2,3x3)实现 · 变换矩阵硬件化 · 性能对比分析
Winograd算法
24
INT8量化加速
量化原理(对称/非对称)· INT8 MAC设计 · Scale/Zero Point处理 · 精度损失评估
量化INT8
25
模型部署流程
PyTorch/TensorFlow模型导出 · ONNX中间表示 · 自定义算子注册 · FPGA部署
部署模型
26
端到端系统联调
图像输入→预处理→DMA传输→卷积加速→结果回传→后处理→显示输出
联调系统
27
性能优化进阶
内存带宽优化 · 计算与传输重叠(Overlap)· 多级流水线 · 动态频率调整
优化带宽
28
功耗优化策略
时钟门控 · 数据使能 · 电压调节 · 不同工作模式切换
功耗低功耗
29
项目实战:YOLOv5s卷积层加速
网络结构分析 · 层融合策略 · FPGA映射 · 上板实测
实战YOLO
30
总结与展望
课程回顾 · 常见设计模式总结 · 未来趋势(存算一体、光计算)· 学习资源推荐
总结展望