AI Agent 与 dide-mcp 工具详解
6295 字约 21 分钟
2026-11-08
dide-mcp 是直接编译内置于 Digital IDE 后端可执行文件(digital-server / digital-server.exe)中的 Model Context Protocol (MCP) 服务。通过将 Codex、Claude Code、Claude Desktop、Cursor 等支持 MCP 协议的 AI Agent 接入 dide-mcp,AI 可以直接读取和修改工程结构、运行交互式仿真、编排与自动比对 VS Code 波形视图、编辑 Block Design 框图、调用 Vivado / Efinity 工具链,以及对波形与 RTL 执行静态/动态根因分析(如 X 态追踪与驱动溯源)。
章节快速导航:架构与工作模式 · 安装与连接配置 · 工程与工具链工具 (10 个) · VS Code 波形编排与自动比对 (4 个) · Block Design 框图与 IP 配置 (7 个) · 波形与 RTL 根因分析 (34 个) · Efinix 独立工具 (7 个) · 典型 AI 协同工作流
操作演示
视频通过真实 dide-mcp 工具调用驱动 VS Code,按五个大标题分段演示。手动打开文件均从左侧资源管理器点击。
| 视频时间点 | 演示内容 |
|---|---|
| 00:00 | 从 Output 找到后端与端点,配置客户端并验证连接 |
| 00:48 | 读取工程层次,自动打开 RTL 网表 |
| 01:42 | 运行交互仿真,创建虚拟总线、分组并定位首个差异 |
| 02:41 | 生成诊断 VCD,跨模块追踪数值与 X 根因并写入 Analysis |
| 04:19 | 添加 IP、端口与连线,自动布局、适应画布并保存框图 |
示例在 1250 ns 注入最低位翻转(期望值 123,实际值 122),随后使用 Icarus Verilog 生成的 VCD 追踪数值与多驱动冲突引起的 X 态,最后完成 .bd 框图的组件添加、自动布局与保存。
提示:实时波形视图与离线诊断会话中的信号层次路径可能不同,调用时请直接使用各工具返回的信号路径。
1. 运行架构与两种工作模式
digital-server dide-mcp 使用标准 MCP stdio 传输协议对外向 AI 客户端暴露工具,内部根据启动参数支持两种工作模式:
AI Agent (Codex / Claude / Cursor)
│ MCP stdio
▼
digital-server dide-mcp --connect <endpoint.json>
│ 本地回环 WebSocket (ws://127.0.0.1:<port> + 64位十六进制 Token 认证)
▼
VS Code Digital IDE 守护进程 (Daemon)
├─ WaveToolRuntime(波形/Slang 静态网表会话、Efinix 独立任务)
└─ WaveUiBridge ──► VS Code 扩展主进程
├─ 工程管理 / Architecture / Netlist Webview
├─ 实时交互式仿真 & 内置 Waveform Webview
├─ Block Design (.bd) 可视化编辑器
└─ HARD (Vivado / Efinity) & SOFT (XSCT) 会话管理器| 工作模式 | 启动命令参数 | 暴露工具数量 | 适用场景与能力范围 |
|---|---|---|---|
| 插件桥接模式(推荐) ( --connect) | digital-server dide-mcp --connect <endpoint.json> | 全部 62 个工具 | 连接到当前打开的 VS Code 工程窗口。每次工具调用都会动态重读 endpoint.json(扩展重载后无需重启 AI 客户端即可自动恢复连接)。同时支持操控 VS Code 界面(工程、仿真、实时波形 Webview、Block Design、HARD/SOFT 构建)与底层波形/RTL 根因分析。 |
| 独立无头分析模式 (Standalone) | digital-server dide-mcp [--session <dir|session.json>] | 43 个工具 (34 个波形/RTL 分析 + 7 个 Efinix CLI + 2 个任务查询) | 无需打开 VS Code,可在纯命令行或 CI 环境中直接对 .vcd / .fst / .ghw / .fsdb 波形文件与 RTL 文件清单执行静态扇入扇出分析、信号跳变查询、双波形 diff、X 态根因追踪以及 Efinix 命令行构建/烧录。 |
2. 安装与客户端连接配置
2.1 一键 AI 自动安装提示词(推荐)
在当前工程目录下启动你的 AI 客户端(如 Codex、Claude Code 或 Cursor),直接复制并发送以下提示词,AI 会自动从本机或 Remote SSH 环境中定位 digital-server 与活动窗口的 endpoint.json 并完成注册验证:
请为当前 Digital IDE 工程安装并配置 dide-mcp,并完成连接验证。
请直接从当前终端环境、工作目录、VS Code 扩展目录和全局存储目录中自动定位文件,不要让我手动填写客户端名称、工程路径或可执行文件路径:
1. 确定当前工程目录(优先使用当前工作目录,或查找包含 `.vscode/property.json` 的目录)。
2. 自动查找当前系统已安装的 Digital IDE 扩展内置 `digital-server` 可执行文件:
- 优先使用当前窗口 Output → Digital-IDE 输出的 `Digital Server executable` 路径;若日志不可用,再到 `~/.vscode/extensions/sterben.fpga-support-*` 或 `~/.vscode-server/extensions/sterben.fpga-support-*` 查找匹配当前窗口的 `resources/server/<platform>/<arch>/digital-server`(Windows 下为 `digital-server.exe`)。
- 注意:`dide-mcp` 直接内置在 `digital-server` 中,严禁执行 `npm install` 或 `pip install`。
3. 自动查找当前打开工程对应的 `endpoint.json`:
- 在 VS Code 全局存储目录(Linux: `~/.config/Code/User/globalStorage/sterben.fpga-support` 或 `~/.vscode-server/data/User/globalStorage/sterben.fpga-support`;Windows: `%APPDATA%/Code/User/globalStorage/sterben.fpga-support`;macOS: `~/Library/Application Support/Code/User/globalStorage/sterben.fpga-support`)或最近的 VS Code `logs/` 下 `output_logging_*/` 日志中检索 `endpoint.json`。
- 若存在多个 `endpoint.json`,选择与当前工程工作区匹配的文件(不要在输出中打印认证 token)。
4. 自动判断你自身所属的 MCP 客户端并写入配置:
- 启动命令(command):查找到的 `digital-server` 绝对路径。
- 启动参数(args):`["dide-mcp", "--connect", "<endpoint.json绝对路径>"]`。
- 若当前客户端为 Codex,执行:`codex mcp add dide-mcp -- "<digital-server绝对路径>" dide-mcp --connect "<endpoint.json绝对路径>"`,再运行 `codex mcp get dide-mcp` 核对。
- 若为 Claude Code / Cursor / Claude Desktop 等其他客户端,按对应配置文件格式写入上述 `command` 和 `args`。
5. 验证连接:
- 若当前客户端支持热加载 MCP 工具,直接调用 `list_wave_views` 和 `get_project` 验证连接与工程匹配(只读验证,不要修改代码或启动仿真/构建)。
- 若需重开会话才能加载新注册的 MCP 服务,请打印已写入的配置路径,并提示我重开会话后调用 `list_wave_views` 与 `get_project`。2.2 手动配置方法
- 在 VS Code 中获取路径:打开目标工程文件夹,确认
digital-ide.mcp.enabled为true(默认开启)。打开底部 Output → Digital-IDE 通道,复制以下两行输出的绝对路径:Digital Server executable: /path/to/digital-serverDIDE MCP ready ... Endpoint: /path/to/endpoint.json
- 注册到 Codex CLI:
codex mcp add dide-mcp -- "/absolute/path/to/digital-server" dide-mcp --connect "/absolute/path/to/endpoint.json" codex mcp get dide-mcp - 其他支持
mcpServersJSON 的客户端配置示例(具体文件位置与外层字段以客户端要求为准;合并时保留其他服务):{ "mcpServers": { "dide-mcp": { "command": "/absolute/path/to/digital-server", "args": [ "dide-mcp", "--connect", "/absolute/path/to/endpoint.json" ] } } }- 安全与生命周期提醒:
endpoint.json内含 64 位随机十六进制认证令牌,后端仅监听127.0.0.1回环地址;请勿公开令牌或提交此文件至 Git。客户端及桥接进程须能访问后端所在主机的路径。使用--connect时保持对应 VS Code 工程窗口打开。
- 安全与生命周期提醒:
3. 模块一:工程管理、仿真控制与工具链构建(10 个工具)
以下工具由插件桥接层(dide_tools.json)提供,直接驱动当前 VS Code 窗口中的 Digital IDE 扩展与 digital-server 语言服务。耗时操作会立即返回 task_id,通过 get_task 轮询真实完成状态与产物。
工具名称 (name) | 必填参数 (required) | 可选参数 (properties) | 功能说明与行为边界 |
|---|---|---|---|
get_project | 无 | workspace_path: stringinclude_hierarchy: boolean (false)top: string | 读取当前工作区的 .vscode/property.json、HDL 模块摘要计数以及 HARD / SOFT 会话状态。默认仅返回摘要以避免大工程刷屏;设 include_hierarchy=true 可获取完整模块例化树(可通过 top 指定根节点,不会修改工程配置)。只读操作。 |
manage_project | action | workspace_path: stringaction: "generateProperty" | "setSrcTop" | "setSimTop" | "addFile" | "delFile" | "setLibraries"top: stringfile_path: stringkind: "src" | "sim"project_name: stringtoolchain: "xilinx" | "efinity"mode: "remote"common: string[]custom: string[] | 异步执行工程配置操作并返回 task_id(需调用 get_task 查询结果):- generateProperty:初始化 .vscode/property.json(传入 project_name、toolchain);- setSrcTop / setSimTop:设置设计或仿真顶层模块名(传入 top);- addFile / delFile:向 files.src / files.sim 添加或排除文件(delFile 仅从工程排除,绝不删除磁盘源文件);- setLibraries:更新 library.hardware.common 与 custom 引用列表。 |
filelist | action, file_path | workspace_path: stringaction: "import" | "export"file_path: stringkind: "src" | "sim"scope: "src" | "sim" | "all"apply: boolean (false)relative_paths: boolean | 导入或导出 .f / .fl / .filelist 清单(返回 task_id):- import:默认 apply=false 仅做解析预览;显式设 apply=true 才会将解析出的源文件、includeDirs 和 defines 合并写入 property.json。 |
open_netlist | file_path, module_name | workspace_path: stringmode: "before" | "after" | "RTL" | 使用内置 Yosys 将指定源文件中的 module_name 渲染并打开在 VS Code 逻辑网表 Webview 中(返回 task_id)。 |
validate_toolchains | 无 | workspace_path: string | 调用扩展的 Validate Configured Toolchains 校验当前 settings.json 中显式配置的仿真器与厂商工具版本(返回 task_id)。 |
start_simulation | file_path, module_name, backend | workspace_path: stringbackend: "iverilog" | "verilator" | "cxxrtl" | "vcs" | "modelsim" | "questa"dry_run: boolean | 编译并启动指定 testbench 模块的交互式仿真,自动打开 VS Code 内置波形 Webview 并预运行初始时间窗。返回 task_id,通过 get_task 获取编译结果与生成的 view_id。dry_run=true 仅生成命令计划而不实际执行。 |
control_simulation | action | view_id: string(缺省为当前激活波形)action: "status" | "run_for" | "pause" | "stop"duration_ns: integer (≥1) | 控制已挂载到 VS Code 波形窗口的实时交互仿真器: - run_for:推进指定纳秒时长(需传入 duration_ns);- pause / stop:请求暂停或终止仿真会话;- status:回读仿真器的真实运行状态与当前时间戳。 |
run_toolchain | domain, action | workspace_path: stringdomain: "hardware" | "software"action: "launch" | "refresh" | "build" | "synth" | "impl" | "bitstream" | "simulateCli" | "simulateGui" | "gui" | "exit" | "gdbStop"dry_run: boolean | 驱动 HARD Options 或 SOFT Options 厂商工具链会话(返回 task_id):- hardware 支持:launch、refresh、build、synth、impl、bitstream、simulateCli、simulateGui、gui、exit;- software 支持:launch、build、exit、gdbStop。- 安全限制:出于硬件安全考虑,板卡烧录( program)与 Flash 擦写不在该工具中暴露。 |
get_task | task_id | task_id: string | 查询异步任务(manage_project、start_simulation、run_toolchain、validate_toolchains、filelist、open_netlist、configure_block_ip(validate))的执行状态(running / completed / failed / cancelled)、耗时、生成产物路径及 stdout / stderr 日志尾部。 |
cancel_task | task_id | task_id: string | 请求取消正在执行的可取消任务(如 HARD / SOFT 构建任务),随后通过 get_task 确认后台清理完成。 |
4. 模块二:VS Code 实时波形视图控制与自动比对(4 个工具)
以下工具(mcp_vscode_tools.json + show_waveform_analysis)允许 AI 直接操控用户在 VS Code 中看到的内置波形查看器,实现自动上轨、进制转换、虚拟总线拼接、期望/实际信号自动比对标红、定位首个错误点并写入分析报告:
工具名称 (name) | 参数说明 | 核心功能与典型用途 |
|---|---|---|
open_vscode_waveform | file_path?: string | 在 VS Code 内置波形查看器中打开指定的 .vcd / .fst / .ghw / .dws 文件(省略 file_path 则聚焦当前已打开的波形窗口),返回 view_id 与当前真实渲染状态。 |
get_vscode_waveform_state | view_id?: string | 读取指定(或当前激活)VS Code 波形窗口的完整状态:已上轨信号路径、显示进制、颜色、分组(groups)、虚拟总线(buses)、主光标位置(cursor)、视口范围(viewport)、比对高亮区间及可用面板。 |
configure_vscode_waveform | - view_id?: string- signals?: Array<{ path, format?: "binary"|"octal"|"hex"|"unsigned"|"signed", color? }>(最多 256 项)- groups?: Array<{ id, name, members: string[] }>- buses?: Array<{ id, name, members: string[], format? }>(members 按 MSB→LSB 排列,至少 2 项)- comparison?: { expected: string, actual: string, focus_first_difference?: boolean }- clear_comparison?: boolean- cursor?: { time: string, unit: "s"|"ms"|"us"|"ns"|"ps"|"fs" }- viewport?: { from: string, to: string, unit }- annotation?: string(最长 4000 字符) | 一键配置 VS Code 波形调试现场并返回执行后的真实状态: 1. 轨道与总线编排:按 signals 列表设置显示轨道、进制与颜色,构建 buses(虚拟拼接总线)和 groups(折叠分组);2. 硬件信号自动比对( comparison):指定两个已显示的信号路径或虚拟总线 ID(expected 与 actual),前端会自动计算全时间轴差异区间并标红;默认 focus_first_difference=true 会自动在第一个不一致时刻插入 Marker,并将黄色主光标与视口居中缩放到该故障点;3. 撰写诊断说明( annotation):将纯文本分析结论写入波形窗口右侧的 Analysis 侧栏面板。 |
show_waveform_analysis | view_id?: string | 展开并显示当前 VS Code 波形窗口右侧可折叠的 Analysis(分析说明) 侧栏面板(对应命令面板的 Digital IDE: Show Waveform Analysis)。 |
signals 会替换当前显示布局;配置 groups 或 buses 时必须同时提供 signals。只改光标/注释可省略 signals,保留已有轨道。返回的首个差异位于 state.comparison.first_difference(含 time 与 unit),不是 first_difference_time。这些调用不会自动保存 .dws,需在界面中主动保存。
5. 模块三:Block Design 可视化设计与 IP 配置(7 个工具)
针对 .vscode/property.json 中配置了支持 Block Design 的工具链(如 "toolChain": "xilinx" 下的 .bd 文件),AI 可通过以下工具(mcp_block_tools.json)在 VS Code 的可视化框图编辑器中检索 IP、添加模块与端口、连线、自动布局、配置并校验 IP 参数。
- 乐观锁安全机制(
expected_revision):所有修改类工具(edit_block_design、configure_block_ip、save_block_design)均要求传入最新一次读取或编辑返回的expected_revision字符串;若用户在界面上同时做了手动修改导致版本号变化,工具会拒绝覆盖以保护用户未保存的更改。
工具名称 (name) | 必填参数 (required) | 功能与支持的操作类型 |
|---|---|---|
get_block_design_capabilities | 无(可选 workspace_path) | 在规划框图设计前首先调用:查询当前工程 toolChain 支持的框图后端、文件扩展名(如 .bd)、可用编辑操作(edit_operations)以及组件标识格式(component_id_format)。 |
open_block_design | file_path | 打开已有的框图文件,或当 create=true(需同时提供 name)时新建空白框图并在 VS Code Block Design 编辑器中打开(绝不覆盖已有文件),返回初始状态与 revision。 |
get_block_design_state | file_path | 读取已打开框图的实时图结构:包含所有模块实例(cell_id)、顶层端口、总线接口(@bus:<id>)、坐标尺寸、连线关系、本地诊断与当前 revision。 |
get_block_ip_catalog | file_path | 离线检索当前工具链与工程 IP_REPO 中的可用 IP 目录(不启动重量级厂商进程):支持按关键字 query 分页搜索(offset、limit),或传入特定 component_id(Xilinx 下为 VLNV,如 xilinx.com:ip:processing_system7:5.5)获取其默认端口、总线接口与参数模板。 |
edit_block_design | file_path, expected_revision, operation | 对活动框图执行单步图编辑(保持未保存状态且支持撤销),返回更新后的状态、revision 与 changed_id。operation.type 支持以下 9 种操作:- "add_ip":按 component_id 添加 IP 实例(指定 name,可选坐标 x, y 与层次 scope_path);- "add_port":添加顶层端口或总线接口(指定 name, direction: "input"|"output"|"inout", 可选 width, interface_id, role: "master"|"slave", x, y);- "connect":连接引脚或总线接口(指定 source_id, source_port, target_id, target_port,可选 net_name;总线接口使用 @bus:<id>);- "rename":重命名节点或端口(id, name);- "move":移动节点坐标(id, x, y);- "remove":删除指定节点、端口或连线(id);- "auto_layout":执行全图自动布局与正交布线;- "undo" / "redo":撤销或重做上一步操作。 |
configure_block_ip | file_path, expected_revision, cell_id, action | 读取、修改或校验框图中某个 IP 实例(cell_id)的参数:- action: "inspect":离线读取参数元数据与当前值(不保存文件);- action: "apply":将字符串键值对 values 写入当前实例并保存草稿;- action: "validate":调用配置的厂商验证器(如 Vivado)校验参数与依赖并返回 task_id,通过 get_task 查询校验结果。保存操作会重置编辑器的撤销历史。 |
save_block_design | file_path, expected_revision | 将当前框图及布局 sidecar 文件保存并重新解析,返回 saved: true 与更新后的 revision(如需执行厂商参数校验,可配合调用 configure_block_ip(action="validate"))。 |
6. 模块四:离线波形查询与 RTL 根因追踪(34 个工具)
以下 34 个工具(兼容 wave-mcp 协议契约)既可在 --connect 模式下使用,也可在无 VS Code 的独立命令行模式下使用。它通过内置的 Slang SystemVerilog/Verilog 静态分析器构建模块实例树与驱动映射表(maps.json),并结合高性能 FST / VCD / GHW / FSDB 波形读取引擎,支持从“现象(某时刻信号值错误或出现 X/Z 态)”自动沿组合/时序逻辑向后回溯出根因代码位置。
6.1 会话初始化与波形格式转换(7 个工具)
在调用下方 6.2–6.4 节的数据查询工具前,必须先通过 prepare_session、open_static_session 或 open_session 初始化一个分析会话:
工具名称 (name) | 关键参数 | 功能说明 |
|---|---|---|
prepare_session | out_dir, wave_path, top?, filelist? / filelist_path?, incdirs?, defines?, session_id?, fst_path?, mode?, fsdb_scopes?, fsdb_signals_file? | 使用波形文件(.fst / .vcd / .ghw / .fsdb)和完整 RTL、头文件目录与宏定义创建分析会话,构建静态驱动映射(按需将 VCD/FSDB 转为索引 FST),写出 session.json 并激活会话。 |
open_static_session | out_dir, top?, filelist / filelist_path, incdirs?, defines? | 创建纯静态 RTL 分析会话(无需波形文件),用于查询模块层次、端口连接、静态驱动源与扇入/扇出关系。 |
open_session | session_path, session_id? | 直接打开已生成的 session.json(或包含 session.json 的目录)恢复会话。 |
session_info | session_id? | 查看当前活动会话的顶层模块、波形时间范围、时间精度(timescale)、模块与文件数量以及一致性告警。 |
close_session | session_id? | 关闭并释放指定的分析会话。 |
convert_vcd_to_fst | vcd_path, fst_path?, mode?, parallel? | 将 VCD 转为索引 FST;mode 可选 speed、balanced 或 size。 |
convert_fsdb_to_fst | fsdb_path, fst_path?, scopes?, signals_file? | 将 .fsdb 波形转换为 .fst 文件(支持按层次 scopes 或信号列表过滤)。 |
6.2 设计层次与源文件查询(8 个工具)
工具名称 (name) | 关键参数 | 功能说明 |
|---|---|---|
list_modules | name_contains?, session_id? | 按名称子串筛选模块定义。 |
list_child_instances | instance_full_path?, number_of_levels?, max_scopes?, filter_noise?, session_id? | 查询指定实例下的子层次。 |
instances_of_module | module, session_id? | 查找指定模块的例化路径。 |
instances_of_module_matching | module, string_in_instance_name, session_id? | 按模块及实例名子串筛选例化路径。 |
scope_info | scope_full_path, session_id? | 查询实例作用域信息。 |
list_files | session_id? | 列出当前会话包含的全部 RTL 源文件路径。 |
find_files | file_short_name, return_exact_names?, session_id? | 根据文件短名查找会话中的 RTL 文件。 |
modules_in_file | full_file_path, session_id? | 查询指定文件中的模块定义。 |
6.3 信号数值查询与双波形比对(6 个工具)
时间查询使用对应参数名传入带单位的字符串(如 "1250ns"、"250ps");不要把不同工具的 time_point、time_as_string 等参数混用。
工具名称 (name) | 关键参数 | 功能说明 |
|---|---|---|
list_signals | instance_full_path, filter_by_name?, filter_by_type?, max_signals?, aggregate_buses?, underscore_style?, session_id? | 列出实例内信号,可按名称与类型过滤。 |
signal_info | full_path, session_id? | 查询信号信息。 |
signal_value_at | full_path, time_as_string, session_id? | 查询指定时刻的信号值,例如 time_as_string="1250ns"。 |
signal_values | full_path, max_number_of_values?, session_id? | 获取信号跳变序列。 |
signal_values_in_range | full_path, start_time_as_string, end_time_as_string, max_number_of_values?, session_id? | 查询时间窗口内的信号值。 |
diff_waveforms | fst_a, fst_b, scope?, signals?, clock?, after? | 比较两份 FST 波形文件,返回最早分歧时刻与覆盖信息;支持限制作用域、指定信号列表、按时钟上升沿采样,或用 after 跳过复位阶段。 |
6.4 静态连接分析与动态驱动 / X 态根因追踪(8 个工具)
工具名称 (name) | 关键参数 | 功能说明 |
|---|---|---|
signal_connectivity | full_path, session_id? | 查询跨模块端口的信号连接。 |
signal_drivers | full_path, session_id? | 查询静态驱动与源文件位置。 |
signal_loads | full_path, session_id? | 查询读取该信号的静态负载。 |
signal_fanin | signal_path, transitive?, session_id? | 查询上游扇入,可选择传递查询。 |
active_drivers | signal_full_path, time_as_string, session_id? | 结合波形判断指定时刻的有效驱动;多驱动冲突可返回 driver_conflict。 |
driver_contributors | driver_unique_id, session_id? | 根据驱动查询返回的唯一标识读取贡献源,不接受 signal / time 参数。 |
trace_value | signal_path, time_point, max_depth?, session_id? | 回溯指定时刻的数值驱动链,跨越模块端口,直到输入、常量或时序边界,并返回代码位置。 |
trace_x | signal_path, time_point, max_depth?, session_id? | 针对指定时刻出现 X/Z 未知位的信号,沿含有未知位的上游分支或多驱动冲突分支(driver_conflict)向后裁剪回溯,定位产生未知态的模块与源码位置(需四态波形与完整静态映射)。 |
6.5 独立轻量波形 Web 视图(5 个工具)
当在无 VS Code 的独立模式下运行 dide-mcp 时,可使用以下工具在本地启动轻量级浏览器波形查看服务(最多同时维护 8 个视图;在 VS Code 插件桥接模式下,推荐优先使用第 4 节的 open_vscode_waveform / configure_vscode_waveform):
open_wave_view、update_wave_view、get_view_state、list_wave_views、close_wave_view
7. 模块五:Efinix 独立构建与烧录工具(7 个工具)
dide-mcp 同时集成了面向 Efinix Trion / Titanium FPGA 的独立命令行工具集,无需打开 VS Code 即可执行接口生成、综合布局布线与板卡编程(接口生成、构建与板卡操作返回 task_id 并通过 get_task 查询结果;toolchain_path 直接返回路径):
工具名称 (name) | 必填参数 (required) | 可选参数 | 功能说明 |
|---|---|---|---|
efinity_interface_generate | 无 | config, defaults, pins, output_dir, package | 根据配置或 efinity.defaults.toml + pins.toml 生成 Efinity 接口约束与工程描述产物。 |
efinity_flow | project, stage, efinity_home, work_dir, timeout | stage: "map" | "pnr"options: string[] | 调用原厂 efx_run 执行 map(综合)或 pnr(布局布线),在 get_task 中返回退出码、完整日志路径与时序/资源报告路径(支持 cancel_task 终止进程组)。 |
efinix_read_idcode | serial, frequency_hz, timeout_ms | — | 通过指定 USB JTAG 序列号读取板上 Efinix 芯片的硬件 IDCODE。 |
efinix_program_sram | serial, frequency_hz, timeout_ms, idcode, bitstream | dry_run: boolean | 校验 IDCODE 并将比特流写入 Titanium FPGA SRAM(dry_run=true 仅校验输入与 IDCODE 而不实际烧写)。 |
efinix_deconfigure | serial, frequency_hz, timeout_ms, idcode | dry_run: boolean | 校验 IDCODE 并将 Titanium 置于 PROGRAM 去配置状态。 |
efinix_program_flash | serial, frequency_hz, timeout_ms, idcode, image, bridge, sram, readback | confirm_flash: booleandry_run: boolean | 烧写 Titanium SPI Flash 镜像、回读校验并恢复 SRAM(必须显式传入 confirm_flash=true 才会真正执行擦写)。 |
toolchain_path | name | name: "riscv-wch-elf-gdb" | "riscv-wch-elf-nm" | "riscv-wch-elf-gcc" | 查找并返回本地缓存的 WCH RISC-V 工具链可执行文件绝对路径。 |
8. 典型 AI Agent 协同工作流
接入 dide-mcp 后,可在自然语言对话中让 AI Agent 组合调用上述工具完成仿真比对、根因追踪与框图设计:
场景一:自动运行仿真、比对黄金信号并在 VS Code 波形中定位首个 Bug
对话指令示例:
“请读取当前工程,用已配置的仿真后端运行
user/sim/compare_tb.sv的compare_tb;把期望与实际数据按无符号十进制上轨,组合{inject_fault, rst_n}虚拟总线并分组,比较期望与实际,定位首个差异。再使用同一 RTL 生成的诊断 VCD 回溯根因,写入 Analysis。”
工具调用步骤:
get_project(include_hierarchy=true)→ 核对工程与模块层次;open_netlist的异步结果通过get_task确认。start_simulation→ 轮询get_task获取view_id;用control_simulation(action="run_for", duration_ns=2000)推进,并用status确认真实状态。- 从
get_vscode_waveform_state读取可用信号路径,再调用configure_vscode_waveform配置signals、buses、groups与comparison(实时视图路径与离线会话路径前缀可能不同,请分别使用对应工具返回的路径)。 - 读取
state.comparison.first_difference:定位到首个差异时刻1250 ns(差异区间1250–1350 ns),期望值为123(0x7B),实际值为122(0x7A)。 - 用 Icarus Verilog 生成 VCD 波形后,将
wave_path、RTL 文件清单与top="compare_tb"传入prepare_session,再调用trace_value(signal_path="compare_tb.dut.u_stage.actual_data", time_point="1250ns")追踪赋值来源。 configure_vscode_waveform(annotation="...")+show_waveform_analysis→ 展示最低位被inject_fault异或翻转的结论。
场景二:自动排查仿真中的 X 态(未知态)传播
对话指令示例:
“使用四态仿真生成的
conflict.vcd和相同 RTL 建立诊断会话,追踪conflict_tb.shared_bus在1250ns的 X 来源,并把证据写入 Analysis。”
prepare_session→ 关联conflict.vcd、完整 RTL 文件清单和top="conflict_tb"。trace_x(signal_path="conflict_tb.shared_bus", time_point="1250ns", max_depth=12)。- 返回
active_driver_count=2:定位出conflict_driver的两个驱动同时输出 0 与 1 产生总线冲突,据此检查使能信号的互斥条件。
场景三:AI 辅助搭建与配置 Xilinx Block Design
对话指令示例:
“创建
user/bd/mcp_demo/mcp_demo.bd,查询xlconstant,添加constant_0、输出端口led并连接constant_0.dout → led,自动布局,读取参数并将CONST_VAL设为字符串"0",最后保存设计。”
get_block_design_capabilities→open_block_design(create=true, name="mcp_demo")→get_block_design_state。get_block_ip_catalog(query="xlconstant")→ 取得xilinx.com:ip:xlconstant:1.1;编辑前读取实际节点与端口 ID。edit_block_design→ 依次执行add_ip、add_port、connect、auto_layout,每步传递最新expected_revision。configure_block_ip(action="inspect")→configure_block_ip(action="apply", values={"CONST_VAL":"0"})→save_block_design。- 确认返回
saved=true、dirty=false,并生成.bd与.layout.json文件。如需进一步执行厂商参数校验,可调用configure_block_ip(action="validate")并通过get_task查询校验结果。