FINN框架简介
为什么需要自定义算子
自定义算子的应用场景
安装Xilinx Vitis
配置FINN环境
验证安装
常见环境问题排查
源码目录结构
关键配置文件说明
构建系统介绍
自定义算子存放位置
HLS语法要点
数据类型选择
流水线与循环优化
接口综合
创建HLS工程
编写矩阵乘法算子
C仿真与验证
导出IP核
FINN算子接口标准
AXI-Stream协议详解
控制信号约定
时序要求
Streaming数据流设计
FIFO深度选择
反压机制处理
数据对齐技巧
模板参数使用
编译时配置
运行时配置
参数传递机制
ReLU及其变体
Sigmoid近似实现
Tanh查找表
自定义激活函数
最大池化实现
平均池化实现
全局池化
池化窗口参数化
im2col方法
Winograd算法
脉动阵列架构
循环分块策略
分块矩阵乘法
脉动阵列实现
数据复用策略
带宽优化
Conv-BN融合
激活函数融合
层间流水线
减少DDR访问
片上BRAM使用策略
DDR访问优化
数据预取
乒乓缓冲设计
算子级流水线
循环级流水线
数据级流水线
吞吐量计算
Vitis HLS报告解读
时序分析
资源利用率分析
瓶颈定位
C/RTL协同仿真
波形调试
数据比对
常见错误排查
算子注册
ONNX节点映射
编译流程集成
端到端测试
非标准量化格式
混合精度支持
自定义类型转换
格式兼容性
稀疏矩阵格式
稀疏卷积实现
跳过零值计算
压缩与解压缩
可变输入尺寸
动态批处理
运行时重配置
资源预留策略
全连接层
BatchNorm层
残差连接
注意力机制算子
FINN版本迁移
Vitis版本适配
算子接口兼容
回归测试
常见设计模式
社区资源推荐
未来发展方向
课程总结