Vitis HLS 构建项目并生成IP核(Vivado HLS)

这篇具有很好参考价值的文章主要介绍了Vitis HLS 构建项目并生成IP核(Vivado HLS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

Vitis HLS,可以通过它,用C和C++建立和封装一个IP核,从Vivado 2021的版本开始内置,用于替代Vivado HLS,由于它太新了,网上有关教程很少(2020的版本还是Vivado HLS),所以这个系列的文章,用于记录如何使用Vitis HLS。

使用Vitis HLS开发时,最好不要再使用C语言,而是C++,同时,使用一些旧教程中提到的"ap_cint.h"头文件会报错,这点请看后文提到的“错误1”。所以本文所有代码将使用C++。

新建工程

建立工程

打开软件后,新建一个工程。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

设置好工程目录和工程名。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

一路next,它要我们添加两个文件,我们这里略过。到了选择器件一栏。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

我这里使用的是xc7z020clg400-2。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

点击ok,然后点击finish,就到了开发界面。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

编辑源码

一开始,我们关注左上角的窗口。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

在Source一栏,我们新建两个源文件。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

在工程目录下新建一个“src”文件夹用于存放代码文件。这里新建一个h头文件和一个cpp文件。由于使用的是C++,文件名后缀是cpp。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

新建好了后,窗口会显示。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

这里给出两个文件的代码。

  • led_twinkle.h
#include <ap_int.h>
void led_twinkle(ap_int<1> *led);
  • led_twinkle.cpp
#include "led_twinkle.h"

#define DELAY_TIME 50000000
#define DELAY_TIME_HALF 25000000 //optimize
//50000000

void led_twinkle(ap_int<1> *led){
	int i;
	for(i = 0;i < DELAY_TIME;i++){
		if(i < DELAY_TIME_HALF)
			*led=0;
		else
			*led=1;
	}
}

注意:以下所有截图中代码都有错,请按上面列出的代码运行

设置端口

在led_twinkle.cpp文件下,关注右上角的窗口。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

给函数添加一个指令。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

按照下面图片设置。注意,这里如果设置成ap_ctrl_none,在C/RTL仿真时会报错,具体参见错误4(当然也可以跳过C/RTL仿真)。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

给输出端口也添加一个指令。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

同样地,要按下图设置,设置成ap_none会弹警告,具体参见错误4(也可以不理会,设置成ap_none)。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

设置好了后,源码中会自动添加有关代码,这里不建议自己添加,最好用软件自动生成。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

添加测试

在“Test Bench”里,新建一个源文件,叫做led_twinkle_test.cpp。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

源码如下。

  • led_twinkle_test.cpp
#include "led_twinkle.h"

ap_int<1> led_1;

int main(){
	led_twinkle(&led_1);
	printf("Run successfully!");
	return 0;
}

然后需要设置顶层函数。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

选择刚刚设置好的函数。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

验证测试

要想正确生成IP核,以下四个测试都必须通过。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

C语言仿真

运行C语言仿真。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

除了本身的语法错误会报错,如果用的是C语言写的,而非C++,此处也会报错,见错误1。printf代码的结果,会在这里显示,和C语言的控制台一样,输出一些自己编写的测试信息。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

C语言综合

运行C语言综合。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

如果没有安装最新的补丁,此处可能会报错,见错误2。而如果端口设置错误,会出现错误4。仿真结束后会接口信息等有关的信息。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

C/RTL仿真

运行C/RTL仿真。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

按照如下的设置。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

结束之后会出现结果。如果将函数设置成ap_ctrl_none,会报错,具体参见错误4(当然也可以跳过C/RTL仿真)。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

导出RTL

运行导出RTL。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

默认即可,可以不用设置输出目录。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

会提示导出成功。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

IP核被生成在默认的目录下。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

最终结果

生成的IP核可以在Vivado中显示了。验证和测试将放到下一篇文章。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

如果函数和端口分别设置"ap_ctrl_none"和"ap_none",则是下面这样。在下一篇验证IP核的文章将使用按这样设置产生的IP核。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

报错集合

错误1

unexpected top argument type: type of the parameter is C language  Arbitray-precesion type

找了很久的答案,发现了问题,是<ap_cint.h>这个头文件出错。从Vitis 2021开始(Vivado 2021),官方明确不再支持这个头文件,同时推荐使用C++开发。而很多老旧教程的代码中依然使用这个头文件,它们用的是C语言。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

官方给出的说明和解决方法:

Vitis HLS:C 语言支持

解决方法是将引用的<ap_cint.h>改为<ap_int.h>,同时有关的数据类型需要进行修改。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

错误2

clang compile failed: child process exited abnormally

其实这里已经提示了,找不到有关的头文件,但是头文件明明是包含在工程中的。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

其实是因为使用include的时候,双引号引用和尖括号引用的区别。在本次错误中,错误地使用了双引号引用。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

改成双引号引用即可。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

错误3

Failed to generate IP

这个报错。控制台中没有给出具体的信息,其实只要安装最新的补丁即可。参考下面的链接。

Export IP Invalid Argument / Revision Number Overflow Issue (Y2K22)

将下载好的补丁解压到软件目录中,按住Shift键再按鼠标右键,打开控制台。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

输入README中给出的代码即可。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

运行结果。补丁安装成功,重启软件就可以了。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

错误4

出现警告

WARNING: [RTGEN 206-101] Port 'led' with mode 'ap_none' may require an associated data valid signal to correctly communicate with other blocks or a test bench; automatic C/RTL co-simulation may not be able to verify such a port.

出现错误

ERROR: [COSIM 212-4] *** C/RTL co-simulation finished: FAIL ***  

出现类似错误的,都是因为端口设置出错。很多旧教程中,说到函数要设置成"ap_ctrl_none",以及端口设置成"ap_none",但是这会带来不确定性。正确的做法是设置成"ap_ctrl_hs"以及"ap_hs",这样就不会报错了,结果也是一致的。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

但是设置将函数设置成"ap_ctrl_hs",也就是一种双向协议,会引入很多IO口。使用"ap_ctrl_none"也是可以的,就是需要跳过C/RTL仿真。

错误5

Vitis IDE launch failed

这个错误在使用SDK开发的时候会出现。一些教程中会教你,使用Vivado生成PS核之后,用Vitis生成顶层文件。但是如果安装软件的时候选择的是免费版,或者选择第二项Vivado,则会少安装Vitis这个软件。

注意:Vitis HLS和Vitis是两个不同的软件。免费版不包含Vitis。

解决方法很简单,从下图进入,重新安装Vitis即可。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls

以后在新安装软件的时候,记得选择第一项安装。
vitis hls introductory examples,Xilinx FPGA开发有关,fpga开发,vivado hls,vitis hls文章来源地址https://www.toymoban.com/news/detail-811338.html

到了这里,关于Vitis HLS 构建项目并生成IP核(Vivado HLS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包