Vivado MCP Server — AI 驱动的 FPGA 开发助手,自动诊断 CRITICAL WARNING 并给出修复建议
Project description
vivado-mcp
精简的 MCP (Model Context Protocol) Server,通过 21 个工具 控制 Xilinx Vivado EDA。
让 AI 助手(如 Claude)能够直接启动 Vivado、执行 Tcl 命令、运行综合/实现/比特流生成等完整 FPGA 开发流程,并自动诊断 CRITICAL WARNING、验证引脚布局、结构化分析时序报告、诊断 IP 配置问题。
特性
- 21 个精简工具 — 覆盖完整 FPGA 开发流程 + 智能诊断 + IP 调试,替代 200+ 专用工具的方案
- 智能诊断 — 综合/实现后自动提取 CRITICAL WARNING,按类别聚合并给出中文修复建议(覆盖 12 种已知 warning)
- IO 验证 — 自动对比 XDC 约束与实际引脚分配,GT 端口不匹配标记为 CRITICAL
- IP 调试 — 查询 IP 所有 CONFIG.* 参数(含 GUI 隐藏参数)、对比两个 XCI 文件配置差异
- Bitstream 安全检查 — 生成比特流前自动检测 CRITICAL WARNING 并阻止(可 force 跳过)
- 结构化报告 — IO 和时序报告解析为结构化数据,便于 AI 精确分析
- 任意 Tcl 命令执行 —
run_tcl工具可执行任何 Vivado Tcl 命令 - 多会话支持 — 同时管理多个独立 Vivado 进程
- 安全设计 — 十六进制编码防 Tcl 注入、参数白名单验证
- 跨平台 — 支持 Windows 和 Linux
- 零额外依赖 — 仅依赖
mcpSDK
快速开始
1. 安装
pip install vivado-mcp
从源码安装(适合开发/贡献)
git clone https://github.com/mapleleavessssssss-wq/vivado-mcp.git
cd vivado-mcp
pip install -e ".[dev]"
2. 配置 Claude Code
将以下配置复制到 ~/.claude.json 的 mcpServers 字段中:
"vivado": {
"command": "python",
"args": ["-m", "vivado_mcp"],
"env": {
"VIVADO_PATH": "/path/to/Vivado/2024.1/bin/vivado"
},
"type": "stdio"
}
注意:将
VIVADO_PATH替换为你的 Vivado 实际路径。
- Windows:
"D:/Xilinx/Vivado/2019.1/bin/vivado.bat"- Linux:
"/opt/Xilinx/Vivado/2024.1/bin/vivado"- 也可以不设置
VIVADO_PATH,将 Vivadobin目录加入系统PATH或使用默认安装路径(自动检测)。
配置完成后重启 Claude Code,即可使用 21 个 Vivado 工具。
工具列表
会话管理
| 工具 | 说明 |
|---|---|
start_session |
启动 Vivado Tcl 交互会话 |
stop_session |
关闭指定会话 |
list_sessions |
列出所有活跃会话 |
Tcl 执行
| 工具 | 说明 |
|---|---|
run_tcl |
执行任意 Vivado Tcl 命令(最核心的工具) |
vivado_help |
查询 Tcl 命令帮助 |
项目管理
| 工具 | 说明 |
|---|---|
create_project |
创建新项目 |
open_project |
打开已有项目(.xpr) |
close_project |
关闭当前项目 |
add_files |
添加 HDL / 约束文件 |
设计流程
| 工具 | 说明 |
|---|---|
run_synthesis |
运行综合(完成后自动诊断警告) |
run_implementation |
运行实现(完成后自动诊断警告) |
generate_bitstream |
生成比特流(默认前置 CRITICAL WARNING 安全检查) |
get_status |
查询运行状态 |
program_device |
编程 FPGA 设备 |
诊断
| 工具 | 说明 |
|---|---|
get_critical_warnings |
提取并分类 CRITICAL WARNING,按 ID 聚合 + 中文修复建议 |
verify_io_placement |
对比 XDC 约束与实际 IO 布局,检测 GT 引脚交叉等严重错误 |
IP 调试
| 工具 | 说明 |
|---|---|
inspect_ip_params |
查询 IP 实例的所有 CONFIG.* 参数(含 GUI 隐藏参数),支持关键词过滤 |
compare_xci |
对比两个 XCI 文件的 IP 配置差异(纯 Python,无需 Vivado 会话) |
报告
| 工具 | 说明 |
|---|---|
report |
统一报告接口(utilization / timing / power / drc 等 11 种) |
get_io_report |
结构化 IO 引脚报告(JSON),自动判定 GT/GPIO 类型 |
get_timing_report |
结构化时序报告,含 PASS/FAIL 判定和关键路径详情 |
使用示例
基本流程
用户: 启动 Vivado 会话
AI: [调用 start_session] → 会话 'default' 已就绪
用户: 创建一个 Basys3 项目
AI: [调用 create_project(name="my_proj", directory="./my_proj", part="xc7a35tcpg236-1")]
用户: 添加这些源文件:top.v, counter.v
AI: [调用 add_files(files="./src/top.v ./src/counter.v")]
用户: 运行综合
AI: [调用 run_synthesis] → 综合完成,查看资源使用情况...
[调用 report(report_type="utilization")] → LUT: 15%, FF: 8% ...
用户: 运行实现并生成比特流
AI: [调用 run_implementation]
→ 实现完成
→ !! 发现 16 条 CRITICAL WARNING !! 建议立即运行 get_critical_warnings 查看分类详情和修复建议。
用户: 查看警告详情
AI: [调用 get_critical_warnings]
→ [Vivado 12-1411] GT_PIN_CONFLICT x16
GT端口PACKAGE_PIN约束与IP内部LOC冲突
受影响端口: rxp[0]~rxp[7], txp[0]~txp[7]
建议: 检查IP目录下GT LOC约束映射是否匹配PCB走线
用户: 验证引脚分配
AI: [调用 verify_io_placement]
→ !!! CRITICAL 不匹配(GT 高速收发器端口)!!!
rxp[0]: XDC 约束 AA4 → 实际 M6
...
用户: 修复后生成比特流
AI: [调用 generate_bitstream] → 安全检查通过,比特流已生成
IP 调试
用户: 查看 xdma_0 的 GT 相关参数
AI: [调用 inspect_ip_params(ip_name="xdma_0", filter_keyword="gt")]
→ PCIE_GT_DEVICE GTX
GT_LOC_NUM 4
...(含 GUI 中隐藏的参数)
用户: 对比两个 XCI 配置有什么区别
AI: [调用 compare_xci(file_a="golden.xci", file_b="suspect.xci")]
→ PF0_DEVICE_ID: A=9024 | B=9038
LINK_SPEED: A=5.0_GT/s | B=8.0_GT/s
LANE_REVERSAL: A=false | B=true
任意 Tcl 命令
用户: 查看所有端口的属性
AI: [调用 run_tcl(command="foreach p [get_ports] { puts \"$p: [get_property PACKAGE_PIN $p]\" }")]
架构
Claude Code ──(stdio)──▶ FastMCP Server
│
SessionManager
├─ "default" ──▶ vivado -mode tcl (subprocess)
└─ "session2" ──▶ vivado -mode tcl (subprocess)
核心通信协议:使用 catch + UUID sentinel 模式可靠地收发命令和输出。
用户命令通过十六进制编码后传输,确保任何内容都不会突破 Tcl 解析边界。
开发
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytest
# 代码检查
ruff check src/ tests/
文档
许可证
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vivado_mcp-0.1.0.tar.gz.
File metadata
- Download URL: vivado_mcp-0.1.0.tar.gz
- Upload date:
- Size: 76.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30b446aa5ff2862343f2fdda53be912136947596278a60d63f8ebc06d0d113d2
|
|
| MD5 |
f836a10d5c3b255a31b772a400c45a98
|
|
| BLAKE2b-256 |
a6cf50a82ded69882c1daa2c08f1176b8bb1ce3f7815d26b2e3016056f970e0d
|
Provenance
The following attestation bundles were made for vivado_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on mapleleavessssssss-wq/vivado-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vivado_mcp-0.1.0.tar.gz -
Subject digest:
30b446aa5ff2862343f2fdda53be912136947596278a60d63f8ebc06d0d113d2 - Sigstore transparency entry: 1089804805
- Sigstore integration time:
-
Permalink:
mapleleavessssssss-wq/vivado-mcp@9e53551b1c9d8ae3853be903498a39ee6c3baef7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mapleleavessssssss-wq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e53551b1c9d8ae3853be903498a39ee6c3baef7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file vivado_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: vivado_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 59.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61a61c0780fad0088ad1f2bffa2130fd8c252888845836e6c71ef6f256bbb189
|
|
| MD5 |
37e36ab7d42caa3acb0b77ca189b7904
|
|
| BLAKE2b-256 |
e63c5eaa489f192415c877c0bd9a58c630f61cbfb99ffec722e2d707ef70eef1
|
Provenance
The following attestation bundles were made for vivado_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on mapleleavessssssss-wq/vivado-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vivado_mcp-0.1.0-py3-none-any.whl -
Subject digest:
61a61c0780fad0088ad1f2bffa2130fd8c252888845836e6c71ef6f256bbb189 - Sigstore transparency entry: 1089804994
- Sigstore integration time:
-
Permalink:
mapleleavessssssss-wq/vivado-mcp@9e53551b1c9d8ae3853be903498a39ee6c3baef7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mapleleavessssssss-wq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e53551b1c9d8ae3853be903498a39ee6c3baef7 -
Trigger Event:
push
-
Statement type: