当前位置: 首页 > news >正文

南京观海微电子---Vitis HLS的工作机制——Vitis HLS教程

1. 前言

Vitis HLS(原VivadoHLS)是一个高级综合工具。用户可以通过该工具直接将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的ControlLogic 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状态,完成乘加操作。

相关文章:

  • 51单片机学习9 串口通讯
  • 为wordpress特定分类目录下的内容添加自定义字段
  • 2021年XX省赛职业院校技能大赛”高职组 计算机网络应用赛项 网络构建模块竞赛真题
  • vscode使用Runner插件将.exe文件统一放到一个目录下
  • git基础-tagging
  • 【服务器】常见服务器高危端口
  • 爬取搜狗翻译项目实例
  • 网络协议栈--传输层--UDP/TCP协议
  • 简单的查看iPhone储存空间的几种方法,总有一种是你想要的
  • nginx mirror 流量镜像
  • [flask]http请求//获取请求头信息+客户端信息
  • 【C++】手撕哈希表的闭散列和开散列
  • Day08 Java复习8 Spring MVC概念
  • 蓝桥杯刷题-day5-动态规划
  • Chrome 插件打包发布
  • [case10]使用RSQL实现端到端的动态查询
  • AngularJS指令开发(1)——参数详解
  • EOS是什么
  • ES6系列(二)变量的解构赋值
  • Git初体验
  • Idea+maven+scala构建包并在spark on yarn 运行
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript 基础知识 - 入门篇(一)
  • js算法-归并排序(merge_sort)
  • Mysql优化
  • PAT A1092
  • PhantomJS 安装
  • Python 基础起步 (十) 什么叫函数?
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 番外篇1:在Windows环境下安装JDK
  • 关于Flux,Vuex,Redux的思考
  • 关于字符编码你应该知道的事情
  • 数据科学 第 3 章 11 字符串处理
  • 推荐一个React的管理后台框架
  • 一些关于Rust在2019年的思考
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 积累各种好的链接
  • 移动端高清、多屏适配方案
  • #《AI中文版》V3 第 1 章 概述
  • #stm32整理(一)flash读写
  • (libusb) usb口自动刷新
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (笔试题)合法字符串
  • (第二周)效能测试
  • (南京观海微电子)——I3C协议介绍
  • (三)c52学习之旅-点亮LED灯
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)