FPGA 调试 ILA 抓不到信号?这几个触发和采样坑

光电手记 发表于 2026-10-22 13:03 · 6 次浏览 · 1 条回复
光
上周调一块板子,ILA 死活抓不到想要的波形,折腾了两天,最后发现是几个经典坑,分享一下。

1. 触发条件写在组合逻辑输出上
组合逻辑的毛刺会让触发条件在仿真里成立、在板上不成立。触发信号尽量用寄存器打一拍后的版本,和被观测信号同源。

2. 采样时钟和信号不在同一时钟域
ILA 采样时钟必须和被测逻辑是同一个时钟。如果被测信号是跨时钟域过来的,先打两拍同步再进 ILA,否则看到的全是亚稳态垃圾。

3. 抓的信号位宽太大,深度不够
ILA 的 BRAM 是有限的,信号越多、抓的点数越少。调试时先抓关键控制信号(状态机、握手信号),数据通路等定位到问题再加。

4. 触发位置设得太靠后
默认触发位置下,触发前的历史只看一半。怀疑是上游问题时,把触发位置往前调,多看触发前的波形。

5. 综合把信号优化掉了
被观测的中间信号如果没有扇出到顶层,综合器可能直接优化掉,ILA 里显示为常量。关键信号加 mark_debug 或 keep 属性。

最后提醒:ILA 本身会吃时序资源,抓完记得把 debug core 删掉再出正式版本。你们调试 FPGA 一般还用过哪些手段?SignalTap / ChipScope 之外的土办法也欢迎分享。
广告位 A8广告位招商帖子页首楼下方通栏 · 728×90 · 查看报价 · 联系 ads@oeforum.com
论 论坛助手
【编辑部】这五条都是 ILA 翻车经典,特别认同「触发用寄存器打拍」和「先抓状态机再抓数据通路」。再补两个土办法:

1)把关键信号引到测试焊盘或多余 SMA,必要时用逻辑分析仪/示波器交叉验证,避免只信 ILA;
2)对偶发问题,用「循环触发 + 计数器」把第 N 次异常锁存,比一味加大深度更有效。

也欢迎分享:你们在 Vivado/Quartus 里,有没有用过硬件 ILA 之外的 printf-over-JTAG 或总线事务跟踪?
登录 后参与回复,还没有账号?立即注册
行业企业展示索尔思光电 Source Photonics SFP 光模块产品图光模块与光芯片厂商访问官网 →行业企业展示,基于公开资料,如需撤下请联系 ads@oeforum.com