FPGA 原型验证专题 05:原型到硅后衔接 pre/post-silicon 协同/errata
本文是 FPGA 原型验证专题第 05 篇。原型链路见 04 ASIC 原型验证全链路 RTL ID/GateID/层次映射,原型 bring-up 见 03 原型平台 bring-up 多片点亮/trace,片上观测见 专家 45。
一、两阶段能力对照

| 硅前(sim/emu/原型) | 硅后(真硅) | |
|---|---|---|
| 速度 | 慢 | 全速真实 |
| 可见性 | 任意信号 | 仅有意植入的钩子 |
| 迭代 | 改代码即重跑 | 月级、极贵 |
| 保真盲区 | 模拟/PHY/物理效应 | 几乎无 |
协同公式:硅前杀掉能想到的一切;硅前植入硅后的眼睛和手;硅后专打模型不真实的角落。
二、验证资产的连续性

仿真/emulator/原型 共用:激励 + 参考模型 + 自检 + 覆盖率指标
│ 打包
▼
硅后 bring-up 套件:电源时钟→JTAG/扫描→单核→总线→DDR→接口→OS
(先在 FPGA 上把这套脚本演练到熟,T0 直接执行)三、RTL 阶段就要交付的硅后能力

扫描链/边界扫描、片上 trace/事件缓冲、BIST、计数器、可控时钟/单步、调试启动模式、禁用熔丝、调试网表映射——硅后能做什么实验,取决于硅前埋了什么。
四、硅后主战场:硅前不真实的五件事
PLL/SERDES/PHY 标定;跨角点时序与 IR drop/噪声;第三方互操作;长周期软件竞态;软硬件真实交互。方法:受控实验 + trace + 固件配合,记录现象→假设→最小触发。
五、errata 闭环

登记(触发条件/影响)→ workaround(驱动/固件/熔丝)→ 原型沙箱验证 workaround → 必要时 metal spin → errata 文档随货发布 → 缺陷反哺下一版硅前计划。
六、硅后验证计划的制定:从风险清单到覆盖率模型
硅后不是“硅回来了再说”,而要在 RTL 阶段就产出一份硅后验证计划,因为大量硅后能力(观测点、调试模式、时间戳、BIST、可配置旁路)必须在设计里预埋,流片后无法补。计划的起点是结构化的风险清单:哪些问题硅前看不见或看不全(真实时序/电压/温度、模拟与 PHY、软件真实负载、极长 soak、与对端真实设备互操作),哪些是新 IP/新工艺/高时钟频率带来的未知数,按“硅前不可见程度 × 硅后失效代价”排序,决定硅后投入的优先级。
把风险映射成验证活动:时序/工艺风险 → 多颗芯片(快/慢 corner 批次)、电压频率拉偏(shmoo)、温度箱测试;PHY/模拟风险 → 眼图扫描、误码率压力、对接多种对端设备;软件负载风险 → 启动 OS、真实流量、随机/模糊(fuzz)长稳;架构死锁风险 → 极端背压、错误注入、资源耗尽测试。每项活动定义目标、通过判据、所需预埋能力和负责人。没有判据的“多跑跑”不算计划。
硅后覆盖率模型要现实:硅后不可能有仿真意义上的代码覆盖率,而要用几层替代指标——①计划覆盖率(计划中的测试项执行比例);②场景/状态覆盖率(关键状态机的状态与迁移、异常路径、错误注入组合,按一张矩阵打勾,这张表在 RTL 阶段就和验证团队共建);③电气覆盖率(频率×电压×温度的 shmoo 网格、各收发器通道、各 IO bank);④统计置信度(误码率这类指标需要样本量和时长推导,跑 1 分钟没误码不等于 BER 达标)。覆盖率数据随批次滚动,缺口驱动新增测试而不是凭感觉停测。
与硅前的衔接点要写明:哪些硅前用例/检查器/参考模型被原样带到硅后(见下节),哪些硅后发现的问题必须回灌成硅前回归用例;硅后入口/出口准则(什么质量水平才允许从仿真/emulation 转向 bring-up,什么水平才允许从 bring-up 转向量产)。计划还要包含时间盒和并行策略:硅回来后头 72 小时做什么(冒烟、生命体征、最小通路),第一周、第一月分别收敛哪些风险,多板/多团队如何并行(一个团队 bring-up 核心,一个测接口,一个跑软件栈),因为硅后阶段的日历时间极其昂贵。
七、bring-up 方法论:生命体征、二分法与科学调试
硅/板第一次回来时面对的是一个几乎不可见的黑盒,bring-up 的专业性体现在严格的顺序纪律和科学调试方法上——跳过顺序、并行改多个变量,是 bring-up 阶段拖期的头号原因。
生命体征优先(signs of life):上电时序与各路电压(先不带芯片大电流,再分级加载)、时钟(振荡器、PLL lock、参考时钟质量)、复位释放、配置/启动接口(JTAG 连通、IDCODE 正确、能 halt/读寄存器)。只有这些都对,才进入功能;在此之前不碰任何业务逻辑。FPGA 原型阶段这一步相对轻,但 ASIC bring-up 里电源/时钟问题可能直接毁片,必须严格按电源序列和电流预算监控(电流异常立即断电)。
分层点亮(layered debug):单寄存器读写 → 片上 SRAM/存储 March → 单 IP 环回 → 互连 → 端到端业务。每一层用最小确定性图案验证(固定数据、已知答案),稳定后再加复杂度;每一层只依赖已经证明为好的下层,这样新故障一定落在最新加入的层。高速接口单独走“PLL→lane 极性/交换→内部环回→外部环回→对接真实对端→误码压力”的阶梯(与 专家 39 BIST 阶梯一致)。
一次只改一个变量 + 二分法是 bring-up 的科学方法。现象可能由配置、电压、频率、温度、对端固件、比特流版本中的任意组合造成,同时改三处即使“好了”也不知道为什么。二分定位有多个维度:时间维度(git/版本二分,找第一个坏版本)、空间维度(屏蔽 IP/通道,二分坏通道范围)、参数维度(频率/电压逐档 shmoo,画出存活边界——边界形状本身指向根因:随电压改善像时序问题、随温度改善像模拟漂移、完全随机像 CDC/电源噪声)。
假设—实验—记录循环:每个调试会话先写下可证伪的假设(“DDR 训练失败是因为 VREF 偏低”)和判定实验,结果如实记录(包括否定假设的结果),维护一张 bring-up 日志:版本、配置、测量值、变更、结论。日志是多人协作和后续 errata 的基础(bring-up 期的口头知识流失极快)。用好预埋的观测能力:扫描链/边界扫描读引脚状态、片上 trace(见 专家 45)、性能计数器、温度/电压传感器;没有预埋时才上物理探头,且优先测电源和时钟。
防卡死纪律:遇阻塞先回到最近的已知良好状态;长时间无进展就换方法/换人(带新视角)或缩小复现(从系统测试缩到最小环回);区分“阻塞我的缺陷”和“可绕过缺陷”,能绕就记录 errata 继续推进其他层,把战线并行化。bring-up 经理的职责是保证阻塞可见、资源动态调配、每天有明确的下一层目标。
八、Shmoo、压力与统计:硅后质量的量化语言

硅前验证回答“功能对不对”,硅后还要回答“在物理世界的边界内有多健壮”。这需要量化方法,而不是“在实验室温度下跑通一次”。
Shmoo 测试扫描二维(常用电压×频率,也有温度×频率、时序延迟×电压)参数空间,逐点判定 pass/fail,画出存活区域。工程价值有三:①量化裕量——标称工作点距离失效边界有多远(只有 2% 电压裕量就要警惕量产离散和老化);②根因诊断——失效边界的形状指向机理(等频斜线像通用时序问题、特定频率竖线像时钟/PLL、低温反而失效像保持时间问题);③选档与降频策略——依据 shmoo 划分速度等级或确定保守工作点。Shmoo 要在多颗芯片(覆盖工艺离散)、带业务负载(空闲芯片的发热和压降都不真实)上做,并复测回归后的固件/比特流(修一个 bug 的新构建要重画关键 shmoo,确认没有吃掉裕量)。
压力测试(stress/soak)把罕见事件逼出来:最坏流量(最小包、背靠背、全通道同时翻转)、资源边界(FIFO 将满将空、描述符耗尽、地址空间首尾)、错误注入(坏 CRC、超时、链路 flap、不可纠正 ECC)、长时间运行(24/72/168 小时 soak,把老化、泄漏、计数器回绕、慢泄漏的软件 bug 逼出来)、电源压力(最低电压 + 最高温 + 最大负载同时成立的最坏角点)。压力测试必须带在线自检和不变量监控(不是跑完看结果,而是运行中断言计数器、协议不变量、数据指纹,见 专家 39 的 BIST 纪律),出错即冻结现场。
统计与样本:硅后面对的是器件总体,不是手上这一颗。结论要按样本表述:BER/MTBF 需要时长和样本量推导(测到零误码只能给出置信上界);工艺离散要看快/慢/典型多批次;老化要结合加速模型或至少高温老化(burn-in)数据;现场早期失效(浴盆曲线左端)靠量产测试和老化筛选拦截。每一个“没问题”的结论都应附带条件:几颗、什么批次、什么参数网格、多长时间。
性能也是硅后测量对象:标称吞吐/延迟在真实软件栈、真实缓存行为、真实中断负载下重测(仿真/emulator 的数字往往过于乐观);功耗在真实活动率下实测(热设计、电源规格以此为准);这些数据回流给营销规格和下一代架构,形成闭环。所有量化结果按芯片序列号/批次归档——量产问题出现时,能按批次切数据是区分“系统性缺陷”和“个别坏片”的关键。
九、Errata 闭环与量产交接
硅/板级缺陷不会全部在量产前修完(尤其 ASIC),成熟团队与不成熟团队的区别不在“有没有 errata”,而在errata 管理的纪律。
Errata 记录的最小集合:稳定可复现的触发条件(最小复现序列、涉及的模式/配置/参数边界)、影响(功能错误?性能损失?只在特定温度电压?有无数据损坏/安全后果)、根因(RTL/时序/模拟/封装/板级,定位到机制而非现象——“偶发错包”不是根因,“CDC 同步级数不足在慢 corner 下亚稳”才是)、规避方法(软件 workaround、配置/频率/电压限制、拓扑限制,规避本身要验证并计入性能账)、修复计划与落点(RTL 下一版、掩码/金属修订、固件、文档限制)、受影响版本/批次。
Workaround 工程:很多硅后缺陷靠软件/固件绕开(不用某模式、插入串行化、改初始化序列)。规避方案必须像正常功能一样过回归,并标注其性能/容量成本;规避开关要可配置且默认安全;多个 workaround 之间可能相互作用,要建组合矩阵。FPGA 平台相对幸运——大量 errata 可在下个比特流修复,但修复仍要回灌硅前全量回归(见下节),且要评估修复对时序裕量和 shmoo 边界的影响,避免“修 bug 吃掉裕量”在现场复发。
与客户/量产的接口:errata 分级(无影响/规格受限/功能受限/安全相关),对外文档与对内详细记录分开维护;销售/FAE 拿到的是“影响 + 规避 + 修复版本”的可执行信息;质量团队追踪现场返回率,把现场失效与已知 errata 匹配,识别未知问题。量产交接包(release to manufacturing)包含:通过的测试矩阵与 shmoo 数据、量产测试程序(BIST/边界扫描/ATE 程序,见 专家 39)、烧录与配置流程、已知 errata 与规避、判退标准、返修诊断指南。交接不是一次会议,而是一份双方签字、可执行的数据包。
跨项目知识资产化:每次硅后踩坑沉淀成设计检查项(CDC、复位、FIFO、PHY 适配……)进入下一代的 RTL 检查清单和评审模板;硅后根因分类按年统计,比例最高的类别就是流程改进的投资方向。做到这一步,硅后验证才从一次性救火变成组织能力。
十、典型坑与硅后准备度检查清单
典型坑:硅后能力零预埋(无 trace、无错误注入、无 BIST,回来只能盲猜);bring-up 一上来端到端,失败无法归因;同时改多个变量,“修好了但不知道为什么”;只在常温常压单板跑通就宣布成功;无 shmoo 裕量概念,量产离散和老化后失效;soak 无在线不变量检查,跑完只能证明“没死透”;BER/MTBF 用零事件下结论;errata 只在邮件里、规避无验证;硅后修复不回灌回归;bring-up 日志不留存,人员一离组知识清零;多团队抢同一板无协调,现场互相破坏。
RTL 阶段硅后准备度检查清单:①有硅后验证计划,风险清单→活动→判据→预埋能力可追溯;②每关键状态机/接口有只读状态、错误计数和复位能力;③分级环回(PMA/PCS/系统)和 BIST 可从带外口触发,结果可读、故障可定位(见 专家 39);④片上 trace/触发/时间戳预埋且非侵入(见 专家 45);⑤频率/电压可程序化扫描,温度/电压传感器可读;⑥错误注入点(坏包、超时、ECC、链路断)可用;⑦复位分级(逻辑/核/电源)定义清晰,支持优雅重启;⑧版本寄存器唯一标识 RTL/固件/配置,与构建系统绑定(见 20 比特流烧录与四方版本一致 manifest/门禁);⑨JTAG/扫描/边界扫描链路可用且系统级可达;⑩硅前测试、参考模型、检查器可在硅后复用,trace 格式共享;⑪有硅后场景/状态覆盖矩阵和 shmoo/soak 计划(多样本、角点、判据明确);⑫errata 模板、workaround 验证流程、量产交接包模板已备好。十二项在流片/冻结前逐条过账,硅后阶段才是有准备的工程战役,而不是被动的撞墙期。
十一、硅后调试工具箱:扫描、观测与可测性设计
硅后阶段内部信号不可见,调试能力几乎全部来自设计期预埋的结构。理解每类工具能回答什么问题,才能在架构阶段正确投资,而不是 silicon 回来后追悔。
扫描与边界扫描:扫描链把触发器串成可移位寄存器,测试模式下可灌入已知状态、移出内部状态,是制造测试(stuck-at/transition fault)的主力;边界扫描(JTAG TAP,IEEE 1149.1)在管脚级串联观测/驱动单元,验证焊接连通性、管脚电平、板级互连。设计时要规划扫描压缩(多条内部链压缩到少量测试脚,缩短测试时间)、安全的测试进入/退出(测试模式不得在现场误进入)、以及扫描与功能时钟的隔离。FPGA 原型没有制造测试需求,但 JTAG 访问和(ASIC 项目中的)可测性设计规则(不能有不可控/不可观测触发器、异步置复位的特殊处理)要在 RTL 冻结前由 DFT 团队评审,很多“DFT 不友好”的写法(锁存器、组合反馈、门控时钟不规范)会在末期强制返工。
片上观测结构:嵌入式逻辑分析仪/跟踪缓冲(见 专家 45 的完整方法论)、性能/事件计数器、温度电压传感器、SerDes 眼图自扫描、BIST 控制器(见 专家 39)。这些结构在硅后的价值是“无探头观测”:BGA 封装下物理探头根本够不到管脚,更不可能看到片内。关键决策是预留触发网络:多个观测点的事件能否组合触发、能否跨时钟域、触发后能否同时冻结多处缓冲——单点触发能抓的问题非常有限。
可测性设计(DFT)的系统权衡:扫描和观测结构占面积、影响时序(扫描多路器加在每个触发器的数据端)、消耗引脚和测试时间,因此要在产品早期把 DFT 面积和测试时间列入预算(ATE 按秒收费,测试时间直接是量产成本);存储器通常用专用 MBIST(内建自测,March 算法 + 冗余修复)和修复寄存器(用冗余行/列替换坏单元),这要求在复位和上电流程里安排修复加载。硅后团队与设计团队的接口是“可观测性清单”:每个关键状态机、每条跨时钟域、每个模拟宏都有对应观测/测试手段,清单在 RTL 阶段签字。把调试和测试当成与功能同等重要的需求来设计,是 ASIC 化思维与“原型思维”最大的区别。
十二、多芯片/系统级硅后:从好芯片到好系统
单芯片验证通过后,系统级 bring-up(多芯片、对端设备、真实软件栈、机箱环境)仍会暴露一整类新问题,它们不存在于任何单芯片测试计划里。
互操作问题:标准协议在边界条款上常有解释空间,自家芯片与多家厂商设备对接时才暴露(初始化顺序差异、默认值差异、对非法组合的容忍度不同)。方法是建立对端矩阵:在 bring-up 阶段尽早接入尽量多型号的交换机/PHY/存储/CPU,用协议分析仪抓真实交互,把差异回灌成仿真用例。FPGA 原型在这一阶段价值独特——发现问题可当天改协议细节再约测,ASIC 则只能靠 workaround。
系统级时序与电源:机箱内时钟分发、跨板延迟、上电顺序、背板串扰(见 专家 43)只有整机里才出现;芯片在评估板上通过的 SerDes 眼图,经过背板连接器和对端芯片后裕量可能不足,需要重新做均衡训练并把结果纳入量产配置。温度也变成系统变量:相邻板卡加热、风道受阻,芯片的实际结温与单板测试不同。软件与负载问题:真实 OS 的内存访问模式、中断分布、缓存行为、驱动并发,会暴露死锁和性能假设错误——emulator 上跑通软件不等于系统级稳定,需要在真实拓扑上做长稳和故障注入。
系统级验证同样需要“系统 BIST”:整机一键自检(各板 BIST 结果汇聚、链路拓扑核对、版本兼容矩阵,见 专家 43),这是产线和现场维修的基础。组织上,系统 bring-up 要有跨团队作战室:芯片、板级、固件、软件、对端厂商代表共享同一条时间线和同一份事件日志(统一时基的多源 trace,见 专家 45),按前述分层阶梯推进。好芯片不等于好系统,系统级是所有“各自正确”第一次真正相遇的地方。
十三、验证资产的跨阶段复用:让每个生命周期阶段喂养下一个
原型与硅后工作最容易被浪费的,是前一阶段投入巨大成本建立的测试资产。成熟团队把验证当作一条贯穿始终的流水线:仿真、emulator、FPGA 原型、硅后测试共用同一套激励、检查和协议抽象,差异主要在速度、可见性和传输后端。
可复用资产清单:事务级 BFM/驱动(同一套“发包/收包/寄存器访问”API,后端可以是仿真 DPI、emulator 协同通道、原型上的真实接口或硅后的驱动);参考模型与 scoreboard(软件算法模型在所有阶段做结果裁判);错误注入与压力场景库(坏 CRC、背压、断链、超时,在硅后变成真实注入);覆盖率/检查矩阵(硅前覆盖的状态迁移成为硅后必跑场景,硅后新发现的边界回灌硅前用例);trace 事件格式(仿真波形注释、emulator 事务日志、硅上 trace 用同一解码器,见 专家 45)。
复用的设计条件:测试与激励不能依赖仿真时间(墙钟/固定拍数假设在降速的原型和异步的真实系统上全部失效,必须改成事件驱动与状态轮询);抽象层把“字节怎么过接口”与“测试逻辑”分离,换后端只改薄薄的传输层;测试用例参数化目标速率与拓扑,使其能在不同引擎上选择子集运行。团队组织上,验证环境应由同一组人(或明确的 owner)随设计走过所有阶段,而不是仿真团队交付后由完全不同的 bring-up 团队从零开始——交接文档永远替代不了连续的上下文。
闭环纪律:硅后发现的每个根因都回答两个问题——硅前为什么没抓到(激励缺失?模型错误?不可见?),以及如何防止同类再发生(新增定向/随机用例、新增断言或结构检查、更新设计评审 checklist)。这些回灌物进入 CI(见 专家 46),让下一代芯片/下一版比特流在仿真里就先撞上这个 bug。验证资产的复用率和回灌率,比任何单阶段的覆盖率数字都更能预测团队的长期质量。原型和硅后因此不只是设计流程的终点,而是下一代设计验证知识库的起点。
十四、硅后团队与现场支持的长期机制。芯片/产品发布之后,硅后能力还要以更轻的形态长期存在:现场失效分析通道(RMA 板的故障复现、BIST 数据回收、日志与 trace 解析)、errata 监控(客户报告与已知问题的快速匹配、新未知问题的分诊)、以及补丁/缓解措施的快速评估流程。维护一套“黄金系统”——固定版本的软件、驱动、对端设备和已知良好板卡,用于复现客户问题时排除环境变量,价值极高。人员上,硅后 bring-up 经验应通过轮岗和文档回流到前端团队:亲手定位过 CDC 亚稳、DDR 训练失败、上电时序事故的工程师,做架构和评审时会天然规避这些坑。每个项目结束后的复盘应产出三类沉淀:更新后的设计检查清单(预防)、可复用的 BIST/测试 IP(工具)、以及带根因的故障案例库(教育)。当“硅后发现的问题类型”在新项目评审里被逐条对照时,组织就完成了从被动救火到主动免疫的转变,这正是把原型—硅前—硅后—现场串成闭环的最终回报。
结语:硅后验证的本质。硅后不是验证的终点或补救,而是一门在“可见性极低、改动成本极高、时间压力极大”的约束下工作的工程学科。它要求在设计还在 RTL 时就为未来的自己预留眼睛和手(观测、注入、复位、环回、版本),要求用分层、单变量、可证伪的科学方法替代猜测,要求用 shmoo、压力、多样本统计把“能不能用”变成“在边界内有多健壮”,还要求把每一次现场教训回灌成设计检查和回归用例,让组织在下一颗芯片上少踩同一个坑。仿真能力决定设计能多快做出来,而硅后能力决定这块芯片能不能真正变成可交付、可维护、可信赖的产品——两者合在一起,才是完整的硬件工程能力。
总结
硅前硅后是一条连续战线:共用测试资产、共用缺陷库,硅前在 RTL 里植入硅后的观测与控制设施,硅后聚焦模型不真实的模拟/物理/互操作问题,而 FPGA 原型在回片后继续充当 bring-up 演练场和 errata workaround 的低成本沙箱。