关于 TraceWeave
TraceWeave 是面向 RTL / SoC 仿真调试的 MCP 服务,可将编译记录、仿真日志、VCD/FSDB 波形和 RTL 源码接入 AI 助手,协助从失败仿真定位到相关时间、信号与驱动逻辑。它适合使用 Claude Code、Codex 或 Copilot 的验证工程师,并以可复查的证据支撑结论。
主要功能
- 01解析仿真日志并汇总失败信息
- 02支持 VCD、FSDB、FST 波形查询
- 03追踪信号驱动源、负载与连接路径
- 04批量检查 AHB 与 valid-ready 接口握手
- 05静态扫描常量连接、悬空输入等风险
适用场景
- 01定位仿真超时或挂起的接口与时间窗口
- 02比较两次运行的波形差异并追溯数据来源
- 03排查信号出现 X/Z 的驱动与寄存器历史
MCP 相关
TraceWeave 作为 MCP 服务运行,向 MCP 客户端暴露日志解析、波形读取、信号追踪和握手检查等工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
🐙 TraceWeave
English · 简体中文
用于基于证据的仿真调试的 MCP 服务
TraceWeave 是一款用于 RTL / SoC 调试的 MCP 服务。它将编译记录、仿真日志、VCD/FSDB 波形和 RTL 源代码连接到你的 AI 助手,帮助你从仿真失败定位到相关时间、信号和驱动逻辑。
可搭配 Claude Code、Codex、Copilot 或其他 MCP 客户端使用。用自然语言描述问题;助手会使用工具进行调查、追踪和验证,并提供可供你审查的证据。
使用场景 · 安装 · 客户端设置 · 开始调试 · 工具快速参考 · 常见问题 · 文档与反馈
使用场景
| 问题 | TraceWeave 如何提供帮助 |
|---|---|
| 仿真超时或挂起,且没有明确的起点 | 汇总失败情况并扫描接口握手,以缩小受影响接口和时间窗口的范围 |
| 记分板不匹配或不同运行结果不一致 | 比较失败记录和波形,定位观察到的差异,并追踪两侧的数据源和控制源 |
| 信号变为 X/Z | 跟踪驱动器并查看波形历史,检查寄存器是否采样并保留了未知值 |
| 打包总线难以读取,或 TL-UL 请求未完成 | 分别检查地址、数据和控制字段,然后检查请求/响应握手、延迟和完成情况 |
| 怀疑存在绑定位、未连接输入或魔数条件 | 静态扫描源代码,查找常量连接、未连接的输入和常量比较,为调查提供线索;无需运行仿真或使用波形 |
| SoC 层级很深,包含许多模块和接口 | 按需浏览层级、定位实例和源文件,并追踪驱动器、使用方和连接路径 |
| 调试假设需要证据支持 | 按周期采样并检查时序条件、握手稳定性和事务完成情况 |
支持 VCS / Xcelium / Verilator 仿真日志以及 VCD / FSDB / FST 波形。也可以查询导出的形式验证波形;目前自动发现工件仅支持 JasperGold。
Linux 上的可选 FST 支持提供发现、基本读取、固定比特选择、表达式、周期采样、协议和事务分析、跨格式比较以及 X 历史记录。摘要中列出了当前接受的工具。 信号追踪(驱动、负载和连通路径查询)默认遵循 Verdi NPI → Source Graph → 基础静态分析(Legacy Static)。它会先查询已展开的 KDB;当 NPI 不可用或无法提供可信结果时,会尝试无需商业许可证的 Source Graph,然后在支持的情况下回退到基础静态分析。
Source Graph 会将独立的结构写入器与赋值语句分别计数。所有保留的分支证据均可用;traversal 会分别报告写入器、赋值检查和证据限制。重叠的写入器属于结构证据,并不能证明观测到的值存在冲突。位级溯源会明确区分 found、proved_no_driver 和 unknown,并提供原因代码和 driver_set_complete。预算限制或不支持的写入操作都不能证明不存在驱动器。如果 Static 也无法处理结论不明确的 Source Graph 查询,有限的 Source Graph 证据和两次尝试都会保留并显示。
驱动链和溯源行在同一写入器内共享完全相同的元数据;statement_evidence 会保留每个源文件行和列。旧字段 source_line 指向第一条记录。query_instance_path 指定被查询的实例,而 resolved_instance_path 保留其历史上的头部驱动器含义。VCD 搜索会说明 direction=null 表示元数据不可用。
驱动器输出迁移: explain_signal_driver 现在默认使用 traceweave.driver.compact.v1。每个响应都包含所有保留的证据;类型化的 evidence_tables 中共享相同的语句语义,以及按顺序排列的位置/索引。旧脚本应请求 output_format="full" 以保留原始 JSON 结构和缩进,或解码响应:
from src.evidence_output import expand_compact_result
driver = expand_compact_result(text_content.text)
print(driver["driver_chain"])
仅读取 response["result"] 不会展开其中的引用。表格条目和位置出现次数都不代表写入器数量。其他工具仍保留各自的默认值和 traceweave.compact.v1 契约。不同证据仍可能产生很大的响应;此格式不保证所有客户端都能内联传递内容。
层级句柄仅存在于服务进程中。显式的驱动器 compile_context 可在 30 秒、4,096 个源文件、128 MiB 读取预算的限制下,对缺失的句柄进行一次恢复(层级设置可能更加严格)。hierarchy_recovery 会报告句柄已复用、正在重建或受阻。提供的身份令牌会重新验证;如果没有历史源指纹,恢复只能确认当前源。结构扫描仍是单独的步骤。
适用于大型设计的能力,以及经验证规模的示例:
- 按需浏览层级和源文件:服务会构建并保留层级和文件索引,然后按实例、子树或文件返回本地结果,使助手上下文中的大型 SoC 查询更易管理。层级构建和本地查询已在包含 50,500 个逻辑实例的合成设计上完成验证;初始构建仍会扫描编译记录和源文件。
- 批量握手检查:
sweep_handshakes可发现 AHB/valid-ready 接口,并检查停顿、负载稳定性,以及 valid/HTRANS 过早撤销。一个记录的设计包含 78,817 个信号,波形长 2.59 毫秒;该设计发现了 49 个候选接口,涉及 262 个时钟/协议信号;35 个接口在约 4.65 分钟内完成检查,14 个被跳过,覆盖不完整。运行时间和覆盖范围取决于波形、接口类型和资源限制。 - GiB 级日志解析:
parse_sim_log已在一个包含 2,097,152 行的 1 GiB 合成日志上完成验证,成功找到位于开头、中间和末尾的全部四个错误。
安装
需要 Python 3.11+。请选择适合你环境的安装方式:
| 安装方式 | 适用场景 |
|---|---|
| 仓库 | 已安装 Verdi 的仿真主机,用于 FSDB、Source Graph 和可选的 NPI/LSF |
| PyPI | 日志和 VCD 分析,或无需商业许可证的 Source Graph |
仓库安装
git clone https://github.com/gokeshenzhen/TraceWeave.git
cd TraceWeave
export VERDI_HOME=/path/to/verdi
bash scripts/install.sh
安装程序会准备 Python 环境、Source Graph 和 FSDB 读取器,然后检查运行时。它不会更改 shell 启动文件和 MCP 客户端配置。FSDB 支持基于 VERDI_HOME 中的 Synopsys FSDB Reader SDK 构建;TraceWeave 不会重新分发其头文件或库。FSDB Reader 的使用须遵守适用的 VC Apps Access Program Agreement(或其后续协议)。NPI 和 KDB 操作还需要使用所在站点提供的适当 EDA 运行时和许可证。
对于已有的安装,请先进行只读检查:
bash scripts/install.sh --check
PyPI 安装
python3.11 -m pip install "traceweave-mcp[source-graph]"
traceweave-mcp --doctor
如果仅需日志、VCD 和基本静态分析,请安装不带 [source-graph] 的 traceweave-mcp。PyPI 包不包含 FSDB 读取器;如需使用 FSDB,请采用仓库安装方式。
可选的 FST 读取
在 MCP 服务的 Python 环境中安装额外依赖:python3.11 -m pip install "traceweave-mcp[fst]"。对于仓库安装,请使用 .venv/bin/python -m pip install "pylibfst==0.2.1"。重新连接服务,然后检查 traceweave-mcp --doctor 或 get_sim_paths。现有的 VCD/FSDB 用户无需安装此依赖。
例如,可以这样提问:“查找 /path/to/run 下的 FST 波形,显示其摘要,查找 top.data,并读取它在 10 ns 至 20 ns 之间的跳变。”基本工具会保留 X/Z,并区分记录缺失区间与已观测值。目前不支持非零时间偏移、实数/字符串信号、外部层次文件和整个文件采用 gzip 压缩的容器。超过索引、原生内存、结果或时间限制的读取会明确停止;请缩小查询范围或使用更小的转储文件。请参阅 FST 边界和资源限制。
使用相同的分析工具检查 FST 握手、重建事务、将 FST 信号与 VCD/FSDB 进行比较,或追踪输入恢复后仍存在的早期 X。基于源代码的分析仍需满足通常的编译上下文前提。记录间隙和不完整的时钟历史仍属于不完整证据。
客户端设置
完成仓库安装后,使用绝对路径生成客户端配置模板:
| 客户端 | 生成配置模板 |
|---|---|
| Claude Code | bash scripts/install.sh --print-config claude |
| Codex | bash scripts/install.sh --print-config codex |
| Copilot | bash scripts/install.sh --print-config copilot |
这些命令只会打印模板。将输出添加到客户端的 MCP 配置中,提供所需的站点 EDA 环境变量,然后重新连接服务。完整示例请参阅客户端配置参考。
其他支持 stdio 的 MCP 客户端可以使用以下连接设置:
| 安装方式 | command | args |
|---|---|---|
| 仓库 | <absolute-repository-path>/.venv/bin/python | ["<absolute-repository-path>/server.py"] |
| PyPI | traceweave-mcp,或其绝对路径 | [] |
仅限 LSF 的 NPI 许可证
如果 Verdi/NPI 许可证仅在 LSF 计算节点上可用,请将以下设置提供给 MCP 服务进程。将 digital 替换为你的队列:
export TRACEWEAVE_NPI_EXECUTION=lsf
export TRACEWEAVE_NPI_LSF_QUEUE="digital"
客户端必须继承或显式传递这些变量。提交节点和计算节点必须能够通过相同的绝对路径访问项目文件、TraceWeave 安装目录和缓存目录。bash / tcsh 示例、客户端环境变量转发方法和验证步骤,请参阅 LSF 配置参考。
开始调试
连接后,尝试发送类似以下请求,并将路径替换为你的项目目录:
使用 TraceWeave 调查
/path/to/verif下my_case的仿真失败。从日志、设计结构和接口握手开始,然后追踪可疑信号。请在调查结果中包含时间戳、信号和源代码引用。
你也可以从一个具体问题开始:
比较这两个波形中的
tb.dut.result,并追踪两侧产生差异的逻辑。
使用深度模式扫描这份编译日志所描述的设计,查找可疑的绑定位、未连接的输入和常量比较。
助手默认按以下步骤进行调查:
- 查找本次运行的产物: 定位编译日志、仿真日志和波形。
- 建立设计上下文: 使用同一份编译日志并行构建层级结构并扫描结构风险。
- 缩小调查范围: 对失败运行解析故障,并在存在波形时扫描握手。
- 追踪并验证: 检查信号、驱动源和使用方,然后通过窗口或周期检查来验证假设。
- 修复后进行比较: 检查下一次运行中的失败记录和波形如何变化。
首次检查连接时,请让助手调用 get_sim_paths,并确认 MCP 工具调用确实能够运行。完整流程请参阅调试工作流。
如需在没有 EDA 许可证的情况下检查仓库回读,请运行
.venv/bin/python scripts/check_waveform_readback.py --work-dir /tmp/traceweave-readback-check。
该脚本通过 MCP 检查服务目录以及实际的单点/批量值,并
打印针对单独 AI 客户端冒烟测试会话的明确请求。服务端检查
无法验证 AI 客户端是否可见及是否采用模型;请参阅
回读检查流程。
查找波形差异并追踪 X/Z 来源
当两次仿真运行产生不同结果时,TraceWeave 可以比较选定的信号,定位其在时间窗口内能够确认的最早差异,并追踪两侧相关的数据、控制和 RTL 逻辑。
对于 X/Z,可以检查关注时刻的传播路径,或回看历史,确认寄存器是否采样了未知值并一直保持该值。即使输入现在已知,也可以调查更早的事件:
tb.dut.q在 36 ns 时为 X,但其输入现在已知。请检查 0 到 36 ns 的波形,检查更早的采样和保持行为,并追踪可能的来源。
结果会区分有证据支持的关系和仍需进一步调查的线索。如果缺少历史记录或结构不受支持,TraceWeave 会说明追踪停止的位置。最早记录到的异常不一定是真正的起源点。
有关工具参数和详细的支持范围限制,请参阅波形比较和 X/Z 历史追踪。
评估 SV 表达式
现有波形工具接受显式的 { "expr": "a[b] + c", ... } 输入。表达式使用 SV 优先级、位宽、符号属性和四态值;每次观测时都会重新采样索引。点查询、周期查询、跳变查询、窗口查询、握手查询、事务查询和 TL-UL 查询均与 RTL 回溯共用这一核心功能。无需添加额外的 MCP 工具。
请使用精确的 bindings 和显式的 types,或选择 typing: "wave_bits",以便将导出的向量作为无符号四态值查看。定长数组使用有界元素映射;读取公式不会取代记录的输出信号。请参阅表达式输入、示例和限制。
检查总线字段和 TL-UL 接口
当地址、数据和控制信息共享一个打包总线时,TraceWeave 可以根据与波形相匹配的源类型识别字段位置。随后,助手可以检查各个字段,减少手动查询位宽和计算偏移量的工作。如果无法自动解析,也可以提供字段到位的映射。
对于 TL-UL 接口,助手确认字段映射和时钟后,可以在指定时间窗口内检查握手停滞、请求/响应匹配、响应延迟以及未完成请求:
检查
tb.dut下的 TL-UL 接口在 10 到 20 μs 内是否存在握手停滞或未完成请求。列出相关时间和信号。
结果会说明运行了哪些检查,以及缺少哪些信息。窗口结束时仍未完成的请求并不一定是死锁,这些检查也不能替代完整的 TL-UL 协议验证。
对于较长的调试对话,可以要求输出精简证据。重复的字段映射只会显示一次,同时仍可查看检查范围、缺失证据、时间边界和后续步骤。这些波形工具默认保持原有输出;驱动程序输出按上述迁移说明处理。示例和客户端集成请参阅精简证据输出。
字段配置和详细支持限制请参阅总线字段和 TL-UL。
自定义运行时错误格式
Verilator 运行时日志
parse_sim_log(log_path=..., simulator="verilator") 可识别原生运行时断言、$error、$fatal 和 $stop,带有长度限制的 Python 回溯的 cocotb 测试失败、X-HEEP example_dma 比较结果和软件退出值,以及 OpenTitan 软件比较结果/状态失败。编译器警告和错误、ERROR:cocotb: 日志包装行、源码回显、正常的 $finish 和软件退出码 0 均会被排除。其他自定义 TB 文本需要显式的自定义模式。
除非提供 native_time_unit="ps"(或 fs/ns/us/ms/s),并有独立验证的 TB/上下文证据,否则裸原生时间戳的 time_ps=None。此设置仅适用于原生/自定义/UVM 裸仿真时间戳。显式单位优先。转换使用精确十进制运算,并将不足 1 ps 的时间向上舍入为整数 ps。周期计数、UART 行和主机墙上时钟时间不会获得波形时间戳。可选的 TraceWeave 验收观察器提供软件退出或终止锚点,而不是 RTL 中第一个出错的事务。检测到的源位置是检查器的位置,并非根本原因。在分析和快照/日志差异调用中使用相同的已验证单位设置;使用不同设置的快照无法比较。对未知时间进行分析时,会返回日志上下文,而不会查询 0ps。
Verilator 发现过程会读取有长度限制的日志头部/尾部样本,包括延迟出现的 cocotb 横幅。层次结构和结构分析需要真实的 HDL 调用(verilator --cc/--xml-only ...),并带有显式的 --top-module、执行工作目录(例如 Make 的进入目录行)以及可用的有序 -f/-F 输入。包含路径、宏和顶层参数覆盖会重放到现有的 Source Graph 前端中;C++ 文件和 .vlt 控制项不是 HDL。豁免/跟踪/优化控制项会被记录为指纹支持输入;未建模的控制项会明确列为覆盖范围排除项。缺少 HDL 命令、文件列表或顶层仍属于缺口。仅有 C++ 构建日志无法提供 HDL 上下文;不会自动恢复无关的旁置文件或供应商目录。
先运行 get_sim_paths,然后针对同一份编译日志并行运行 build_tb_hierarchy 和 scan_structural_risks,再解析/分析这次运行。带有波形的失败运行需要使用 sweep_handshakes;覆盖率为零或不完整并不能排除 OBI 故障。源代码查询使用实际展开后的 HDL 顶层路径:Verilator 波形中的合成 TOP. 前缀不是 HDL 实例(只有在确认后续部分是已编译顶层后才移除)。静态/源代码图的覆盖范围仍然有限;不会引入 Verilator NPI/KDB 后端。
parse_sim_log 已能识别标准 UVM_ERROR/UVM_FATAL 消息以及 VCS/Xcelium 断言失败,并提供通用 ERROR 回退匹配。对于项目特有的检查器、记分板或 $display 输出,请在 custom_patterns.yaml 中添加 Python 正则表达式。自定义消息不必包含 UVM_ERROR,甚至不必包含 ERROR;无需修改 Python 代码。
如果消息共用同一标签,但标签后的文本各不相同,只需匹配该标签:
MY_CHECK_FAIL @ 12.5 ns expected=0x12 actual=0x34
MY_CHECK_FAIL @ 20 ns timeout waiting for response
将默认的 patterns: [] 替换为以下内容,或将此规则追加到现有的 patterns 列表:
patterns:
- name: my_checker
severity: ERROR
regex: '^MY_CHECK_FAIL'
^ 表示行首;标签之后的内容可以变化,无需额外的正则表达式。如果时间戳或其他文本出现在标签前,请使用 regex: 'MY_CHECK_FAIL' 在行内任意位置匹配。
name用于标识失败组。severity默认为ERROR;也支持FATAL和WARNING。匹配到的自定义警告会计入运行时失败数量。description供维护者参考。regex每次匹配一行日志。使用 YAML 单引号可保留反斜杠。首先运行内置断言和 UVM 解析,然后按列表顺序应用自定义规则(第一个匹配项生效),最后使用通用ERROR回退匹配。已识别的编译/展开诊断仍会被排除。
上面的 expected=0x12 actual=0x34 格式已能自动识别,因此简单的标签规则就足够了,无需使用命名捕获组。假设你的日志使用了自己的字段名:
MY_CHECK_FAIL @ 12.5 ns want=0x12 have=0x34
regex: '^MY_CHECK_FAIL' 仍会识别错误并保留完整消息。若还要将 want 和 have 提取为期望值和实际值,请将上方规则中的 regex 替换为:
regex: '^MY_CHECK_FAIL.*want=(?P<expected>\S+)\s+have=(?P<actual>\S+)'
仓库安装默认使用根目录下的 custom_patterns.yaml。若要将项目规则保存在其他位置,或使用 PyPI 安装时,请将上面的 YAML 保存到自己的文件中,并将其绝对路径传递给 MCP 服务进程:
export TRACEWEAVE_CUSTOM_PATTERNS_FILE="/absolute/path/to/custom_patterns.yaml"
这会选择该文件而非默认自定义规则;内置格式仍然有效。MCP 客户端必须继承或显式转发该变量。更改后重启或重新连接服务,然后再次解析日志。对所选 YAML 文件的修改会在下一次调用 parse_sim_log 时加载。
工具速查
通常,你只需描述调试目标,让助手选择工具。此表按用途列出所有工具;MCP 工具定义提供参数。
| 类别 | 工具 | 描述 |
|---|---|---|
| 会话和制品 | get_sim_paths | 查找仿真用例、编译日志、运行时日志和波形 |
get_formal_paths | 查找形式验证项目、日志和导出的波形;目前支持 JasperGold | |
get_diagnostic_snapshot | 查看已收集的调试信息和未完成的步骤 | |
| 层次结构和源代码 | build_tb_hierarchy | 根据编译记录构建 RTL / testbench 层次结构视图 |
get_tb_subtree | 浏览所选实例的局部层次结构 | |
find_tb_instance | 按路径或模块名称查找实例 | |
lookup_tb_files | 在实际编译的文件集中查找源文件 | |
get_tb_file_detail | 检查源文件中定义的模块、接口和类 | |
get_tb_class_hierarchy | 浏览 UVM / SystemVerilog 类继承关系 | |
dump_tb_section | 获取完整的层次结构分析数据部分 | |
| 日志和故障 | parse_sim_log | 归类运行时故障,并提取时间戳和错误摘要 |
get_error_context | 读取错误附近的原始日志 | |
diff_sim_failure_results | 比较多次运行之间的新故障、持续故障和已解决故障 | |
analyze_failures | 结合日志和波形上下文分析一组故障 | |
analyze_failure_event | 为单个故障识别可能的实例、信号和源文件 | |
recommend_failure_debug_next_steps | 推荐调查目标和后续工具调用 | |
| 静态结构扫描 | scan_structural_risks | 静态扫描源代码中的可疑结构;语义模式会检查信号绑定、未连接输入和常量比较 |
| 信号追踪 | explain_signal_driver | 追踪信号的驱动源和相关 RTL |
find_signal_loads | 查找信号的使用端和潜在影响 | |
trace_signal_path | 查询两个信号之间的结构连接关系 | |
trace_x_source | 追踪 X/Z 传播,并检查寄存器的历史采样和保持行为 | |
| 波形查询 | get_waveform_summary | 检查波形格式、时长、时间单位和顶层模块 |
search_signals | 按名称查找完整信号路径 | |
get_signal_at_time | 读取信号在特定时间的值 | |
get_signal_transitions | 检查指定时间窗口内的信号变化 | |
get_signals_around_time | 检查选定时间点附近的多个信号 | |
get_signals_by_cycle | 在时钟沿采样多个信号 | |
| 差异和时序 | diff_first_divergence | 查找两个信号首次出现的已知值差异 |
trace_divergence | 验证波形差异,并追踪两侧相关的数据、控制和先前状态 | |
period | 检查信号周期和节奏异常 | |
verify_window | 验证波形窗口内的时序条件并返回具体证据 | |
| 协议和事务 | suggest_handshakes | 发现用于检查的 valid/ready 接口和信号组 |
suggest_protocol_bundles | 发现 AHB / APB 接口信号组 | |
sweep_handshakes | 扫描整个设计中发现的 valid/ready 和 AHB 接口,并总结异常 | |
inspect_handshake | 检查单个接口是否存在停顿、稳定性问题和握手异常 | |
reconstruct_transactions | 重建请求和响应,以检查延迟、未完成请求和顺序 | |
resolve_packed_fields | 识别打包总线字段,以便分别检查地址、数据和控制信号 | |
inspect_tlul | 检查 TL-UL 请求和响应中的握手停顿、响应延迟及未完成请求 | |
| 时间游标 | cursor_set | 为关键时间戳命名,以便在后续查询中重复使用 |
cursor_list | 列出当前会话中的时间游标 | |
cursor_delete | 移除时间游标 | |
| EDA 集成 | build_kdb | 根据编译记录构建并缓存 Verdi KDB,以供 NPI 查询使用 |
没有商业许可证,我可以使用 TraceWeave 吗?
日志分析、VCD 查询、静态结构扫描和 Source Graph 无需商业许可证。对现有波形进行直接值查询和跳变查询无需 NPI 许可证:VCD 使用内置解析器,而 FSDB 使用本地 Verdi FSDB Reader,并仍受上述协议约束。Verdi NPI 信号追踪和 KDB 构建需要相应的 EDA 环境和许可证。
能否自动恢复缺失的路径变量?
可以。你可以在尚未加载项目设置脚本的终端中使用 CLI Agent,也可以向它提供在另一个终端中启动的运行所生成的日志和波形。当 VCS 编译日志和文件列表中的值可以明确确定时,TraceWeave 能够恢复编译输入路径变量,从而支持层次结构分析、KDB 构建和 Source Graph 查询。
恢复范围仅限编译输入路径;相应的源文件和包含文件必须仍可访问。运行时的前置条件必须已具备:VERDI_HOME、已安装的 EDA 工具,以及用于 KDB 构建的许可证配置;此外,Source Graph 还需要 Python 和 pyslang 依赖项。
如何判断信号追踪的准确性?
NPI 使用与当前设计匹配的展开后 KDB;Source Graph 根据源代码构建语义连接图。在编译上下文完整、目标语义受支持,且查询覆盖完整、解析精确、没有截断的情况下,对于当前查询范围内的驱动、负载和连接路径分析,可以将结果视为精确的结构连接事实。
没有仿真结果时,可以运行静态结构扫描吗?
可以。scan_structural_risks 会执行静态源代码分析,无需运行仿真,也不会读取仿真运行日志或 VCD / FSDB 波形。当前接口需要编译/展开日志(compile_log),并要求能够访问相应的源文件和包含文件,因此可以在编译/展开后、运行仿真前使用。
静态结构扫描该如何选择 auto 或 deep?
默认的 auto 模式会运行源文本检查,并复用已有的兼容语义结果。如果需要针对常量连接、悬空输入等事实执行新的语义扫描,请让助手使用 deep。analysis_mode 参数适用于每次调用;无需更改客户端配置。发现结果仅供进一步调查:合法的固定值连接和协议常量也可能出现在结果中。
扫描没有发现问题,是否意味着设计正确?
结论取决于实际覆盖范围。信号缺失、资源限制或不受支持的结构都可能限制分析。覆盖范围为零或不完整时,即使没有发现问题,也不能证明设计没有问题。工具会报告覆盖范围和截断情况,以便助手判断是否需要缩小范围并进一步调查。
可以检查形式验证波形吗?
你可以查询导出的 VCD / FSDB 文件,并自动发现 JasperGold 产物。属性结果、轨迹分类和可达性语义必须由形式验证工具或用户提供。
独立导出文件不需要可识别的形式验证项目。发现到没有项目条目的波形时,get_formal_paths 会为现有的单点读取器和批量读取器提供简短提示;调用方负责选择波形、信号和时间戳。
设计数据在哪里处理?
文件解析和 EDA 查询在本地或配置的 LSF 计算节点上运行。返回的调试证据会进入 AI 客户端的上下文。TraceWeave 使用情况遥测默认关闭;启用后仅写入本地文件。
文档和反馈
| 了解更多 | 资源 |
|---|---|
| 调试步骤和工具协作 | 调试工作流 |
| 使用证据验证根本原因 | 调试规范 |
| 架构、后端功能和资源限制 | 架构 |
| 完整的环境配置和高级设置 | 配置参考 |
| 报告问题或提出功能建议 | GitHub Issues |
贡献前,请阅读 AGENTS.md。安装好测试依赖后,请在仓库根目录运行 python3.11 -m pytest。
TraceWeave 根据 MIT License 提供。
微信
关注微信公众号,获取项目更新和调试示例:
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。