3. Agilex配置与启动测试

Agilex 器件属于 SRAM 型 FPGA,掉电后配置数据即丢失,因此每一次上电都必须重新把配置比特流(.rbf/.rpd)加载进器件。量产测试中,配置与启动环节既是良率的第一道关口,也是单板测试节拍(UPH)的主要瓶颈之一。本节围绕四种配置模式、配置时间优化、启动失败诊断以及量产配置流程自动化展开,重点说明"怎么接、怎么算、怎么判、怎么自动化"。

一、四种配置模式及其适用场景

Agilex 支持 AS(Active Serial,主动串行)、PS(Passive Serial,被动串行)、JTAG 以及 AVST(Avalon Streaming,Avalon 流接口)四类配置方式,其本质区别在于"谁提供配置时钟、谁发起配置过程"。

  • AS 模式:由 FPGA 主动从外部 QSPI/OSPI 闪存读取配置数据,FPGA 输出 DCLK 并驱动片选与数据线。适合单板独立上电自启动,是量产板卡最常用的模式。
  • PS 模式:由外部主机(如测试机、MCU、CPLD)提供 DCLK 并把数据串行送入 FPGA。适合产线由测试机统一灌装配置、需要精确控制配置时序的场合。
  • JTAG 模式:通过 TCK/TMS/TDI/TDO 走 IEEE 1149.1 状态机,可配置、可回读、可调试,是研发与失效分析的首选,但速率受 TCK 上限约束,量产节拍偏慢。
  • AVST 模式:以 Avalon-ST 接口形式接收配置数据,通常由片内 NIOS 或外部控制器通过流接口推送,适合与系统内其他逻辑共用数据通道、需要灵活分片加载的场景。

量产中常见的组合是:产线用 JTAG 做首次烧录与边界扫描测试,用 AS 做整机自启动验证,用 PS/AVST 做快速批量灌装。MSEL 引脚的电平组合决定了上电后进入哪种模式,因此 MSEL 的上下拉电阻必须在原理图阶段就固定,并在测试工装上确认其电平与目标模式一致。

Agilex 配置模式:时钟源与数据通路对比 Agilex FPGA 配置控制器 CRAM / 启动状态机 MSEL[2:0] 决定模式 AS 主动串行 QSPI/OSPI 闪存 FPGA 输出 DCLK DCLK / nCS / DATA PS 被动串行 测试机 / MCU 供时钟 DCLK 由外部驱动 DATA0 / nCONFIG JTAG TCK/TMS/TDI/TDO 可配置 / 可回读 1149.1 状态机 AVST 流接口 Avalon-ST 数据流 valid / ready 握手 data / clk / ready 启动状态判读(nSTATUS / CONF_DONE / INIT_DONE) nSTATUS 释放为高:配置未出错 CONF_DONE 拉高:比特流接收完毕 INIT_DONE:进入用户模式 nSTATUS 拉低:配置错误

二、配置时间优化:从比特流大小到实际节拍

配置时间主要由三部分构成:比特流传输时间、器件内部初始化时间、以及启动(startup)阶段等待 PLL 锁定与外部器件就绪的时间。传输时间可用下式估算:

T_transfer ≈ (Bitstream_Size_bits) / (DCLK_Frequency × Data_Width)

示例(假设值,非实测):
  未压缩 .rbf 大小      = 32 Mbit
  AS 模式 DCLK          = 100 MHz,1 bit/cycle
  T_transfer ≈ 32e6 / 100e6 = 0.32 s

  若改用 x4 宽位 AS 模式:
  T_transfer ≈ 32e6 / (100e6 × 4) = 0.08 s

由此可归纳出几条量产可用的优化手段:其一,优先使用宽位 AS(x4)或提高 DCLK 频率,但需确认闪存与 PCB 走线能支撑该速率,否则会出现 CRC 错误;其二,启用比特流压缩,Agilex 支持在 Quartus 中生成压缩 .rbf,压缩率通常可达 40%~60%,代价是器件端需要额外解压时间,需实测权衡;其三,缩短 startup 阶段,把 Release clears before tri-states、Enable user mode 等选项与外部 PLL 锁定时间对齐,避免无谓等待;其四,在产线用 PS/AVST 由测试机高速灌装,把 AS 自启动验证留到整机环节,从而把配置时间从关键路径上移走。

优化配置时间时,务必同步检查 nCONFIG 到 nSTATUS 释放的延迟、以及 CONF_DONE 到 INIT_DONE 的间隔。若只压缩传输时间而 startup 阶段仍等待 100 ms 以上,整体节拍改善有限。

三、启动失败诊断:按信号链逐级定位

启动失败在产线上表现为"板卡不工作",但根因可能分布在配置链的任意一环。建议按以下顺序排查,每一步都有明确的观测点与判据:

  1. 电源与复位:确认 VCC、VCCIO、VCCA 均在规格范围内,POR 释放后 nCONFIG 是否被正确拉高。若 nCONFIG 一直为低,器件不会启动配置。
  2. MSEL 电平:用万用表或示波器确认 MSEL[2:0] 的实际电平与目标模式一致。量产中常见的错误是上下拉电阻贴反或漏贴,导致器件进入非预期模式。
  3. nSTATUS 行为:上电后 nSTATUS 应先被拉低,配置开始后释放为高。若 nSTATUS 反复拉低,说明配置过程中出现 CRC 错误或数据不完整,应检查闪存内容、DCLK 质量与数据线完整性。
  4. CONF_DONE:若 nSTATUS 正常但 CONF_DONE 始终不拉高,说明比特流未接收完毕,重点检查比特流文件是否与器件型号匹配、闪存是否烧录成功。
  5. INIT_DONE 与用户逻辑:CONF_DONE 拉高后若 INIT_DONE 迟迟不来,通常是 startup 阶段等待 PLL 锁定或外部器件就绪超时,应检查参考时钟是否存在、PLL 配置是否合理。

为便于产线快速判断,可把上述信号链整理成一张判读表:

观测点正常表现异常表现优先排查方向
nCONFIGPOR 后为高持续为低复位电路、上拉电阻
MSEL[2:0]与目标模式一致电平错误上下拉电阻、原理图
nSTATUS先低后高并保持反复拉低比特流、DCLK、数据线
CONF_DONE配置完成后拉高始终为低比特流匹配、闪存烧录
INIT_DONE进入用户模式后拉高延迟或不来PLL、参考时钟、startup 选项

四、量产配置流程自动化

量产环境下的配置流程自动化,核心是把"烧录—配置—判读—记录"串成一条可重复、可追溯的流水线。典型做法是:测试机上电后先通过 JTAG 完成边界扫描与闪存烧录,再切换到 AS 模式让 FPGA 自启动,同时用测试机的数字通道持续监测 nSTATUS、CONF_DONE、INIT_DONE 三条信号,并把每次配置的耗时与结果写入测试记录。

下面给出一段产线脚本的示例结构(伪代码,参数为示例值):

# 量产配置自动化示例(伪代码)
set_mode(JTAG)
jtag_program_flash("agilex_top.rpd")      # 烧录 QSPI 闪存
verify_flash_checksum()                    # 校验烧录结果

set_mode(AS)                               # 切换到 AS 自启动
power_cycle()
t0 = now()
wait_signal("nSTATUS", level=1, timeout=50ms)
wait_signal("CONF_DONE", level=1, timeout=500ms)
wait_signal("INIT_DONE", level=1, timeout=1000ms)
t_config = now() - t0

if t_config <= 600ms and all_signals_ok():
    record("PASS", t_config)
else:
    record("FAIL", t_config, capture_waveform())

自动化流程中有三个容易被忽视的细节:第一,每次配置前应确保器件完成一次完整掉电,避免残留状态影响判读;第二,超时阈值要基于实测分布设定,而不是照搬手册典型值,通常取 P99 再加一定余量;第三,失败时必须自动抓取 nSTATUS、CONF_DONE、DCLK 的波形并连同工位号、时间戳一起存档,否则后续失效分析将缺少第一手证据。

量产中若发现某批次配置失败率突然升高,应优先怀疑闪存批次一致性、DCLK 走线阻抗变化以及 MSEL 电阻贴装偏移,而不是先怀疑 FPGA 本身。配置链上的无源器件往往是批量问题的真正来源。