1 分钟阅读 次阅读

在 FPGA 中,LUT查找表(Lookup Table) 的缩写。它是 FPGA 实现组合逻辑(如加法、选择、条件判断等)的最核心基础单元。

LUT 在硬件上就是一个“固化”在芯片里的真值表。在传统的数字电路设计中,我们是先画出真值表,然后用各种门电路(与门、或门、非门)去拼凑、实现这个真值表。

而在 FPGA 里,这个过程被完全“颠倒”过来了:输入信号 = 存储器的地址(Address)。真值表的输出结果 = 提前写入存储器的数据(Data)。

1 FPGA

1.1 FPGA 工作原理:用“存储”代替“逻辑门”

LUT 的核心思想是用存储器来实现布尔逻辑。它本质上是一个小型的、高速的 SRAM(静态随机存取存储器)。

当你用 Verilog 写了一段组合逻辑(例如 assign Y = (A & B) | C;),编译工具并不会在 FPGA 里去寻找实际的与门和或门,而是会做两件事:

  1. 算出真值表:把输入 A, B, C 所有可能的组合(共 8 种)对应的输出 Y 全部算出来。
  2. 写入 LUT:把这个真值表的结果直接烧录到 LUT 的存储单元中。

逻辑的输入信号(A, B, C)直接充当该存储器的地址线,而输出(Y)就是对应地址上存储的数据。 alt text


1.2 硬件结构

一个 $N$ 输入的 LUT 主要由两部分组成:

  • $2^N$ 个 SRAM 单元:用来存放真值表的输出结果(0 或 1)。
  • 多路选择器(MUX)网络:输入信号作为 MUX 的控制端,用来选择哪一个 SRAM 的值被输出。

以一个 4 输入 LUT(4-LUT) 为例:

  • 它有 4 个输入端,可以组合出 $2^4 = 16$ 种状态。
  • 内部包含 16 个 SRAM 位。
  • 无论你写的多输入逻辑函数多么复杂(只要输入不超过 4 个),它在硬件上的延迟都是完全相同的——就是信号通过那一级 MUX 网络到达输出端的固定的物理延迟

1.3 现代 FPGA 中的 LUT 演进

  • 4-LUT:早期的 FPGA 普遍采用 4 输入的 LUT。
  • 6-LUT:现代高性能 FPGA基本都全面转向了 6-LUT 架构。

为什么要用 6-LUT? 虽然 6-LUT(需要 64 个 SRAM 位)比 4-LUT(16 个 SRAM 位)消耗更多的硅片面积,但对于现代复杂的数字系统,6-LUT 可以显著减少逻辑层数(Logic Depth)。层数变少了,信号在片内走线的延迟就大大降低,从而能够显著提升 FPGA 的最高工作频率($F_{max}$)。

在很多现代架构中,逻辑单元里的 6-LUT 甚至可以被拆分成两个独立的 5-LUT 或共享输入的双 LUT 使用,以防止逻辑资源浪费。

2 CPLD

与 FPGA “用存储器查表” 的逻辑不同,传统 CPLD 是基于“与或阵列(AND-OR Array)”乘积项(Product-Term)架构来实现逻辑的。


2.1 CPLD 的核心实现原理:与或阵列

在数字电路中,任何一个复杂的组合逻辑函数都可以化简为“积之和(Sum of Products, SOP)”的形式。例如:

\[Y = (A \cdot B \cdot \bar{C}) + (B \cdot D)\]

CPLD 就是直接在硬件上堆砌了大量的“与门”和“或门”来实现这种数学表达式的:

  • 与阵列(AND Array):通常是可编程的。输入信号及其反相信号会进入这个阵列,通过编程决定哪些信号连接到同一个与门上,从而形成一个个“乘积项”(如 $A \cdot B \cdot \bar{C}$)。
  • 或阵列(OR Array):通常是固定连接(或部分可编程)的。它负责把多个与门的输出(乘积项)加起来,形成最终的逻辑输出 $Y$。

2.2 核心架构:宏单元(Macrocell)

CPLD 的基本结构单元不叫逻辑单元(LE/Slice),而叫宏单元(Macrocell)。一个典型的宏单元通常包含以下几个部分:

  1. 乘积项选择矩阵:负责分配与门的输出。
  2. 可编程或门:把选中的乘积项组合在一起。
  3. 可配置触发器(Flip-Flop):用于实现时序逻辑。如果不需要时序逻辑,可以把触发器旁路(Bypass)掉,直接输出组合逻辑。
  4. 异或门(XOR):用于方便地实现取反、控制极性或者加法器中的异或操作。

由于物理上就是真实的导线和逻辑门连在一起,CPLD 的输入信号到输出信号只需要经过固定的几级门延迟。


2.3 CPLD 与 FPGA 实现方式的对比

这两者的实现哲学完全不同,导致了它们在特性上的巨大差异:

特性 CPLD(传统) FPGA
底层核心 与或阵列(乘积项结构) LUT 查找表(SRAM 结构)
实现逻辑 物理上的逻辑门真实连接 用存储器模拟真值表
时延特性 确定性极高(Predictable)。走线和门延迟固定,几乎没有抖动。 不确定。延迟取决于编译器的布线结果。
适合的逻辑 适合输入极多、逻辑较浅的组合逻辑(如复杂的地址译码器、总线接口控制)。 适合逻辑很深、时序复杂、规模极大的系统(如 CPU、数字信号处理)。
工艺/断电 多数基于 Flash / EEPROM 工艺,断电不丢失代码,上电即运行。 多数基于 SRAM 工艺,断电即丢失,上电需要从外部 Flash 加载代码。

2.4 现代 CPLD 的“模糊地带”

需要注意的是,随着半导体工艺的发展,现在的“CPLD”和“FPGA”界限已经有些模糊了

例如 Intel(原 Altera)非常经典的 MAX II / MAX V / MAX 10 系列,虽然市场上依然称它们为 CPLD,但如果去查阅它们的 Datasheet,你会发现它们的内部其实已经放弃了传统的与或阵列,而是采用了和 FPGA 一样的 LUT(查找表)结构

之所以还叫 CPLD,是因为它们把配置用的 Flash 芯片直接集成到了芯片内部,实现了“单芯片、非易失、上电即运行”的 CPLD 传统外在特性,但在底层实现上,它已经流着 FPGA 的“血”了。而像 Xilinx 的 CoolRunner-II 等经典系列,则是最纯正的传统 CPLD 与或阵列架构。

标签:

分类:

更新时间:

留下评论