本节主要分享在github中阅读学习别人开源代码的感悟。
https://github.com/omarelhedaby/CNN-FPGA
- 该代码展开得很少,更多得考虑资源,架构上没有啥特色,就是乘加运算的堆叠【浮点乘加】 
- 但其提供的设计文档很详细 
- 不建议细看 
- 卷积模块设计框图:  
- softmax模块设计框图:  
- 平均池化设计框图:  
- 这里面有个串行加法器的写法有点意思:  
https://github.com/padhi499/Image-Classification-using-CNN-on-FPGA
- 该代码主要实现的卷积+ReLu+最大池化,卷积最底层小模块没展开,用串行实现的,但顶层模块均展开并行处理 
- 但总的来说,在整体架构上没有创新特色,就是简单地复制几倍资源并行去做 
- 不建议细看 
- 卷积实现框图: - 卷积顶层:是9个卷积块的并行(对于$5\times 5$的图片,卷积核是$3\times 3$,步长为1的情况下需要滑动卷积9次,展开后即用9个卷积块并行处理)  
- 卷积块:  
- 矩阵乘累加模块:这里MAC是串行实现方式,只有一个硬件单元,用时间换资源了  
 
- ReLu层:并行Relu  
- 最大池化层: - 池化顶层:3 3 经过2 2池化,需要滑动4次池化窗口,故此处为4次展开并行处理  
- 小池化块:对于每次池化窗口22=4个数据,级联方式需要3个比较器得最大值,*这样子可以实现流水处理方式  
 
