龙空技术网

FPGA 20年最有影响力的25个研究成果 – 应用篇

与非网 260

前言:

今天兄弟们对“cordic算法fpga实现”大概比较关切,我们都需要剖析一些“cordic算法fpga实现”的相关文章。那么小编也在网上收集了一些有关“cordic算法fpga实现””的相关知识,希望你们能喜欢,朋友们快快来学习一下吧!

很多世界顶尖的“建筑师”可能是你从未听说过的人,他们设计并创造出了很多你可能从未见过的神奇结构,比如在芯片内部的复杂体系。制造芯片的基本材料源于沙子,但芯片本身已经成为人们当代生活不可或缺的东西。如果你使用手机、电脑,或者通过互联网收发信息,那么你就无时无刻不在受益于这些建筑师们的伟大工作。

FPGA是芯片的其中一种,从上世纪八十年代诞生起,FPGA 已经从简单的可编程门阵列,发展成为了有着大量可编程逻辑的复杂片上系统。除了硬件结构之外,FPGA 的开发工具和应用场景也都取得了长足的进步和扩展,FPGA 在整个半导体行业的重要性也在不断增强。FPGA 芯片的演进,离不开这些“建筑师”的不断发明创造。

几年前,这些 FPGA 的顶级建筑师们选出了自上世纪九十年代起的 20 年以来 FPGA 领域最有影响力的 25 个研究成果。通过这些重要的成果,我们会理解 FPGA 是如何发展至今,并且知道 FPGA 技术未来将会发展向何处。

这 25 个研究成果按研究领域分为架构、EDA 工具、电路、应用等大类,每项成果都由一名该领域的顶级学者做推介。我将在几篇文章里,分别介绍这这些改变了 FPGA 发展进程的重要研究成果。本文是应用篇,主要介绍了 FPGA 在实际应用领域的重大突破性成就。

FPGA 领域的架构创新和布局布线算法创新,请参见这几篇文章:《系统架构篇》《微架构篇》《布局布线算法篇》《其他 FPGA CAD 算法篇》。

(本文介绍的 6 项成果原文,均已上传至知识星球:老石谈芯进阶版,请在文末扫码进入星球查看)

01

DPGA 的使用和应用领域

一句话总结:FPGA 动态重构领域的奠基之作

英文名:DPGA Utilization and Application

作者:André DeHon

推介人:John Wawrzynek(加州大学伯克利分校)

这项成果是最早研究 FPGA 动态重构(runtime reconfiguration)的工作之一,它为大量后续的工作奠定了坚实的基础。

在这个工作中,作者深入分析了能够提升 FPGA 运行效率的器件架构和应用设计模式。在这项工作之前,有许多研究人员对于 FPGA 的动态重构功能非常着迷,有些研究已经构建了基于商用 FPGA 的动态重构应用实例。其中,一个典型的工作是 Chris Jones 等人的“在无线视频编码中使用 FPGA 动态重构的问题研究”(Issues in Wireless Video Coding using Run-time-reconfigurable FPGAs)。

然而,除了极少的想法之外,人们对于动态重构及其设计模式并没有一个清晰的理解。此外,对动态重构的成本和优势也缺乏量化标准和理论分析。

Andre DeHon 很早就开始关注并思考这些问题。在 MIT 做研究生期间,他就在研究中引入了动态可重构器件这一概念。在这个工作中,他阐述了一组有用的设计模式,并严谨的展示了这些模式如何与动态可重构器件一道,为系统带来明显的面积优势。

尽管这项工作的学术贡献巨大,它却在更广泛的意义上影响和启发了其他研究者。这项工作展示了如何将定量分析用于可重构器件的架构和系统层面的研究,例如对某项特性的成本与优势分析等。此外,和商用可编程逻辑阵列相比,作者在系统架构层面有着截然不同而大胆的想法,而这也在微架构研究领域为其他研究者树立了一个创新思维的榜样。通常来讲,研究者都局限于商业器件、以及这些 FPGA 针对特定领域的优化,而这也在一定程度上限制了整个领域的创新和发展。

总体来说,这项成果在几个方面产生了持久的影响:它设立了可重构计算的定量分析标准,并激励了一代研究人员探索动态重构的方法和应用。这项成果中包含的架构和设计思想,已经被很多研究团队和初创公司所采用。

02

使用高性能 FPGA 在 250MHz 频率下进行信号处理

一句话总结:高性能 FPGA 设计的典范作品,使 FPGA 时钟频率大幅超越同期 x86 CPU。

英文名:Signal processing at 250 MHz using high-performance FPGA's

作者:Brian von Herzen

推介人:André DeHon(宾夕法尼亚大学),Steve Trimberger(DARPA – 美国国防先进计划研究署)

这项成果是 FPGA 设计领域中令人振奋的力作,它展示了 FPGA 所能达到的最大性能,以及如何设计以获取这样的性能。

为了理解这项成果,有必要先介绍一下 FPGA 设计在 1997 年左右是什么样子的。当时,英特尔的奔腾 CPU,也就是高时钟频率设计的典范,也只不过运行在 75-100MHz,并使用 0.5um 和 0.6um 工艺制造。只有到了 0.35um 工艺时,奔腾 CPU 才有可能在 200MHz 的时钟频率下运行。此外,当时的大多数 FPGA 设计都运行在 25-40MHz 的区间。业界的基本共识是,FPGA 必然会比 ASIC 或处理器的运行速度要慢很多。

然而,这项成果表明,在 1997 年就可以使用基于 0.6um 工艺的赛灵思 XC2100A FPGA,将设计运行在 250MHz 时钟频率下。时至今日,这个性能对于大多数 45nm 器件的使用者来说都是非常可以接受的!

诚然,为了实现这个性能确实需要对 FPGA 设计进行相当的优化,包括仔细的布局、流水线设计、以及严格规划信号在一个周期内传输的距离和位置等等。值得注意的是,这项工作阐述了整体的设计方法论,并为 CAD 工具及 FPGA 架构研究提出了很多前瞻性的指导,以充分发挥 FPGA 的最大性能。之后的很多研究,包括 GARP、HSRA、CHESS、SFRA、Tabula 等,以及互联 retiming、流计算模型等等,都是基于来自这个成果的愿景。

这项工作是 FPGA 应用领域研究的代表性成果之一。它展示了超越传统认知的 FPGA 性能结果,并详细说明了如何利用 FPGA 的架构特点来实现这一超越。这些都为 FPGA 相关的研究提供了宝贵经验。尽管这项成果的有些部分读起来比较晦涩,甚至像一份实验报告,但即使在今天,这项成果仍然有着很强的可读性,而且并不过时。

03

基于 FPGA 的 CORDIC 算法研究综述

一句话总结:使用 FPGA 进行高效算法实现的经典之作

英文名:A survey of CORDIC algorithms for FPGA based computers

作者:Ray Andraka

推介人:Paul Chow(多伦多大学)

这项工作详细阐述了如何在 FPGA 上进行高效的算法实现,它可以说是这一类工作的代表性作品。

在 1998 年,可编程 DSP 芯片被普遍用来做信号处理,当时最先进的器件有着大约 128KB 的片上内存,以及 100 MIPS 的性能。对于 FPGA 而言,它能构建 DSP 无法完成的信号处理系统,但比开发一个 ASIC 又简单很多。1998 年的 FPGA 比现在要小很多,大约有上千个 4 输入 LUT,正如这项成果中采用的赛灵思 4013E 器件。因此,高效和小面积的 DSP 功能实现是这类 FPGA 设计的关键。

自从发表以来,这项著名的成果一直是 FPGA 设计工程师在硬件中构建信号处理算法的重要参考。DSP 算法中包含很多超越函数,如正弦、余弦等,然而在硬件中计算这些函数并不像软件中直接调用库函数那么简单。当信号处理工程师开始转向使用 FPGA 时,他们会通过这项成果意识到,为了实现高效的 DSP 算法,就需要使用不同的硬件架构和设计方案。具体来讲,这项成果阐述了 CORDIC 算法的基本理论,这个算法基于移位和加法运算,因此非常适合在 FPGA 上实现。

传统的 FPGA 应用研究主要都是探索某种具体应用在 FPGA 的实现方式。这项成果的不同点在于,它主要针对的是广大的应用设计工程师群体,并对这个群体进行技术传播和教育。这也使得它在更广的层面上不断影响后来的研究者。

04

对流水线可重构 FPGA 的管理

一句话总结:可重构计算与硬件虚拟化的首次结合与探索。

英文名:Managing Pipeline-Reconfigurable FPGAs

作者:Srihari Cadambi, Jeffrey Weener, Seth Copen Goldstein, Herman Schmit, Donald E. Thomas

推介人:Katherine Compton and André DeHon

在 1998 年,即使是最大的 FPGA 也只有不过 5 万个 LUT,因此在一个 FPGA 上往往很难装下整个设计。此外,即使设计在当前 FPGA 上可用,当下一代 FPGA 面世后,就不得不重新设计,至少需要对设计重新编译,以更好的利用新 FPGA 上更多的逻辑单元和容量。时至今日,FPGA 上有着上百万可编程逻辑资源,因此大多数设计通常不会受制于 FPGA 的容量。然而,目前仍然缺乏对各代 FPGA 兼容性与伸缩性的研究。

这项成果中提出了 PipeRench 架构,它为 FPGA 开发者提供了动态重构的逻辑模型。它将计算看做是一个大型的静态前向图,并使用动态重构的方法,来控制和交换电路中不同的部分。如果电路太大而无法由可用资源实现,那就将系统中的不同电路部分换入和换出,从而最终满足资源要求。

PipeRench 的独特之处在于,它展示了如何通过计算实现流水线重构,从而实现在有限的内存带宽时完成快速的配置切换。当一个 PipeRench 实例编译完成并得到 FPGA 映像之后,PipeRench 还允许这个映像被加载到更大或者更小的其他 PipeRench 实例中,并伴随着相应的性能提升或下降。这就使得 FPGA 的弹性扩展成为可能。

这项成果是一个开创性的大型系统项目,它涵盖了可重构计算的很多领域。这个工作阐述了配置数据的管理,并介绍了 PipeRench 架构的很多底层设计细节。它还讨论了可重构硬件的配置过程与机理,以及如何确保数据通过虚拟流水线达到合适的物理位置。综上,这项成果是可重构计算领域的标志性工作,它和它的后续工作为这个领域的研究者指明了前进的方向、可能遇到的问题、以及解决这些问题的一些创新方法。

05

FPGA vs CPU:峰值浮点性能的趋势

一句话总结:FPGA 在浮点数计算领域的开创性工作。

英文名:FPGAs vs. CPUs: Trends in Peak Floating-Point Performance

作者:Keith Underwood

推介人:Paul Chow(多伦多大学)

这项工作表明,FPGA 在未来的超级计算应用中有着很好的应用前景,而这个领域的应用往往需要即密集的高精度浮点运算。

从 FPGA 出现伊始,业界就有一种观点认为 FPGA 可以被用来加速计算(computing)的过程,尽管这并不是 FPGA 出现的初衷,亦或是 FPGA 的主要应用市场。在这项工作发表之时,FPGA 已经展示出在定点数计算的潜力,特别是在信号处理领域中,使用 FPGA 比可编程 DSP 有着更好的性能优势。然而,大多数科学计算和应用都基于 IEEE 格式的浮点数,特别是双精度浮点数,以获得稳定的计算结果。在这项成果之前,人们普遍认为在 FPGA 上无法得到足够的浮点数性能来与当时的 CPU 竞争。

在这个工作中,作者在多代 FPGA 中实现了浮点数加法、乘法、除法、乘加等基本运算单元,并对它们进行了时钟频率和硬件面积的定量分析。通过结合对应 FPGA 器件的容量,这项工作整理得到了对这些基本单元的最优性能的趋势曲线。对于 CPU 来说,根据摩尔定律,这些运算单元的性能趋势曲线都会每 18 个月翻一番。然而,对于 FPGA,这项成果表明 FPGA 的浮点数峰值性能已经或即将超过 CPU,并将继续增长,见下图。

这项成果是第一个尝试定量分析并证明 FPGA 可以作为浮点运算加速器的工作。通过对模型的建立和分析,可以看出这个趋势在某种程度上有利于 FPGA 与 CPU 的相互竞争。这也证明了,可重构计算研究依然前途光明。然而,客观的说,这项工作的结果在很大程度上依赖于计算的峰值性能,究竟如何在实际应用中获取这样的性能、以及峰值性能与实际性能的相关性,依然是研究者不断探讨的问题。

06

FPGA 高效多端口存储器的设计

一句话总结:在根本上改变了现代 FPGA 的内存设计和容量

英文名:Efficient Multi-Ported Memories for FPGAs

作者:Charles Eric LaForest, J. Gregory Steffan

推介人:Scott Hauck

FPGA 的一个重要特性就是能构建大量简单的逻辑模块,然后可以将这些逻辑块组合起来,并形成更大、功能更复杂的设计。虽然 FPGA 中的每个可编程单元只有 4 到 6 个输入,但一组 LUT 就可以支持任意数量的输入,并完成任意功能的计算。虽然一个触发器只能存储 1 位数据,但这些触发器可以组合起来以支持 32 位数据,并再进行组合形成多级的 FIFO,诸如此类。

随着 FPGA 技术的不断演进,人们开始在 FPGA 里加入为了特定任务而优化的硬核单元,如乘法器、存储器,甚至处理器内核等等。这些模块从根本上提升了 FPGA 进行通用计算的性能,但它们的相对不灵活性使得这些模块很难相互级联并组成更大的逻辑单元。另外,对于一个特定应用,如果这些硬核单元没有相对应的逻辑功能,那么设计者就很难继续使用它们,只能转而使用传统的方法,也就是使用 LUT 和寄存器等进行逻辑设计。这个问题的一个典型例子就是存储器。如果内存单元的容量太小,或者寻址空间不够大,我们或许还可以组合多个存储单元以满足设计需求。然而,如果存储器的端口数量是固定的,比如某个内存单元只能允许每周期两次写入,而应用要求每周期三次写入,那么这就很尴尬了。事实上,额外的读端口可以通过复制内存来实现,但对于 RAM 来说,独立的写端口数量才是影响性能的重点。

这项工作从根本上解决了这个问题。一个重要的事实是,通常情况下底层硬件的运行速度会比用户设计的实际速度要快很多,因此就可以对内存端口进行时间复用以增加独立访存的数量。此外,通过巧妙的设计,多个内存可以被组合在一起,以支持读写带宽的增长,同时保持对整个机制的控制。如果将二者相结合,就可以得到一个提供更多内存端口的有效方案。

结语

这 6 个 FPGA 应用领域的重要工作,有的为 FPGA 动态重构研究奠定了坚实的理论和实践基础,有的首次探索了 FPGA 与虚拟化技术的结合与实现,有的则向世人展示了高效、高性能的 FPGA 应用设计应该是什么样的。更重要的是,这些工作所采用的方法论、思维方式、前瞻性与实用性的统一、以及严谨的治学态度,都为之后的学术和工业研究树立了最高的典范。

标签: #cordic算法fpga实现