【Vitis】Vitis HLS学习系列笔记 :第一个例程

45 篇文章 2 订阅
6 篇文章 0 订阅

在学习vitis的过程中一定要跑几个例程试试看,这中间遇到了几个小问题,记录下

有干货,请注意查收:作为新手,跑例程大概率会遇到问题,这里记录几个问题,如果刚好你也遇到,一定会帮到你。

笔者跑了好几个例程,精选了一个最全的。

我的vitis版本2023.2,学习还得看最新的笔记,软件更新太快。


【Vitis】Vitis HLS学习系列笔记 :第一个例程 

…………


目录

1 Vitis HLS是什么?

2 例程

3 很可能遇到的问题

3.1生成的verilog在哪?

3.2 运行C/RTL COSIMULATION不能自动打开open wave viewer窗口 


1 Vitis HLS是什么?

Vitis™ HLS是一款高级综合工具,允许 C、C++ 和OpenCL™函数硬连线(hardwired)到器件逻辑结构和 RAM/DSP 块上。Vitis HLS在Vitis应用加速开发流程中实现硬件内核(hardware kernel),并使用 C/C++ 代码为Vivado® Design Suite中的Xilinx®器件设计开发 RTL(寄存器传输设计级别)IP(功能块) 。

在Vitis应用程序加速流程中,Vitis HLS工具可自动执行大部分代码修改,以实现和优化可编程逻辑中的 C/C++ 代码并实现低延迟和高吞吐量。推导出需要的编译指示(pragmas),以为函数参数生成正确接口以及在代码中用pipeline优化循环和函数,这是Vitis HLS在应用程序加速流程中的基础。Vitis HLS还支持自定义您的代码以实现不同的接口标准或特定优化,从而实现您的设计目标。

Vitis HLS设计流程一般如下:

1.编译、仿真、调试C/C++代码;

2.观察report,以分析和优化设计;

3.将C代码综合(synthesize)成RTL设计;

4.用RTL协同仿真器验证RTL实现;

5.将RTL实现打包成编译后的目标文件(.xo),或者导出到RTL IP.


2 例程

        我查阅了一些资料,尝试了几个不同博主的例程,选出来一个最全的,供大家参考,这里直接给原文链接。

        有两个链接,是两位博主分别在2020年和2023年进行的创作,使用的同一个例程,但是最终的结论有些不同,这里出现不同的原因是xilinx Vitis™ HLS工具升级了,变得更加智能,很有意思。

2020年博文:HLS 开发学习(二)向量加法器_向量加法fpga-CSDN博客

2023年博文:课时3:Vitis HLS设计流程(实例演示)——Vitis HLS教程-CSDN博客

         共三小段程序,

头文件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;
	}
}

具体步骤,见原博客。


3 很可能遇到的问题

3.1生成的verilog在哪?

运行完程序后会在左侧Explorer下生成 solution 文件夹,syn-verilog目录下就是源码。

顶层的verilog部分源码:

3.2 运行C/RTL COSIMULATION不能自动打开open wave viewer窗口 

点击C/RTL COSIMULATION后,弹出窗口 CO-SIMULATION Dialog

注意DUMP Trace选择 PORT

此时工具栏中的open wave viewer才会变成彩色,然后自动打开vivado,出现波形

仿真波形

  

这个系列会出几篇Vitis HLS的入门笔记,注意收藏哦。

  • 57
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vivado HLS是一种用于高层次综合的工具,其中vitis HLS23.1是Vivado HLS的一个版本。Vitis HLS23.1允许开发人员使用C、C++和SystemC等高级语言来描述硬件功能,并且能够将其转换为可在FPGA上运行的RTL(Register Transfer Level,寄存器传输级)描述。 在vitis HLS23.1中,提供了一些例程来帮助开发人员更好地理解和使用该工具。这些例程覆盖了不同的应用场景,包括图像处理、数字信号处理、网络通信等等。通过阅读和理解这些例程开发人员可以获得关于如何使用Vitis HLS进行高层次综合的指导。 Vitis HLS23.1的例程通常包含两个主要部分:C/C++源代码和测试用例。C/C++源代码描述了要实现的硬件功能,例如图像滤波、信号变换等。测试用例是用于验证硬件功能正确性的输入数据。 在使用vitis HLS23.1例程时,通常需要按照以下步骤进行操作: 1. 阅读和理解例程中的C/C++源代码,了解要实现的硬件功能。 2. 确认所需的输入和输出数据格式,并准备相应的测试用例。 3. 在Vivado HLS中打开例程并导入源代码和测试用例。 4. 根据需要设置综合选项和目标设备。 5. 运行综合,并生成RTL描述文件。 6. 运行测试用例,验证硬件功能的正确性。 7. 分析综合结果和性能数据,进行必要的优化和调整。 8. 如果需要,将综合结果导入Vivado工程,进行后续的布局布线和比特流生成。 通过使用vitis HLS23.1例程开发人员可以更好地学习和探索该工具的功能和用法。同时,可以根据具体的应用需求进行必要的修改和优化,以获得更高效、更可靠的硬件设计。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

神仙约架

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

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

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

打赏作者

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

抵扣说明:

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

余额充值