您的当前位置: 首页 > 科技 > 高层次综合:解锁FPGA广阔应用的最后一块拼图

高层次综合:解锁FPGA广阔应用的最后一块拼图

作者:匿名 人气:4999 时间:2019-11-21 16:33:28
摘要:同时,hls工具综合生成的结果也有了长足进步,在某些应用领域甚至可以和人工手写rtl近似的性能水平。时至今日,高层次综合技术取得了进一步的发展。接下来,老石将以autopilot这个hls工具为例,简

为什么我们需要高级集成

高级综合(hls)是指将高级语言描述的逻辑结构自动转换成低级抽象语言描述的电路模型的过程。所谓的高级语言,包括C、C、systemc等。,通常具有高度的抽象性,并且通常没有时钟或定时的概念。相比之下,verilog、vhdl和systemverilog等低级语言通常用于描述周期精确的寄存器传输级电路模型,这也是asic或fpga设计中最常用的电路建模和描述方法。

然而,在过去的十年里,hls技术得到了广泛的关注和快速的发展,特别是在fpga领域。纵观近年来的主要fpga学术会议,hls一直是学术界和工业界最集中的研究领域之一。主要原因如下。

首先,使用更高层次的抽象来建模电路是集成电路设计发展的必然选择。随着摩尔定律的发展,集成电路的复杂性逐渐超出了人类可以手工管理的范围。例如,苹果iphone11内置的a13芯片有大约85亿个晶体管。

(斯蒂芬·桑克兰/cnet提供的图片)

然而,根据国家电气公司2004年发表的研究,一个拥有100万逻辑门的芯片设计通常需要30万行rtl代码。因此,完全使用rtl级逻辑抽象来设计当代芯片是不现实的,这会给设计、验证和集成带来很大压力。

相比之下,使用高级语言(如C和C)对系统建模可以将代码密度压缩7到10倍,这大大降低了设计复杂度。

第二,高级语言可以提高ip重用的效率。传统的基于rtl的ip通常需要定义一个固定的体系结构和接口标准,当ip被重用时,需要花费大量的时间进行系统互连和接口验证。相比之下,高级语言隐藏了这些需求,hls工具负责它们的实现。

就fpga而言,现代fpga中有大量成熟的ip单元,如嵌入式存储器、算术运算单元、嵌入式处理器、人工智能加速器、片上网络系统等。这些fpga ip具有固定的功能和位置,因此可以被hls工具充分利用。在提高ip复用效率的同时,简化了合成算法,提高了合成电路的性能。

第三,hls可以帮助软件和算法工程师参与甚至领导芯片或fpga设计。这是因为hls工具可以封装和隐藏硬件的实现细节,从而使软件和工程师能够专注于上层算法的实现。对于硬件工程师来说,hls还可以帮助他们进行快速的设计迭代,并专注于对性能、面积或功耗敏感的模块和子系统的优化设计。

Fpga前世的高级合成

随着集成电路复杂性的快速增长,芯片设计方法也在不断发展。早在fpga出现之前,人们就开始尝试摆脱依赖于人工检查芯片布局的设计方法,转而探索使用高级语言在行为层面描述电路逻辑,并通过自动化工具将电路模型转换成实际电路设计。

在上世纪八九十年代,集成电路设计的hls工具一直是学术界研究的热点。其中,一些有代表性的作品包括卡内基梅隆大学的cmu-da(设计自动化)工具和加拿大卡尔顿大学提出的力导向调度算法。

从此,这些工作为当前的电路综合算法奠定了基础,为以后的hls研究提供了许多有价值的经验和参考。但是,现阶段的hls工作在成果转化方面失败了,没有有效转化为工业实践。主要原因之一在于“在错误的时间遇见了正确的人”。

当时,当摩尔定律蓬勃发展时,集成电路设计正经历着历史上最大的变化。在后端,自动布局逐渐成为主流。在前端,rtl一体化也在逐步上升。传统的电路设计工程师已经开始采用基于rtl的电路建模方法来代替传统的原理图和基于版图的设计,这带来了rtl合成工具的快速发展。相比之下,这一阶段的hls研究往往使用特殊的编程语言,如cmu-da使用的称为“ISP”的语言,因此很难得到与rtl处于“蜜月期”的工程师的青睐。

经过一段时间的沉默之后,hls在2000年后再次引起学术界和工业界的关注。一些著名的工具包括bluespec和自动驾驶仪。导致这种变化的主要原因是hls工具开始使用c/c作为主要的目标语言,这逐渐被许多不懂rtl的系统和算法工程师所接受。同时,hls工具产生的综合结果也取得了很大进展。在某些应用领域,性能水平甚至可以类似于手动手写rtl。

此外,fpga的逐渐兴起也对hls的发展起到了重要的推动作用。与asic设计不同,fpga在芯片上有固定数量的逻辑资源。因此,hls工具不必太担心asic设计中面积、性能和功耗的绝对优化,而只需要将设计合理地映射到fpga的固定架构。这样,hls就成为在fpga上快速实现目标算法的一种很好的方式。

到目前为止,高水平的综合技术有了进一步的发展。大型fpga公司都推出了自己的hls工具,如Celence的vivado hls、英特尔的hls编译器、opencl sdk等。学术界也有许多成就,如多伦多大学的勒格普(legup)等。

接下来,老舍将以hls工具自动驾驶仪为例,简要介绍高级综合的主要工作原理。

高级别综合的主要工作原理

autoesl公司的自动驾驶工具可以说是hls领域学术成果转化最成功的案例。自动驾驶源于加州大学洛杉矶分校丛京生教授领导的xpilot项目。后来,它与当时负责该项目的博士生张志如(现为康奈尔大学副教授)一起成立了autoesl公司。它于2011年被赛勒斯收购,并成为万岁。

自动驾驶仪的工作流程框图如下图所示。在前端,它使用基于llvm的编译器体系结构,可以处理用ansi c、C和osci systemc等综合语言编写的模型。这个名为llvm-gcc的前端编译器将把高级语言模型转换成中间表达式(ir),并针对代码复杂性、冗余性、并行性等进行一系列代码优化。然后,根据具体的硬件平台,综合生成rtl码、验证和仿真环境以及必要的时序和布局约束。

自动驾驶仪的成功在于它的hls结果在某些应用领域优于人工优化rtl获得的结果。例如,在无线mimo系统中使用的球形解码器ip中,自动驾驶仪成功地将4000行c代码算法集成到virtex5 fpga中,以225mhz运行,并且实现了球形解码器ip较少的逻辑资源使用,如下图所示。这个结果甚至现在也非常令人震惊。这很好地证明了hls比rtl ip有潜力获得更好的性能。

高级综合工具中常用的优化方法

传统的处理器编译器设计通常只有一个主要目标,那就是最大化性能。相比之下,高级综合工具需要整体考虑各种电路设计的主要指标,如性能、功耗、面积等。同时,他们还需要考虑工具本身的性能,如占用的资源和运行时间等。因此,在开发hls工具时,应该考虑和采用更多的优化方法,这些优化方法也是当今学术界和工业界在hls领域的主要研究方向。一般来说,hls工具的主流优化方法如下。

字长01的分析与优化

fpga最重要的特性之一是它可以使用任意字长的数据路径和操作。因此,fpga hls工具不需要坚持固定长度(如常见的32位或64位)表达式,而是可以优化设计的整体或局部字长,从而达到性能提高和面积减少的双重效果。

然而,字长分析和优化要求hls用户深入了解要集成的算法和数据集,这也是限制这种优化方法广泛使用的主要因素之一。

02循环优化

循环优化一直是hls优化方法的研究重点和热点,因为它是将顺序执行的高级软件循环有效映射到并行执行的硬件体系结构的关键环节。

循环优化的最终目标是最小化循环中两个相邻操作之间的时间延迟。理想情况下,相邻的循环操作可以并行执行。然而,由于硬件资源的限制以及循环之间的嵌套和依赖性,很难完全扩展循环。如何优化各种周期以实现最佳的硬件结构已经成为学术界和工业界最关注的问题。

一种流行的循环优化方法是所谓的多面体模型,即多面体模型(多面体model)。多面体模型被广泛使用。在hls中,它主要用于将循环语句表示为空间多面体(见下图)。然后,根据边界约束和依赖关系,通过几何运算调度语句,实现循环变换。

至于多面体模型的细节,本文不再赘述。应该指出,多面体模型在fpga hls中取得了相当大的成功。许多研究证明多面体模型有助于实现性能和面积的优化,同时也有助于提高fpga片上存储器的使用效率。

03软件并行性支持

c/c和rtl的主要区别在于前者编写的程序被设计成在处理器上顺序执行,而后者可以通过直接实例化多个操作单元来实现任务的并行处理。随着处理器对并行性的逐渐支持和gpu等非处理器芯片的兴起,c/c开始逐渐引入对并行性的支持。例如,已经出现了多线程并行编程方法,例如pthreads和openmp以及C语言扩展,例如opencl,用于诸如gpu之类的异构系统的并行编程。

因此,作为一个hls工具,它必然会增加对这些软件并行性的支持。例如,legup集成了Du pthreads和openmp的支持,从而实现了任务和数据之间的并行性。

此外,altera在被英特尔收购之前就已经推出opencl sdk,它可以在高层次上合成opencl,生成fpga电路逻辑和cpu代码,从而实现fpga作为硬件加速模块的快速发展。

高水平综合发展前景

经过十多年的发展,hls已经被自动驾驶仪、opencl sdk等fpga hls成功商业化,但要完全取代人工rtl建模还有很长的路要走。

例如,对于fpga来说,内存瓶颈一直是制约系统性能的重要因素。除了各种片上存储单元,还有各种片外存储单元,如ddr、qdr、hbm等。因此,片内和片外存储单元的有效利用一直是hls的研究热点。

此外,hls的仿真和调试也需要进一步探索。一方面,需要形式化方法证明hls生成的rtl码等价于高级码;另一方面,当硬件和软件需要单独和协同地模拟和调试时,hls工具需要提供相关的测试环境、用例、脚本、调试方法等。当硬件出现问题时,如何调试软件中的错误需要方法论的支持。

近年来,越来越多的研究开始集中在特定领域的编程语言和相应的hls上,如前一篇文章介绍的p4,它是网络数据包领域的高级编程语言。随着人工智能的发展,用于人工智能应用的python hls应运而生。通过在特定领域使用hls,可以在特定领域进一步优化工具,大大提高系统性能,减少面积和功耗。

结论

业界普遍认为,gpu在人工智能时代的非凡成功在很大程度上归功于它对软件和算法工程师友好的编程语言和环境。相比之下,虽然fpga正在扩大其应用范围,在性能和功耗方面比gpu有明显优势,但其编程模式主要是基于硬件工程师的rtl开发。

老石认为,fpga的高级合成是行业发展的必然趋势。相信随着hls领域的难题不断被突破,用高级语言对fpga进行高效编程必将实现,这将最终成为fpga更广泛应用的最后一块拼图。

(注:本文仅代表代表的个人观点,与雇主无关。)

*免责声明:这篇文章最初是作者写的。这篇文章的内容是作者的个人观点。重印半导体行业观察只是为了传达不同的观点。这并不意味着半导体行业观察同意或支持这一观点。如果您有任何异议,请联系半导体行业观察。

今天是2098年的《半导体工业观察》。请注意。

半导体工业观察

“半导体第一垂直介质”

实时专业原始深度

Copyright (c) 2002-2011 hdwtsp.com版权所有
连镇网
Top