EDA / VERDI ASSISTANT / MCP

Verdi 2026 Assistant 与 MCP 配置指南

本文面向 CAD 与设计验证人员,从 modulefile、对话模型和 Embedding 模型配置讲起,依次介绍 GUI 验证、MCP 服务、Slurm/LSF 计算节点部署,以及内置和自定义 Skills 的使用方法。

00 / BOUNDARY

版本与部署前置

适用边界:以下是围绕 Y-2026.03-SP1 系列材料整理的配置方案。具体命令、模型适配器、MCP 协议与许可证特征必须以所安装补丁版本的随包文档和厂商支持为准。本站没有完成本方案的真实 Verdi/集群验收,示例路径、队列和端口均需替换。下列查询能力也应先通过当前服务的工具列表确认。

Verdi Assistant 支持自然语言问答、命令查找与执行,并提供四类调试功能:

  • Waveform:读取 FSDB,查询信号值,统计跳变,按条件筛选波形,检测信号序列,分析时钟、跨信号延迟、短脉冲和未知值。
  • Design:搜索实例、端口和寄存器,查看源码,查询信号驱动与时钟,并进行静态 trace;加载 FSDB 后还可以按时间点做动态 trace。
  • Assertion:统计断言结果,查询断言状态,分析断言失败,动态添加断言并生成 SystemVerilog 代码。
  • Log:按行号、时间、关键字、UVM 级别和消息属性筛选仿真日志。

MCP 模式允许外部客户端调用这些功能,不打开 Verdi GUI 也能执行查询和调试分析。

部署前先确认这四项

  • 01

    版本:安装 Y-2026.03-SP1 系列,并确认补丁号与 module 名一致。

  • 02

    许可证:确认 GenAI_Verdi_BetaGenAI_VerdiAgent_Beta 已获授权。Feature 名称区分大小写。

  • 03

    模型:准备一个对话模型和一个 Embedding 模型,两者缺一不可。

  • 04

    网络:计算节点能访问模型网关;SSE 客户端能访问获配计算节点。

01 / ENVIRONMENT MODULE

modulefile

本文统一用 /eda/synopsys/verdi 作为示例根目录。modulefile 里的 Tcl 判断要加花括号;六个库目录也要各写一条 prepend-path,否则 Environment Modules 可能把后面的内容一起当成上一条命令的参数。

展开完整配置示例

本站整理的版本相关示例,尚未完成现场验收;先核对当前安装包。下载文本

#%Module1.0
proc ModulesHelp { } {
    puts stderr "Verdi Y-2026.03-SP1-1 with Assistant support"
}
module-whatis "Verdi Y-2026.03-SP1-1 + Assistant"

set tools_name_version "verdi/Y-2026.03-SP1-1"
set VERDI_HOME "/eda/synopsys/verdi"

if { ![is-loaded license/synopsys] } {
    module load license/synopsys
}

setenv VERDI_HOME $VERDI_HOME
setenv NOVAS_HOME $VERDI_HOME
setenv VERDI_ASSISTANT_ENABLE 1
setenv VERDI_AGENTIC_DISABLE_REDIRECT 1

setenv PYTHONPATH $VERDI_HOME/share/NPI/python
setenv VERDI_VCS_LIB_PATH $VERDI_HOME/share/PLI/VCS/LINUX
setenv VERDI_VCS_LIB64_PATH $VERDI_HOME/share/PLI/VCS/LINUX64
setenv VERDI_IUS_LIB_PATH $VERDI_HOME/share/PLI/IUS/LINUX
setenv VERDI_IUS_LIB64_PATH $VERDI_HOME/share/PLI/IUS/LINUX64

prepend-path PATH $VERDI_HOME/bin
prepend-path PATH $VERDI_HOME/platform/LINUX64/bin

prepend-path LD_LIBRARY_PATH $VERDI_HOME/share/PLI/VCS/LINUX
prepend-path LD_LIBRARY_PATH $VERDI_HOME/share/PLI/VCS/LINUX64
prepend-path LD_LIBRARY_PATH $VERDI_HOME/share/PLI/IUS/LINUX
prepend-path LD_LIBRARY_PATH $VERDI_HOME/share/PLI/IUS/LINUX64
prepend-path LD_LIBRARY_PATH $VERDI_HOME/share/PLI/IUS/LINUX/boot
prepend-path LD_LIBRARY_PATH $VERDI_HOME/share/PLI/IUS/LINUX64/boot

加载后检查四件事

module load verdi/Y-2026.03-SP1-1
echo "$VERDI_HOME"
test -x /eda/synopsys/verdi/bin/agentic
test -f /eda/synopsys/verdi/share/NPI/python/verdilearn/agentic/main.py
lmstat -a -c "$LM_LICENSE_FILE" | grep -E "GenAI_Verdi_Beta|GenAI_VerdiAgent_Beta"

不要只看 module load 的退出码:还要确认 agentic 入口、Assistant 的 Python 主程序和两个 License Feature。许可证值由 license/synopsys 模块维护,示例不复制任何真实服务器信息。

02 / MODEL ROUTING

模型配置

VERDI_MODEL_CONFIG 用来告诉 Verdi 到哪里读取模型配置。YAML 中必须同时写 completionembedding,两项缺一不可。两处 model_name 都要从当前 Verdi 版本的官方支持列表中选择,可在安装包 Demo 的 .supported_model.json 中核对。升级版本或补丁后,重新检查一遍清单。

配置文件只给当前用户读取。下面的域名以 example.invalid 结尾,不会解析;密钥和路由名也都是不可用的占位值。

completion:
  model_name: "gpt-4o"
  config:
    api_key: "<VIRTUAL_API_KEY>"
    base_url: "https://llm-gateway.example.invalid/v1"
    model: "virtual-completion-route"

embedding:
  model_name: "text-embedding-3-small"
  config:
    api_key: "<VIRTUAL_API_KEY>"
    base_url: "https://llm-gateway.example.invalid/v1"
    model: "virtual-embedding-route"
字段由谁解释配置规则
completion.model_nameVerdi 内部适配器必须命中当前安装包的官方白名单,不要直接写网关自定义名。
completion.config.modelOpenAI 兼容网关填写网关暴露的虚拟或实际路由名;它可以和适配器名不同。
embedding.model_nameVerdi 检索适配器同样必须命中当前版本白名单。
embedding.config.modelEmbedding 网关必须真正提供向量接口,不能拿对话路由代替。
chmod 600 /eda/synopsys/verdi/config/users/$USER/verdi_llm_config.yml
setenv VERDI_MODEL_CONFIG /eda/synopsys/verdi/config/users/$USER/verdi_llm_config.yml

官方白名单(customer_material.zip/.supported_model.json)

配置项用途支持的 model_name
completion 对话模型 gptgpt-4ogpt-4.1gpt-5.2qwen3-coder-480b-a35b-inst-fp8qwen3-235b-a22b-fp8qwen3.5-397b-a17bgemini-2.5-proclaude-sonnet-4.5claude-haiku-4.5claude-opus-4.5claude-opus-4.6
embedding Embedding 模型 text-embedding-3-smalltext-embedding-3-largenomic-embed-text-v1.5bge-large-en-v1.5gemini-embedding-001titan-embed-text-v2bge-m3
03 / GUI BASELINE

GUI 验证

对第一次部署,建议先跑 GUI,再接 MCP。GUI 能直接确认助手入口、许可证、模型连接和 Verdi 后端是否同时正常,也能观察 Waveform 操作是否同步到 nWave。

module load verdi/Y-2026.03-SP1-1
setenv VERDI_MODEL_CONFIG /eda/synopsys/verdi/config/users/$USER/verdi_llm_config.yml
srun -p <VIRTUAL_PARTITION> -x11 --pty /eda/synopsys/verdi/bin/verdi
  1. 01
    打开助手

    在 Verdi 右上角打开 Assistant 面板,先问一个不读取项目数据的能力说明问题。

  2. 02
    加载波形

    输入 Import /eda/synopsys/verdi/projects/demo/wave.fsdb,再设置 Set 1ns as the default time unit

  3. 03
    验证查询

    查询一个已知信号在已知时刻的值,并与 nWave 人工结果对照。

  4. 04
    加载设计

    输入 Import the design from /eda/synopsys/verdi/projects/demo/simv.daidir,验证实例和端口查询。

WAVEFORM

波形分析

信号值、跳变、条件筛选、序列、时钟和跨信号延迟。

DESIGN

设计分析

实例、端口、寄存器、源码,以及静态或结合波形的动态 trace。

ASSERTION

断言分析

断言状态、失败原因、动态添加断言和生成 SystemVerilog 片段。

LOG

日志分析

按行、时间、关键字、UVM 级别或结构化属性过滤仿真日志。

使用时有三点需要提前知道:较长的波形查询通常只在回复里显示摘要;Design 从编译后的 simv.daidir 进入,不是直接读一组 RTL 文件;做动态 trace 时,设计数据库和 FSDB 都要加载。

04 / MCP

MCP 服务

客户端和 Verdi 在同一台机器、同一个作业里运行,就用 stdio;客户端在登录节点、Verdi 必须跑在计算节点,就用 SSE。两种方式调用的功能相同,区别只是服务由谁启动、跑在哪里。

模式适用场景CAD 关注点
stdio客户端能直接启动 Verdi 进程,单用户、同主机或同作业环境。配置短,进程随客户端退出;环境变量必须完整传入。
SSE客户端在登录节点,Verdi 服务必须运行于 Slurm 或 LSF 计算节点。节点和端口会变化;需要作业生命周期、网络访问和运行信息文件。

stdio:每个客户端独立启动

{
  "mcpServers": {
    "verdi-assistant": {
      "command": "/eda/synopsys/verdi/bin/agentic",
      "args": [
        "mcp_verdi_assistant_agent",
        "--mcp-mode",
        "stdio",
        "--stateful-mode"
      ],
      "env": {
        "VERDI_HOME": "/eda/synopsys/verdi",
        "PYTHONPATH": "/eda/synopsys/verdi/share/NPI/python",
        "VERDI_MODEL_CONFIG": "/eda/synopsys/verdi/config/users/VIRTUAL_USER/verdi_llm_config.yml"
      }
    }
  }
}

SSE / Slurm:用 SLURM_JOB_ID 管理运行信息

展开完整配置示例

本站整理的版本相关示例,尚未完成现场验收;先核对当前安装包。下载文本

umask 077

module load verdi/Y-2026.03-SP1-1
if ($status != 0) then
    echo "ERROR: module load failed"
    exit 2
endif

if ($?VERDI_MODEL_CONFIG == 0) then
    echo "ERROR: VERDI_MODEL_CONFIG is not set"
    exit 3
endif

if (! -f "$VERDI_MODEL_CONFIG") then
    echo "ERROR: model config does not exist"
    exit 4
endif

set run_dir = "/eda/synopsys/verdi/runtime/$USER"
mkdir -p "$run_dir"
chmod 700 "$run_dir"

@ candidate = 30000 + ( $SLURM_JOB_ID % 10001 )
@ attempt = 0
while ($attempt < 200)
    set port_in_use = `ss -ltnH "sport = :$candidate" | wc -l`
    if ($port_in_use == 0) then
        setenv MCP_PORT "$candidate"
        break
    endif
    @ candidate = 30000 + ( ( $candidate - 29999 ) % 10001 )
    @ attempt++
end

if ($attempt == 200) then
    echo "ERROR: no free MCP port"
    exit 5
endif

set MCP_NODE = `hostname -f`
setenv MCP_URL "http://$MCP_NODE:$MCP_PORT/sse"
set info_file = "$run_dir/verdi-mcp-$SLURM_JOB_ID.csh"

echo "setenv MCP_JOB_ID $SLURM_JOB_ID" >! "$info_file"
echo "setenv MCP_NODE $MCP_NODE" >> "$info_file"
echo "setenv MCP_PORT $MCP_PORT" >> "$info_file"
echo "setenv MCP_URL $MCP_URL" >> "$info_file"
chmod 600 "$info_file"

cd /eda/synopsys/verdi/projects/demo
exec /eda/synopsys/verdi/bin/agentic mcp_verdi_assistant_agent \
    --stateful-mode \
    --mcp-mode sse \
    --mcp-server-port "$MCP_PORT"

SSE / LSF:用 LSB_JOBID 管理运行信息

展开完整配置示例

本站整理的版本相关示例,尚未完成现场验收;先核对当前安装包。下载文本

umask 077

module load verdi/Y-2026.03-SP1-1
if ($status != 0) then
    echo "ERROR: module load failed"
    exit 2
endif

if ($?VERDI_MODEL_CONFIG == 0) then
    echo "ERROR: VERDI_MODEL_CONFIG is not set"
    exit 3
endif

if (! -f "$VERDI_MODEL_CONFIG") then
    echo "ERROR: model config does not exist"
    exit 4
endif

if ($?LSB_JOBID == 0) then
    echo "ERROR: run this script through bsub"
    exit 5
endif

set run_dir = "/eda/synopsys/verdi/runtime/$USER"
mkdir -p "$run_dir"
chmod 700 "$run_dir"

@ candidate = 30000 + ( $LSB_JOBID % 10001 )
@ attempt = 0
while ($attempt < 200)
    set port_in_use = `ss -ltnH "sport = :$candidate" | wc -l`
    if ($port_in_use == 0) then
        setenv MCP_PORT "$candidate"
        break
    endif
    @ candidate = 30000 + ( ( $candidate - 29999 ) % 10001 )
    @ attempt++
end

if ($attempt == 200) then
    echo "ERROR: no free MCP port"
    exit 6
endif

set MCP_NODE = `hostname -f`
setenv MCP_JOB_ID "$LSB_JOBID"
setenv MCP_URL "http://$MCP_NODE:$MCP_PORT/sse"
set info_file = "$run_dir/verdi-mcp-lsf-$LSB_JOBID.csh"

echo "setenv MCP_SCHEDULER lsf" >! "$info_file"
echo "setenv MCP_JOB_ID $MCP_JOB_ID" >> "$info_file"
echo "setenv MCP_NODE $MCP_NODE" >> "$info_file"
echo "setenv MCP_PORT $MCP_PORT" >> "$info_file"
echo "setenv MCP_URL $MCP_URL" >> "$info_file"
chmod 600 "$info_file"

cd /eda/synopsys/verdi/projects/demo
exec /eda/synopsys/verdi/bin/agentic mcp_verdi_assistant_agent \
    --stateful-mode \
    --mcp-mode sse \
    --mcp-server-port "$MCP_PORT"

两种脚本的差别只在调度器提供的作业 ID 和状态命令;Verdi 启动参数、端口探测、权限和客户端接入保持一致。端口探测与进程绑定之间仍有极短竞争窗口;若日志明确提示端口占用,取消作业并重新提交。生产环境还应由集群网络策略限制谁能访问计算节点端口,而不是把“端口随机”当安全控制。

05 / OPERATIONS

集群服务运维

登录节点只负责提交作业和查看状态,Verdi MCP 服务始终跑在计算节点上。Slurm 和 LSF 的操作顺序相同;下面的分区、队列、作业号、节点和端口都是占位值。

  1. 01
    提交 Slurm 作业
    tmux new -s verdi-mcp
    srun --job-name=verdi-mcp -p <VIRTUAL_PARTITION> \
      csh /eda/synopsys/verdi/admin/start_verdi_mcp_slurm.csh
  2. 02
    提交 LSF 作业
    mkdir -p /eda/synopsys/verdi/runtime/$USER/logs
    chmod 700 /eda/synopsys/verdi/runtime/$USER/logs
    bsub -J verdi-mcp -q <VIRTUAL_QUEUE> \
      -oo /eda/synopsys/verdi/runtime/$USER/logs/lsf-%J.out \
      -eo /eda/synopsys/verdi/runtime/$USER/logs/lsf-%J.err \
      csh /eda/synopsys/verdi/admin/start_verdi_mcp_lsf.csh
  3. 03
    读取 Slurm 运行信息
    setenv MCP_JOB_ID <VIRTUAL_SLURM_JOB_ID>
    source /eda/synopsys/verdi/runtime/$USER/verdi-mcp-$MCP_JOB_ID.csh
    squeue -j "$MCP_JOB_ID"
    echo "$MCP_URL"
  4. 04
    读取 LSF 运行信息
    setenv MCP_JOB_ID <VIRTUAL_LSF_JOB_ID>
    source /eda/synopsys/verdi/runtime/$USER/verdi-mcp-lsf-$MCP_JOB_ID.csh
    bjobs -a "$MCP_JOB_ID"
    echo "$MCP_URL"
  5. 05
    从登录节点检查服务
    getent hosts compute-node.example.invalid
    curl -N --max-time 5 http://compute-node.example.invalid:32001/sse
  6. 06
    接入客户端
    {
      "mcpServers": {
        "verdi": {
          "url": "http://compute-node.example.invalid:32001/sse"
        }
      }
    }
  7. 07
    停止调度作业
    # Slurm
    scancel "$MCP_JOB_ID"
    
    # LSF
    bkill "$MCP_JOB_ID"
STATE

--stateful-mode 保留同一服务进程里已加载的设计和波形状态,不等于 GUI ChatDB 的完整对话历史。服务重启后,客户端应重新导入设计数据并恢复必要上下文。

必须重启服务的变更

  • 修改模型配置后必须重启 SSE 服务,再让 MCP 客户端重连。
  • 修改许可证、PYTHONPATH、Verdi 版本或自定义技能目录后必须重启。
  • Slurm 或 LSF 作业达到时限、节点回收或异常退出后,必须重新读取新的节点与端口。
  • 不要让客户端长期缓存旧的 SSE URL;运行信息必须和当前 MCP_JOB_ID 对应。

每次运行至少记下这些信息

记录 module 版本、作业号、计算节点、端口、启动时间、模型配置文件摘要值、发起人和停止原因。日志里不要打印 API Key;包含设计名、信号名或源码片段的对话也不要汇总到公共监控。

06 / TROUBLESHOOTING

故障排查

现象优先检查处理
License 报错module 与两个 GENAI Feature先确认许可证模块已加载,再核对基础 Chatbot 与 Agentic Feature 是否同时授权。
要求同时设置 completion 与 embeddingYAML 顶层结构补齐两节;检查空格缩进、半角冒号和配置文件权限。
model not foundmodel_name适配器名必须来自当前版本白名单;网关路由写在 config.model
SSE 连接失败作业、节点、端口、路由确认作业仍在 RUNNING,使用实际计算节点而不是 localhost,并从登录节点探活。
修改配置未生效服务进程启动时间SSE 是独立进程;停止旧作业、重新提交,再让客户端重连。
工具持续重试模型工具调用、超时与输入范围先缩小问题,确认模型支持 function calling;必要时降低最大重复次数并保留调试日志。
search_scope() 不可用版本能力边界这可能是当前 MCP 实现缺失,不要误判为许可证问题;可先用信号搜索结果反推层次。

交给验证团队前再检查一遍

  • 01

    新登录会话中,module 可重复加载和卸载,没有拼接错误。

  • 02

    GUI 能完成一次已知答案的波形查询与一次设计对象查询。

  • 03

    stdio 或 SSE 客户端能列出 Verdi 工具,并执行只读的最小查询。

  • 04

    服务可被明确停止;模型变更后重启生效;旧 URL 不再被误用。

  • 05

    页面、modulefile、日志和客户端配置均不包含真实密钥或内部 API 信息。

  • 06

    CAD 团队已写明许可证、网络、数据访问和用户隔离的责任人。

07 / SOURCE §3 · CAPABILITIES

Verdi MCP 功能

验证工程师平时要在日志、断言窗口、nWave 和设计浏览器之间来回切换。Verdi MCP 把这些重复操作分成四类工具:既可以单独查,也可以顺着已经找到的时间戳和信号继续往下追。

LOG / WHERE

Log:从哪里开始

从回归日志里找首个 UVM_ERROR、断言失败、时间戳和 reporter,先把几万行日志缩成一个可调查窗口。

ASSERTION / WHY

Assertion:为什么失败

读取断言状态和失败上下文,确认是哪条 property、哪个采样时刻、哪个前件或后件没有满足。

WAVEFORM / WHEN

Waveform:发生在什么时候

查询信号值、跳变、脉冲、序列和延迟,用明确时间窗验证日志与断言给出的线索。

DESIGN / DRIVER

Design:由什么驱动

查询实例、端口、源码和驱动链;结合 FSDB 在失败时刻做动态 trace,收敛到可疑逻辑。

一条实用的排查顺序

遇到断言或 UVM 失败,可以按 Log → Assertion → Waveform → Design 往下查。纯波形异常直接从 Waveform 开始,结构或连接问题则可以先查 Design。每一步都带上刚找到的时间戳、信号或实例,下一步才不会又从“仿真失败了”重新猜。

验证任务先查哪里继续排查时带上人工核对
夜间回归失败初筛Log首个有效错误、时间戳、测试名、reporter排除环境错误和级联报错
SVA 失败分析Assertion失败 property、采样值、相关信号核对 assertion 语义和采样域
协议时序异常Waveform最小时间窗、跳变序列、延迟或短脉冲在 nWave 复核关键边沿
X 传播或错误驱动Design活动驱动、扇入路径、源码位置判断是否属于预期 mux/复位行为

四个常用问法

Log
Find the first UVM_ERROR in /eda/synopsys/verdi/projects/demo/logs/run.log.
Return reporter, timestamp, message and 20 lines of context.

Assertion
Why did assertion demo_top.protocol_checker.req_to_ack fail at 1280ns?
Return the sampled values and the smallest set of related signals.

Waveform
Between 1240ns and 1300ns, show transitions of
demo_top.req, demo_top.ack and demo_top.reset_n.
Highlight unknown values and pulses shorter than one clock.

Design
At 1280ns, trace the active driver of demo_top.ack.
Return the instance path, source location and immediate fan-in signals.
08 / SOURCE §4 · DEMO

官方 Demo

安装包中的 customer_material.zip 不只是演示文件,更适合作为 CAD 团队的最小验收集。它包含配置模板、官方提问、示例波形、模型支持清单、自定义 Skill 样例和批处理脚本,可以用来判断一次版本或模型变更有没有破坏基本能力。

unzip -l /eda/synopsys/verdi/share/NPI/python/verdilearn/agentic/customer_material.zip

unzip -q \
  /eda/synopsys/verdi/share/NPI/python/verdilearn/agentic/customer_material.zip \
  -d /eda/synopsys/verdi/demo/customer-material
文件设计验证人员看什么CAD 团队怎么用
demo.prompt四大板块覆盖了哪些提问形式挑选稳定问题形成升级前后的冒烟测试
demo_script.sh编译、仿真、加载和批量分析顺序拆成适配本集群的受调度步骤
post_process.py批处理结果如何汇总生成结构一致的回归报告
.supported_model.json当前版本接受的适配器名称升级时校验 YAML 的 model_name
example_config.yamlCompletion 与 Embedding 结构只复制结构,不复制任何凭据或内部地址

先从 8–12 个稳定问题开始

  1. 01
    选 8–12 个稳定问题

    每个板块至少两个,答案应能从示例波形或设计中人工确认。

  2. 02
    记下应该看到什么

    不要求模型逐字一致,只检查目标对象、时间戳、数值和调用板块是否正确。

  3. 03
    固定运行条件

    记录 Verdi 补丁、模型路由、温度或网关默认参数、FSDB 与设计数据库版本。

  4. 04
    升级前后对比

    比较成功率、工具调用次数、耗时和错误类型;失败样例进入 CAD 已知问题清单。

Demo 的 test_endpoint.py 可能探测厂商专用接口。若使用通用 OpenAI 兼容网关,探活失败不必然说明 Completion 或 Embedding 配置错误;应由 CAD 管理的独立探活检查分别验证两类接口,且不要在日志中输出真实凭据。

自定义流程:先确认输入与工具契约

内置技能数量、打包格式和加载顺序没有可公开独立核验的证据,本文不据程序字符串给出固定结论。请先在获授权的安装包中查看当前版本提供的模板、用户扩展方式与工具列表;模板存在也不等于所有版本都支持相同接口。

下面是本站编写的流程说明示例,不是厂商可直接加载的 Skill 文件。先验证每个步骤可独立执行,再按当前版本支持的格式封装。

任务:根据一次断言失败定位相关信号窗口。
输入:本次日志、匹配的 FSDB 与设计数据库、断言名、时间单位。
前置:三个文件来自同一运行;当前服务确实提供所需查询工具。
1. 从日志提取断言名、失败时间和原文位置。
2. 查询同名断言;名称不唯一或时间单位不明时请求补充。
3. 在限定时间窗内查询相关信号,不扫描无关数据。
4. 返回日志位置、信号值与时间窗;将根因猜测单独列出。
失败处理:文件不匹配、工具不存在、查询超时分别报告,不能补造结果。
输出:可复核的证据表、仍未知的信息和下一步检查。

扩展到跨工具流程时,应增加作业状态、输入版本和产物关联。日志分诊、波形查询和签核结论分属不同步骤,不能用一个笼统“写 Skill”承诺完成全部验证。

10 / SOURCE §8 · EFFICIENCY

Verdi Assistant 调试提效

提问时把五件事说清楚

提问时尽量写明:对象 + 时间范围 + 条件 + 期望输出 + 验证方式。信息越具体,助手越不容易扩大 scope、猜错时间单位,返回的结果也更容易核对。

对象:demo_top.bus.data[31:0]
时间范围:1240ns–1300ns
条件:valid=1 且 ready=0
期望输出:首次发生时间、持续周期数、前后各两个采样点
验证方式:列出使用的信号全路径,并给出可在 nWave 人工复核的时间窗

交互调试按这四步走

  1. 01
    上下文一次加载

    先导入本次回归对应的 FSDB 和 simv.daidir,设置时间单位,记录 run ID;不要每个问题重新猜数据。

  2. 02
    先窄后深

    先用 Log 找首个有效失败,再用 Assertion 或 Waveform 缩小到几十纳秒,最后才做 Design trace。

  3. 03
    标准问题复用

    把频繁出现的 reset、X 传播、握手超时和断言失败写成团队 Prompt 或只读 Skill。

  4. 04
    把证据交给下一位工程师

    输出信号全路径、时间窗、采样值、源码位置、还缺什么证据以及人工复核动作,让接手的人可以继续查。

稳定的问题改用 prompt-file 批量跑

交互式 MCP 适合边看边追问,已经稳定的问题则放到仿真后的批处理中。两种方式分开使用,避免 Agent 在同一问题上反复重试。

/eda/synopsys/verdi/bin/agentic verdi_assistant \
  --verdi-args "-ssf /eda/synopsys/verdi/projects/demo/wave.fsdb -dbdir /eda/synopsys/verdi/projects/demo/simv.daidir" \
  --prompt-file /eda/synopsys/verdi/projects/demo/prompts/regression.prompt \
  > /eda/synopsys/verdi/projects/demo/reports/verdi-assistant.log 2>&1

返回 Notes继续阅读:Agent 如何进入 IC 集群