
工程师调试 RTL,信号追踪是家常便饭。在 Verdi 里用 nTrace 或者直接拖拽信号,驱动和负载关系一目了然——这些都是基于设计数据库的结构化查询,因果方向天然明确。但当 AI Agent 被引入调试流程,事情就变了。AI 没有鼠标,不能操作 Verdi 的图形界面,目前最常见的做法是退化到给它用 grep。输入一个信号名,返回一堆包含这个字符串的文本行,然后让 AI 自己去猜因果关系。
grep 和 Verdi 之间,隔着一整个设计数据库的区别。XTrace(GitHub: BLANK2077/xtrace)就是在这种不对等中产生的:它要做的事,是把 Verdi 级的结构化因果信息,变成 AI Agent 可以直接消费的命令行工具。
grep 的边界:当 AI 只能看到文本
AI Agent 用 grep 查信号时,拿到的是包含该字符串的所有代码行。assign bar = foo & baz 和 wire foo; 混在一起,注释里的 // foo is used for 也一并返回。grep 不给这些行之间标注任何关系——哪一行是驱动,哪一行是负载,哪一行只是条件判断,全靠 AI 自己从文本模式里推断。
这种推断容易在三个方向上出错:
因果方向误判。在 assign bar = foo里,驱动方向是从右至左。但 AI 看的是文本共现,它有概率把bar当成foo的驱动源,方向反了。跨模块断链。不同模块中的同名信号,grep 返回的结果堆在一起。AI 很难靠文本区分它们是不是同一个物理走线,经常把本应连通的信号视为无关,或者把无关信号串成一条不存在的链路。 控制依赖遗漏。 always块中被if/case包裹的赋值,grep 可能匹配到了被赋值的信号,但条件信号和被赋值信号之间没有任何显式关联。AI 容易只追表达式右值,漏掉控制条件本身的异常,而这类遗漏在门控时钟、复位链和状态机场景中后果严重。
这些不是 AI 能力的上限问题,是输入信息的维度问题。工程师在 Verdi 里用一次 nTrace 就能得到的因果信息,到了 AI 手里被压缩成了平文本,信息损耗太大了。
XTrace 的做法:把因果关系结构化,还给 AI
XTrace 基于 Synopsys NPI,直接查询 simv.daidir 设计数据库中的语法树,把信号之间的因果连接关系提取出来,输出结构化 JSON。它不碰文本匹配,工作方式和工程师在 Verdi 里做信号追踪逻辑一致,只是把结果做成 AI 可消费的形式。
它对外提供三个核心查询能力:
driver——向上追溯驱动源。 给定一个信号,返回所有驱动它的信号列表。每条结果包含驱动信号名、源文件路径、行号、对应代码行,以及一个因果角色标记——区分连续赋值(npiContAssign)、过程赋值、还是 interface 成员引用(npiOperation)。AI 收到这份 JSON,驱动方向是显式的,不需要从 = 和 <= 的左右位置去猜。
load——向下查询负载。 给定一个信号,返回所有使用它的下游位置。这在 debug 中帮助 AI 快速评估一个异常翻转的影响范围——信号的值变了,谁会受到影响,范围多大。driver 和 load 都支持 --role 过滤(如 rhs_use、lhs_target、condition_use),以及 --no-statement-only 筛除弱定位结果。
控制依赖分析——补全条件路径。 Verilog 中大量过程赋值被 if/case 等条件包裹。当 NPI 对某条赋值返回空驱动时,XTrace 不会静默,而是自动遍历 AST,提取所有控制该赋值发生的条件信号,放入 control_dependencies 字段。这告诉 AI:这个信号之所以是这个值,不只是因为右边表达式,还因为这些条件信号当前的状态决定了走进了哪个分支。
三项能力合起来,把一条信号链路上的驱动源头、影响下游和控制条件都做了显式化。AI 拿到的不是文本片段,而是一份带因果标注的电路连接图。
针对 AI Agent 使用场景的优化
XTrace 在设计上特别考虑了 AI Agent 的调用习惯。最近一次更新引入了几个专门面向 Agent 的入口:
query 命令:一条命令完成确保和追踪。 对于 AI Agent 而言,分两步操作(先确保 Session 健康,再执行 driver/load)意味着两轮指令-响应往返。新的 query 命令将它们合并成一步:query -dbdir <path> --driver <signal> -json,内部自动完成 session ensure + trace,返回一个同时包含 session 和 trace 两段信息的 JSON。失败时输出 ok=false 和明确的 status/message,Agent 可直接据此决定重试、切换 Session 还是报告错误,不需要额外写判断逻辑。
session ensure:自动复用已有 Session。 这是 open 的智能替代版。open 每次都创建新 Session,Agent 不管理时容易累积僵死进程。ensure 的逻辑是:如果指定 daidir 已经有健康 Session,直接复用,返回 reused: true;如果 Session 不健康或不存在,才创建新的。JSON 输出包含 ok、session_id、status、reused、dbdir_path,Agent 可以据此做 Session 生命周期管理,避免重复加载设计库的冷启动成本。
signal resolve 和 signal search:解决信号路径不确定的问题。 AI 在 debug 过程中经常遇到信号名不完整的情况——只知道短名 ready,不知道完整层级路径。signal resolve 尝试按完整名解析,失败后返回候选匹配;signal search 按名称片段搜索,返回匹配列表并标注总数和截断状态。这让 Agent 在拿到模糊信号名时,可以自己找到正确的完整路径,而不是向工程师追问层级信息。
配合这些工具,XTrace 还提供了一份可直接放入 Agent system prompt 的 SKILL.md 文件,定义了 XTrace 的能力边界、典型调用流程和异常处理策略。
对 AI Agent 的实际提升
工程师用 Verdi 追踪信号,获取因果信息几乎是零延迟的——按一下快捷键,驱动和负载就列在窗口里。AI 没有这种交互界面,它的效率高度依赖输入信息的质量和结构。XTrace 在这个方向上补上了差距。
debug 流程的步骤压缩。 AI 不再需要花数轮对话去确认谁是驱动、谁是从属、跨模块同名信号是不是同一个。一条 query --driver 命令完成的事,用 grep 可能需要 AI 做三四次“读结果→猜关系→验证”的循环。步数减少意味着响应延迟低、上下文负担轻,长链追踪能走到底。
因果幻觉的有效控制。 AI 在缺少因果标注时,容易把文本上的相邻当成逻辑上的相关。XTrace 把因果方向写进 JSON 的 role 字段(driver/load/rhs_use/lhs_target/condition_use)后,这类混淆从输入侧就被消除了。控制依赖的显式提取也减少了忽略条件路径的概率——对于需要精确分析 always 块内部逻辑的场景,这一点尤其关键。
token 经济的改善。 grep 返回的原始文本包含注释、空行、无关匹配,AI 要花 token 去过滤和消化。XTrace 的 JSON 输出是纯净的结构化数据,信号信息密度高、不带噪音,在大量信号被查询的长 debug 会话中节省的 token 是可观的。--limit 参数还可以进一步控制返回数量,避免信息过载。
持久化架构:Session 生命周期管理
XTrace 采用了经过 xwave 验证的 Client-Server + Daemon 架构。通过 tools/xtrace-env open -dbdir /path/to/simv.daidir 创建 Session,fork 出独立 Daemon 进程,加载 simv.daidir 设计库,语法树上下文常驻内存。后续所有 driver/load 查询走 Unix Domain Socket 连接到这个热进程,毫秒级返回。
多 Session 并发管理,支持不同模块分开加载,AI 通过 Session ID 切换。Session 生命周期管理配套完整:session list 查看所有 Session,session doctor 健康诊断(区分 registry 缺失、进程退出、socket 缺失、连接失败、PING 失败等多种异常状态),session kill 手动关闭,以及僵死 Session 的自动检测和回收。daidir 指纹校验机制还记录了加载时的规范路径、mtime、大小、设备号和 inode,后续诊断可检测设计库是否已变更。
持久化的意义在于保证 AI 在多步追踪中维持推理节奏。如果每查一个信号都要重新解析设计库、重建语法树上下文,秒级的冷启动延迟会不断打断 AI 正在拉的因果链,追踪深度一上去就绷不住。热 session 保证了一次加载、全程可用,AI 的“查一步、看一步、再查一步”可以不带停顿地走完。
与 xwave 的配合
之前实践过用 xwave 让 AI Agent 做波形侧的 debug——信号快照、事件统计、总线与内部信号交叉验证。xwave 覆盖的是时序行为维度:信号在什么时间变成了什么值。XTrace 覆盖的是结构因果维度:信号的值是谁决定的、谁在用它、受什么条件控制。
在实际的 debug 流程中,两者自然衔接。AI 用 xwave 锁定异常时间点和异常信号,然后用 XTrace 对异常信号做驱动溯源和控制依赖分析,把现象和根因之间的因果逻辑拉通。AI 可以在两个工具中无缝切换查询。工程师在 Verdi 里能做的硬件直觉,正通过命令行工具逐条搬给 AI。
夜雨聆风