01
课程导论与开发环境搭建
HLS是什么?为什么用它做卷积加速?Vivado HLS / Vitis HLS 安装与验证。
环境入门
02
卷积神经网络基础
卷积层、池化层、全连接层原理,卷积计算的数据流与复用模式。
CNN数据流
03
HLS 数据类型与任意精度类型
ap_int/ap_fixed 的使用场景,为什么 float 在 HLS 中不香?
定点精度
04
HLS 接口综合
ap_ctrl_hs、ap_memory、axis 接口,如何让你的 IP 核被 Zynq PS 调用。
接口AXI
05
流水线与数据流
PIPELINE 与 DATAFLOW 指令,吞吐量提升的底层逻辑。
流水线性能
06
循环优化基础
UNROLL、TRIPCOUNT、LOOP_MERGE,从串行到并行的第一步。
循环并行
07
数组优化与 Partition
ARRAY_PARTITION、ARRAY_RESHAPE,解决 BRAM 带宽瓶颈。
BRAM带宽
08
卷积核的 HLS 实现
3x3 卷积核的朴素实现,分析延迟与资源瓶颈。
卷积基础
09
输入输出乒乓缓冲
使用 DATAFLOW 与双缓冲,隐藏数据搬运延迟。
乒乓DATAFLOW
10
行缓冲(Line Buffer)设计
用 shift register 实现滑动窗口,减少 off-chip 访问。
LineBuffer滑动窗口
11
脉动阵列(Systolic Array)基础
一维与二维脉动阵列原理,HLS 实现要点。
脉动阵列架构
12
矩阵乘法加速
GEMM 在 HLS 中的优化,分块(Tiling)与向量化。
GEMMTiling
13
Winograd 快速卷积
原理简介,HLS 实现 3x3 卷积的 F(2,3) 算法。
Winograd快速算法
14
量化与定点卷积
将浮点模型转为定点,ap_fixed 的精度分析与仿真。
量化定点
15
池化层与激活函数 HLS 实现
MaxPool、AveragePool、ReLU 的硬件友好设计。
池化激活
16
多通道卷积优化
处理 Cin > 1 的情况,循环重排与数据复用策略。
多通道复用
17
输出特征图存储优化
输出通道并行,DDR 写回调度。
存储DDR
18
完整卷积层 IP 设计
将行缓冲、脉动阵列、池化、激活集成到一个 IP 中。
集成IP
19
Zynq PS-PL 协同设计
AXI-DMA 与 AXI-Stream 配置,PS 端驱动编写。
ZynqDMA
20
Vivado Block Design 集成
将 HLS IP 打包,连接 DDR、DMA 与中断。
VivadoBD
21
SDK/Vitis 裸机驱动开发
配置 DMA、启动加速器、轮询与中断方式。
驱动裸机
22
性能分析工具
Vitis HLS 报告解读(Latency、II、BRAM/DSP/FF 利用率)。
分析报告
23
常见瓶颈与调试技巧
为什么我的加速器跑不快?如何定位 stall 与反压。
调试瓶颈
24
ResNet-18 第一层加速实战
从 PyTorch 模型提取权重,HLS 实现 7x7 卷积。
ResNet实战
25
YOLOv3 特征提取网络加速
多尺度卷积层调度,带宽与计算平衡。
YOLO多尺度
26
轻量化模型 MobileNet 加速
深度可分离卷积的 HLS 实现。
MobileNet深度可分离
27
自定义卷积核生成器
通过模板参数生成不同尺寸(1x1, 3x3, 5x5)的卷积 IP。
模板参数化
28
多加速器协同
多个卷积 IP 并行工作,任务调度与资源竞争。
并行调度
29
端到端推理系统
从 SD 卡加载图片 -> 预处理 -> 加速器推理 -> 结果输出到显示器。
系统推理
30
课程总结与未来展望
HLS 与 AI 编译器(TVM、XLA)的结合,RTL 与 HLS 的取舍。
总结趋势