4. 触发条件设置:基本触发与高级触发

触发条件设置,说白了就是告诉逻辑分析仪「什么时候该停下来等你」。我刚开始用片上逻辑分析仪时,总觉得随便设个边沿触发就行,结果抓回来的波形要么是空的,要么是满屏无关信号。后来踩的坑多了,才明白触发条件设得好不好,直接决定调试效率。

4.1 基本触发:边沿触发与电平触发

这两种是最基础的触发方式,几乎所有逻辑分析仪都支持。我个人习惯把它们叫做「单条件触发」——只要信号满足一个条件,就立刻触发。

4.1.1 边沿触发

边沿触发检测信号的上升沿或下降沿。你指定一个信号,当它发生跳变时触发。

触发类型 触发条件 典型应用场景
上升沿触发 信号从 0→1 时钟上升沿、复位释放、握手信号 valid 拉高
下降沿触发 信号从 1→0 时钟下降沿、中断请求、错误标志置位
双沿触发 任意跳变 不确定边沿方向的调试场景
我的经验:调试时钟分频电路时,我习惯用上升沿触发抓分频后的时钟。有一次分频器输出一直没波形,我设了下降沿触发才发现——分频器把极性搞反了,上升沿变成了下降沿。边沿触发能帮你快速定位这类「信号有没有、对不对」的问题。

4.1.2 电平触发

电平触发检测信号保持高电平或低电平。它不关心跳变,只关心当前状态。

  • 高电平触发:信号为 1 时触发。常用于检测总线忙状态、FIFO 满标志。
  • 低电平触发:信号为 0 时触发。常用于检测复位有效、中断挂起。
  • 任意电平触发:信号为 1 或 0 都触发。这个用得少,但调试毛刺时偶尔有用。
注意:电平触发容易误触发。如果信号长时间保持高电平,分析仪会一直触发,导致你根本看不到想要的波形。我曾经调试一个 SPI 接口,设了高电平触发,结果 CS 信号一直拉低,分析仪死活不触发——后来才发现触发条件设反了。

4.2 高级触发:序列触发与范围触发

基本触发只能解决「有没有信号」的问题。但实际调试中,你往往需要「在特定条件下抓特定数据」。这时候就得用高级触发了。

4.2.1 序列触发

序列触发允许你设置多个触发条件,按顺序依次满足后才触发。说白了就是「先 A 再 B 然后 C,最后才停下来」。

我遇到过最典型的场景是调试 AXI 总线事务:我想抓一次写操作完成后的读响应。如果只用基本触发,要么抓到写操作,要么抓到读操作,永远看不到完整的读写交互。用序列触发就能解决:

// 序列触发配置示例(伪代码)
Trigger_Sequence = {
  Stage1: AWVALID == 1 && AWREADY == 1  // 写地址握手完成
  Stage2: WVALID == 1 && WREADY == 1    // 写数据握手完成
  Stage3: BVALID == 1 && BREADY == 1    // 写响应握手完成
  Stage4: RVALID == 1 && RREADY == 1    // 读数据握手完成 → 触发
}
序列触发的核心价值:它能帮你把「孤立的事件」串联成「完整的事务」。调试复杂协议(如 PCIe、DDR、Ethernet)时,序列触发几乎是必备技能。

4.2.2 范围触发

范围触发检测信号值是否落在某个区间内。它常用于地址总线、数据总线的调试。

范围类型 触发条件 示例
等于 addr == 0x1000 抓特定地址的访问
大于 addr > 0x2000 抓地址越界访问
小于 addr < 0x0800 抓低地址空间的访问
区间 0x1000 <= addr <= 0x1FFF 抓某个地址段的访问

我个人习惯在调试 DMA 控制器时用范围触发。DMA 搬运数据时,地址会连续递增。如果我想确认 DMA 有没有访问到非法地址,就设一个「addr > 0xFFFF」的范围触发——一旦地址越界,立刻抓下来分析。

4.3 触发位置选择策略:Before / After / Center

触发位置决定了「触发点」在捕获窗口中的位置。这个设置直接影响你能看到触发前还是触发后的数据。

触发位置选择策略示意图 捕获窗口(深度 = 1024 采样点) 触发前数据(1024 点) | 触发后数据(0 点) 触发点 Before 模式:触发点在窗口最右端 捕获窗口(深度 = 1024 采样点) 触发前数据(0 点) | 触发后数据(1024 点) 触发点 After 模式:触发点在窗口最左端 捕获窗口(深度 = 1024 采样点) 触发前数据(512 点) | 触发后数据(512 点) 触发点 Center 模式:触发点在窗口正中间

4.3.1 Before 模式

触发点位于捕获窗口的最右端。窗口内全是触发前的数据。适合你想看「触发条件发生之前发生了什么」的场景。比如检测到错误标志后,你想知道错误发生前系统在做什么。

4.3.2 After 模式

触发点位于捕获窗口的最左端。窗口内全是触发后的数据。适合你想看「触发条件发生后系统如何响应」的场景。比如你手动触发一次复位,想看复位后各模块的初始化顺序。

4.3.3 Center 模式

触发点位于捕获窗口的正中间。前后各有一半数据。这是最常用的模式,适合大多数调试场景——你既想看触发前的原因,也想看触发后的结果。

选择策略总结:
  • 找原因 → 用 Before 模式(看触发前发生了什么)
  • 看结果 → 用 After 模式(看触发后发生了什么)
  • 查因果 → 用 Center 模式(前后兼顾)
我的习惯:刚开始调试一个模块时,我默认用 Center 模式。等定位到问题的大致范围后,再根据具体需求切换到 Before 或 After。这样能避免「抓了一堆数据,发现关键信息在窗口外面」的尴尬。

4.4 触发条件设置的常见误区

  • 触发条件太宽松:设一个边沿触发就开抓,结果抓回来的波形里全是无关信号。建议先想清楚「我要看什么」,再设触发条件。
  • 触发条件太严格:序列触发设了 5 个 stage,结果等了半天也不触发。可能是某个中间条件永远不满足。我建议从 2 个 stage 开始试,逐步增加。
  • 忽略触发位置:默认用 Center 模式,但想看的信号在触发前 1000 个时钟周期——窗口深度只有 1024,触发后数据占了 512 点,触发前只有 512 点,根本不够用。这时候就该用 Before 模式。
我曾经踩过的坑:调试一个高速 SerDes 接口时,我设了上升沿触发,但抓回来的波形全是乱的。折腾了半天才发现——SerDes 的时钟是 DDR 模式,上升沿和下降沿都有数据。后来改成双沿触发,问题立刻清楚了。所以,触发条件一定要和接口协议匹配。