首页 > 其他分享 >HLS学习笔记——vivado HLS的Design Flow概念

HLS学习笔记——vivado HLS的Design Flow概念

时间:2022-12-16 16:32:17浏览次数:72  
标签:FPGA vivado RTL 工程师 Flow Vivado HLS 单元


本博客为​​跟Xilinx SAE 学HLS系列视频讲座-高亚军​​的学习笔记。

软件工程师怎么了解FPGA架构

Vivado HLS是将基于C/C++描述的算法转化成相应的RTL代码,最终在FPGA上实现。这就要求软件工程师对FPGA的内部架构有一些基本的认识,目的在于保证生成的RTL代码在性能和资源上能够达到很好的平衡。实际上,C语言与FPGA是有一些对应关系的。比如:

C语言中的数组可对应于FPGA中的寄存器、分布式RAM、Block RAM或者UltraRAM

C语言中的乘加运算可对应于FPGA中的乘加运算单元(DSP48)

但不同于硬件工程师,对于FPGA内部其他资源比如高速收发器等,软件工程师可不必了解。

本讲从软件工程师的视角重点介绍FPGA内部常规逻辑单元,包括查找表(LUT)、乘加运算单元(DSP48)、存储单元(Block RAM)。这三类资源在算法开发中或多或少都会用到,在Vivado HLS的综合报告中也有所体现。

FPGA属于硬件可编程器件,Xilinx的FPGA分为两类:传统的FPGA和SOC

HLS学习笔记——vivado HLS的Design Flow概念_HLS


HLS学习笔记——vivado HLS的Design Flow概念_状态机_02

对于软件工程师,我们更关注的是逻辑单元、内存单元和算术逻辑单元。

HLS学习笔记——vivado HLS的Design Flow概念_软件工程师_03


逻辑单元包括查找表、多路选择器和超前进位链

HLS学习笔记——vivado HLS的Design Flow概念_数组_04


算术运算单元指代的是DSP48,可以实现乘法、乘加法、乘累加、加法、累加和逻辑运算。

HLS学习笔记——vivado HLS的Design Flow概念_状态机_05


内存单元包括Block RAM和分布式RAM(LUT in SLICEM)。在7系列的FPGA中,36kb的BlockRAM可以配置成36kb的FIFO、18Kb的FIFO和18kb的BlockRAM、BlockRAM和BlockRAM。

HLS学习笔记——vivado HLS的Design Flow概念_状态机_06


HLS学习笔记——vivado HLS的Design Flow概念_状态机_07


HLS学习笔记——vivado HLS的Design Flow概念_数组_08

HLS工作机制

有一本书叫做”FSM based Digital Design UsingVerilog HDL”,通过这本书你可以对状态机有进一步的认识。之所以提到状态机,是因为就控制逻辑而言,采用它很方便(当然未必最为高效)。

对软件工程师而言,比如完成两个数组相乘(这里指的是数组中的元素对应相乘),可分为如下几个步骤:

  1. 分别从两个数组中取数
  2. 对两个数执行乘法操作
  3. 将结果写入目标数组
    实际上,这三个步骤就对应了三个状态。Vivado HLS的一个重要工作机制就是提取控制逻辑,这些控制逻辑最终以状态机的形式体现出来。

本讲通过一个简单的具体实例(数组的乘加运算),介绍Vivado HLS的工作原理,包括Scheduling、Binding、Control logic extraction等概念,使得无论是软件工程师还是硬件工程师都可以放心、高效使用Vivado HLS。

HLS学习笔记——vivado HLS的Design Flow概念_数组_09


在ESL阶段有两种典型方式对整个系统行为进行建模:使用高层次语言-Vivado HLS和基于模型的设计工具-System Generator

HLS学习笔记——vivado HLS的Design Flow概念_状态机_10


HLS综合的三个阶段:Scheduling、Control Logic Extraction和Binding。

HLS学习笔记——vivado HLS的Design Flow概念_状态机_11


Scheduling抽取每个时钟周期内需要执行的动作,Binding将执行的操作映射到FPGA物理资源上,Control Logic Extraction提取操作之间的关系形成控制逻辑,通常是状态机。

HLS学习笔记——vivado HLS的Design Flow概念_数组_12


HLS学习笔记——vivado HLS的Design Flow概念_数组_13


HLS学习笔记——vivado HLS的Design Flow概念_状态机_14


HLS学习笔记——vivado HLS的Design Flow概念_软件工程师_15

HLS设计流程

传统的RTL设计流程包括设计输入、功能仿真、设计综合、布局布线和系统调试这样的几个步骤,而且这个过程往往需要反复迭代,毕竟通常很难保证功能仿真一次通过或者系统调试没有任何bug。HLS设计流程是基于C的设计流程,因此要在C这个层面完成设计输入和功能验证,同时还要保证生成的RTL代码的功能与对应的C代码的功能完全一致,这就多了一个C/RTL协同仿真(C/RTL Co-simulation)。这样,整个设计流程就包括采用C描述的设计输入、算法功能验证、C综合(生成RTL代码)、C/RTL协同仿真,后续就可以将生成的RTL代码融入的设计中完成RTL的综合与布局布线了。从这个流程中可以看到,HLS设计流程有两个显著特征:在C层面描述算法;在C层面验证算法。这是其相比于RTL更为快捷的一个重要原因。

HLS学习笔记——vivado HLS的Design Flow概念_HLS_16


HLS学习笔记——vivado HLS的Design Flow概念_状态机_17


HLS学习笔记——vivado HLS的Design Flow概念_HLS_18


HLS学习笔记——vivado HLS的Design Flow概念_状态机_19


第一步做C的仿真 第二步做C的综合 第三步做C和RTL的协同仿真 第四步做导出RTL

可以通过相应按钮综合报告和RTL仿真波形

HLS学习笔记——vivado HLS的Design Flow概念_软件工程师_20


HLS学习笔记——vivado HLS的Design Flow概念_状态机_21


HLS学习笔记——vivado HLS的Design Flow概念_状态机_22


HLS学习笔记——vivado HLS的Design Flow概念_HLS_23


HLS学习笔记——vivado HLS的Design Flow概念_HLS_24


HLS学习笔记——vivado HLS的Design Flow概念_状态机_25

Xilinx相关文档:
ug574: UltraScale Architecture ConfigurableLogic Block
ug573: UltraScale Architecture MemoryResources
ug579: UltraScale Architecture DSP Slice UserGuide

ug902 (v2018.1) High-Level Synthesis : page 6 - page 11

ug902(v2018.1) High-Level Synthesis page 22 - page 63
ug871(v2018.1) High-level Synthesis Tutorial Ch3: C Validation Lab 1, Lab 2, Lab 3
ug871(v2018.1) High-level Synthesis Tutorial Ch8: RTL Verification Lab 1, Lab 2, Lab3

标签:FPGA,vivado,RTL,工程师,Flow,Vivado,HLS,单元
From: https://blog.51cto.com/feishujun/5947812

相关文章

  • Stack overflow
        程序调试执行时报如下错误:       崩溃代码://结构体定义typedefstruct{//数据条目个数intiCount;//数据条目数组,按1s频率采样,86400个数据......
  • 消除警告:This TensorFlow binary is optimized with oneAPI Deep...
    AI入门级学习,大多数文章中优选推荐Keras,但是这个框架现在与TensorFlow简单绑定在一起(当然,你也可以选择另外的后端:如CNTK和Theano)。今天看一门老旧的图书,输入如下代码时出现......
  • tensorflow 模型保存格式
    tensorflow模型保存格式https://www.cnblogs.com/wioponsen/p/13524037.htmlhttps://blog.csdn.net/qq_42738654/article/details/121096614https://www.zdaiot.com/ML......
  • CF451E Devu and Flowers
    \(CF451E\)\(Devu\)\(and\)\(Flowers\)链接:https://www.luogu.com.cn/problem/CF451E题目描述:将一些球丢进一个盒子里,每一个求有一种颜色,有多少种本质不同的方法......
  • CF451E Devu and Flowers
    $CF451E$$Devu$$and$$Flowers$链接:https://www.luogu.com.cn/problem/CF451E题目描述:将一些球丢进一个盒子里,每一个求有一种颜色,有多少种本质不同的方法题解:......
  • 【Unity Shader】Special Effects(二)BorderFlow 边框流动(UI)
    更新日期:2021年8月23日。Github源码:​​​[点我获取源码]​​索引​​BorderFlow边框流动​​​​思路分析​​​​流光区域​​​​流光区域的中心点​​​​流光区域的......
  • 使用TensorFlow Probability实现最大似然估计
    TensorFlowProbability是一个构建在TensorFlow之上的Python库。它将我们的概率模型与现代硬件(例如GPU)上的深度学习结合起来。极大似然估计最大似然估计是深度学习模......
  • MySQL-表不能自动生成的解决方式-flowable
    场景同一台服务器中有两个作用相同的数据库,flowable项目启动会自动检测有无创建基础的表,无则创建,第一个数据库无表也可自动启动,但是将数据库切换至第二台数据库无表,则无......
  • TensorFlow 安装
    1.准备工作在安装TensorFlow之前得先安装Anaconda如果还没有进行安装,可以看我主页安装Anaconda教程2.安装TensorFlow我们打开AnacondaPrompt输入python-mpip......
  • TensorFlow简介
    什么是TensorFlow?TensorFlow是Google开源软件库,为机器学习工程中的问题提供了一整套解决方案。类比于Spark/Flink是大数据工程问题的解决方案。该软件库把机器学习......