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

在学习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的入门笔记,注意收藏哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/368196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一题——LeetCode1389.按既定顺序创建目标数组

方法一 splice 使用splice函数就可以在数组的指定索引位置添加元素 var createTargetArray function(nums, index) {let res[]for(let i0;i<nums.length;i){res.splice(index[i],0,nums[i])}return res }; 消耗时间和内存情况&#xff1a; 方法二 模拟 如果res[index[…

计算机网络——链路层(1)

计算机网络——链路层&#xff08;1&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c; [跳转到网站](https://www.captainbed.…

[每日一题] 02.03 - 质因数分解

质因数分解 枚举到n的平方根&#xff08;得包括平方根&#xff09; 偶数去除 import math n int(input()) if n % 2 0:print(max(n // 2,2)) else:for i in range(3,int(math.sqrt(n)) 1,2):if n % i 0:print(max(n // i,i))

2023年度总结 | 关于意义,爱与回望——写给清醒又无知的20岁

Hi&#xff0c;大家好&#xff0c;我是半亩花海&#xff0c;一名再普通不过的大学生。2023年&#xff0c;20岁&#xff0c;充实而零乱的一年&#xff0c;清醒又无知的一年。年末&#xff0c;最近的一些事儿也让我逐渐地有感而发&#xff0c;心静&#xff0c;除杂&#xff0c;思…

redis布隆过滤器(Bloom)详细使用教程

文章目录 布隆过滤器1. 原理2. 结构和操作3. 特点和应用场景4. 缺点和注意事项 应用-redis插件布隆过滤器使用详细过程安装以及配置springboot项目使用redis布隆过滤器下面是布隆过滤器的一些基础命令 扩展 布隆过滤器 Bloom 过滤器是一种概率型数据结构&#xff0c;用于快速判…

在低代码平台上实现精益软件开发:提高效率与灵活性的关键实践

什么是精益软件开发&#xff1f; 精益软件开发是一种敏捷的软件开发框架。它基于最小化浪费和最大化价值的原则。该框架基于最小可行产品策略运行&#xff0c;该策略强调交付具有基本基本功能的产品&#xff0c;然后根据收到的反馈进行迭代以即兴发挥并提供卓越。 精益软件开发…

编译opencv4.6问题汇总,第三方软件包见我发的资源

win10系统 python3.8.2&#xff0c;cmake-3.15.5-win64-x64&#xff0c;opencv4.6 编译方式见&#xff1a;OpenCV的编译 - 知乎 本文主要总结问题。赠人玫瑰手留余香。 问题1 Problem with installing OpenCV using Visual Studio and CMake (error code: MSB3073) 解决方法…

魔改冰蝎 —— 绕过检测,自动生成免杀后门

为什么要魔改工具&#xff1f; 生成的代码很容易被监测 生成的后门很容易被杀软杀掉 了解冰蝎流量特征 开启http代理&#xff0c;数据经过BP抓包进行分析数据 冰蝎数据包分析&#xff1a; 1、三个请求头固定 AcceptAccept-LanguageUser-Agent&#xff08;内部有十个&a…

VSCODE使用ssh远程连接时启动服务器失败问题

错误情况 ping服务器的ip可通并且使用terminal可以ssh连接到远程服务器。但使用vscode的remote-ssh时&#xff0c;在「输出」栏出现了一直报 Waiting for server log… 的情况&#xff01; 解决方法一 重置服务器设置&#xff0c;包括以下手段&#xff1a; 1.清理服务器端的…

问题:测风站应设置在平直的巷道中,其前后()范围内不得有障碍物和拐弯等局部阻力。 #微信#媒体

问题&#xff1a;测风站应设置在平直的巷道中&#xff0c;其前后&#xff08;&#xff09;范围内不得有障碍物和拐弯等局部阻力。 参考答案如图所示

windows安装配置anaconda 创建并激活自己的虚拟环境(亲测可行,装不好你打我)

一.下载 选择一&#xff1a;进入清华镜像选择过去的版本 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 本人电脑配置不高&#xff0c;并且一般过去的版本比较稳定&#xff0c;因此保守起见选择2022年5月的版本。 选择二&#xff1a;进入官网&#xff0c;下载最…

备战蓝桥杯---搜索(应用基础1)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们直接用深搜&#xff0c;我们可以先把空位用结构体存&#xff0c;然后打表存小方块&#xff0c;再用数组存行列。 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int a[12][12];…

【Python小游戏】五子棋小游戏(完整代码)

文章目录 写在前面Tkinter简介五子棋小游戏游戏介绍程序设计运行结果注意事项写在后面写在前面 本期内容:基于tkinter开发一个五子棋小游戏 实验环境 python3.11及以上pycharmtkinterTkinter简介 Tkinter是Python中最常用的图形用户界面(GUI)库之一,用于创建窗口、对话框…

SqlSever查询某个表的列名称、说明、备注、注释,类型等信息

背景:在工程项目中,有时需要对数据查询进行展示,常规的表格展示虽然能解决大部分问题;但在数据量比较大的情况就如果一次完整的展示信息,势必会造成数据加载中增加耗时,影响数据的展示效果;常规的解决方案都是在数据加载中采取分页的模式,降低数据的加载耗时;但如果要…

Servlet(未完结~)

文章目录 前言1 Servlet简介2 Servlet初识2.1 Servlet开发流程2.2 配置欢迎页 3 Servlet案例开发!3.1 开发登录页3.2 开发后台Servlet3.3 配置Servlet 4 HttpServletRequest4.1 回顾http请求4.2 自定义servlet流程图4.3 HttpServletRequest4.4获取请求行信息4.5获取请求头信息4…

【成品论文57页】2024美赛F题成品论文57页+每一小问配套代码数据

基于数据预测下的减少非法野生动物贸易研究 近年来&#xff0c;非法野生动物贸易每年涉及的金额高达 265 亿美元&#xff0c;被认为是全球第四大 非法贸易。本文基于收集的数据&#xff0c; 对非法野生动物贸易进行研究。 问题一&#xff0c;为了确定五年项目的研究对象我们利用…

Python Moviepy 视频编辑踩坑实录2:音频如何修改为单通道

一、前言&#xff1a; 通过上一篇博文的处理&#xff0c;《Python Moviepy 视频编辑踩坑实录1&#xff1a;谁动了我的音频比特率》我们成功的把音频文件的音频采样率&#xff0c;成功的转化为了目标值&#xff1a;16000&#xff0c;但是接下来遇到了&#xff0c;下面的问题&am…

给大家分好类!看下C++ STL标准模板库,有哪些模板容器类?

C STL&#xff08;Standard Template Library&#xff09;标准模板库&#xff0c;提供了多种容器&#xff0c;这些容器可用于存储和操作数据。 本文对一些常见的 C STL 容器做个简单分类&#xff0c;方便大家根据不同项目需要进行选择使用。 01 序列容器&#xff1a; std::v…

【SpringBoot】 热部署 ContextRefresher.refresh() 自定义配置一键刷新 ~

前言 在实际项目中&#xff0c;有时候我们希望能够在不重启应用的情况下动态修改Spring Boot的配置&#xff0c;以便更好地应对变化的需求。本文将探讨如何通过从数据库动态加载配置&#xff0c;并提供一键刷新的机制来实现这一目标。 背景 最近的项目中&#xff0c;我遇到了…

Deepin如何开启与配置SSH实现无公网ip远程连接

文章目录 前言1. 开启SSH服务2. Deppin安装Cpolar3. 配置ssh公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 前言 Deepin操作系统是一个基于Debian的Linux操作系统&#xff0c;专注于使用者对日常办公、学习、生活和娱乐的操作体验的极致&#xff0…