fpgaZeroMCP
fpgaZeroMCP
一个开源的 Model Context Protocol 服务器,为 AI 助手提供完整的 FPGA 工具链——包括代码检查、仿真、综合、布局布线、比特流烧录,以及一个由 GitHub 支持的实时 IP 核注册表。
你可以让 AI 搜索 IP 核、将其拉取到本地、检查 HDL 代码、从磁盘综合多文件 VHDL 或 Verilog 项目、运行仿真,然后将比特流烧录到你的开发板上——所有操作都无需离开聊天窗口。
功能特性
多语言支持:Verilog、SystemVerilog 和 VHDL(通过 ghdl-yosys-plugin)
三种输入模式:内联
code字符串、多文件files字典,或磁盘上的project_dir路径文件列表支持:支持
files.f/sources.f,包含+incdir+、+define+和嵌套的-f指令开发板预设:内置 11 种开发板(iCEBreaker、ULX3S、TinyFPGA BX、Tang Nano 等)——自动设置目标/器件/封装/时钟
约束自动检测:自动在项目目录中查找
.pcf/.lpf/.pdc/.cst文件比特流烧录:通过
iceprog(iCE40) 或openFPGALoader(ECP5/Gowin/Nexus) 进行烧录仿真结果解析:支持 PASS/FAIL/UVM 模式检测及 VCD 信号摘要
后台构建:支持长时间运行的综合/布局布线任务,具备状态轮询功能,并严格限制仅允许 EDA 命令
IP 核注册表:通过 GitHub 实时搜索和导入,支持 FuseSoC CAPI2 元数据
健康检查:检测已安装并可用的 OSS CAD Suite 工具
目录
工作原理
Your AI assistant <--> fpgaZeroMCP (stdio MCP server) <--> OSS tools
|
cores/ registry on GitHub
(uart_tx, fifo + any imported)MCP 服务器作为本地子进程运行。你的 AI 通过 JSON-RPC (stdio) 调用其工具。服务器会调用 OSS CAD Suite 中的 Yosys、nextpnr、iverilog、Verilator 等工具,并能直接从 GitHub 拉取开源 FPGA IP 核。
先决条件
要求 | 说明 |
Python 3.11+ | |
一键下载包,包含 iverilog、Yosys、nextpnr、Verilator、Verible、GHDL | |
可选 — 仅在使用 LiteX 工具时需要 |
安装后将 OSS CAD Suite 添加到你的 PATH 中。如果缺少某个工具,所有工具包装器都会优雅地降级。
GitHub API 访问
GitHub API 请求默认不进行身份验证,并受速率限制。设置个人访问令牌以提高限制:
# Linux/macOS
export GITHUB_TOKEN=ghp_...# Windows (PowerShell)
$env:GITHUB_TOKEN = "ghp_..."安装
git clone https://github.com/lcapossio/fpgaZeroMCP
cd fpgaZeroMCP
pip install -e .MCP 客户端设置
Claude Desktop
添加到 claude_desktop_config.json:
{
"mcpServers": {
"fpgaZeroMCP": {
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}
}VS Code (GitHub Copilot)
添加到工作区中的 .vscode/mcp.json:
{
"servers": {
"fpgaZeroMCP": {
"type": "stdio",
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}
}Cursor / Windsurf
添加到你的 MCP 设置中(Settings → MCP Servers):
{
"fpgaZeroMCP": {
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}示例提示词
“帮我找一个 I2C 主机 IP 核并导入它。”
“综合 ~/projects/my_fpga 中的 VHDL 文件,并告诉我 LUT 的数量。”
“为 iCEBreaker 开发板对我的项目进行布局布线,然后烧录它。”
“使用种子值 42 运行布局布线,以尝试获得更好的时序。”
“检查这段 Verilog 代码并修复所有错误。”
“仿真这个 FIFO,并告诉我测试平台是否通过。”
“格式化这个 SystemVerilog 文件。”
“我安装了哪些 OSS CAD Suite 工具?”
工具
HDL 质量
工具 | 说明 |
| 通过 iverilog (V/SV) 或 GHDL (VHDL) 进行语法/错误检查 — 单文件 |
| 同时检查多个文件,以解析跨模块引用 |
| 结构化的逐行诊断 — Verilator → verible 回退 (V/SV),GHDL (VHDL) |
| 通过 verible-verilog-format (V/SV) 或 vsg (VHDL) 自动格式化 |
设计流程
工具 | 说明 |
| 编译并运行测试平台 — iverilog (V/SV) 或 GHDL (VHDL)。返回结果 + VCD 摘要 |
| 带有资源统计的 Yosys 综合。接受 |
| Yosys + nextpnr 一步完成。支持开发板预设、约束自动检测、比特流输出 |
| 通过 |
| 枚举内置开发板预设(目标/器件/封装/时钟) |
IP 核注册表
工具 | 说明 |
| 浏览本地注册表,按类别过滤 |
| 获取 IP 核的清单和 HDL 源码 |
| 获取参数化实例化代码片段 + 源文件 |
| 在 GitHub 上搜索 MIT 许可的 FPGA IP 仓库 |
| 将 GitHub 仓库下载到本地注册表 |
| 导入本地 FuseSoC CAPI2 |
LiteX
工具 | 说明 |
| 使用 |
| 生成 LiteX SoC 而不构建门控逻辑 |
| 使用完全自定义的参数运行 LiteX 开发板目标 |
构建管理
工具 | 说明 |
| 在后台启动长时间运行的命令(仅限白名单中的 EDA 工具) |
| 检查进度 — 状态、已用时间、解析的阶段/利用率/时序 |
| 列出所有跟踪的构建(运行中和已完成) |
| 终止正在运行的后台构建 |
| 按时长和总大小删除旧的构建日志 |
服务器 / 注册表
工具 | 说明 |
| 报告已安装的 OSS CAD Suite 工具,包括路径和版本 |
| 在不重启服务器的情况下重新扫描 IP 核目录 |
IP 核注册表
IP 核位于 cores/<name>/ 目录下 — 包含一个 core.json 清单和一个或多个 HDL 文件。服务器在启动时会自动发现它们,并在每次导入后重新加载。
内置了两个参考 IP 核(uart_tx,fifo)以演示格式。此注册表不打算在此处无限增长 — 它由 GitHub 提供支持。
在运行时获取 IP 核
# Find a RISC-V softcore
search_github_cores("riscv softcore", language="verilog")
# Pull it in
import_github_core("YosysHQ/picorv32")
# It is now in the local registry
get_ip_core("picorv32")
generate_ip("picorv32", {"COMPRESSED_ISA": 1})服务器在仓库中找到 FuseSoC CAPI2 元数据(.core 文件)时会自动使用它,从而提供更丰富的参数和端口信息。仅接受具有 允许的许可证 的仓库。
贡献 IP 核
请勿提交 PR 将 IP 核添加到此仓库。 相反:
在 GitHub 上发布你的 HDL 仓库,添加
fpga主题并使用 MIT 许可证可选:添加一个 FuseSoC CAPI2
.core文件以获取更丰富的元数据任何人都可以直接使用
import_github_core("you/your-core")进行导入
这保持了服务器的精简,并让社区在 GitHub 上有机增长。
综合目标
目标 | 厂商 / 系列 | 完整 OSS P&R |
| Lattice iCE40 | 是 — nextpnr-ice40 |
| Lattice ECP5 | 是 — nextpnr-ecp5 |
| Lattice Nexus (CrossLink-NX, CertusPro-NX) | 是 — nextpnr-nexus |
| Gowin | 是 — nextpnr-gowin |
| Xilinx / AMD | 仅综合 |
| Intel / Altera | 仅综合 |
| 技术无关 | 仅网表 |
place_and_route 的常见器件/封装值:
目标 | 器件 | 封装 |
ice40 |
|
|
ecp5 |
|
|
nexus |
| (嵌入在器件字符串中) |
gowin |
| (嵌入在器件字符串中) |
LiteX
LiteX 是一个 Python SoC 框架,可以针对许多 FPGA 开发板。fpgaZeroMCP 提供了三个专门的 LiteX 工具,并且在 synthesize 和 place_and_route 中也接受 backend="litex" 参数。
# Dedicated tools
litex_build(board="arty", args=["--build"])
litex_soc(board="arty", args=["--no-compile"])
litex_flow(board="arty", args=["--build", "--output-dir", "build_arty"])
# As a backend in existing flow tools
synthesize(code="...", top_module="top", backend="litex", litex_board="arty")
place_and_route(code="...", top_module="top", target="ice40", device="hx1k",
backend="litex", litex_board="arty", litex_args=["--build"])本地 IP 核仓库
你可以通过两种方式将注册表指向你自己的本地 HDL 目录:
环境变量:
Linux/macOS (冒号分隔):
export USERCORES_PATH=/home/you/my-cores:/home/you/work-coresWindows (分号分隔,PowerShell):
$env:USERCORES_PATH = "C:\Users\you\my-cores;C:\Users\you\work-cores"配置文件 (~/.fpgazero_mcp/config.json):
{
"core_paths": [
"/home/you/my-cores",
"/home/you/work-cores"
]
}所有路径在启动时都会与内置的 cores/ 目录一起扫描。
允许的许可证
默认情况下,import_github_core 接受具有以下 SPDX 许可证之一的仓库:
MIT, BSD-2-Clause, BSD-3-Clause, Apache-2.0, ISC, GPL-2.0, GPL-3.0, LGPL-2.1, LGPL-3.0使用 FPGAZERO_ALLOWED_LICENSES 环境变量(逗号分隔的 SPDX ID)进行覆盖:
# Linux/macOS
export FPGAZERO_ALLOWED_LICENSES=MIT
export FPGAZERO_ALLOWED_LICENSES=MIT,Apache-2.0# Windows (PowerShell)
$env:FPGAZERO_ALLOWED_LICENSES = "MIT"
$env:FPGAZERO_ALLOWED_LICENSES = "MIT,Apache-2.0"许可证 ID 遵循 SPDX 规范。检查在导入时进行;search_github_cores 会返回所有结果,无论许可证如何,以便你在导入前进行评估。
测试
pip install -e ".[dev]"
python -m pytest tests/ -v某些测试需要 PATH 中存在 OSS CAD Suite 工具。缺少必要工具的测试会自动跳过。
环境变量
变量 | 说明 |
| GitHub 个人访问令牌 — 提高 API 速率限制 |
| 额外的 IP 核搜索目录(使用操作系统路径分隔符分隔) |
| 用于 |
| 覆盖临时工作区根目录 |
| 操作系统路径分隔符分隔的额外目录列表, |
独立运行/脚本编写
Python API 可以直接使用,无需 MCP 客户端:
from registry.resolver import CoreRegistry
from tools.lint import lint_hdl
reg = CoreRegistry()
# Import a core from GitHub
reg.import_github_core("ben-marshall/uart")
# Generate a parameterized instantiation
result = reg.generate_ip("uart", {"CLKS_PER_BIT": 868})
print(result["instantiation"])
# Lint some HDL
lint_hdl(open("my_design.v").read())python example.py # runs the built-in democore.json 架构
{
"name": "my_core",
"version": "1.0.0",
"description": "...",
"author": "you",
"license": "MIT",
"language": "verilog",
"category": "communication",
"tags": ["spi", "serial"],
"parameters": {
"DATA_WIDTH": { "type": "integer", "default": 8, "description": "..." }
},
"ports": {
"clk": { "direction": "input", "width": 1, "description": "System clock" }
},
"files": ["my_core.v"]
}作者
Leonardo Capossio (bard0) — hello@bard0.com
许可证
MIT — 参见 LICENSE。
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
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/bard0-design/fpgaZeroMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server