卷积神经网络(CNN)加速器ip设计—1.HLS代码解读

原作者项目:https://github.com/dhm2013724/yolov2_xilinx_fpga

加速器整体结构

在这里插入图片描述
上图是加速器中所有函数的调用关系,可以看到卷积层,池化层,重拍序层都采用乒乓方式。下面就对每一个函数来进行理解。若有疏漏和理解不对的地方,欢迎留言讨论。
hls c仿真 hls_c_sim 结果,电脑配置低了,vivado hls的c仿真时间大概需要一个半小时,比较慢的。

yolov2图像分类识别加速器ip-hls代码解读

1.参数定义

#define MAX(x,y) ((x)>(y)?(x):(y))			//定义最大值函数
#define MIN(x,y) ((x)<(y)?(x):(y))          //定义最小值函数
#define S 2                                 //卷积核的步长
#define K 3                                 //卷积核的大小
                                            
#define Tn 4                                //Tn为输入特征图数 N 维度的并行度
#define Tm 32                               //输出特征图数M维度的并行度/展开度
#define Tr 26                               //输出特征图高度
#define Tc 26                               //输出特征图宽度
                                            
#define OnChipIB_Width  ((Tc-1)*S+K)        //输出Tc所需要的输入像素快的高度  
#define OnChipIB_Height ((Tr-1)*S+K)        //输出Tr所需要的输入像素快的宽度
#define MAX_BETA_LENGTH (1024)              //
#define INTERWIDTH 20 					    //
typedef unsigned char UCHAR;  				//

2.四个输入端口

memcpy 函数

void mmcpy_inputport(int *input,int input_memcpy_buffer[(OnChipIB_Width+3)/2],ap_uint<3> TN_MIN,int RowOffset,UCHAR RowIntNum)
{
	bool enable = TN_MIN > 0;
	if(!enable)
		return;

	memcpy(input_memcpy_buffer,(int *)(input + RowOffset),RowIntNum*sizeof(int));

}

void mmcpy_inputport1(int *input,int input_memcpy_buffer[(OnChipIB_Width+3)/2],ap_uint<3> TN_MIN,int RowOffset,UCHAR RowIntNum)
{
	bool enable = TN_MIN > 1;
	if(!enable)
		return;

	memcpy(input_memcpy_buffer,(int *)(input + RowOffset),RowIntNum*sizeof(int));

}

void mmcpy_inputport2(int *input,int input_memcpy_buffer[(OnChipIB_Width+3)/2],ap_uint<3> TN_MIN,int RowOffset,UCHAR RowIntNum)
{
	bool enable = TN_MIN > 2;
	if(!enable)
		return;

	memcpy(input_memcpy_buffer,(int *)(input + RowOffset),RowIntNum*sizeof(int));


}

void mmcpy_inputport3(int *input,int input_memcpy_buffer[(OnChipIB_Width+3)/2],ap_uint<3> TN_MIN,int RowOffset,UCHAR RowIntNum)
{
	bool enable = TN_MIN > 3;
	if(!enable)
		return;

	memcpy(input_memcpy_buffer,(int *)(input + RowOffset),RowIntNum*sizeof(int));

}
  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值