南京观海微电子---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状态,完成乘加操作。

相关推荐
156082072191 小时前
飞腾D2000与FPGA结合的主板
fpga开发
baowxz7 小时前
FPGA管脚类型,及选择
fpga开发
辣个蓝人QEX1 天前
【ZYNQ Linux开发】使用 boot.scr 启动 Linux 报错 Bad Linux ARM64 Image magic! 调试过程记录
linux·运维·fpga开发·zynq·petalinux·zynq mpsoc
一条九漏鱼1 天前
uart verilog 三段式状态机
fpga开发
FPGA_ADDA2 天前
基于VU37P的高性能采集板卡
fpga开发·vu37p·20通道采集卡
hahaha60162 天前
crc32代码设计
fpga开发
XINVRY-FPGA2 天前
XCVP1902-2MSEVSVA6865 Xilinx FPGA Versal Premium SoC/ASIC
嵌入式硬件·安全·阿里云·ai·fpga开发·云计算·fpga
霖002 天前
详解GPU
人工智能·vscode·python·fpga开发·mvc·gpu算力
FakeOccupational2 天前
【电路笔记 TMS320F28335DSP】McBSP 从源时钟得到 生成时钟 CLKG & 帧同步信号 FSG
笔记·单片机·fpga开发
Water_Sounds3 天前
【FPGA开发】Ubuntu16.04环境下配置Vivado2018.3—附软件包
fpga开发