PDM MCP Server
Provides tools for FPGA power estimation and analysis using Xilinx Power Design Manager (PDM), allowing users to manage projects, configure scenarios, and evaluate power consumption.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PDM MCP ServerOpen my project and show power summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PDM MCP Server
AI 驱动的 FPGA 功耗评估助手 — 将 Xilinx Power Design Manager (PDM) 的 Python API 封装为 MCP (Model Context Protocol) 服务,供 AI Agent 通过自然语言进行功耗建模与分析。
前置条件
Python ≥ 3.10
Xilinx PDM (Power Design Manager) 已安装
PDM 的 Python API (
xv_pdm_pytasks) 必须可用安装路径会被自动检测(详见下方「PDM 路径配置」)
Related MCP server: EDA Tools MCP Server
安装
从源码安装
git clone <repo-url>
cd pdm_mcp
pip install .安装后可使用 pdm-mcp 命令:
pdm-mcp version # 显示版本
pdm-mcp serve # 启动 MCP serverPDM 路径配置
MCP Server 启动时会按以下优先级自动查找 PDM 安装路径:
PDM_HOME环境变量 →$PDM_HOME/pdm.bat项目根目录的
path.txt文件(格式:PDM:H:\path\to\PDM\bin)系统
PATH中的pdm.bat/pdm默认安装路径回退(
C:/Xilinx/*/PDM/bin/pdm.bat等)
若自动检测失败,可创建 path.txt 指定路径,或设置环境变量:
set PDM_HOME=H:\AMDDesignTools\PDM_2026.1\PDM\binMCP 客户端配置
在 AI 客户端(如 Kimi Code、Claude Desktop 等)中添加 MCP Server 配置:
{
"mcpServers": {
"pdm-mcp": {
"command": "pdm-mcp",
"args": ["serve"]
}
}
}如果未安装到系统 PATH,指定完整路径:
{
"mcpServers": {
"pdm-mcp": {
"command": "python",
"args": ["-m", "pdm_mcp", "serve"],
"cwd": "H:/path/to/pdm_mcp"
}
}
}使用
MCP Server 提供 10 个工具,每个工具通过 action 参数选择具体操作。
1. session — 会话管理
action | 参数 | 说明 |
|
| 启动 PDM 子进程会话 |
|
| 关闭指定会话 |
| 无 | 列出所有活跃会话 |
session(action="start")
session(action="list")
session(action="stop", session_id="my_session")2. project — 项目管理
action | 关键参数 | 说明 |
|
| 打开 .pdm 项目文件 |
|
| 创建新项目 |
| 无 | 关闭当前项目 |
|
| 保存/另存为 |
| 无 | 项目基本信息 |
| 无 | 列出所有 Block |
| 无 | 列出可用 FPGA 架构 |
|
| 筛选器件型号 |
| 无 | 列出工艺角 (Maximum/Typical) |
|
| 更换器件 |
|
| 导入 XPE 文件 |
|
| 导出 XDC 约束 |
|
| 导出 Power Design XML |
| 无 | 重置项目数据 |
project(action="open", path="my_design.pdm")
project(action="save")
project(action="info")
project(action="list_parts", architecture="Artix-7", package_filter="csg324")3. power — 功耗查询
action | 关键参数 | 说明 |
| 无 | 总功耗摘要(自动保存快照) |
|
| 指定 Block 功耗分解 |
| 无 | 电源轨电压/电流/功耗 |
| 无 | 热分析(结温/θ-JA/裕量) |
| 无 | 各时钟域功耗 |
|
| 导出功耗报告 |
power(action="summary")
power(action="block_power", block_name="logic")
power(action="export_report", output_path="report.txt")4. scenario — 场景配置
action | 关键参数 | 说明 |
|
| 温度/风流量/散热器 |
|
| 修改时钟频率 |
|
| 修改翻转率 |
|
| 修改资源用量(绝对数量) |
| 无 | 触发功耗重算 |
| 无 | 对比两次功耗快照 |
scenario(action="set_environment", temp=85, airflow=250, heatsink="medium")
scenario(action="set_clock_frequency", name="clk_main", freq_mhz=200)
scenario(action="set_resource_util", block="logic", lut=50000, ff=60000, bram=80, dsp=100)
scenario(action="recalculate")
scenario(action="compare")5. clock — 时钟管理
action | 关键参数 | 说明 |
| 无 | 列出所有时钟 |
|
| 创建时钟 |
|
| 删除时钟 |
|
| 编辑时钟参数 |
|
| 获取时钟设置 |
| 无 | 获取示例设置模板 |
|
| 替换时钟引用 |
| 无 | 列出时钟管理器类型 |
| 无 | 列出现有时钟管理器 |
|
| 创建时钟管理器 |
|
| 删除时钟管理器 |
|
| 获取时钟管理器设置 |
clock(action="create", name="clk_200", freq=200, io_type="HD")
clock(action="mgr_create", name="mmcm1", type="MMCM", input_clock="clk_200")6. ip — IP 核管理
action | 关键参数 | 说明 |
| 无 | 列出可用 IP 类型 |
|
| 列出指定类型的 IP 实例 |
|
| 创建 IP |
|
| 删除 IP |
|
| 获取 IP 当前设置 |
|
| 获取 IP 设置模板 |
ip(action="types")
ip(action="list", ip_type="GTH")
ip(action="create", ip_type="GTH", ip_name="gth_0")7. power_design — 电源设计
action | 关键参数 | 说明 |
| 无 | 电源域/电源名称概览 |
| 无 | 电源轨特性详情 |
| 无 | 电源交付设计汇总 |
|
| 设置电源轨整合模式 |
power_design(action="info")
power_design(action="rail_characteristics")
power_design(action="set_consolidation", mode="Consolidated")8. vivado — Vivado 数据导入
action | 关键参数 | 说明 |
|
| 导入 Vivado 功耗报告 |
|
| 与 PDM 结果逐项对比 |
|
| 导入利用率报告 |
vivado(action="import_report", report_path="post_route_power.rpt")
vivado(action="compare", label="vivado_import")
vivado(action="import_utilization", util_report_path="utilization.rpt")9. estimate — 快速估算(无需 PDM 会话)
action | 关键参数 | 说明 |
|
| 快速功耗估算 (±40%) |
|
| 根据预算推荐器件 |
| 无 | 列出支持的 FPGA 系列 |
estimate(action="quick", part="xc7a100tcsg324-1", clock_mhz=200, lut_pct=60)
estimate(action="recommend", budget=3.0, logic_cells=50000, family="7series")
estimate(action="families")10. explore — 属性探索
action | 关键参数 | 说明 |
|
| 列出 Block 的资源名 |
|
| 列出 Block 的汇总表名 |
|
| 获取资源字段名/记录名 |
|
| 获取资源默认值 |
|
| 获取字段有效值范围 |
|
| 获取汇总表详情 |
|
| 列出对象属性名 |
|
| 报告对象属性 |
|
| 重置属性为默认值 |
explore(action="block_resources", block="logic")
explore(action="resource_defaults", block="logic", resource="logic_config")
explore(action="report_property", target="project", pattern="*", all_props=True)使用模板
以下是常见场景的操作模板。直接将这些指令告诉 AI Agent 即可。
模板 A:设计前期最大功耗快速评估(无 PDM 项目)
器件尚未确定,需要快速估算最坏情况功耗,给出电源设计余量。
1. 调用 estimate(action="families"),了解有哪些 FPGA 系列可选。
2. 用 estimate(action="quick") 做粗估。关键参数:
- part: 候选器件,如 "xc7a100tcsg324-1"
- clock_mhz: 主时钟频率
- lut_pct / ff_pct / bram_pct / dsp_pct: 设为预期的最大值(如 80-90)
- io_count / io_standard / io_toggle: IO 数量和翻转率
- temp / airflow / heatsink: 环境条件
3. 多选几个候选器件重复 quick 估算,比较结温。
4. 用 estimate(action="recommend"),传入功耗预算和资源需求,验证选型。
5. 电源余量建议:总功耗 × 1.3 ~ 1.5 作为电源设计目标。示例对话:
用户: 我在设计一个 200MHz 主频、占用约 70% LUT 的逻辑,用 xc7a100t,
想知道最大功耗大概多少,电源要留多少余量。
(AI 自动调用 estimate quick → 返回总功耗和结温 → 建议余量)模板 B:精确功耗评估(基于 PDM 项目)
已有 RTL / Vivado 工程,需要精确评估并导出约束到 PCB 设计。
1. session(action="start")
2. project(action="create", name="my_design", part="xc7a100tcsg324-1")
3. 用 explore(action="block_resources", block="logic") 查看可用资源字段。
4. 用 scenario(action="set_resource_util") 填入综合后的 LUT/FF/BRAM/DSP 用量(绝对数量)。
例如 ``lut=50000, ff=60000, bram=80, dsp=100``。
5. 用 clock(action="create") 创建设计中的时钟,或 scenario(action="set_clock_frequency")
修改已有时钟。
6. 用 scenario(action="set_environment", temp=85, airflow=250, heatsink="medium")
设置工作环境。
7. scenario(action="recalculate") 重算功耗。
8. power(action="summary") 查看总功耗,power(action="thermal") 检查结温是否超标。
9. 如结温过高,调整 airflow 或 heatsink,重复步骤 7-8。
10. project(action="export_xdc", file="thermal.xdc") 导出散热约束。
11. power_design(action="rail_characteristics") 查看电源轨特性,确定每路电源需求。
12. project(action="save")
13. session(action="stop")模板 C:导入 Vivado 结果并验证
综合/布线已完成,导入 Vivado 报告验证 PDM 建模精度。
1. session(action="start")
2. project(action="open", path="my_design.pdm")
3. vivado(action="import_report", report_path="post_route_power.rpt")
4. vivado(action="import_utilization", util_report_path="utilization.rpt", block_name="logic")
5. scenario(action="recalculate")
6. vivado(action="compare") → 总功耗和各项逐项对比,>10% 差异标记 WARN。
7. 根据差异调整 PDM 参数(调用 scenario / clock),重复步骤 5-6。
8. project(action="save")
9. session(action="stop")模板 D:多场景功耗对比
同一设计在不同频率、温度下的功耗差异。
1. session(action="start")
2. project(action="open", path="my_design.pdm")
3. power(action="summary") → 保存快照 A(基准)
4. scenario(action="set_clock_frequency",
name="clk_main", freq_mhz=300) → 调整频率
5. scenario(action="recalculate")
6. power(action="summary") → 保存快照 B
7. scenario(action="compare") → 对比 A vs B
8. scenario(action="set_environment",
temp=85, airflow=0, heatsink="none") → 调整环境
9. scenario(action="recalculate")
10. power(action="summary") → 保存快照 C
11. scenario(action="compare") → 对比 B vs C
12. session(action="stop")模板 E:器件选型与 Part 替换
当前器件功耗超标,需要更换器件并重新评估。
1. session(action="start")
2. project(action="open", path="my_design.pdm")
3. project(action="list_parts", architecture="Artix-7") → 查看同架构备选器件
4. power(action="summary") → 当前功耗
5. project(action="select_part", part="xc7a200tfbg484-2") → 换更大器件
6. scenario(action="recalculate")
7. power(action="summary") → 验证新器件功耗和结温
8. 若不满意,重复步骤 5-7。
9. project(action="save", save_path="my_design_a200t.pdm")
10. session(action="stop")模板 F:时钟系统规划
从零配置复杂时钟网络(含 MMCM/DPLL)。
1. session(action="start")
2. project(action="create", name="clock_design", part="xcku3p-ffva676-1-i")
3. clock(action="sample_settings") → 了解时钟设置模板结构
4. clock(action="create", name="sys_clk", freq=125,
io_type="HD", io_standard="LVCMOS 1.8V") → 创建系统时钟
5. clock(action="mgr_types") → 查看可用的时钟管理器
6. clock(action="mgr_create", name="mmcm_sys",
type="MMCM", input_clock="sys_clk", vco_range="Low") → 创建 MMCM
7. clock(action="mgr_settings", name="mmcm_sys") → 查看 MMCM 产生的输出时钟
8. scenario(action="recalculate")
9. project(action="save")
10. session(action="stop")模板 G:电源轨设计与原理图检查
导出电源设计数据,提供给硬件工程师做原理图检查。
1. session(action="start")
2. project(action="open", path="my_design.pdm")
3. scenario(action="set_environment", temp=85,
airflow=250, heatsink="medium")
4. scenario(action="recalculate")
5. power_design(action="info") → 查看电源域和电源名称
6. power_design(action="rail_characteristics") → 查看每路电压/电流
7. power_design(action="delivery_design") → 查看电源交付方案
8. power_design(action="set_consolidation",
mode="Consolidated") → 尝试整合模式
9. power_design(action="delivery_design") → 对比整合后的方案
10. project(action="export_power_design",
file="power_design.xml") → 导出 XML 供原理图检查
11. project(action="export_xdc", file="thermal.xdc",
thermal="Ambient") → 导出环境温度约束
12. project(action="save")
13. session(action="stop")模板 H:导入 XPE 快速起步
已有 Vivado XPE 文件,直接导入作为起点。
1. session(action="start")
2. project(action="create", name="from_xpe", part="xc7a100tcsg324-1")
3. project(action="import_xpe", file="baseline.xpe") → 导入 XPE 数据
4. power(action="summary") → 查看导入后的功耗
5. explore(action="block_resources", block="logic") → 查看 XPE 填充了哪些资源
6. scenario(action="set_environment", temp=85, airflow=250,
heatsink="medium")
7. scenario(action="recalculate")
8. power(action="summary")
9. project(action="save")
10. session(action="stop")模板 I:同设计跨器件功耗对比(基于 PDM)
同一套设计参数(资源、时钟、环境),在不同 FPGA 型号上的功耗和结温差异。
1. session(action="start")
2. project(action="open", path="my_design.pdm")
# ---- 器件 A ----
3. scenario(action="set_resource_util", block="logic",
lut=50000, ff=60000, bram=80, dsp=100)
4. clock(action="create", name="clk_main", freq=200)
5. scenario(action="set_environment", temp=85, airflow=250, heatsink="medium")
6. scenario(action="recalculate")
7. power(action="summary") → 保存快照(器件 A)
# ---- 器件 B ----
8. project(action="select_part", part="xc7a200tfbg484-2") → 切换到更大器件
9. scenario(action="recalculate")
10. power(action="summary") → 保存快照(器件 B)
11. scenario(action="compare") → 对比 A vs B
# ---- 器件 C ----
12. project(action="select_part", part="xcku3p-ffva676-1-i") → 切换到 UltraScale
13. scenario(action="recalculate")
14. power(action="summary") → 保存快照(器件 C)
15. scenario(action="compare") → 对比 B vs C
16. session(action="stop")说明:
compare对比的是最近两次power(summary)的快照。三器件以上需两两依次对比,每次compare后记录输出即可。
模板 J:纯快速估算跨器件对比(无需 PDM)
连 PDM 项目都不需要,直接用
estimate quick快速比较多个器件。
1. estimate(action="quick", part="xc7a35tcsg324-1", clock_mhz=200,
lut_pct=70, temp=85, airflow=250, heatsink="medium")
→ 记录: A35T → 功耗 X.XW, 结温 YY°C
2. estimate(action="quick", part="xc7a100tcsg324-1", clock_mhz=200,
lut_pct=70, temp=85, airflow=250, heatsink="medium")
→ 记录: A100T → 功耗 X.XW, 结温 YY°C
3. estimate(action="quick", part="xc7a200tfbg484-2", clock_mhz=200,
lut_pct=70, temp=85, airflow=250, heatsink="medium")
→ 记录: A200T → 功耗 X.XW, 结温 YY°C
4. estimate(action="quick", part="xcku3p-ffva676-1-i", clock_mhz=200,
lut_pct=70, temp=85, airflow=250, heatsink="medium")
→ 记录: KU3P → 功耗 X.XW, 结温 YY°C
5. 横向比较四个器件的总功耗和结温,选择最优性价比型号。11. guide — 引导式评估向导
只需告诉 AI "我想评估 xxx 的功耗",AI 会调用本工具一步步询问所需参数, 每步给出可选值,无需记忆任何工具名。
流程:器件型号 → 评估模式(quick/pdm/vivado) → 逐步填参 → 自动计算结果。
# 用户: "我想评估 xc7a100t 的功耗"
# AI 自动调用:
guide(step="start")
# → 返回: "请输入 FPGA 器件型号"
guide(step="device", value="xc7a100tcsg324-1")
# → 返回: "选择评估模式: quick / pdm / vivado"
guide(step="mode", value="quick", device="xc7a100tcsg324-1")
# → 返回: "主时钟频率是多少 (MHz)?"
guide(step="quick_clock_mhz", value="200", device="xc7a100tcsg324-1")
# → 返回: "LUT 利用率大约多少 (%)?"
# ... 逐步收集参数 ...
# → 最终返回: 功耗估算结果(含 breakdown、结温)示例对话:
用户: 我想评估 xc7a100t 的功耗,200MHz 主频,资源用了大概 70%
AI: (自动调用 guide → 收集参数 → 返回总功耗 1.2W,结温 45°C,建议电源余量 1.8W)开发
运行测试
pip install -e ".[dev]"
pytest tests/ -v项目结构
pdm_mcp/
├── src/pdm_mcp/
│ ├── __main__.py # CLI 入口 (pdm-mcp serve)
│ ├── server.py # FastMCP 实例 + 工具注册
│ ├── config.py # PDM 路径检测
│ ├── analysis/
│ │ ├── estimator.py # 快速功耗估算模型
│ │ └── power_parser.py # Vivado 报告解析器
│ ├── session/
│ │ ├── pdm_session.py # PDM 子进程管理(哨兵协议)
│ │ ├── session_manager.py # 多会话生命周期
│ │ └── base_session.py # 抽象基类 + PdmResult
│ └── tools/ # 10 个 MCP 工具
│ ├── session_tools.py
│ ├── project_tools.py
│ ├── power_tools.py
│ ├── scenario_tools.py
│ ├── clock_tools.py
│ ├── ip_tools.py
│ ├── power_design_tools.py
│ ├── import_tools.py
│ ├── estimate_tools.py
│ └── exploration_tools.py
├── scripts/mainloop.py # PDM 子进程 REPL
├── tests/ # 测试
├── docs/ # UG1781 参考文档
└── pyproject.tomlBug 反馈
请通过以下任一方式提交反馈:
GitHub Issues: 在项目仓库提交 Issue,附上以下信息:
pdm-mcp version输出完整的错误信息 / 堆栈跟踪
复现步骤
PDM 版本 (
pdm.bat所在目录名即为版本号)
日志: 启动 MCP Server 时会输出日志到 stderr,包含 PDM 路径检测信息和运行时错误。如果遇到问题,请附上日志。
常见问题排查:
问题
可能原因
解决方法
PDM 路径检测失败PDM 未安装或路径不在默认位置
设置
PDM_HOME或创建path.txt会话 'xxx' 不存在未调用
session(action="start")先启动会话再操作
No project open未调用
project(action="open")先打开项目再查询
功耗值为 0
未设置资源利用率或时钟频率
调用
scenario配置参数后recalculate
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Can-Y/PDM_MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server