FPGA:HLS数组初始化

最近在利用HLS实现卷积计算,仿真阶段计算结果出现了一点问题,计算结果只是无序间隔出错,而不是连续的一块数据出错,检查代码后,发现并没有语法错误或者数组index错误,算法上也不存在问题。
在对比以前在VS上写的卷积代码后发现了一个不容易察觉的问题:数组初始化

以下是在VS2017上定义一个数组并初始化的代码:

int main()
{
	int arr[4][4] = {0};
	return 0;
}

通过这个方式,VS编译器会自动对未初始化的数组元素进行0初始化。

然而,在vivado HLS 2018.2利用上述方式初始化数组:

#include "ap_int.h"
typedef ap_int<32> D32

int main()
{
	D32 out[6][24][24] = {0};
	for(int k = 0; k < 6; k++){  // 打印验证
		for(int i = 0; i < 24; i++){
			for(int j = 0; j < 24; j++){
				cout << out[k][i][j] << ", ";
			}
			cout << endl;
		}
		cout << endl;
	}
	return 0;
}

数组初始化打印结果如下图,可以看到,并不是所有元素都被初始化为0,因此在传入函数时,如果函数内没有对该数组元素进行初始化,则会出现意想不到的错误。
在这里插入图片描述
因此,为安全起见,定义的局部数组建议手动用循环初始化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值