【Vitis】基于C++函数开发组件的步骤

目录

基本步骤

关键领域

• 硬件接口:

任务级并行度:

存储器架构:

微观级别的最优化:


基本步骤

1. 基于 设计原则 建立算法架构。

2. (C 语言仿真) 利用 C/C++ 语言测试激励文件验证 C/C++ 代码的逻辑。

3. (代码分析器) 分析 C/C++ 代码的性能、并行度与合规性。

4. (C 语言综合) 使用 v++ 编译器生成 RTL。

5. (C/RTL 协同仿真) 验证使用 C/C++ 测试激励文件生成的 RTL 代码。

6. (封装) 复查 HLS 综合报告和实现时序报告。

7. 重新运行前述步骤直至满足性能目标为止。

Vitis HLS 基于目标流程、默认工具配置、设计约束和您指定的任意最优化编译指示或指令来生成 Vivado IP 或 Vitis 内核。您可使用最优化指令来修改和控制内部逻辑和 I/O 端口的实现, 以覆盖工具的默认行为。

关键领域

以下提供了有关在 HLS 设计中进行 C++ 函数编码与综合的部分关键领域信息, 在后续章节内将涵盖更多详细信息:

• 硬件接口:

Vitis HLS 设计的顶层函数的实参均综合到接口和端口内, 这些接口和端口通过将多个信号加以组合来定义 HLS 设计与设计外部的组件之间的通信协议。 Vitis HLS 会自动定义接口, 并使用业界标准来指定要使用的协议。根据 HLS 设计目标是 Vivado IP 生成还是 Vitis 内核, 默认接口协议不尽相同。接口的默认分配可通过使用INTERFACE 编译指示或指令来覆盖。

• 控制 HLS 设计的执行: HLS 设计的执行模式是由块级控制协议来指定的。 HLS 设计可包含控制信号, 用于启动/停止执行, 也可设置为仅当数据可用时才驱动 HLS 设计。作为设计人员, 您需要注意自己的 HLS 设计的执行方式,如 HLS 设计的执行模式 中所述。

任务级并行度:

• 为了在生成的硬件上实现高性能, HLS 工具必须基于顺序代码推断并行度, 并利用它来实现更高的性能。 设计原则 章节介绍了三个主要范例, 要为 FPGA 平台编写优秀软件, 就需要了解这三个范例。 Vitis HLS 工具通过指定 DATAFLOW 编译指示或者使用 hls::task 对象, 提供了多种类型的任务级并行度 (TLP), 如 HLS 抽象并行编程模型 中所述。

存储器架构:

• 存储器架构在 CPU 中已固定, 但开发者可以创建自己的架构来最优化存储器访问, 以便在 FPGA 上运行应用

• 在 C++ 程序中, 阵列是基础数据结构, 用于保存或移动数据。在硬件中完成综合后, 这些阵列是作为存储器或寄存器来实现的。存储器可作为本地存储器或全局存储器(通常是 DDR 或 HBM 存储体) 来实现。访问全局存储器会产生更高的时延成本, 可耗时大量周期, 而访问本地存储器通常十分快速, 只需一个或多个周期即可。

• 通常在 C++ 程序中, 对存储器进行动态分配/解除分配, 但这在硬件中无法进行综合。因此, 设计师需知晓算法所需存储器的精确数量。

• 存储器访问应加以最优化, 以减少全局存储器访问的开销。冗余访问表示最大程度利用连续访问, 以便能够推断突发。突发访问会隐藏存储器访问时延, 并改善存储器带宽。

微观级别的最优化:

• 在 C++ 程序中, 经常需要实现重复算法来处理数据块, 例如, 信号处理或图像处理。通常, C/C++ 源代码倾向于包含多个循环或多个嵌套循环。 Vitis HLS 可通过在源代码的相应级别插入编译指示来对循环或嵌套循环进行展开或流水打拍。如需了解更多信息, 请参阅 循环入门。

• 基于设计原则完成算法架构并推断并行度后, 您仍需要正确组合微观级别的 HLS 编译指示, 如, PIPELINE、UNROLL、 ARRAY_PARTITION 等。这些编译指示可能不会直观展示给用户。 Vitis HLS 提供了PERFORMANCE 编译指示用于为循环或嵌套循环的给定主体指定顶级性能目标。该工具将自动推断必要的低层次编译指示以满足该目标。借助 PERFORMANCE 编译指示可以减少实现理想 QoR 所需的编译指示, 这也是驱动该工具的一种直观方法

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六轴机器人奇异点

1 奇异点说明 有着6个自由度的KUKA机器人具有3个不同的奇点位置。即便在给定状态和步骤顺序的情况下,也无法通过逆向变换(将笛卡尔坐标转换成极坐标值)得出唯一数值时,即可认为是一个奇点位置。这种情况下,或者当最小的笛卡尔变化也能导致非常大的轴角度变化时,即为奇点位置…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItem组件 用来展示菜单Menu中具体的item菜单项。 子组件 无 接口 Menu…

C语言贪吃蛇详解

个人简介:双非大二学生 个人博客:Monodye 今日鸡汤:人生就像一盒巧克力,你永远不知道下一块是什么味的 C语言基础刷题:牛客网在线编程_语法篇_基础语法 (nowcoder.com) 一.贪吃蛇游戏背景 贪吃蛇是久负盛名的游戏&…

如何决定K8S Pod的剔除优先级

在Kubernetes(k8s)中,当节点资源面临压力时,如何决定Pod的优先级是一个关键问题。在Kubernetes 1.8版本之后,引入了基于Pod优先级的调度策略,即Pod Priority Preemption。这种策略允许在资源不足的情况下&a…

6-2、T型加减速计算简化【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】,查看本系列全部文章 摘要:本节介绍简化T型加减速计算过程,使其适用于单片机数据处理。简化内容包括浮点数转整型数计算、加减速对称处理、预处理计算 一、浮点数转整型数计算 根据上一节内容已知 常用的晶振大小…

3dmatch-toolbox详细安装教程-Ubuntu14.04

3dmatch-toolbox详细安装教程-Ubuntu14.04 前言docker搭建Ubuntu14.04安装第三方库安装cuda/cundnn安装OpenCV安装Matlab 安装以及运行3dmatch-toolbox1.安装测试3dmatch-toolbox(对齐两个点云) 总结 前言 paper:3DMatch: Learning Local Geometric Descriptors from RGB-D Re…

基于单片机的智能寻光小车设计

摘 要:随着物联网技术的飞速发展和逐渐成熟,以单片机为主的智能小车在巡查、仓储、探险及国防等领域得到广泛应用。本文设计了一种基于单片机的智能寻光小车,该小车以STC89C52RC 芯片为设计核心,结合光敏传感器和超声波传感器等多…

初识C语言·编译与链接

1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境,一是翻译环境,二是运行环境,计算机能识别的是二进制的指令,人写完代码后通过翻译环境,使代码变成计算机能读懂的可执行的机器指令&a…

MySQL组复制的介绍

前言 本文介绍关于MySQL组复制的背景信息和基本原理。包括,介绍MySQL传统复制方法的原理和隐患、介绍组复制的原理,单主模式和多主模式等等。通过结合原理图学习这些概念,可以很好的帮助我们理解组复制技术这一MySQL高可用方案,有…

ChatGPT 4.0 升级指南, ChatGPT Plus(GPT 4.0) 有何优势?

1.ChatGPT 是什么? ChatGPT 是由 OpenAI 开发的一种基于人工智能的聊天机器人,它基于强大的语言处理模型 GPT(Generative Pre-trained Transformer)构建。它能够理解人类语言,可以为我们解决实际的问题。 ChatGPT 4.…

关于网络面试题汇总

什么是TCP/IP五层模型?它们的作用是啥?基于TCP/IP实现的应用(层协议)有哪些? TCP/IP五层模型,从上向下分别是: 应用层:应用程序本身,应用层的作用是负责应用程序之间的…

python使用fabric库

目录 一:介绍 二:远程命令执行 三:文件上传,下载 四:执行多台服务器命令 一:介绍 Fabric是一个Python库,用于简化SSH连接和自动化任务。它提供了一个简单的API来执行远程命令、上传和下载文…

京东广告算法架构体系建设--大规模稀疏场景高性能训练方案演变

一、前言 京东广告训练框架随着广告算法业务发展的特点也在快速迭代升级,回顾近几年大致经历了两次大版本的方案架构演变。第一阶段,随着2016年Tensorflow训练框架的开源,业界开始基于Tensorflow开源框架训练更复杂的模型。模型对特征规模和…

ctfshow——文件包含

文章目录 web 78——php伪协议第一种方法——php://input第二种方法——data://text/plain第三种方法——远程包含(http://协议) web 78——str_replace过滤字符php第一种方法——远程包含(http://协议)第二种方法——data://&…

Visual Studio 2010+C#实现信源和信息熵

1. 设计要求 以图形界面的方式设计一套程序,该程序可以实现以下功能: 从输入框输入单个或多个概率,然后使用者可以通过相关按钮的点击求解相应的对数,自信息以及信息熵程序要能够实现马尔可夫信源转移概率矩阵的输入并且可以计算…

电商推荐系统

此篇博客主要记录一下商品推荐系统的主要实现过程。 一、获取用户对商品的偏好值 代码实现 package zb.grms;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Doub…

C++内存分区模型

C程序在执行时,将内存大方向划为4个区域。分别是代码区、全局区、栈区、堆区。 栈区:由编译器自动分配释放,存放函数的参数值、局部变量等。 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系…

阅读笔记——《RapidFuzz: Accelerating fuzzing via Generative Adversarial Networks》

【参考文献】Ye A, Wang L, Zhao L, et al. Rapidfuzz: Accelerating fuzzing via generative adversarial networks[J]. Neurocomputing, 2021, 460: 195-204.【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。 目录 摘要 一、介绍 二、相关…

项目02《游戏-07-开发》Unity3D

基于 项目02《游戏-06-开发》Unity3D , 接下来做UI框架的逻辑系统,管理器和UI背包, 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs , 双击BasePanel.cs脚本修改代码: using UnityEngine; pu…