Veloris.
返回索引
深入原理 2026-02-19

从沙粒到城市:FPGA 芯片的六级架构层次

14 分钟
4.5k words

从沙粒到城市:FPGA 芯片的六级架构层次

💡 在上一篇文章中,我们”拆开”了一颗 FPGA,认识了 CLB、IOB、Block RAM、DSP 这些内部资源。但如果你打开 Vivado 的 Device View,放大再放大,你会发现一个问题:

CLB 里面还有 Slice,Slice 里面还有 LUT 和 FF……这些东西到底是怎么一层一层组织起来的?

这篇文章会带你从 FPGA 芯片最微小的”沙粒”——BEL,一路向上看到整颗芯片 Device,理解 Xilinx FPGA 的六级层次化架构。搞懂这套”俄罗斯套娃”,你在 Vivado 里看到的每一个名字、每一个坐标都会变得有意义。


目录


1. 为什么要了解芯片架构层次?

你可能会想:“我写 Verilog 就行了,为什么要关心芯片内部怎么组织的?”

三个实际场景告诉你答案:

  • 看懂综合报告:当 Vivado 告诉你”设计使用了 1200 个 Slice、4800 个 LUT”,你需要知道 Slice 和 LUT 是什么关系,才能判断资源是否紧张
  • 理解时序约束:当你遇到跨时钟域的时序违例,理解 Clock Region 的边界能帮你定位问题
  • 调试布局布线:当你在 Device View 里看到 SLICE_X12Y34BRAM_X2Y5 这样的坐标,理解层次结构才能快速定位资源位置

💡 工程师手记:我第一次在 Vivado 里看到 SLICE_X0Y0 这个名字时,完全不知道 X 和 Y 代表什么。后来理解了 FPGA 的层次化命名规则,才发现这套坐标系统非常精确——每个资源都有唯一的”门牌号”,就像城市里的街道地址一样。


2. 六级层次总览:从沙粒到城市

Xilinx FPGA 的内部架构采用自底向上的层次化设计,从最小的功能单元到整颗芯片,共分为六级:

BEL(基本逻辑单元)
  → Site(站点 = BEL 的集合)
    → Tile(瓦片 = Site 的集合)
      → Clock Region(时钟区域 = Tile 的集合)
        → SLR(超级逻辑区域 = Clock Region 的集合)
          → Device(整颗芯片 = SLR 的集合)

FPGA 层次化架构

用一个城市类比来理解:

层级FPGA 概念城市类比关键特征
第 1 级BEL一块砖最小功能单元,不可再分
第 2 级Site一个房间容纳特定类型的 BEL
第 3 级Tile一栋楼包含多个房间 + 楼内走廊
第 4 级Clock Region一个街区共享同一套市政管网(时钟网络)
第 5 级SLR一个城区独立的硅片 Die
第 6 级Device整座城市完整的 FPGA 芯片

接下来我们逐层拆解。


3. BEL:不可再分的原子积木

BEL(Basic Element of Logic,基本逻辑单元) 是 FPGA 中最底层、不可再分的功能单元。即使你没有加载任何设计,在 Vivado 的 Device View 中也能看到它们——因为它们是物理上固化在硅片上的。

BEL 的三种类型

类型作用举例
逻辑 BEL实现设计中的逻辑功能LUT、FF、Carry Chain
路由 BEL在 BEL 之间传输信号FFMUX、DOUTMUX
站点端口 BEL连接 Site 内部与外部信号输入/输出接口引脚

逻辑 BEL 是你最常打交道的——你写的每一行 Verilog 代码,最终都会被 Vivado 的 place_design 命令映射到某个具体的逻辑 BEL 上。

路由 BEL 则是”幕后英雄”。它们不承载任何设计逻辑,但负责在逻辑 BEL 之间选择信号路径。比如 FFMUX 决定触发器的输入是来自 LUT 输出还是旁路输入。

💬 你可能会问:路由 BEL 和可编程互联资源有什么区别?

路由 BEL 是 Site 内部的信号选择器,作用范围很小;可编程互联资源(Switch Box、Connection Block)是 Site 之间的布线网络,负责跨越更远的距离。两者配合,才能把信号从芯片的一端传到另一端。


4. Site:装满积木的标准房间

Site(站点) 是 BEL 的集合,代表芯片上一个具体的物理位置。你可以把它想象成一个标准化的”房间”,里面按固定规格摆放了特定类型的 BEL。

常见的 Site 类型

Site 类型内含的 BEL对应的功能
SLICEL4×LUT + 8×FF + Carry Chain + MUX通用逻辑
SLICEM同 SLICEL + 分布式 RAM/SRL 能力逻辑 + 小型存储
BRAM SiteBlock RAM 硬核大容量片上存储
DSP SiteDSP48 硬核乘加运算
IOB SiteI/O 缓冲器芯片引脚接口
MMCM/PLL Site时钟管理模块时钟倍频/分频

每个 Site 都有一个唯一的名字,格式为 类型_X#Y#。比如 SLICE_X12Y34 表示第 12 列、第 34 行的 Slice。

关键细节:SLICEL 和 SLICEM 共享同一套 XY 坐标网格——这是唯一的例外。其他类型的 Site(如 BRAM、DSP)各自有独立的坐标系。


5. Tile:铺满地砖的街区

Tile(瓦片) 是 Site 的集合,代表 FPGA 结构中一个可重复的基本物理区域块

如果说 Site 是”房间”,那 Tile 就是”一栋楼”——它不仅包含多个房间(Site),还包含楼内的走廊和电梯(本地互连资源)。

典型的 Tile 组成

Tile 类型包含的 Site附加资源
逻辑 Tile(CLB)2 个 Slice(SLICEL/SLICEM)开关矩阵(Switch Box)
BRAM TileBRAM Site布线资源
DSP TileDSP Site布线资源
互连 Tile(INT)无逻辑 Site纯开关矩阵

最经典的 Tile 就是 CLB——一个 CLB Tile 包含 2 个 Slice,这也是为什么你经常看到”一个 CLB = 2 个 Slice”的说法。

Tile 之间如何连接?

Tile 本身没有用户可见的引脚。信号通过 Tile 内部的**导线(Wire)传输,导线之间通过PIP(可编程互连点)**连接。当相邻的 Tile 排列在一起时,特定的导线会自动对齐并实现电气连接。

多个 Tile 上的导线可以组成一个节点(Node)——这是跨 Tile 信号传输的基本单位。

Tile 连接示意图


6. Clock Region:时钟管辖的行政区

Clock Region(时钟区域,也叫 FSR) 是由大量 Tile 构成的中等规模物理区域。它最重要的特性是:区域内的所有资源共享同一套时钟分配网络

为什么要划分时钟区域?

时钟信号是 FPGA 中最特殊的信号——它需要同时驱动成千上万个触发器,而且到达每个触发器的时间差(Clock Skew)必须尽可能小。

把芯片划分成多个时钟区域,每个区域有独立的时钟缓冲器(如 BUFR),可以:

  • 降低时钟偏斜:区域内的时钟分配路径更短、更均匀
  • 支持多时钟域:不同区域可以使用不同频率的时钟
  • 简化布局布线:工具会尽量把同一时钟域的逻辑放在同一个或相邻的 Clock Region 内

⚠️ 设计建议:跨越 Clock Region 边界的信号可能会有额外的布线延迟。如果你的设计有严格的时序要求,尽量让关键路径上的逻辑集中在同一个 Clock Region 内。

💡 工程师手记:我在一个多时钟域设计中遇到过时序违例,排查了很久才发现原因:两个本该在同一时钟域的模块被布局工具分配到了不同的 Clock Region,导致时钟偏斜超出预期。后来通过添加 Pblock 约束,把关键模块限制在同一个 Clock Region 内,时序立刻收敛了。理解 Clock Region 的边界,能帮你在遇到类似问题时少走很多弯路。

一个具体的例子

XC7A35T 芯片为例,它有 5 个 I/O Bank,但有 6 个时钟区域——Bank 和时钟区域并不是一一对应的。每个时钟区域覆盖一片矩形的 Tile 阵列,拥有独立的时钟布线轨道。


7. SLR:多芯片拼接的超级区域

💡 如果你使用的是 Artix-7、Spartan-7 等入门级单 Die 芯片,可以跳过本节。SLR 主要影响 Virtex 系列等大型多 Die 器件的设计者。

SLR(Super Logic Region,超级逻辑区域) 是大型 FPGA 特有的概念。

为什么需要 SLR?

当单颗硅片无法容纳足够多的逻辑资源时,Xilinx 使用 SSI(Stacked Silicon Interconnect,堆叠硅互连) 技术,把多颗独立的硅片 Die 并排放在一个硅中介层上,封装成一颗”超大”芯片。

每个 SLR 就是一颗独立的硅片 Die

特性说明
独立资源每个 SLR 有完整的 CLB、BRAM、DSP、时钟网络
跨 SLR 连接通过硅中介层上的微凸块(Microbump)互连
时序影响跨 SLR 信号延迟更大,是时序关键点
适用器件主要用于 Virtex UltraScale+ 等高端系列

💬 你可能会问:我用的是 Artix-7 这样的小芯片,需要关心 SLR 吗?

不需要。单 Die 的 FPGA(如 Artix-7、Kintex-7 的大部分型号)整颗芯片就是一个 SLR,你可以忽略这个层级。SLR 主要影响使用 Virtex 系列大型 FPGA 的设计者。

跨 SLR 设计的注意事项

如果你使用的是多 SLR 器件(比如 xc7v2000t,它有 4 个 SLR),需要注意:

  • 高速逻辑尽量约束在同一 SLR 内,避免跨 Die 延迟
  • 跨 SLR 的信号走 SLL(Super Long Line,超级长线),带宽和延迟都受限
  • Vivado 的资源利用率报告会按 SLR 分别显示,帮你检查资源分布是否均衡

8. Device:整颗芯片

Device 就是整颗 FPGA 芯片——层次结构的最顶层。

每颗 FPGA 芯片由一个唯一的**器件型号(Part Number)**标识,比如 XC7A35T-1CPG236C,这个型号精确定义了:

信息示例说明
产品系列Artix-7决定架构代次和定位
逻辑容量35T(约 33,280 个逻辑单元)CLB/LUT/FF 的总量
速度等级-1数字越大性能越高
封装CPG236引脚数量和封装形式
温度等级C(商业级)工作温度范围

在 Vivado 中创建工程的第一步就是选择目标 Device——这决定了工具能使用的全部资源、时序模型和约束规则。


9. 在 Vivado 中亲眼看到这些层次

理论讲完了,最好的学习方式是打开 Vivado 亲自看一看。

操作步骤

  1. 打开一个已实现(Implementation)的工程,进入 Device View
  2. 缩放到最大:你会看到整颗芯片的全貌——这就是 Device 层级
  3. 逐步放大:你会依次看到 Clock Region 的边界、Tile 的网格、Site 的轮廓
  4. 放大到最底层:你能看到 Slice 内部的每一个 LUT、FF、Carry Chain——这就是 BEL 层级

实操示例

下面我们按照上述步骤,在 Vivado 中逐级探索,亲眼看到每一个架构层级。

打开 Device 视图

在 Vivado 中点击 Open Implemented Design,打开实现后的工程,默认进入 Device 界面:

image.png

这就是整颗 FPGA 的全貌——Device 层级。接下来我们逐级放大,看看里面装了什么。

SLR:多 Die 器件的顶层结构

如果你使用的是多 SLR 器件(如高端的 xc7v2000tfhg1761-2),在全局视图中可以看到从上到下依次排列着 4 个 SLR,每个 SLR 包含 6 个时钟区域。每个 SLR 本质上是一颗独立的 FPGA,通过 SSI 技术封装在一起:

image.png

不同 SLR 之间的数据交互需要通过专用的 SLL(Super Long Line,超级长线)布线资源,跨 SLR 的布线成本和延迟都更大:

image.png

💡 如果你用的是 Artix-7、Spartan-7 等单 Die 芯片,整颗芯片就是一个 SLR,可以跳过这一步。

Clock Region:时钟区域的边界

以单 Die 芯片 XC7A35TFGG484-2 为例,它有 5 个 I/O Bank,但有 6 个时钟区域——两者并非一一对应。在 Device View 中可以清晰看到各时钟区域的划分:

image.png

放大后,每个时钟区域内部的资源分布更加清晰:

image.png

Tile:网格中的基本单元

继续放大,可以看到 Tile 的网格排列。最经典的 Tile 就是 CLB,每个 CLB 包含 2 个 Slice,同时附带开关矩阵用于跨 Tile 互连。与 Site 类似,每个 Tile 也有独立的坐标标识:

image.png

Site:走进 Slice 和硬核 IP

再放大一层,就进入了 Site 层级。最典型的 Site 就是 Slice——FPGA 逻辑结构的核心单元。每个 Slice 都有唯一名称(如 SLICE_X0Y0),内含 LUT、FF 等基本逻辑单元。

下面几张截图展示了在 Device View 中观察 Slice Site 的不同视角——从整体轮廓到内部细节:

image.png

点击一个 Slice,可以在 Properties 面板中看到它的详细信息,包括类型(SLICEL/SLICEM)、坐标和内含的 BEL 列表:

image.png

image.png

image.png

除了 Slice,硬核 IP 如 DSP48 模块和 BRAM(块 RAM)等专用资源也以 Site 形式存在,每个功能模块占据一个或多个 Site:

image.png

逻辑 BEL:最底层的功能单元

放大到最底层,就能看到 Slice 内部的每一个 BEL——触发器(FF)、进位链(CARRY4)和查找表(LUT)。这些直接实现逻辑功能和时序功能的基本单元,就是逻辑 BEL

image.png

路由 BEL:隐藏的信号选择器

逻辑 BEL 之间还需要信号选择和转发,这就是路由 BEL 的工作。默认情况下路由 BEL 是隐藏的,需要在 Device View 中勾选 Routing Resource 选项:

image.png

勾选后,视图中就会显示路由 BEL 的信息:

image.png

路由 BEL 不实现逻辑功能,而是在逻辑 BEL 之间选择信号路径。典型的例子包括:

  • 触发器输入多路选择器(如 FFMUX)——决定 FF 的输入来自 LUT 输出还是旁路信号:

image.png

  • 数据输出信号多路选择器(如 DOUTMUX)——选择 Site 输出的数据来源

我们以名为 ACY0 的路由 BEL 为例,深入分析它是如何工作的。点击它,查看输入输出信号:

image.png

image.png

image.png

可以看到,ACY0 的某个输入端(如端口 B)连接到了开关矩阵(Switch Box)。Switch Box 相当于一个”信号中转站”,汇聚了附近各种资源的输出——可能是相邻 CLB 的 FF 输出,也可能是 LUT 输出,具体取决于实际的 RTL 代码和布线结果。正是路由 BEL 和开关矩阵的配合,才让 FPGA 底层资源之间实现了灵活互联。

设计映射:你的代码落在了哪里?

在实现(Implementation)完成后,Vivado 的 place_design 命令会将网表中的所有逻辑单元分配到兼容的 BEL 上。在 Device View 中可以直观地看到这个映射关系:

image.png

图中的 Leaf Cells 就是你设计中的逻辑单元。经过 place_design 阶段后,每个 Leaf Cell 都被放置到了一个具体的 BEL 上——这就是”你的 Verilog 代码最终变成了什么”的物理答案。

关键观察点

  • 勾选 Routing Resource:可以看到路由 BEL(如 FFMUX、DOUTMUX)
  • 查看 Properties 面板:点击任意资源,可以看到它的完整层次路径(如 SLICE_X12Y34/A6LUT
  • Leaf Cells:在实现后的视图中,你能看到你的设计逻辑单元(Leaf Cells)被放置到了哪些具体的 BEL 上

Vivado Device View

💡 工程师手记:我建议每个 FPGA 初学者都花 30 分钟在 Vivado 的 Device View 里”漫游”一次。从全局缩放到 BEL 级别,点击各种资源看它们的属性。这比读十页文档更能建立对 FPGA 内部结构的直觉。

(建议替换为你自己探索 Vivado Device View 的经历)


10. 总结

层级名称一句话理解你需要知道的一件事
第 1 级BEL最小功能单元(LUT、FF 等)你的代码最终映射到 BEL 上
第 2 级SiteBEL 的集合(如 Slice)每个 Site 有唯一的 _X#Y# 坐标
第 3 级TileSite + 本地互连(如 CLB)一个 CLB = 2 个 Slice
第 4 级Clock Region共享时钟网络的区域关键路径尽量不要跨 Clock Region
第 5 级SLR一颗独立的硅片 Die小型 FPGA 可忽略,大型器件要注意跨 SLR 时序
第 6 级Device整颗 FPGA 芯片器件型号决定了你的全部可用资源

理解这六级层次,就像拿到了一张 FPGA 的”行政区划图”。当你在 Vivado 中看到任何资源名称或坐标时,都能立刻定位它在芯片中的位置和角色。

下一篇文章,我们将深入 CLB 内部,看看 LUT、MUX 和 Carry Chain 是如何协同工作的。


常见问题

Q1:BEL 和 Site 的区别是什么?

BEL 是最小的功能单元(如一个 LUT、一个 FF),Site 是容纳 BEL 的物理位置(如一个 Slice)。一个 Site 里有多个 BEL,就像一个房间里有多件家具。

Q2:为什么 SLICEL 和 SLICEM 共享坐标网格,而其他 Site 类型不共享?

因为 SLICEL 和 SLICEM 在物理上占据相同的位置——一个 CLB 中的两个 Slice 位置,要么放 SLICEL,要么放 SLICEM。它们是同一种”房间”的两种”装修方案”,所以共用地址。

Q3:Clock Region 和 I/O Bank 是一一对应的吗?

不是。以 XC7A35T 为例,它有 5 个 I/O Bank 但 6 个 Clock Region。Bank 是按 I/O 电压分组的,Clock Region 是按时钟分配网络划分的,两者的边界不一定重合。

Q4:跨 SLR 的信号延迟大概有多大?

具体数值取决于器件型号,但通常跨 SLR 的额外延迟在 0.5~1.5 ns 量级。对于高频设计(>300 MHz),这个延迟可能占据一个时钟周期的很大比例,需要在跨 SLR 路径上插入流水线寄存器。


参考资料


系列导航:本文是「FPGA 内部资源深度解析」系列第 1 篇。

如果这篇文章对你有帮助,欢迎点赞、收藏,也欢迎在评论区分享你在 Vivado Device View 中的发现。

End of file.