FPGA 原型验证专题 53:比特流回归与冒烟自动化农场——让每次 RTL 合入都在真硬件上自动体检
更新时间:2026-09-13。本文是模块 F(规模化、云化与工程运营) 第八篇。46 编译农场与周转时间 OOC/增量/seed 扫掠 让比特流“产得快”,47 多用户资源调度 预约/作业/租约/防误烧 让硬件“排得顺”;本篇把两者串成一条无人值守的硬件体检流水线——每次 RTL 合入,自动在真板子上验证。
一、为什么手工上板验证在规模化下必崩
- 几十人每天合入、十几分支,人工“编译→烧板→跑用例→看结果”一天做不了几次;
- 漏测是常态:某个分支改坏了 bring-up,直到几天后别人要用才发现;
- 人的判断不可追溯,“我昨天测过没问题”无法作为流片证据;
- 流片前需要的是成百上千次在真实硬件上的通过记录,不是几次手工演示。
把软件 CI/CD 思想搬到物理 FPGA 上,是规模化原型团队的必经一步(设计侧版本纪律见 47 RTL 版本管理、41 版本/IP 管理)。
二、流水线全景

①②直接复用 46 编译农场与周转时间 OOC/增量/seed 扫掠,③复用 47 多用户资源调度 预约/作业/租约/防误烧 的租约/安全烧录/远程上下电,本篇重点是④⑤。
三、分级测试金字塔(原型硬件版)
软件测试金字塔在 FPGA 上要重新定义,因为越往上越慢、越稀缺、越不能并行:
- 冒烟(smoke,分钟级,每次构建必跑):烧录后最小存活检查——时钟/PLL 锁定、复位释放、高速链路训练(PCIe 链路 up、以太网 link)、DDR 校准通过、基础寄存器读写、一个最小数据回环。冒烟不过立刻终止,不浪费后续板时;
- 功能回归(十~几十分钟,主干/每日):核心用例集——关键数据通路、接口协议、24 活动覆盖率与性能调试闭环 热点/瓶颈/回放 的 directed + 随机事务(事务由 26 事务处理器 SCE-MI 三类通道/transactor 实现 自动注入);
- 长稳/压力(小时级,夜间/周末):大流量、温度、长时间不丢包不死锁、带宽/性能计数器在阈值内(42 降频原型架构性能评估 cycle 计数/A-B/伪延迟扣除),偶现问题只在这一层暴露;
- 覆盖率驱动(按需):跑覆盖率导向的激励,统计硬件活动与场景覆盖(41 原型在 SoC 验证矩阵中的定位 用例分配/RACI/证据移交)。
原则:快速冒烟挡低级错、功能回归挡功能错、长稳压测挡偶现错,级别越高频率越低、占板越久。
四、硬件 CI 与软件 CI 的四个本质差异
直接套软件 CI 那套会踩坑:
- 板子稀缺且会坏:软件 CI 可无限开容器,硬件 CI 受真实板数约束(88 篇调度),且板卡故障会伪装成“用例失败”——要区分 DUT bug 与环境/硬件故障,连续环境性失败自动隔离该板;
- 构建以小时计:不能每次合入都全量构建。用增量/OOC 与“冒烟用精简比特流、夜间出全量”的分层(87 篇),并对触发做合并(短时间多个 commit 合并成一次构建);
- flakey(偶现失败)更普遍:时序边缘、降频伪影、接触不良都会导致“重跑就过”。绝不能简单重跑掩盖:失败自动保留现场、统计 flake 率,同一点反复 flake 升级为真问题(19 原型频率与时序收敛 TDM 降频/关键路径);
- 不能完全无状态:板是物理资源,每次跑前要冷启动/清场(48 远程实验室与 IO 重定向 虚拟前面板/远程上下电),跑后释放,保证用例不依赖“上一次残留状态”。
五、失败处理:自动留现场 + 自动 bisect
回归失败最值钱的是第一现场,自动化必须在拆现场前存证(与 51 跨团队调试闭包 DRI/分诊/证据包/bisect 同一标准):
- 失败即冻结:保存版本指纹三件套(比特流/commit/软件版本,20 比特流烧录与四方版本一致 manifest/门禁)、串口日志、关键 trace 窗口(自动触发采集,配置随仓库版本化)、板卡 ID 与温度电压、seed/分区信息;
- 自动判型:先跑环境自检(链路、电源、温度),疑似板坏则换板重跑并隔离原板,疑似设计则建缺陷单;
- 自动 bisect:对可稳定复现的失败,自动在提交区间逐版构建烧录二分,定位引入提交(硬件 bisect 慢,限定在冒烟级用例和必要时触发);
- 通知到引入 commit 的作者并自动建 51 跨团队调试闭包 DRI/分诊/证据包/bisect 的缺陷,带着证据包直接进分诊。
六、门禁阈值:什么失败阻塞什么
不是所有失败都该阻塞所有事,分层设闸:
| 层级 | 触发 | 通过标准 | 失败后果 |
|---|---|---|---|
| 静态闸门 | 每次合入 | lint/CDC/可综合 0 致命 | 阻塞合入 |
| 冒烟 | 每个主干构建 | 全过 | 阻塞镜像发布 |
| 功能回归 | 每日/里程碑 | 用例通过率 100%(已知 waiver 除外) | 阻塞 bring-up/流片节点 |
| 长稳 | 夜间/周末 | 达时长无死锁、性能达标 | 进缺陷单、限期 |
| flake 率 | 持续统计 | 超阈值即告警 | 升级为真问题 |
流片门禁:在流片前,功能回归 100% 且所有历史 flake 有结论、覆盖率达标、无未关闭的阻塞项——这条自动产出可审计的报告(41 原型在 SoC 验证矩阵中的定位 用例分配/RACI/证据移交、43 原型结果可信度分级 可签核/可决策/仅参考与报告规范),比“大家觉得测过了”可靠得多。
七、用例与配置的工程纪律
- 回归用例、trace 配置、预期结果与 RTL 同仓库版本化,保证任意历史 commit 可重建同一套体检(20 比特流烧录与四方版本一致 manifest/门禁);
- 用例无副作用、可任意顺序重复、自带清场,避免用例间状态污染;
- 新增功能必须同时新增回归用例(合入门禁卡这条),否则功能会悄悄失去保护;
- trace 配置遵循 45 Trace 带宽与深度工程 采样/缓冲/压缩/回传管线:回归默认计数器/事件聚合,只在失败时自动拉深 trace,别让每轮回归产生 TB 数据。
八、常见坑速查
- 把硬件 CI 当软件 CI 无限并行 → 受板数/故障约束,必须调度+隔离;
- 每个 commit 全量构建 → 增量/分层+触发合并;
- flakey 重跑掩盖 → 自动留证、统计 flake、反复即升级;
- 失败后板被立刻复用丢现场 → 先冻结证据再清场;
- 新功能不带回归用例 → 合入门禁强制;
- 流片靠“感觉测过” → 自动产出可审计门禁报告。
与系列及现有篇目的链接
- 上游产线:46 编译农场与周转时间 OOC/增量/seed 扫掠、47 多用户资源调度 预约/作业/租约/防误烧、48 远程实验室与 IO 重定向 虚拟前面板/远程上下电
- 测试与证据:26 事务处理器 SCE-MI 三类通道/transactor 实现、24 活动覆盖率与性能调试闭环 热点/瓶颈/回放、45 Trace 带宽与深度工程 采样/缓冲/压缩/回传管线、51 跨团队调试闭包 DRI/分诊/证据包/bisect
- 门禁规范:41 原型在 SoC 验证矩阵中的定位 用例分配/RACI/证据移交、43 原型结果可信度分级 可签核/可决策/仅参考与报告规范、20 比特流烧录与四方版本一致 manifest/门禁
- 运营配套:54 运营指标看板 利用率/TAT/flake/就绪度、55 容量规划与故障预算 MTTR/N+1/RTO-RPO
总结
一句话总结:高频迭代下手工“编译—烧板—跑用例—看结果”必然跟不上且无法作为流片证据,要把软件 CI 搬到物理硬件建无人值守的比特流回归农场——RTL 合入或定时触发后自动过①lint/可综合/CDC/约束静态闸门、②编译农场增量综合/P&R 出比特流(短时间多 commit 合并构建、冒烟用精简镜像夜间出全量,因构建以小时计不能每次全量)、③经资源调度租约安全烧录并远程上下电、④跑原型版测试金字塔:分钟级冒烟(PLL 锁定/复位/链路训练/DDR 校准/基础读写回环,不过即终止不浪费板时)挡低级错、十到几十分钟功能回归(关键通路协议、transactor 自动注入事务)挡功能错、夜间周末小时级长稳压测(大流量温度下不死锁不丢包、性能计数器达标)暴露偶现错、按需覆盖率驱动激励;硬件 CI 与软件 CI 有四个本质差异:板子稀缺还会坏(受板数约束,板卡故障会伪装成用例失败,连续环境性失败要自动隔离换板而非提设计缺陷)、构建小时级、flakey 更普遍(时序边缘/降频伪影/接触不良导致重跑就过,绝不能靠重跑掩盖,要自动留证统计 flake 率、同点反复即升级为真问题)、板有物理状态每次要冷启动清场;失败处理要在拆现场前自动冻结证据(比特流/commit/软件版本三件套、串口日志、自动触发的关键 trace 窗口、板卡 ID 温度电压、seed 分区),先环境自检判型再对可稳定复现项在冒烟用例上自动 bisect 定位引入提交并带着证据包建缺陷直接进调试闭包分诊;门禁分层——静态错阻塞合入、冒烟不过阻塞镜像、功能回归非 100% 阻塞 bring-up/流片、长稳失败进单限期、flake 超阈升级,流片前自动产出功能全过、历史 flake 全部有结论、覆盖率达标的可审计报告;用例、trace 配置、预期与 RTL 同仓版本化、用例无副作用可重复并要求新功能必须随附回归用例,回归默认计数聚合仅失败时拉深 trace,从而让每次合入都在真硬件上留下可追溯的体检记录。