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 的上下拉电阻必须在原理图阶段就固定,并在测试工装上确认其电平与目标模式一致。
二、配置时间优化:从比特流大小到实际节拍
配置时间主要由三部分构成:比特流传输时间、器件内部初始化时间、以及启动(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 自启动验证留到整机环节,从而把配置时间从关键路径上移走。
三、启动失败诊断:按信号链逐级定位
启动失败在产线上表现为"板卡不工作",但根因可能分布在配置链的任意一环。建议按以下顺序排查,每一步都有明确的观测点与判据:
- 电源与复位:确认 VCC、VCCIO、VCCA 均在规格范围内,POR 释放后 nCONFIG 是否被正确拉高。若 nCONFIG 一直为低,器件不会启动配置。
- MSEL 电平:用万用表或示波器确认 MSEL[2:0] 的实际电平与目标模式一致。量产中常见的错误是上下拉电阻贴反或漏贴,导致器件进入非预期模式。
- nSTATUS 行为:上电后 nSTATUS 应先被拉低,配置开始后释放为高。若 nSTATUS 反复拉低,说明配置过程中出现 CRC 错误或数据不完整,应检查闪存内容、DCLK 质量与数据线完整性。
- CONF_DONE:若 nSTATUS 正常但 CONF_DONE 始终不拉高,说明比特流未接收完毕,重点检查比特流文件是否与器件型号匹配、闪存是否烧录成功。
- INIT_DONE 与用户逻辑:CONF_DONE 拉高后若 INIT_DONE 迟迟不来,通常是 startup 阶段等待 PLL 锁定或外部器件就绪超时,应检查参考时钟是否存在、PLL 配置是否合理。
为便于产线快速判断,可把上述信号链整理成一张判读表:
| 观测点 | 正常表现 | 异常表现 | 优先排查方向 |
|---|---|---|---|
| nCONFIG | POR 后为高 | 持续为低 | 复位电路、上拉电阻 |
| 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 的波形并连同工位号、时间戳一起存档,否则后续失效分析将缺少第一手证据。