为了在每个周期都能得到一个3x3的卷积窗口,我们可以通过linebuffer来实现,具体方法为:对于一个KxK的卷积核和一个NxN输入特征图的卷积,我们可以设置K-1个深度为N的FIFO,然后将第i个FIFO的读出连接到第i+1个FIFO的读入端,第0个FIFO的读入则直接从特征图按序获取。下面是HLS的代码实现,为了简单起见,本代码仅支持步长S=1,卷积核大小为K=3的情形,支持可变大小的N: HLS顶层设计文件
#include
#include
#include"my_cnn.h"
#include
void shift_linebuffer(volatile data_t *shift_in,int length,data_t filter[3][3],data_t out[900]){
hls::stream line1;
#pragma HLS STREAM variable=line1 depth=32 dim=1
hls::stream line2;
#pragma HLS STREAM variable=line2 depth=32 dim=1
int len1=0,len2=0,addr=0;
data_t W[3][3];
#pragma HLS ARRAY_PARTITION variable=W complete dim=0
shift_linebuffer_label0:
for(int i=0;i2*length+1)&&((i-2)%length
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?