FPGA 原型验证专题 40:多板多 FPGA 全局触发与时间对齐——跨片 trace 的同步系统
更新时间:2026-09-13。本文是模块 D 第二篇。39 商用原型调试 IP 深跟踪/动态探针/可见性预算讲调试 IP 的四块能力,其中"全局触发"本篇展开;22 Gate 域信号采集 ILA/trace/带宽深度权衡讲单设计的门级采集,13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频讲跨片 TDM 机制——本篇回答一个看似简单、实则坑很多的问题:多片 FPGA 各自在跑、各自在记 trace,怎么让它们"在同一瞬间停",并把几份独立波形按同一个时间轴拼成一条完整的系统级因果链。
一、为什么单 FPGA 的免费午餐在多片后消失
单 FPGA 里,探针、触发比较、存储全在一个时钟体系下:触发条件命中,同一个时钟沿通知所有探针停采,波形按同一时钟编号天然对齐。多 FPGA 原型里这个前提全部不成立:
- 各片 FPGA 是独立器件,有各自的时钟树,哪怕同源也有相位/偏斜差异(27 在电路仿真 ICE 与协同加速模式 接线/时钟纪律);
- 触发条件可能在 A 片产生,但要看的信号分布在 A/B/C 三片,必须把"A 片命中"这个事件传过去,而传播要花若干周期;
- 跨片信号走 TDM(13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频),物理上一个时钟周期传多路逻辑信号,采到的物理波形不等于逻辑波形,必须重组;
- 多板时触发信号还要经过板间接连接器/电缆,引入延迟和抖动。
不解决这三件事,结果就是:A 片在第 100 万周期停了,B 片停在 100 万零 3 周期,C 片 TDM 波形还没法直接读——三份 trace 拼不起来,跨片死锁(A 等 B、B 等 C 这类最常见的多片 bug)永远定位不清。
二、两大支柱:全局触发网络 + 统一时基

**支柱一:全局触发网络。**商用调试 IP(80 篇)在每片 FPGA 放触发接入/扇出单元,板上用一组专门的触发互联线(trigger crossbar/mux)把所有片连成网络:
- 任意片可作触发源:本地触发条件(信号比较、状态机、序列、软件写断点寄存器)上报到触发网络;
- 逻辑组合:支持多片条件的 AND/OR(如"A 片发出请求且 B 片未应答持续 N 周期"才触发),这是抓跨片死锁的关键;
- 统一扇出:全局触发经网络广播到所有片的探针,保证大家以约定方式停采(立即停/采完预设 post 窗口再停);
- 触发优先级与屏蔽:多用户/多触发源场景下避免互相干扰(农场分时,F2 主题)。
**支柱二:统一时基与时间戳。**光同时停还不够,回溯时要知道每个样本的全局时间:
- 同源时钟:所有片的 DUT 时钟/采样时钟来自同一个时钟发生器和分发树(68 篇 harness),这是时间对齐的物理前提;
- 全局周期计数器:每片维护一个由全局时钟驱动的周期计数,trace 样本带全局时间戳;
- 触发点为锚对齐:以全局触发到达时刻为时间零点,各片 trace 按本地时间戳映射到同一全局轴,自动算出片间偏移并对齐显示。
三、触发传播延迟:为什么不能"收到就停"
触发从 A 片传到 B/C 片要走互联、过寄存器打拍,不同片路径长度不同。若各片"收到触发就立刻停",实际停采时刻差一个传播延迟,记录的窗口就错位。两种标准处理:
- 预先标定 + 周期补偿:综合/布线后已知每片相对触发源的路径周期数,停采时各片按已知偏移把停点拉齐(相当于每片在本地"虚拟触发时刻"对齐)。这要求触发网络延迟是确定性的——因此触发线要走固定、已时序收敛的路径,不能用普通可被 TDM 调度的通用互联。
- 全局同步停采屏障:触发先置一个"即将停采"标志,等一个所有片都能到达的同步屏障(barrier)周期,再在下一个公共对齐沿统一停。代价是停采点比真实命中晚几个周期(用 pre-trigger 窗口补回死前历史)。
工程上两种常混用:触发网络走确定性延迟路径用于精确定位命中点,屏障用于保证跨片存储窗口一致。
四、跨片 TDM 信号的逻辑时序重组
这是多片 trace 最特殊的一步。跨片逻辑信号经 TDM 后,物理通道在一个物理周期内轮流承载多路信号(13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频),探针在物理侧采到的是"时隙 0=信号 X、时隙 1=信号 Y……"的交错流。还原成设计者能读的逻辑波形,需要调试 IP 利用 TDM 调度元数据(时隙表)+ 全局时间戳做反交错:按调度表把每个物理样本拆回各逻辑信号、映射回全局逻辑周期。
要点:
- 重组必须用 Compiler 分区时生成的同一份 TDM 时隙映射表,时隙表版本必须与比特流严格一致(20 比特流烧录与四方版本一致 manifest/门禁),否则重组出的信号张冠李戴且不会报错;
- TDM 引入的固定延迟(割边信号的物理-逻辑周期差)要在对齐时扣除,才能与片内信号在同一逻辑时间比较;
- 重组后最好导出标准波形(FSDB/VCD),在主机侧与仿真 trace 叠加比对(41 原型在 SoC 验证矩阵中的定位 用例分配/RACI/证据移交)。
五、多板机柜:触发与时基的物理实现
系统大到跨多块板(板间经连接器/背板/电缆,35 多 FPGA IO 引出与引脚规划 连接器/电平/SI/取舍),同步要考虑物理层:
- 独立时基分发 vs 级联:机柜级用专用时钟/触发分发(时钟缓冲树、等长走线、星形或短链拓扑),避免多级板级联把偏斜和抖动累积起来;
- 触发线专用且等长:跨板触发通道预留专用差分对、做长度匹配,和高速数据通道分开规划;
- 上电建链与自检:上电后触发网络要有发现/训练流程(识别在线的片数、标定各路径延迟、验证每片都能收/发触发),把"触发网络通不通"做成一个独立于 DUT bring-up 的自检项——先确认同步网络健康,再调芯片逻辑,否则会把"触发没传到"误判成"DUT 没触发";
- 热插拔/换板后的再标定:农场里板卡更换、走线变动后路径延迟可能变化,需重新标定(F2 农场主题)。
六、没有全局同步时的典型误诊
理解了机制,就认得这些症状:
| 症状 | 很可能的同步问题 | 处理 |
|---|---|---|
| 三片停采点对不上,因果差几周期 | 触发传播延迟未补偿 | 标定路径延迟/启用屏障对齐 |
| 跨片信号波形呈周期性乱码 | TDM 时隙表版本不匹配/未重组 | 核对时隙表与比特流版本(61 篇) |
| 片内与跨片信号总差固定拍数 | TDM 固定延迟未扣 | 对齐时扣除割边延迟 |
| 偶发只有部分片停采 | 触发线误码/某片未在网 | 跑触发网络自检、查连接 |
| 长时间运行后逐渐漂移 | 时钟非同源/未用统一时基 | 改同源时钟+全局周期计数 |
| 换板后同步失效 | 路径延迟变了未重标定 | 重新建链标定 |
七、上电后:多板同步系统的 bring-up 顺序
同步系统是多板平台上最该"先于 DUT 调通"的基础设施。给一套经过验证的加电自检顺序:
- 物理层先查:时钟发生器输出和分发树到每片的时钟电平/频率用示波器或片内时钟计数确认;触发差分对无反接、无松动(多板环境线缆故障占比不低)。
- 单点环回:让 FPGA-A 发一个已知 pattern 的触发脉冲,先在同板内环回收发,验证本板触发 IP 和时钟域跨越逻辑。
- 逐片入网:按星形拓扑逐片加入触发网络,每加一片执行发现握手——报告在线片数、收发链路误码计数、该片相对主片的路径延迟标定值。
- 全局停采演练(不挂 DUT):在测试计数器上让 A 片产生触发,读回所有片停拍时的计数值。正确结果应是经延迟补偿后完全一致或只差已知常数;若差值随机变化,先查时基是否同源,再查补偿表。
- TDM 重组自检:在已知割边上注入固定变化 pattern(如行走的 0/1),重组还原后与激励逐位比对,验证时隙表版本正确——这一步能在调真实芯片前抓住"比特流与时隙表不匹配"这类静默错误。
- 长跑漂移测试:连续自由计数数小时后再触发对齐,检查时间戳有无累积偏差;有偏差说明存在异步域或计数器回绕处理缺陷,不能带去调偶现 bug。
- 最后才加载真实 DUT:前六步全绿再跑芯片逻辑。此后 DUT bring-up 中任何"触发没反应"都可以明确归因到 DUT,而不是同步基础设施。
换板或重新走线后,第 3、4 步必须重跑(延迟标定变了)。把这套自检做成平台固件一键脚本、结果存档(农场里多块板轮换时这是可追溯性的前提,F2/F3 主题)。
八、一个真实跨片死锁的同步定位过程
把机制串成一次完整排查,最能说明为什么同步系统是调试能力的前提。现象:多片原型上跑网络流量,约半小时后全系统停摆,软件报所有通道超时;单片局部 trace 看各自的状态机都"卡在等对端"。
- 先确认同步基础设施健康:跑上电自检七步(上一节),触发网络在线数、延迟标定、TDM 重组 pattern 全绿——排除"触发没传到/时隙表错"这类平台噪声,确保接下来看到的是真问题。
- 设跨片组合触发:利用触发网络的 AND/OR,条件定为"片 2 的入队 valid=1 且片 3 的出队 ready=0,持续超过 50 万周期"。这个条件在任何单片上都表达不了,是多片死锁的直接刻画。
- 全局停采、对齐回采:命中后三片同时停,以全局周期计数为轴对齐,各取触发前 200 万周期;片内全速的握手信号 + 跨片信号按时隙表重组并扣除固定 TDM 延迟。
- 读因果链:对齐后的波形显示片 3 的 credit 返回通道在某次 TDM 帧里与一个高优先级流的请求发生反压,credit 停在片间;片 2 因 credit 耗尽停止入队;而片 3 的仲裁器在"等一个永不到达的片 2 新请求"状态——典型的跨片信用与仲裁环路死锁,根因是两个反压条件跨片后形成了循环等待。
- 证据移交:导出已对齐的 FSDB(含全局时基和版本指纹),附最小流量脚本和复现概率(约 1/40,半小时窗口),交仿真加断言复现;修复后用同一触发条件在原型连续运行 80 次窗口未再命中(按 43 原型结果可信度分级 可签核/可决策/仅参考与报告规范给置信度陈述)。
这个案例的关键不是 bug 本身,而是:**没有跨片组合触发就刻画不了条件、没有全局时基和 TDM 重组就拼不出因果、没有先做同步自检就会浪费大量时间怀疑平台。**这三样正是 80/81 篇存在的理由。
九、时间对齐的精度边界:能对齐到什么程度
全局时基解决的是"逻辑周期对齐",但它有明确的精度边界,理解边界才能正确使用 trace:
- 能做到的:在同一个 DUT 时钟(或其整数分频/同源时钟)域内,各片事件对齐到确定的逻辑周期;TDM 割边信号在扣除固定调度延迟后与片内信号在同一逻辑时间比较;跨板经确定性触发路径对齐到"同一停采屏障"。这对功能/死锁/性能相对分析完全够用。
- 做不到(也不该宣称)的:它不提供物理纳秒级对齐——板内时钟树偏斜、跨板电缆延迟、各自 I/O 单元的传播差都在亚周期量级且不被逻辑计数器感知;因此不能用多片 trace 去判建立保持违例、亚稳态窗口或真实电气时序,那是 STA 和示波器的领域(43 原型结果可信度分级 可签核/可决策/仅参考与报告规范)。
- 异步域的处理:DUT 中本来就存在的异步时钟域(27 在电路仿真 ICE 与协同加速模式 接线/时钟纪律)之间没有全局周期对齐这回事,trace 只能分别打各自时基、在跨域同步点(握手/FIFO 边界)做事件关联;强行给异步信号排"先后几纳秒"是错误用法。
- 触发分辨率:组合触发条件在跨片时的判定本身要跨时钟采样,触发时刻相对真实命中可能有 1~数个周期的固定偏移——这就是为什么定位靠 pre-trigger 窗口和逻辑因果,而不是"触发那一拍"。
一句话:同步系统给你的是可复现的逻辑因果序,不是物理时间标尺。报告 trace 结论时按这个口径描述,就不会越界。
十、工程纪律小结
- 时钟与触发网络在平台准备期(不是 bring-up 期)就按 68 篇 harness 设计好、单独验证;
- 触发走确定性、已时序收敛的专用路径,不与 TDM 通用互联混用;
- 每个构建产物都要带上与其一致的 TDM 时隙表和延迟标定,纳入版本五件套;
- trace 工具链默认输出"已重组、已对齐、已扣除 TDM 延迟"的全局时间轴波形,把复杂度留在平台侧而不是让每个调试者手工对;
- 跨片接口信号默认进可观测池(80 篇),因为多片死锁几乎都体现在割边握手。
与系列及现有篇目的链接
- 调试 IP 与预算:39 商用原型调试 IP 深跟踪/动态探针/可见性预算、45 Trace 带宽与深度工程 采样/缓冲/压缩/回传管线
- 跨片机制与采集:13 跨 FPGA 互联与 TDM SerDes/跨片同步/降频、22 Gate 域信号采集 ILA/trace/带宽深度权衡、14 可观测性插桩 dont_touch/probe/可见性预算
- 时钟/版本/物理:27 在电路仿真 ICE 与协同加速模式 接线/时钟纪律、20 比特流烧录与四方版本一致 manifest/门禁、35 多 FPGA IO 引出与引脚规划 连接器/电平/SI/取舍、41 原型在 SoC 验证矩阵中的定位 用例分配/RACI/证据移交
总结
一句话总结:单 FPGA 里触发即采、波形按同一时钟天然对齐是免费午餐,多 FPGA/多板原型上则必须自建一个同步系统,因为各片是独立器件、时钟树有偏斜、触发要从产生片传播到所有片且路径长度不一、跨片信号还被 TDM 在物理上交错成时隙流、多板又叠加连接器和电缆延迟,不同步就会出现"A 停在 100 万周期、B 停在 100 万零 3 拍、C 的跨片波形读不懂",使 A 等 B、B 等 C 这类最常见的多片死锁无法定位;系统靠两大支柱——全局触发网络(每片放触发接入扇出单元,经专用 trigger crossbar/mux 互联,任一片可作触发源、支持跨片条件 AND/OR 以抓跨片死锁、统一广播停采、带优先级与屏蔽防多用户互扰)和统一时基(所有片同源时钟加分发树、每片维护全局周期计数给样本打时间戳、以全局触发为锚把各片 trace 映射到同一时间轴);触发传播不能"收到就停",要么按布线后已知的各片路径周期数做确定性延迟补偿把停点拉齐(故触发线必须走固定、时序收敛、不参与 TDM 调度的专用路径),要么先置将停采标志、等所有片到达同步屏障后在公共对齐沿统一停并用 pre-trigger 窗口补回命中点历史;TDM 跨片 trace 要用 Compiler 分区生成的同一份时隙表加全局时间戳做反交错重组,时隙表必须与比特流版本严格一致(纳入 61 篇版本五件套)否则信号张冠李戴还不报错,并扣除割边信号的固定 TDM 延迟才能与片内信号在同一逻辑周期比较,重组后导出 FSDB/VCD 与仿真 trace 叠加对账;机柜级要做独立时钟/触发分发、等长专用差分触发线、上电先跑触发网络发现与延迟标定自检再调 DUT 逻辑(否则会把"触发没传到"误诊成"DUT 没触发")、换板后重新标定;看到三片停采点差几拍先查传播延迟补偿、跨片波形周期性乱码先查时隙表版本、片内外信号差固定拍先查 TDM 延迟扣除、部分片不停先跑网络自检、长跑漂移先查是否同源时钟;纪律上时钟与触发网络在平台准备期就单独设计验证、每个构建带上匹配的时隙表和延迟标定、工具链默认输出已重组已对齐已扣延迟的全局波形、跨片接口信号默认进可观测池,把同步复杂度留在平台侧而不是让每个调试者手工对波形。