首页 > 其他分享 >高层次综合(HLS)--简介

高层次综合(HLS)--简介

时间:2024-07-23 13:00:43浏览次数:9  
标签:FPGA -- RTL HLS 自动 设计 工具 高层次

硬件设计与处理近几年来发展迅速。 过去我们的电路相对简单,硬件设计师们可以很方便的画出每一个晶体管,规划他们的连接方式,甚至他们的板上位置。可以说所有工作都是人工完成的。但随着越来越多晶体管的设计需要,硬件工程师也越来越需要依赖自动化设计工具来帮助他们完成设计,而这些设计工具也相对应的变得越来越精密。工程师在这些设计工具的协助下也更具效率。他们不再具体操作每一个晶体管,而只需要设计数字电路,电子设计自动化工具(EDA)把这些抽象而概括的电路自动转换成实际的部件构造版图。

米德和康威(Mead&Conway)的方法,也就是使用一种硬件描述语言(Verilog, VHDL),并把其编译成片上设计的方法在上世纪80年代开始广为使用。但这之后硬件的复杂度还在以指数函数的增长速度发展,硬件工程师们只好寻求更加概括而高层次的编程语言,RTL应运而生。在RTL里,设计师不需要考虑怎么构造一个寄存器或怎样安置这些寄存器,而只需要考虑这些寄存器在设计中起到怎样的作用。EDA工具可以先把RTL转化成数电模型,再由模型转换成一个设备上的具体电路实施方案。这些"方案"对器件的制造来说必不可少,可以用于规定某个自定义设备,也可以用于编程一些现有的设备,比如FPGA。如我们现在所见,新的设计方法确实帮助工程师们的设计思路变得更加清晰。

HLS则是在这基础上更高层的一种方法,设计师们在HLS下需要更多的考虑大的架构而非某个单独部件或逐周期运行。设计师在HLS下需要注重的是系统的运行模式,HLS工具会负责产生具体的RTL微结构。最早大多数HLS工具是基于Verilog的,用户需要使用Verilog[35]语言进行描述,工具也通过Verilog产生RTL。现如今很多HLS工具开始使用C/C++作为设计师端的语言。当然,选择HLS工具最重要的还是看它能否综合我们需要的程序,而不是它使用什么语言。

总体来说,HLS可以自动完成以下曾经需要手动完成的工作:

  • HLS自动分析并利用一个算法中潜在的并发性
  • HLS自动在需要的路径上插入寄存器,并自动选择最理想的时钟
  • HLS自动产生控制数据在一个路径上出入方向的逻辑
  • HLS自动完成设计的部分与系统中其他部分的接口
  • HLS自动映射数据到储存单位以平衡资源使用与带宽
  • HLS自动将程序中计算的部分对应到逻辑单位,在实现等效计算的前提下自动选取最有效的实施方式

HLS的目标是根据用户提供的输入和限制自动替用户做出很多决定。每个HLS工具在实际施行的效率上相差甚远,这其中我们有一些非常不错的选择,例如赛灵思Vivado HLS, LegUp, Mentor Catapult HLS。他们出众的特性在于可以支持更多更广泛的程序转换。

大多数HLS工具需要用户提供功能的规范,交互的描述,一个对接的计算设备,和目标优化方向。而对于Vivado HLS来说,用户需要:

  • 一个用C/C++/System C编写的函数
  • 一个测试平台用于验证结果
  • 一个FPGA开发版
  • 期望的时钟周期
  • 一个简单的实施指导

HLS工具没有强大到可以处理任何代码。很多我们平时在软件编程中常用的概念在硬件实施中很难实现,所以硬件描述语言对于具体实施会更加灵活。通常这些HLS工具需要用户提供一些附加信息(通过suggestion或#pagma)来帮助完善程序,因此我们说HLS工具会同时"限制"又"加强"了一门语言。举例而言,HLS工具一般无法处理动态内存分配,大部分工具对标准库的支持也非常有限。用户也应当避免系统调用和递归以尽量降低复杂程度。除去这些设计限制之外,HLS工具的处理范围非常的广(包括直接内存访问,流,片上内存),优化效率也很高。

根据Vivado HLS的使用指南,输入程序尽量需要作出一些规范:

  • 不使用动态内存分配(不使用malloc(),free(),new和delete())
  • 减少使用指针对指针的操作
  • 不使用系统调用
  • 减少使用其他标准库里的内容(支持math.h里常用的内容,但还是有一些不兼容)
  • 减少使用C++中的函数指针和虚拟函数
  • 不使用递归方程
  • 精准的表达交互接口

当RTL级的设计可用时,大多数HLS工具会进行标准RTL设计流。而在赛灵思Xilinx Vivado设计套装里进行的是逻辑综合,将RTL级设计转换成一个FPGA逻辑部件的连线表,这份连线表不仅包含需要的逻辑部件还包含他们的连接方式。Vivado之后将连线表和目标设备中的可用资源相关联,这个过程被称作布局及布线(PAR)。产出的FPGA配置被附在比特流(bitstream)上,用户可以将比特流上传到FPGA以实现想要的功能。比特流实质上是用二进制表示FPGA上每一个可用资源的配置,包括逻辑部件的使用,连线的方式,和片上的内存。大型FPGA例如赛灵思UltraScale FPGA拥有超过十亿个可配置比特,较小的FPGA上也至少有几亿个可配置比特。


参考:《Parallel Programming for FPGAs》

标签:FPGA,--,RTL,HLS,自动,设计,工具,高层次
From: https://blog.csdn.net/qq_45803095/article/details/140632220

相关文章

  • FIFO最小深度计算
    1、读写没有空闲周期。(fA>fB)    例如,fA=80MHz;fB=50MHz;BurstLength=120;读写之间没有空闲周期,连续读写一个突发长度。解法:        写一个数据需要的时间=1/80MHz=12.5ns;        写一个突发需要的时间=120*12.5ns=1500ns;   ......
  • 数据做无损定点化,需要的最小位宽是多少位?
    以一道经典笔试题为例:对12.918做无损定点化,需要的最小位宽是多少位,位宽选择11位时的量化误差是多少?        首先,明确一个知识点:无损量化,即量化误差小于量化精度的一半。    因此,对于整数,12需要的4位(0~15)二进制。    12bit量化的情况:整数占4bit,小......
  • eclipse如何写python程序
    本文主要介绍在Windows系统环境下,搭建能在Eclipse中运行python程序的环境。一、Eclipse下载与安装:Eclipse是写JAVA的IDE,下载地址为:http://www.eclipse.org/downloads/下载安装,网上教程很多,不赘述。二、pydev插件下载与安装:启动Eclipse,点击Help—>EclipseMarketplace......
  • PR速成教程+系统课程零基础学习视频百度云盘分享
    如大家所了解的,PR全称AdobePremiere,是一款专业的视频编辑软件。它是一款桌面端软件,支持Windows和MacOS操作系统。PR作为一款流行的视频编辑工具,被广泛应用于电影、电视、广告、纪录片等领域的视频制作中。下面总结一些Pr软件的常用功能,以便初学者参考、学习:1、视频剪辑(也......
  • 自动 Wi-Fi 设置网页:实施指南
    我想创建一个网页,我有自己的WiFi,当我给用户一个二维码时,直接转到用户填写手机号码和OTP验证的网页,验证后Wifi自动连接30分钟解决问题自动连接wifi结果就是这样解决了很多人的问题自动Wi-Fi设置网页:实施指南创建自动连接Wi-Fi的网页需要结合前端网页设计和后端逻......
  • 驱动开发系列07 - 驱动程序如何分配内存
    一:概述        Linux内核提供了丰富的内存分配函数、在本文中,我们将介绍在设备驱动程序中分配和使用内存的方法,以及如何优化系统的内存资源。由于内核为驱动程序提供了统一的内存管理接口。所以我们不会去讨论不同架构是如何管理内存的,文本不涉及分段、分页等问题,此......
  • 快速理解进程与线程
    文章目录......
  • 高性能web站点
    1、组件分离1.1、DNS负载均衡不同的web内容分布到不同的服务器上,并划分子域,利用DNS将请求自然转移到不同的服务器上。主要可以分为两大内容:动态内容,CPU、IO密集型静态内容,IO密集型通过在DNS中配置多个A记录,将请求转移到集群中不同的服务器,这有助于具有地域性问题的大型......
  • 计算参数的ARE
    我有以下代码:importnumpyasnpimportmatplotlib.pyplotaspltfromscipyimportintegrate,optimizeimportrandomdefdose(t,y,b,s,c,p,d):target,infectious,virus=yreturnnp.array([-b*target*virus,b*target*virus-s*......
  • 三轴角速度解算姿态
    问题:在知道三轴加速度acc_x_raw,acc_y_raw,acc_z_raw以及三轴角速度gyro_x_raw,gyro_y_raw,gyro_z_raw后,计算出倾斜角度解决方案:为了通过ROS计算出倾斜角度,可以使用IMU的加速度和角速度数据进行融合。常用的融合方法之一是通过卡尔曼滤波器或者互补滤波器来平滑和结合加速度计和陀......