课时1:Vitis HLS的工作机制——Vitis HLS教程
文章目录
- 1. 前言
- 2. 使用高级综合工具来开发FPGA的优势
- 3. Vitis HLS工作流程
- 4. 调度(Scheduling)和 捆绑(Binding)的例子
- 5. 控制逻辑提取(Control Logic Extraction)的例子
- 6. 参考文献
1. 前言
Vitis HLS(原Vivado HLS)是一个高级综合工具。用户可以通过该工具直接将C、 C++编写的函数翻译成HDL硬件描述语言,最终再映射成FPGA内部的LUT、DSP资源以及RAM资源等。
用户通过Vitis HLS,使用C/C++代码来开发RTL IP核,可以缩短整个FPGA项目的开发和验证时间。
2. 使用高级综合工具来开发FPGA的优势
可以提高硬件工程师的开发效率;
对于软件工程师来说可以提高系统的性能或功能;
可以直接在C语言层面上开发算法,然后映射成HDL语言;
可以直接在C语言层面上进行验证工作;
可以通过优化指令控制C语言综合为HDL的过程;
3. Vitis HLS工作流程
Vitis HLS的工作流程如下图所示:
Vitis HLS工作主要分为两个阶段,第一个阶段为调度和控制逻辑的提取;第二个阶段为捆绑映射。
调度(Scheduling),调度主要完成的任务是判定每个时钟周期要完成哪些操作、每个操作又需要多少个时期周期来完成、以及调度等工作。
控制逻辑的提取(Control Logic Extraction),该步骤主要是生成状态机。
捆绑映射(Binding),判定每个操作需要是什么资源来实验,完成资源的过程。
4. 调度(Scheduling)和 捆绑(Binding)的例子
下面这段为Vitis HLS的示例代码:
根据这段代码,Vitis HLS的Scheduling和Binding方式如下图所示:
由图中可以看到,Scheduling阶段,该运算流程被分为2个时钟周期完成,第一个时钟周期完成乘加操作,第二个时钟周期完成第二次加法操作。
Binding阶段直接将第一个时钟周期的乘加操作映射为DSP资源来处理;第二个时钟周期的操作映射给另一个加法器资源来处理。
5. 控制逻辑提取(Control Logic Extraction)的例子
下面这段为Vitis HLS的示例代码:
根据这段代码,Vitis HLS的Control Logic Extraction方式如下图所示:
此代码示例执行与前一个示例相同的操作。 但是该操作处在for循环中,并且该函数有两个参数是数组形式。
从图中可以看到,Control Logic Extraction阶段根据该代码创建了状态机(FSM)来顺序完成这段代码的操作。char类型的变量被映射成8bit的数据总线,数组in或out一般默认被映射为block RAM。
该状态机总共包含4个阶段,状态机开始于C0,C0状态计算b+c的值。由于该计算流程只需要请求计算一次b+c的值,因此C0状态只执行一次。
C1状态到C3状态会重复执行3次,其中C1状态产生地址、读取数组in的值并存储到x中,同时C1状态会控制一个累加器来判断自己需要迭代重复几次C1~C3的流程。在C2状态,block RAM会返回in数组对应的值给x变量。在C3状态,完成乘加操作。
6. 参考文献
[1]《Vitis High-Level Synthesis User Guide》. UG1399. Xilinx
[2] “跟Xilinx SAE学HLS系列视频讲座-高亚军 ”https://www.bilibili.com/video/av41246874
如果大家对我们的文章感兴趣,可以关注我们的微信公众号:“图灵研究院”,实时关注我们的更新动态。
课时1:Vitis HLS的工作机制——Vitis HLS教程相关推荐
- 第 20 课时:GPU 管理和 Device Plugin 工作机制(车漾)
本文将主要分享以下几个方面的内容: 需求来源 GPU 的容器化 Kubernetes 的 GPU 管理 工作原理 课后思考与实践 需求来源 2016 年,随着 AlphaGo 的走红和 TensorF ...
- 第八篇:深入 React-Hooks 工作机制:“原则”的背后,是“原理”
React 团队面向开发者给出了两条 React-Hooks 的使用原则,原则的内容如下: 1. 只在 React 函数中调用 Hook: 2. 不要在循环.条件或嵌套函数中调用 Hook. 原则 1 ...
- 前端React教程第五课 深入React-Hook工作机制
08 深入 React-Hook 工作机制:"原则"的背后,是"原理" React 团队面向开发者给出了两条 React-Hooks 的使用原则,原则的内容如下 ...
- 2021年大数据HBase(十四):HBase的原理及其相关的工作机制
全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase的原理及其相关的工作机制 一.HBase的flus ...
- java语言的实现机制_JAVA语言之Java NIO的工作机制和实现原理介绍
本文主要向大家介绍了JAVA语言之Java NIO的工作机制和实现原理介绍,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 前言 本文只简单介绍NIO的原理实现和基本工作流程 I/O和 ...
- docker用gpu的参数_从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制
导读:2016 年,随着 AlphaGo 的走红和 TensorFlow 项目的异军突起,一场名为 AI 的技术革命迅速从学术圈蔓延到了工业界,所谓 AI 革命从此拉开了帷幕.该热潮的背后推手正是云计 ...
- MapReduce1和Yarn的工作机制
Hadoop中的MapReduce的工作机制分为两种: MapReduce 1 也就是Hadoop 2.0之前的工作机制 YARN MapReduce 1 构成 MapReduce 1最主要的其实就是 ...
- 从源码分析Hystrix工作机制
作者:vivo互联网服务器团队-Pu Shuai 一.Hystrix解决了什么问题? 在复杂的分布式应用中有着许多的依赖,各个依赖都难免会在某个时刻失败,如果应用不隔离各个依赖,降低外部的风险,那容易 ...
- mysql的proxy机制_MySQL Proxy工作机制浅析
MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断.改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate之类的网络代理服务器的基本思想是一样的.代理服务器是和T ...
- 第6章-MapReduce的工作机制-笔记
为什么80%的码农都做不了架构师?>>> 作业的提交 可以只用一行代码来运行一个MapReduce作业: JobClient.runJob(conf). 作业的调度 Hadoo ...
最新文章
- 使用Xcode External Build System实现Rust 项目 Capture GPU Frame 在线调试 Metal 2018.12.18
- python struct笔记
- 调试的时候step into,step out,step over有什么区别?各有什么作用?分别在什么情况下使用?
- TortoiseGit上传代码报错error:1407742E
- undefined reference to `clock_gettime'
- hive case when语法_SQL中CASE表达式的妙用
- python的实例属性_python 实例属性和类属性
- 实战分享声卡效果调试都用那些效果器插件
- H5打开APP技术总结
- 当当笔试java_20170921 当当和今日头条笔试题
- 对《致加西亚的信》的异议
- ​防火墙国标正式实施|美创科技解读数据库防火墙关键能力
- 笔记本计算机在桌面显示器,解决办法:笔记本电脑如何关闭屏幕,但仍可以使用?...
- 2014九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试题
- 用Python中的hashlib实现md5和sha加密
- 【并行计算】OpenMP编程和MPI编程简单教程
- Kotlin 中的 appy和with方法
- VSCode中ESLint插件修复+配置教程
- 心理测评软件php mysql_中小学心理测评软件系统
- 领扣(leetcode) 179 上升的温度