原作者信息:
Mark L. Chang
Electrical and Computer Engineering
Franklin W. Olin College of Engineering
来源:https://zhuanlan.zhihu.com/p/183970903
注:原文版权归作者所有,本翻译仅为爱好所作,与任职单位无关。
1.3 扩展逻辑 Extending Logic
通过放置于支持互连结构的二维阵列中的大量逻辑块,如图 1.2 所示,我们可以实现任何组合逻辑或者时序逻辑。唯一的限制是可用逻辑块的数量。虽然通过逻辑块实现所有功能具有通用性,但远远不是最佳的设计。在本节中,我们将研究 FPGA 架构师如何通过增加逻辑元件,以增强这种简单的设计,提高性能。
1.3.1 扩展逻辑元件 Extending Logic Elements
现代 FPGA 互连架构已经成熟,在最简单的最近邻连接以外,还包括许多能够提高互联性能的互联结构。同样地,现代 FPGA 在逻辑块之外,扩充了基本逻辑元件库,以提高算术函数和数据存储等常见操作的性能。
快速进位链 Fast Carry Chain
加法可能是 FPGA 所执行的最基本的操作。如果仅使用基本逻辑块构建加法器时,我们可以在 2 个逻辑块中各使用一个 LUT 实现一个全加器电路。其中一个配置为求和,另一个配置为计算加法的进位。级联 N 对逻辑块,可以实现一个简单的 N 比特全加器。
读者可以从数字电路的背景知识中知道,加法的关键路径不是来自求和位,而是来自进位信号从低阶位到高阶位的进位链(见图 1.10)。该路径从低阶加数输入开始,经过逻辑块与互联结构,进入相邻的逻辑块,依此类推。在路径沿途的每个互联交换点都会累积延迟。
一个提高电路速度的好方法是在相邻逻辑块之间缩短进位链,可以通过设计一条专用的、最小互联交换延迟的路径来实现这一点。这条快速路径从计算低阶进位信号的逻辑块输出端出发,抵达更高一阶的逻辑块对。这条专用进位链不需要在通用互连网络上进行路由。通过最少的开销(增加专用路径),我们可以显著地加快加法运算的速度。
不过多比特加法中,专用进位链确实对逻辑块空间布局增加了一些约束。例如,如果专用的快速进位链只沿着逻辑块的垂直方向进位,那么所有的加法都必须沿着进位链的方向排布,以利用进位链资源。另外,为了节省交换结构,专用进位链可能不是双向路径,这进一步限制了加法逻辑块物理布局时的方向,并且布局时需要遵循比特间的相对顺序。Xilinx XC4000E 的快速运载链如图 1.11 所示。其中,垂直方向上的进位链是双向的,而水平方向上则是单向的。这使大型加法器结构可以呈锯齿(zig-zag)状排布(译注:如图 1.11 中的红色箭头所示),使用专用进位链互联结构。
快速进位链逻辑目前在商用 FPGA 中已经司空见惯,此时的物理设计上的约束完全被厂商提供的工具所抽象并屏蔽。这种优化的成功依赖于工具在设计者的电路描述中识别加法,然后使用专用逻辑实现加法的能力。在现今的工具中,这种优化对终端用户几乎是透明的。
乘法器 Multiper
加法在算法中很常见,那么乘法当然也不少见。如果我们希望使用通用逻辑块资源来构建乘法器,有多种实现方式。从节约面积的移位-累加法,到消耗大量面积的阵列乘法器,我们可以使用逻辑块来计算乘法中的加法和中间值暂存。经过我们肯定可以实现一个乘法器,但可能存在较大的延迟,或者消耗大量的逻辑块,这取决于我们的实现方式。从本质上讲,我们的逻辑块并不能很高效地执行乘法运算。
那么,与其用逻辑块来实现,为什么不构建真正的乘法器,但仍然连接到普通的 FPGA 互联结构中呢?然后,我们可以将需要乘法运算路径连接至硅片上真正的乘法器,而不是低效地使用 LUT 来实现乘法。如何能够节省面积和时间?回想一下,与专用集成电路(ASIC)相比,FPGA以速度和功率换取可配置性。如果你要求 VLSI (超大规模集成电路)设计师用晶体管实现一个快速乘法器,相较于 LUT,将得到更小的面积、更快的速度以及更小的功耗。
最终,以付出一些硅片面积为代价,我们就可以将消耗资源的乘法运算卸载到性能更好的专用硬件上。当然,就像快速进位链一样,使用乘法器会增加重要的设计考量和物理约束,但是,我们要做的只是在设置面板增加一个选项(译注:勾选使用专用乘法器,^\_^)。剩下的问题就只是需要好的架构设计与工具,来实现高效的乘法器卸载运算。与快速进位链一样,目前专用乘法器在现代 FPGA 中很常见。
RAM
在 FPGA 通用结构之外,另一个使用定制元件的领域是片上数据存储。虽然逻辑块可以通过查找表结构提供一些存储空间,但总的来说,当需要大量存储空间时,较难有效地利用 FPGA 资源。与快速进位链和专用乘法器一样,FPGA 架构为用户提供了大量的片内 RAM,这些 RAM 可以被通用 FPGA 互联结构访问。
静态 RAM 单元对逻辑资源的占用非常小,并且在空间上分布在整个 FPGA 上,因此对于许多算法非常有用。通过将许多静态 RAM 单元组合使用,设计者可以实现高速查找的大型 ROM,用于计算和常量查表,以及用于缓冲、排队、基本 scratch 操作的大型 RAM。采用片上 RAM 拥有诸多好处,包括简单的基于时钟的访问策略,以及避免使用外部存储器产生的性能损失。现今的 FPGA 可提供容量从千比特到兆比特的专用 RAM。
处理器块 Processor Block
将上述所有的块整合,大多数商用 FPGA 结构目前提供完整的专用处理器,有时甚至不止一个。一般来说,FPGA 在实现基础计算流水线、发挥非标准比特宽度的优势以及提供数据与功能并行性方面非常高效。但是,在架构中增加专用 CPU 基于这样的认识:对于面向过程的算法控制逻辑,包含大量分支判断,因此不容易使用FPGA加速。这部分工作就可以在软件上完成。
完整的 CPU 处理系统块现在可以在高端 FPGA 设备中找到。在撰写本文时,这些 CPU 的代表为 300MHz 时钟频率,没有浮动点单元 PowerPC CPU 核。它们能够运行一个完整的嵌入式操作系统,有些甚至能够重新编程其周围的 FPGA 可重构结构。
CPU 核心并不像进位链、乘法器和片上 RAM 那样容易使用,但它们代表着一个明显的转变,即 FPGA 更加面向平台化发展。具有一个传统的 CPU(也许最多4个),FPGA 几乎可以作为一个完整的“片上系统”——这称得上是系统集成商和嵌入式设备制造商的圣杯(holy grail)。在有标准的编程语言和工具链可供开发者使用的情况下,整个项目可以用单芯片解决方案来实现,大大降低了成本和减少上市时间。
1.3.2 总结 Summary
最后,现代商用 FPGA 提供了丰富多样的基本计算元件,以及一些具有更高层功能的元件。除了简单的查找表,FPGA 架构师的任务是决定以什么比例提供这些资源以及它们应该如何连接。硬件设计师的任务是充分理解目标 FPGA 器件的能力,从而完成能够发挥其潜力的设计。
这些扩展逻辑元件之间的共同点是,它们提供了在通用 FPGA 结构中无法高效实现的关键功能。正如科技不断驱动 FPGA 架构一样,应用程序也提供了迫切需要的推动力。如果无需大量的乘法,那浪费硅片面积设计专用乘法器是没有意义的。随着 FPGA 在本质上变得更加异构,并在新的应用领域成为有力的计算平台,我们可以期待在下一代器件中见到更多不同的扩展元件模块。
1.4 配置
FPGA 的一个重要特性是它能够充当终端用户的“空白"硬件。提供比基于通用处理器的纯软件实现更高的性能,比功能固定的 ASIC 解决方案更灵活,这些都基于 FPGA 是一种可重构设备。在本节中,我们将讨论在 FPGA 中提供可编程性的不同方法和技术。
FPGA 中的每个可配置点都需要 1bit 的存储器来保存用户定义的配置。对于一个简单的,基于 LUT 的 FPGA,这些可编程位置通常包括:逻辑块的内容、路由结构的连通性。FPGA 的配置过程是根据用户的定义,编程连接到可编程点的存储比特(storage bit)来完成的。从查找表的角度而言,编程即向其写入比特 '1' 或者 '0'。对于路由结构来说,编程的结果是使能或者失能各方向上的交换开关。
配置内容可以认为是一个二进制文件,其中的内容与 FPGA 中的可编程点进行 bit-bit 映射。该二进制文件在硬件设计完成后,使用厂商的工具生成,称为比特流(bitstream)。虽然其具体的格式并不公开,但一般 FPGA 的容量越大,其比特流也就越大。
当然,目前有许多方式来存储可重配置点中的二进制信息。接下来我们将讨论 FPGA 中较常用的方式。
1.4.1 易失性静态随机存储器 SRAM
如前几节所述,在商用 FPGA 中存储配置信息的最常用的方式是使用易失性静态 RAM(SRAM)。这种方法之所以广受欢迎,是因为现有的 SRAM 技术能够提供快速且无限次数的重编程能力。
SRAM 的缺点在于功耗以及数据易失性。与本节所述的其他技术相比,SRAM 单元面积更大(6–12 个晶体管),并且由于漏电流产生了大量静态功耗。另一个重要的缺点是,SRAM 在掉电的情况下无法保存其内容,这意味着在上电后,FPGA 处于没有配置的状态,必须使用片外存储介质与逻辑进行配置。这可以通过在系统中增加保存比特流的非易失性存储器和执行编程过程的微控制器来实现。虽然上电编程只是一个微不足道的工作,但它增加了组件数量和设计的复杂性,导致基于 SRAM 的 FPGA 无法成为真正的单芯片解决方案。
(译注:现代的 FPGA 集成了上电配置逻辑,一般无需增加微控制器,但保存比特流的非易失存储介质无法避免)
1.4.2 闪存 FLASH
虽然不如 SRAM 那么普遍,但有一些系列的设备使用 Flash 来保存配置信息。Flash 与 SRAM 的区别在于非易失但有限的写入次数。
Flash 的非易失性意味着掉电后写入闪存的数据仍然会被保存。与基于 SRAM 的 FPGA 相比,FPGA 始终配置为用户所定义的逻辑,并且在启动时不需要额外的存储或硬件来重新配置。因此,基于 Flash 的 FPGA 在上电后可以更快地准备就绪。
与 SRAM 单元相比,Flash 单元所需的晶体管更少,因为产生漏电流的晶体管更少,所以静态功耗更低。
使用闪存存储 FPGA 配置信息的缺点来自于写入闪存所需的技术。如前所述,闪存具有有限的写入寿命,并且通常写入速度比 SRAM 更慢。Flash 的写入周期的数量因技术而异,但通常为十万到百万次。此外,与普通电路相比,大多数闪存写入技术需要更高的电压,需要额外的片外电路或结构(如片上电荷泵)来写闪存。
1.4.3 反熔丝 Antifuse
第三种实现可编程性的方法是反熔丝技术。反熔丝,顾名思义,是一种基于金属的连接,特性与保险丝(fuse)相反,反熔丝连接是常开(即未连接)的。编程过程中,通过大电流编程器或激光器,熔化链路形成电气连接,在反熔丝端点之间形成一条导线。
反熔丝有几个优点和一个明显的缺点,缺点是不可重新编程。一旦熔接了一个电气连接,就在物理上无法逆转了。基于这种技术的 FPGA 通常被认为是一次性可编程(OTP,one-time-programmable)器件。这严重限制了它们在可重构计算方面的灵活性,并导致其无法应用于原型设计(prototyping)的应用中。
但是,在 FPGA 平台上使用反熔丝有一些明显的优点。首先,与由多个晶体管组成的 SRAM 单元相比,反熔丝链路可以做的非常小,并且不需要任何晶体管。因此传输延迟非常低并且不产生静态功耗,因为没有晶体管漏电流。反熔丝链路也不易受到高能辐射粒子的影响,这些粒子会导致单粒子翻转(single-event upset)错误,使它们更适合于太空和军事应用。
1.4.4 总结 Summary
在 FPGA 中存储用户定义的配置数据有几种常用的方法。本节中回顾了最常见的三种。每一种都有其优点和缺点,并且都有应用于当前的商用 FPGA 产品中。
无论何种存储或传输配置数据的技术,其思想都是相同的。通过厂商专用工具,创建专用于某类器件的比特流(bitstream),用于编程 SRAM 或闪存,或进行反熔丝的熔接。最终,按照用户的配置编程了 FPGA 的结构,实现了可重构计算的部分愿景。
推荐阅读
- 可重构计算:基于FPGA可重构计算的理论与实践 1.器件架构 译文(二)
- 可重构计算:基于FPGA可重构计算的理论与实践 1.器件架构 译文(一)
- FPGA 系统中的处理器核们(二):软核,可杀鸡亦可屠龙?
关注此系列,请关注专栏FPGA的逻辑