Vitis高层次综合学习——FPGA

这篇具有很好参考价值的文章主要介绍了Vitis高层次综合学习——FPGA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

高层次综合

什么是高层次综合?就是使用高级语言(如C/C++)来编写FPGA算法程序。
在高层次综合上并不需要制定微架构决策,如创建状态机、数据路径、寄存器流水线等。这些细节可以留给 HLS 工具,通过提供输入约束(如时钟速度、性能编译指示、目标器件等)即可生成经过最优化的 RTL。
其主要优势为:
1、提高FPGA算法部署的效率
(1)使用C语言来开发和确认FPGA算法;
(2)使用C语言来仿真RTL设计。
2、算法易于移植。

Vivado 和 HLS

Vitis HLS 工具会将 C 或 C++ 函数综合到 RTL 代码中,以便在 Versal 自适应 SoC、Zynq MPSoC 或 AMD FPGA 器件的可编程逻辑 (PL) 区域内实现。Vitis HLS 与 Vivado Design Suite 紧密集成用于综合与布局布线,并与 Vitis 核开发套件紧密集成用于异构系统级别设计和应用加速。
HLS能够降顺序执行的C语言程序转为并行执行。
如下面的例子:

#include <vector>
#include <iostream>
#include <ap_int.h>
#include "hls_vector.h"
#define totalNumWords 512
unsigned char data_t;
int main(int, char**) {
// initialize input vector arrays on CPU
	for (int i = 0; i < totalNumWords; i++) {
	in[i] = i;
}
compute(data_t in[totalNumWords], data_t Out[totalNumWords]);
	check_results();	
}
void compute (data_t in[totalNumWords ], data_t Out[totalNumWords ]) {
	data_t tmp1[totalNumWords], tmp2[totalNumWords];
	A: for (int i = 0; i < totalNumWords ; ++i) {
		tmp1[i] = in[i] * 3;
		tmp2[i] = in[i] * 3;
	}
	B: for (int i = 0; i < totalNumWords ; ++i) {
		tmp1[i] = tmp1[i] + 25;
	}
	C: for (int i = 0; i < totalNumWords ; ++i) {
		tmp2[i] = tmp2[i] * 2;
	}
	D: for (int i = 0; i < totalNumWords ; ++i) {
		out[i] = tmp1[i] + tmp2[i] * 2;
	}
}

上面的C语言代码在CPU中按顺序执行,当然也可以在FPGA中顺序执行,但是这样就没有发挥FPGA的优势。compute() 函数需重构,以实现基于 FPGA 的加速。
加速有以下方向:
1、compute 函数可先启动,随后再将所有数据传递给它;
2、多个 compute 函数能以重叠方式运行,例如,“for”循环能够在上一次迭代完成前启动下一次迭代;
3、“for”循环内的各项操作都能在多个码字上并发运行,无需逐字执行。

compute() 函数循环 A 将输入值乘以 3,并创建两条独立路径,分别是 B 和 C。循环 B 和 C 执行操作并将数据馈送给 D。这是一种现实状况的简单表示法,您需在其中逐一执行多项任务,这些任务彼此相连形成如下所示网络。
Vitis高层次综合学习——FPGA,XILINX Ultrascale+ FPGA,fpga开发,学习文章来源地址https://www.toymoban.com/news/detail-660808.html

#include "diamond.h"
#define NUM_WORDS 16
extern "C" {
void diamond(vecOf16Words* vecIn, vecOf16Words* vecOut, int size)
{
	hls::stream<vecOf16Words> c0, c1, c2, c3, c4, c5;
	assert(size % 16 == 0);
	#pragma HLS dataflow
	load(vecIn, c0, size);
	compute_A(c0, c1, c2, size);
	compute_B(c1, c3, size);
	compute_C(c2, c4, size);
	compute_D(c3, c4,c5, size);
	store(c5, vecOut, size);
}}
void load(vecOf16Words *in, hls::stream<vecOf16Words >& out, int size)
{
	Loop0:
	for (int i = 0; i < size; i++)
	{
	#pragma HLS PERFORMANCE target_ti=32
	#pragma HLS LOOP_TRIPCOUNT max=32
	out.write(in[i]);
}
}
void compute_A(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out1, hls::stream<vecOf16Words >& out2, int size)
{
	Loop0:
	for (int i = 0; i < size; i++)
	{
	#pragma HLS PERFORMANCE target_ti=32
	#pragma HLS LOOP_TRIPCOUNT max=32
	vecOf16Words t = in.read();
	out1.write(t * 3);
	out2.write(t * 3);
	}
}
void compute_B(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out, int size)
{
	Loop0:
	for (int i = 0; i < size; i++)
	{
	#pragma HLS PERFORMANCE target_ti=32
	#pragma HLS LOOP_TRIPCOUNT max=32
	out.write(in.read() + 25);
	}
}
void compute_C(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out, int size)
{
	Loop0:
	for (data_t i = 0; i < size; i++)
	{
	#pragma HLS PERFORMANCE target_ti=32
	#pragma HLS LOOP_TRIPCOUNT max=32
	out.write(in.read() * 2);
	}
}
void compute_D(hls::stream<vecOf16Words >& in1, hls::stream<vecOf16Words >&
in2, hls::stream<vecOf16Words >& out, int size)
{
	Loop0:
	for (data_t i = 0; i < size; i++)
	{
	#pragma HLS PERFORMANCE target_ti=32
	#pragma HLS LOOP_TRIPCOUNT max=32
	out.write(in1.read() + in2.read());
	}
}
void store(hls::stream<vecOf16Words >& in, vecOf16Words *out, int size)
{
	Loop0:
	for (int i = 0; i < size; i++)
	{
	#pragma HLS PERFORMANCE target_ti=32
	#pragma HLS LOOP_TRIPCOUNT max=32
	out[i] = in.read();
	}
}

到了这里,关于Vitis高层次综合学习——FPGA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Xilinx系列软件安装技巧与注意事项(vivado vitis)+vscode

    注意事项 系统适用版本 要安装在Ubuntu系统的话,要注意 提前看好软件适用的版本 ,不要随便安好了Ubuntu系统又发现对应版本的xilinx软件不支持。 如下图,发行说明中会说明这个版本的软件所适配的系统版本。 下载 vivado vitis这些都可以用 FDM downloader 下载整个大的几十G的包

    2024年02月03日
    浏览(46)
  • FPGA学习_Xilinx7系列FPGA基本结构

    参考:https://xilinx.eetrend.com/content/2019/100042384.html xilinx7系列FPGA主要包括:Spartan®-7、Artix®-7、Kintex®-7、Virtex®-7。其性能/密度/价格也随着系列的不同而提升。 Spartan7 系列拥有最低的价格、最低的功耗、最小的尺寸以及最低的设计难度,一些低端应用中极为合适。 Artix7 系列相

    2024年04月09日
    浏览(93)
  • Xilinx Vitis AI量化部署Yolov5至DPU (PYNQ)

    本文及后续更新都会放在个人主页~ 欢迎来看看 https://lgyserver.top/index.php/2023/05/08/xilinx-vitis-ai%e9%87%8f%e5%8c%96%e9%83%a8%e7%bd%b2yolov5%e8%87%b3dpu-pynq/ 本文章记述了从YOLOv5源代码使用Xilinx Vitis AI进行量化并部署到DPU上的全流程。在开Pynq环境下运行测试通过。 主机: Ubuntu 22.04 + Vivado 2022.

    2024年02月16日
    浏览(38)
  • xilinx zynq+vitis实现命令行编译输出xsa以及bin文件

    执行菜单命令【开始】—【所有程序】—【Xilinx Design Tools】—【Vivado2020.1】—【Vivado2020.1Tcl Shell】,弹出命令界面 或者cmd命令下输入call D:soft_installvivado2020.1Vivado2020.1binvivado.bat -mode tcl 2.输入打开工程指令: open_project {F:/work/361_351_328/7020_c5/code_guifan/power_ctrl_3_2_test _geshi_da

    2024年02月05日
    浏览(46)
  • XILINX Ultrascale+ FPGA学习(5)——GPIO

    参考文档 ug1085 GPIO即通用I/O,使用过树莓派和单片机的同学们肯定非常熟悉。是ARM芯片用于连接外设的I/O口。在SOC Ultrascale+ 里的ARM芯片的GPIO连接到MIO(复用IO,与GPIO不是一一对应的);当MIO不够用时,可以使用EMIO来扩展,从而使用FPGA上的引脚,EMIO是PS和PL的连接的接口。

    2024年02月06日
    浏览(54)
  • Xilinx Ubuntu环境下docker&Vitis AI 3.0基于GPU的环境安装

    图1 Visiti AI用户开发环境需求 Xilinx官网Vitis AI入门指南 Xilinx Github Vitis AI资料 首先参考官网资料中的入门部分进行环境设置,显卡驱动如何安装这里就不作介绍了。 1.克隆 Vitis AI 存储库以获取示例、参考代码和脚本。 2.安装 Docker。     这里不建议参考官方链接给出的官方

    2024年02月16日
    浏览(44)
  • XILINX Ultrascale+ FPGA学习——Xillybus demo bundle 测试

    FPGA除了使用XIlinx公司自带的XDMA用于Pcie通信外,还有Xillybus这种3方的IP用于Pcie通信。XDMA无法做到比较灵活的兼容,安装驱动需要Windows进入测试模式,所以准备使用Xillybus来进行Pcie通信。 该IP的详细介绍请查看官网, 这里主要介绍一下如何使用该软件的demo bundle进行一些基本的

    2024年02月15日
    浏览(36)
  • 小梅哥Xilinx FPGA学习笔记19——IP 核使用之 ROM

    目录 一:章节导读 二:ROM IP 核配置 2.1 创建 ROM 初始化文件 2.3 ROM IP 核配置步骤 三: ROM核的仿真与调用 3.1 三角波的产生 3.2 仿真验证结果 3.3 正弦波的产生 3.4 仿真验证结果        ROM 是只读存储器( Read-Only Memory )的简称,是一种只能读出事先所存数据的固态半导体存

    2024年02月03日
    浏览(46)
  • 从底层结构开始学习FPGA(0)----FPGA的硬件架构层次(BEL Site Tile FSR SLR Device)

    《从底层结构开始学习FPGA》目录与传送门 Xilinx的FPGA,从硬件架构的角度可以划分为6个层次,从底层到顶层依次是: BEL(最底层单元) Site Tile FSR SLR Device(FPGA芯片) 接下来我们从最底层开始依次了解下各个层级。 BEL(Basic Element of Logic),即基本逻辑元素,是FPGA的最底层

    2024年03月20日
    浏览(47)
  • xilinx FPGA 除法器ip核(divider)的学习和仿真(Vivado)

    在设计中,经常出现除法运算, 实现方法 : 1、移位操作 2、取模取余 3、调用除法器IP核 4、查找表 简单学习除法器IP。 网上很多IP翻译文档,不详细介绍,记录几个重要的点: 1、三种算法模式(不同模式所消耗的资源类型不同) 2、分清除数和被除数;余数模式的选择 3、延

    2024年04月28日
    浏览(196)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包