HLS 开发学习(二)向量加法器

参考资料https://www.bilibili.com/video/BV1bt41187RW?p=4

HLS

工程新建

通过hls建立一个VectorAdd工程

记得芯片选xc7z020clg400-1

源文件

首先添加头文件VectorAdd.h

#define N 5
typedef int data_t;
void VectorAdd(data_t A[N],data_t t,data_t B[N]);

然后添加源文件VectorAdd.cpp

#include "VectorAdd.h"

void VectorAdd(data_t A[N],data_t t,data_t B[N])
{
	unsigned int i;
	myloop:
	for(i=0;i<N;i++)
	{
		B[i] = A[i] + t;
	}
}

还有一个testbench文件

#include <iostream>
#include <iomanip>
#include "VectorAdd.h"

using namespace std;

int main(){
	data_t A[N] = {-4,-3,0,1,2};
	data_t c = 5;
	data_t B[N] = {0};
	data_t RefB[N] = {1,2,5,6,7};
	unsigned int i = 0;
	unsigned int errcnt = 0;

	VectorAdd(A,c,B);

	cout<<setfill('-')<<setw(30)<<'-'<<'\n';
	cout<<setfill(' ')<<setw(10)<<left<<"A";
	cout<<setfill(' ')<<setw(10)<<left<<"C";
	cout<<setfill(' ')<<setw(10)<<left<<"B"<<'\n';
	cout<<setfill('-')<<setw(30)<<left<<'\n';

	for ( i = 0;i<N;i++)
	{
		cout<<setfill(' ')<<setw(10)<<left<<A[i];
		cout<<setfill(' ')<<setw(10)<<left<<c;
		cout<<setfill(' ')<<setw(10)<<left<<B[i];
		if(B[i] == RefB[i])
		{
			cout<<'\n';
		}
		else
		{
			cout << "(" << RefB[i] << ")" << '\n';
			errcnt ++ ;
		}
	}

	cout << setfill('-') << setw(30) << '-' <<'\n';

	if(errcnt > 0)
	{
		cout << "Test Failed" << '\n';
		return 1;
	}
	else{
		cout<< "Test Passed" << '\n';
		return 0;
	}
}

仿真

执行C仿真,可以得到一个结果

在这里插入图片描述

是根据我们的testbench文件进行的向量相加。

OK,接下来C综合,然后跑一下RTL和C的联合仿真

在这里插入图片描述
dump trace选择auto
之后点击查看波形

在这里插入图片描述

Vivado将会被自动打开
可以根据需要查看波形

在这里插入图片描述

pipeline 优化

新建一个solution
在这里插入图片描述
对myloop insert一个derivative

在这里插入图片描述
然后继续综合
选择compare reports来进行一下比较
在这里插入图片描述
在这里插入图片描述
solution2的latency和interval确实吧1小了

这个优化也可以被直接写到源文件中,循环变为

	myloop:
	for(i=0;i<N;i++)
	{
#pragma HLS PIPELINE 
		B[i] = A[i] + t;
	}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆沙粽子好吃嘛!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值