FPGA 原型验证专题 12:多 FPGA 分区算法——容量/IO/互联建模、割集最小化与时序感知分割
更新时间:2026-09-12。本文是「ASIC FPGA 原型验证系统」专题 06~25 深体系列分册,对应阶段 2(多 FPGA 分割)。系统/平台视角见既有 02 多 FPGA 原型系统 ASIC 分区/TDM,本篇专注编译器分区算法内部;割开的连接如何落到物理链路见 13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频。
这一篇在链路里的位置
分割以"带 RTL ID 的实例树 + 平台硬件约束(FPGA 数量、跨片互联带宽)"为输入,输出多片子设计与跨片接口。分区质量直接决定后续 P&R 能否收敛、跨片 TDM 降频比、以及调试可见性。它必须在 RTL ID 稳定的基础上做,以便回映。
本文要回答的问题
- 分区问题如何形式化:模块图、容量约束、引脚约束、割边代价、为什么 NP 难?
- 多级图划分(coarsen→partition→uncoarsen 精炼)为什么是主流做法?
- 如何利用自然层次(Hierarchy)作为分区边界,避免切开紧耦合逻辑?
- TDM 时分复用:N 条逻辑连接共享 1 条物理线,降频比怎么算、对整体频率的影响?
- 时序/时钟域感知分区:为什么尽量不切关键路径、不跨片切同一时钟域的紧路径?
- 分区与综合、P&R 的迭代闭环:拥塞/不可布线时如何重分区?
- 容量余量、调试预留、增量改 RTL 后少重分区的工程策略?
一、为什么单片装不下:三维约束
ASIC 设计规模常达几亿门,单片 FPGA 只有几百万 ASIC 等效门,必须多片。约束是三维的:①逻辑容量——每片的 LUT/FF/BRAM/DSP 用量不能超(且要留余量给 TDM 逻辑和 probe);②引脚——每片可用 IO 焊盘有限;③板级互连线——两片 FPGA 之间真正布在板子上的线缆/SerDes 对数远少于被切开的逻辑连接。引脚和互连线往往比逻辑容量更早成为瓶颈,这也是 TDM(时分复用,见 13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频)存在的原因。平台容量怎么测算见 02 多 FPGA 原型系统 ASIC 分区/TDM。
三维约束的相互关系画成图,能直观看出为什么「先打满的往往是线」:

图中 wire 分出两条边:它既直接决定可行性,又通过 TDM 间接决定——物理线不够时可以拿时间换,但换来的是降频。这正是分区目标函数不能只数割边条数的原因。
二、问题建模:带容量约束的图划分
分区器面对的是阶段 1 产出的实例图:
- 节点:模块实例(或更细的层次原子),每个节点带资源向量
(lut, ff, bram, dsp),由快速资源预估(面积模型/预综合)给出; - 边:节点间的连接,权重 = 总线位数 × 翻转/时序关键性;
- 约束:每片各资源 ≤ 容量 × 利用率上限;每对 FPGA 间割边占用的物理线(经 TDM 折算后)≤ 板级互连线数;
- 目标:最小化割集总权重(跨片连接越少,TDM 比率越低、频率越高),同时各片负载均衡。
数学上这是带多资源容量约束的 k-way 图划分,NP 难——没有精确解,工程上全是启发式。
问题建模的四个要素与它们在目标函数里的角色,对照如下表:
| 建模要素 | 数学对象 | 数据来源 | 对目标函数的作用 |
|---|---|---|---|
| 节点 | 模块实例 + 资源向量 | 快速资源预估 | 容量约束的左端 |
| 边 | 连接 × 权重 | 总线位宽、翻转/关键性 | 割代价的被加数 |
| 约束 | 容量、引脚、互连线预算 | 平台规格 | 可行域边界 |
| 目标 | 割集权重最小 + 均衡 | 加权组合 | 驱动启发式搜索 |
资源向量的准确性是整张表的软肋:预估误差会直接变成容量约束的误差,所以资源模型要随 P&R 反馈持续校正(见第七节的闭环)。
三、多级图划分:主流解法
百万级节点不可能直接跑启发式,标准做法是多级(multilevel)框架,类似 Metis/hMETIS 的思路:
粗化 coarsen:按连接紧密度把节点两两合并,图逐级缩小到几百节点
→ 初始划分:在小图上求一个好的 k-way 初始解(FM/KL、递归二分)
→ 细化 uncoarsen:逐级展开,每级用边界节点移动(FM 交换)做局部精炼,
移动时同时检查容量约束与割代价增益精炼阶段的经典操作是 FM/KL 交换:考察边界上的节点,若把它移到邻片能降低割权重且不破坏容量,就移动,用增益桶(gain bucket)高效找最优移动序列。目标函数一般写成 割代价 + λ·负载不均衡惩罚 + μ·跨片关键路径惩罚,λ/μ 按项目调。
多级框架的三段结构画成流程图,注意它的形状是一个「V」——先收缩到足够小敢做全局决策,再展开回原始规模逐步修正:

V 形的意义在于:初始划分的质量在小图上就容易做好,而精炼阶段每展开一级都有机会修正上一级的错误——这是启发式能在 NP 难问题上稳定拿到工程可用解的根本原因。
四、层次感知:原子不该是任意门
纯图划分可能把一个 FIFO 的控制器和存储体切到两片,割出几十条紧耦合回线——物理上极亏。原型分区因此必须用 07 面向原型的 RTL 交付规范 层次/黑盒/电源域要求的清晰层次:
- 默认以层次实例为原子(不可切开的模块),只有过大的模块才递归下钻;
- 强绑定结构(同一 IP、同一 FIFO、同一位片 generate 组)加**亲和约束(affinity)**强制同片;
- 时钟/复位域对齐:同一时钟域的紧密数据通路尽量不跨片,因为跨片路径要插同步与 TDM(见下节),高频紧路径跨片代价极大;
- 资源块约束:BRAM/DSP 硬核在片内固定位置,分区结果要让后续 P&R 放得下。
这正是「实例树即契约」的回报——好的交付层次让分区器直接拿到语义边界,而不是从网线图里猜。
层次感知的几条手段与被守护的结构对应如下表,写亲和约束文件时可按此清单逐条过:
| 手段 | 守护的结构 | 不加约束的典型惨状 |
|---|---|---|
| 层次实例为原子 | 模块语义边界 | FIFO 控制器与存储体分家 |
| 亲和约束 affinity | IP、位片 generate 组 | 紧耦合回线跨片往返 |
| 时钟/复位域对齐 | 同域紧数据通路 | 高频路径插入 TDM 延迟 |
| 资源块位置约束 | BRAM/DSP 硬核 | 分区结果 P&R 放不下 |
前三条保频率,最后一条保可实现——四条都做到,分区方案才同时具备「快」和「能落地」两个属性。
五、TDM:用时间换互连线
割出的逻辑连接若有 2000 条、两片间只有 200 对物理线,就用时分复用:N 条连接共享一条物理链路,发端轮转发、收端轮转收。TDM 比率 = 一条物理线上分时承载的逻辑连接数,它直接乘到路径延迟上:
跨片一跳的软件可见延迟 ≈ TDM 比率 × 物理链路周期 + 对齐/同步开销
原型系统频率 ≈ min(片内可跑频率, 物理链路频率 / 最坏 TDM 比率)因此分区器要最小化的不只是割边条数,而是割边在各物理通道上的最大拥塞(瓶颈 TDM 比率)——少数几条过载通道会把全系统频率拖死。TDM 的电路实现与降频换算见 13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频。
TDM 复用的结构画成图:N 条逻辑割边在发送侧被时隙仲裁器压进 1 条物理链路,接收侧再按时槽表还原——「用时间换线」的代价就发生在仲裁器的轮转里:

图中 freq 节点挂在仲裁器上而不是链路上,这是有意的:链路本身跑得再快,只要某组割边的时隙比率下不来,全系统就得陪着慢——这就是「瓶颈目标」优先于「总量目标」的图形化表达。
六、时序/时钟域感知分区
好分区还要「看得懂时序」:①Compiler 先做快速时序预估或读取综合关键路径标注,给边加关键度权重,关键路径上的节点对禁止跨片或施加重惩罚(跨片一跳就是几个 TDM 周期,setup 必爆);②同一 CDC 通道(CDC 基础)作为整体处理,跨片边界尽量复用已有的异步握手,不额外制造跨片时钟域;③多时钟路径按域聚类,减少跨片时钟数量(每个跨片时钟都要在互联网络里占调度资源);④割边尽量落在寄存器到寄存器边界,使跨片延迟可干净地折算成整数周期,而不是切在组合云中间。
四条时序感知措施的实现方式与防止的故障对照如下:
| 措施 | 实现方式 | 防止的故障 |
|---|---|---|
| 关键路径加权重/禁切 | 快速时序预估标注边 | setup 被跨片延迟打爆 |
| CDC 通道整体处理 | 复用已有异步握手 | 额外交叉时钟域 |
| 时钟域聚类 | 同域节点内聚 | 跨片时钟调度资源耗尽 |
| 割边落在寄存器边界 | 边界类型约束 | 组合云跨片、延迟不可折算 |
第四条最容易被忽视:切在组合云中间的割边,其延迟无法表示成整数个逻辑周期,后续时间重建(阶段 6)将无法把它折算回 RTL 时间轴,观测数据的时间语义就此断裂。
七、分区与 P&R 的迭代闭环
分区时的资源和延迟只是预估,真相要等综合 + 厂商 P&R(18 原型约束体系 SDC/XDC/跨片时序/例外/19 原型频率与时序收敛 TDM 降频/关键路径)。实际闭环:
分区 → Compiler 逻辑综合([59])→ 各片 Vivado P&R
→ 反馈:实际资源利用率、布线拥塞点、跨片通道实际 TDM、违例路径
→ 调整:移动热点模块、把拥塞通道上的连接改道、加/解亲和约束
→ 重分区(尽量增量,只动受影响片)一个大设计跑 3~6 轮收敛是常态。反馈数据让下一轮分区的边权重/容量模型越来越准。
迭代闭环画成图,注意反馈边上流动的不只是「失败了重来」,还有模型校准数据——这是闭环越来越快的关键:

如果闭环里只有「失败→重跑」而没有「实测→校准模型」,那每一轮都是在用同样不准的预估重新掷骰子;把反馈数据喂回边权重和容量模型,3~6 轮的常态才有机会压缩到 2~3 轮。
八、工程权衡
- 容量余量:每片一般只敢用到 70~85%,余量给 TDM 聚合逻辑、probe 插桩(14 可观测性插桩 dont_touch/probe/可见性预算)、增量改 RTL 后的局部膨胀;
- 分区锁定(partition lock):项目中后期把已验证片的分区冻结,改 RTL 只在受影响片内增量消化,避免「改一行,全片重综合、频率全变」;
- 可观测性预留:probe 信号与跨片观测通道在分区时就要预算,否则后期想抓某片内部信号时没有物理通路;
- 拓扑匹配:分区结果要匹配板子的物理拓扑(mesh/星型/全连接,见 13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频),割边集中在真实存在的链路上;
- ID 稳定是增量的前提:所有分区决策都记录在 RTL ID(10 RTL ID 体系 分配规则/层次绑定/稳定性)上,改 RTL 后才能按最小失效集复用旧分区。
九、割边预算与 TDM 比的精算:分区报告里最该盯的两个数
多片分区的结果最终浓缩成两个相互拉扯的数:割边数(跨 FPGA 的信号条数)和 TDM 比(一条物理互连接几根逻辑信号)。理解它们如何决定系统性能,才能读懂分区报告并做出有效干预。先看物理约束:两片 FPGA 之间能用的高速互联线是有限的(板级走线、SerDes lane、专用互联接口,典型几十到几百对),每根线每周期传一位(或经 SerDes 打包传若干位)。若分区产生 2000 根割边而物理只有 400 根线,平均 TDM 比至少 5:1,意味着割边上的每个逻辑事件平均需要 5 个物理周期送达,等效系统频率因此降到约五分之一,且这是平均值——比值最高的那组边才是频率瓶颈。分区算法的目标函数因此不是简单「割边最少」,而是最小化最大 TDM 比(瓶颈目标),其次才是总量和负载均衡。工程上还要区分割边的「时序权重」:两个本来就隔了多级流水线、通信稀疏的模块之间割开,TDM 延迟容易被握手吸收;而一个紧耦合循环(比如 CPU 与紧邻的缓存控制、循环展开的脉动阵列相邻 PE)一旦被割开,TDM 延迟直接插入关键循环,性能断崖式下跌。所以分区器要接受亲和性约束(这些实例必须同片)与壁垒约束(允许割开的边界白名单),这些约束来自 RTL 交付时标注的层次和握手协议信息——这也是为什么 51 篇强调层次即契约。评审分区结果时应依次问:最大 TDM 比是多少、出现在哪组模块之间、那条路径在微架构上是不是关键循环、能否通过移动少量边界实例把它降到下一档。分区报告还应给出每个割边的通信活动估计(静态扇出/协议推断或上一轮采集数据),把完全不活动的边标出来——它们虽然占线但可以接受高 TDM,把宝贵的低 TDM 槽位让给活跃边。
「割边数」与「TDM 比」这两个数的语义差异,是读懂任何一份分区报告的前提:
| 维度 | 割边数 | TDM 比 |
|---|---|---|
| 定义 | 跨片信号总条数 | 一条物理线承载的逻辑连接数 |
| 影响 | 占用物理线资源 | 直接乘到路径延迟上 |
| 优化方向 | 越少越好(次要) | 最大比率越小越好(首要) |
| 分布特征 | 看总量 | 看瓶颈通道 |
| 对频率的作用 | 间接 | 直接决定等效系统频率 |
一句话记忆:割边数决定「装不装得下连线」,TDM 比决定「跑得多快」——评审时先问最大 TDM 比出在哪组模块间,再问总量,顺序反了就会被漂亮的低割边数误导。
十、增量重分区:RTL 小改之后如何不推翻全局
项目中后期 RTL 每周都有小改(修 bug、加功能、参数微调),如果每次改动都从零跑全局分区,TDM 结构随之洗牌,频率、引脚映射、跨片接口全部变化,下游的约束、板级走线(固定连接的平台)、采集配置、软件链接地址都要跟着动,迭代成本不可接受。实际系统采用增量分区:把上一版分区解作为初始状态,图划分器在满足新容量约束的前提下尽量保留实例归属,只迁移必要的最小集合。实现上有几个关键策略。第一,终端锚定:与物理 IO、GT、跨片连接器直接相连的实例以及多片共享的基础设施(时钟、复位、采集网络)锁定不动,因为它们的位置受板级硬件约束。第二,最小割调整:当某片因新增逻辑超容时,在该片与邻居的边界上找增益最大的少量实例迁出,目标函数里对「迁移」本身赋惩罚项,避免算法为了全局最优把半个芯片搬家。第三,TDM 槽位预留:初版分区时在每条物理互联上预留空闲时槽,后续小幅新增割边直接填入而不抬高 TDM 比;只有预留耗尽才接受比值升级。第四,影响面报告:每次增量分区输出与上版的 diff——哪些实例迁移了、哪些割边新增/消失、哪些 TDM 比变化——该报告直接驱动增量综合(59 篇)和比特流范围判断(64 篇):只有实例归属变化的芯片需要重新实现,其余芯片比特流可复用。增量分区的代价是质量损失:长期只做局部调整会让划分逐渐劣化(割边和 TDM 比缓慢上升),因此流程上应周期性(比如每个大里程碑)跑一次全局重分区作为「再平衡基线」,再在新基线上增量,像内存分配器定期 compact 一样。每次再平衡要安排在下游资产(采集配置、链接脚本)能同步更新的窗口,这也是 54 篇 ID 稳定性纪律的用武之地。
增量重分区的四个关键策略与它们各自保护的资产对照如下表:
| 策略 | 机制 | 保护的资产 |
|---|---|---|
| 终端锚定 | IO/GT/基础设施锁定 | 板级走线、时钟复位网络 |
| 最小割调整 | 迁移惩罚项 | 分区结构整体稳定 |
| TDM 槽位预留 | 空闲时槽缓冲 | 频率配置不随小改波动 |
| 影响面报告 | 实例/割边/TDM diff | 增量综合与比特流复用 |
四个策略共同的底层思想是「把变化关在笼子里」:RTL 小改不可避免,但它引发的涟漪应该被限制在最小的物理与逻辑范围内,下游资产才有复用的可能。
十一、分区失败的典型症状与人工干预手段
自动分区器不是黑盒许愿机,大型设计上它一定会给出不令人满意的结果,工程师要认得症状、知道在哪些旋钮上干预。症状一:容量都达标但频率极低。通常是关键循环被割开或局部 TDM 比畸高;干预手段是审查高 TDM 边,对紧耦合实例加同片约束,或合并/复制合理的边界寄存器(把跨片通信从组合/单拍变成带寄存的可流水通信)。症状二:某片一直差 2% 装不下,其余片很空。说明均衡化卡在固定约束(IO 位置、大存储必须贴着控制器);可尝试放松非关键壁垒、把一个大模块沿其内部自然子层次切开(要求 RTL 层次支持),或接受该片降一档实现密度目标并检查拥塞。症状三:综合能过、P&R 拥塞崩盘。片内利用率过高让布线资源耗尽,表现为实现时间爆炸或 WNS 急剧恶化;分区器要看的不只是 LUT 百分比,还有布线/BRAM/DSP 多维资源与局部热点,必要时把高扇出模块(大 NoC、缓存阵列)主动拆散分布。症状四:每次构建分区结果飘忽。根源是图遍历或 tie-break 不确定,导致 ID 和归属不可复现——这是致命问题,因为破坏版本纪律;必须要求分区器确定性运行(固定随机种子、确定性并行规约),并在回归里校验逐字节一致。症状五:跨片时钟域被撕开。一个时钟域的逻辑被分到多片后,时钟要随数据跨片,异步关系和复位释放顺序变复杂;应给分区器时钟域标注作为硬/软约束,让同源同步逻辑尽量内聚,异步边界恰好落在片间接缝上。人工干预的结果(约束文件、例外列表)必须作为正式交付物版本化,而不是某次交互式会话里的临时设置——否则只有那名工程师的机器上能复现分区。
五种典型症状、根因与干预手段汇总成一张速查表,分区评审时可以对照定位:
| 症状 | 根因 | 干预手段 |
|---|---|---|
| 容量达标但频率极低 | 关键循环被割/局部 TDM 畸高 | 同片约束、边界寄存 |
| 某片差 2% 装不下 | 固定约束卡死均衡 | 放松壁垒、沿子层次切、降密度档 |
| 综合过但 P&R 拥塞崩盘 | 布线/局部热点 | 多维资源评估、拆散高扇出模块 |
| 构建结果飘忽 | 非确定性遍历 | 固定种子、确定性规约、回归校验 |
| 时钟域被撕开 | 缺少域标注约束 | 时钟域硬/软约束、内聚同源逻辑 |
症状四单列一行强调:它是唯一「不伤害当前版本、但摧毁整个流程」的问题——分区不可复现,版本纪律、回归比对、增量复用全部失去地基,必须当作最高优先级修复。
十二、验证分区结果:用数据而不是直觉承认它是对的
分区输出是一份静态方案,它好不好必须用后续构建和运行数据验证,而不能只看「全装下了、没报错」。验证分四个层次。结构验证:分区后每片的网表与全局网表在数学上等价吗?检查方法是合并所有子网表、跨片连接按时槽关系还原,与分区前网表做同构比对——每个实例恰在一片、每条非割边保留、每条割边恰有一条 TDM 通道承载,任何实例丢失或重复都是致命错误。这一步全自动、每次构建必跑。构建验证:每片能否独立综合实现通过、资源多维(LUT/BRAM/DSP/IO/GT)是否都在阈值内、时序是否满足片内预算;一片过、另一片拥塞爆炸的方案不可接受。功能验证:在分区后的多片系统上重放分区前仿真的黄金场景(先小规模、再 soak),输出与仿真结果逐事务比对;分区引入的延迟可能改变时序,比对要在协议/事务级而非逐周期。性能验证:用 63 篇的等效频率标定测量真实 TDM 代价——分区报告预测的最坏 TDM 比是上限,真实负载下测量热边利用率,验证方案在目标场景里确实给出了预期的系统频率。四个层次各自回答一个问题:没切坏、装得下、跑得对、跑得快。回归化:每次增量分区后,受影响的片重跑相应层次,未受影响的片靠 60 篇指纹对比免测;分区方案本身也版本化,支持「回退到上一个好分区」。长期数据反哺:把运行期实测的割边活动、反压计数、各片真实利用率喂回分区器,下一版分区用真实权重替代静态估计——这是分区质量持续改善的闭环,几轮之后系统对自己设计的通信模式会「越来越了解」,分区质量明显优于纯静态图分析。分区工程师的心态应当是:分区方案是一个待证伪的假设,四个验证层次就是四次证伪尝试,全部存活才允许它上板。
四个验证层次与各自回答的问题画成一张阶梯图——任何一级没过,上面的层级都不必再看:

阶梯顺序按「发现问题的成本」从低到高排列:结构验证是全自动的几分钟,性能验证要跑真实负载数小时——便宜的问题先暴露,昂贵的验证只做在必过的候选上,这是四级漏斗存在的理由。
十三、规模外推:更大设计到来时分区体系怎么演进
分区方法在规模增长时不是线性扩展的,理解几个拐点有助于提前布局。从单片到几片(2~4 片):分区质量主要靠算法,板级固定互联丰富、任意两片基本直连,拓扑影响小;工程重点是把流程跑顺。中等规模(8~16 片):拓扑开始起作用——不是所有片对都直连,远处片对的通信要经过中间片转发(多跳 TDM),分区目标函数必须包含跳数距离,把通信密集的模块簇在物理上邻接;此时层次感知和时序感知分区从「加分项」变成「必需品」,纯边权最小化会产生大量穿板路径。超大规模(数十片、多板多机柜):单遍图划分内存和时间不可行,需要分层分区——先沿大层次边界把设计切成板组,板组内再做片级精分;层次交付质量(51 篇)在此成为硬前提,没有干净的大模块边界,分层就无锚可依。跨板(经电缆/光口)的带宽比板内低一两个数量级,割边代价要按物理层级赋不同权重。资源维度的拐点:小规模先看 LUT;规模一大,BRAM/DSP 与 IO 先成为瓶颈,分区要做多维权衡,某些片「逻辑很空但 RAM 满了」是典型困局,解法是允许存储与计算在片间适度分离,但分离本身增加割边,权衡空间陡增。组织层面的外推:小规模一个人兼管分区与时序,大规模必须把分区、约束、板级运维分工,并让分区方案评审纳入 RTL 团队(大层次切分需要微架构知识)。工具链拐点:朴素文本网表和脚本在千万门类规模不可行,流式处理、增量计算、并行分区(保持确定性归约)成为必选项——15~17 篇的工程化主题在这里汇合。每个拐点上,「去年的方法只是慢一点」的假设都会失效;提前一个项目周期布局下一代分区体系,是平台团队负责人的核心职责。
十四、分区团队与 RTL 团队的协作接口
自动分区器再强,也无法替代两个团队之间的设计对话;分区质量的上限最终由 RTL 交付时预留的「可切分性」决定,这一节给出双方协作的具体接口。架构阶段的接口:新模块设计前,分区团队应基于历史数据给出「模块规模甜区」——单实例控制在某一资源量级以下、大存储与计算的比例建议、跨模块通信模式建议(突发流优于随机细粒度、带握手优于裸 valid)。这些约束进入设计规范,比事后切割便宜几个数量级。交付前的切分评审:对预计会成为大单元的子系统(加速器、缓存系统、NoC 交换单元),联合走查层次树,确认它内部存在自然的低耦合边界(寄存器接口、流接口),并把这些边界标注为允许切分;没有天然边界的巨型单体是分区器的噩梦,往往只能整体占用一片或承受极高 TDM。分区结果的反馈闭环:分区团队不只是把方案丢出去,而要把「割痛」翻译成 RTL 团队能行动的语言:哪个接口贡献了多少割边、移动哪个缓冲能让热路径内聚、哪个握手协议导致跨片延迟无法吸收。RTL 团队据此做的微调(边界寄存、复制只读表、把控制与数据通路分层)通常能在不改功能的前提下显著降低 TDM 比。频率争议的裁决:当性能不达标时,双方在联合视图(63 篇第十节)前讨论,区分「结构问题,分区可解」「微架构问题,需要 RTL 打拍/重组」「物理极限,需要降频或换平台」三类责任,避免互相等待。共享的语言是层次与通信量:RTL 团队不需要懂图划分算法,分区团队不需要懂全部算法细节,双方都看得懂的是模块实例图和边上的通信/延迟数字——把这两样东西做成联合报告的固定内容,协作成本最低。长期来看,最成功的原型项目都有一个共同特征:分区反馈回流成了下一代 RTL 的设计规则,「为可原型化而设计」与「为时序而设计」「为可测试而设计」并列,成为微架构评审的常规维度。
十五、分区工作的日常节奏:一个版本周期里发生什么
最后把分区工程落到一个典型版本周期(一到两周)的日常节奏上,给新加入该岗位的工程师一张时间表。版本初期一到两天接收新 RTL 和资源清单,先跑结构门禁和一次「探索性分区」——不追求可实现,只为快速回答规模变化、新增大模块、割边趋势三个问题,结果在三方例会上过一遍,决定本版是否需要大动拓扑。接下来两到三天做正式分区:在基线方案上做增量调整,处理容量和 TDM 热点,输出分区方案、割边报告、亲和约束变更,并与 RTL 团队确认涉及层次切分的改动。随后是构建联动:受影响芯片综合实现,分区工程师跟踪资源、时序和首次标定,这一阶段暴露的问题按「分区可解、RTL 可解、需降频」分类处理,不独自硬扛。版本中段进入性能爬坡:根据实测的热边和反压数据做局部搬迁,每次改动都在联合视图里量化收益,避免无方向地重跑。版本后段冻结分区,只接受阻断性修复,跑结构等价和黄金场景回归,产出本版分区基线与 diff 报告归档。周期末尾做回顾:本版 TDM 比趋势、人工干预点、因分区导致的频率损失各是多少,哪些经验要写回分区器权重和设计规范。两个职业习惯决定长期产出:一是所有人工干预进版本控制并写明假设,让任何方案可复现;二是持续维护「模块通信画像」——哪些子系统天然内聚、哪些接口总是热点,这些知识跨项目复用,最终形成团队对自家架构的分区直觉。分区不是算法的一次性输出,而是一段随设计共同演化的工程关系。
知识脉络

与系列及现有篇目的衔接
- 系统视角(平台/容量规划/TDM 概念):02 多 FPGA 原型系统 ASIC 分区/TDM
- 跨片实现:13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频
- 前置:11 ASIC→FPGA 等价单元替换 SRAM/时钟/IO/PHY;下游:19 原型频率与时序收敛 TDM 降频/关键路径
- 多板系统:43 多板系统
总结
一句话总结:单片 FPGA 的逻辑容量、引脚数和板级互连线装不下亿门级 ASIC(瓶颈往往先是线而非逻辑),分区器在阶段 1 的实例图上求解一个带 LUT/FF/BRAM/DSP 多资源容量约束与互连线预算的 k-way 图划分问题——它 NP 难,工业界一律用「粗化→小图初始划分→逐级展开并以 FM/KL 交换精炼」的多级启发式,目标是割集代价、负载均衡和跨片关键路径惩罚的加权最小;纯按网线切会切碎 FIFO/位片等紧耦合结构,所以必须利用交付阶段保留的 RTL 层次,以模块实例为原子、对强绑定结构加亲和约束、按时钟域聚类;割出的连接靠 TDM 时分复用共享物理线,系统频率被最坏通道的 TDM 比率决定,所以真正要最小化的是通道最大拥塞而非割边总数;时序感知分区要给关键路径边加权、把割边界落在寄存器到寄存器处、复用已有 CDC 握手;分区质量只能在综合加 P&R 后被真实利用率、拥塞和违例验证,形成 3~6 轮分区—实现—反馈的迭代闭环;工程上每片留 70~85% 余量给 TDM/probe/增量改动,中后期锁定已验证片的分区做增量,probe 通道与物理拓扑在分区时就一并预算,而所有分区决策挂在稳定的 RTL ID 上,才能在 RTL 小改时按最小失效集复用。