fpgaZeroMCP
fpgaZeroMCP
AIアシスタントに完全なFPGAツールチェーン(リンティング、シミュレーション、合成、配置配線、ビットストリームの書き込み)と、GitHubで管理されるライブIPコアレジストリを提供するオープンソースのModel Context Protocolサーバーです。
AIにコアの検索や取り込み、HDLのリンティング、ディスク上の複数ファイルによるVHDL/Verilogプロジェクトの合成、シミュレーションの実行、そしてボードへのビットストリーム書き込みまで、チャットウィンドウを離れることなく実行させることができます。
機能
マルチ言語対応: Verilog、SystemVerilog、VHDL(ghdl-yosys-plugin経由)
3つの入力モード: インラインの
code文字列、複数ファイルのfiles辞書、またはディスク上のproject_dirパスファイルリスト対応:
+incdir+、+define+、ネストされた-fディレクティブを含むfiles.f/sources.fボードプリセット: 11種類のボードを内蔵(iCEBreaker、ULX3S、TinyFPGA BX、Tang Nanoなど) — ターゲット/デバイス/パッケージ/クロックを自動設定
制約ファイルの自動検出: プロジェクトディレクトリ内の
.pcf/.lpf/.pdc/.cstを検索ビットストリーム書き込み:
iceprog(iCE40) またはopenFPGALoader(ECP5/Gowin/Nexus) 経由でフラッシュシミュレーション結果の解析: VCD信号サマリー付きのPASS/FAIL/UVMパターン検出
バックグラウンドビルド: ステータス監視機能付きの長時間実行される合成/配置配線、および厳格なEDAツールのみを許可するコマンドリスト
IPコアレジストリ: FuseSoC CAPI2メタデータを使用したGitHubからのライブ検索とインポート
ヘルスチェック: インストール済みで利用可能な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コアを取得できます。
前提条件
要件 | 備考 |
Python 3.11+ | |
iverilog、Yosys、nextpnr、Verilator、Verible、GHDLを1つのダウンロードにバンドル | |
オプション — 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マスターコアを探してインポートして。"
"~/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コアレジストリ
ツール | 説明 |
| ローカルレジストリの閲覧、カテゴリによるフィルタリング |
| コアのマニフェストとHDLソースの取得 |
| パラメータ化されたインスタンス化スニペットとソースファイルの取得 |
| MITライセンスのFPGA IPリポジトリをGitHubで検索 |
| GitHubリポジトリをローカルレジストリにダウンロード |
| ローカルのFuseSoC CAPI2 |
LiteX
ツール | 説明 |
|
|
| ゲートウェアをビルドせずにLiteX SoCを生成 |
| 完全にカスタムな引数でLiteXボードターゲットを実行 |
ビルド管理
ツール | 説明 |
| バックグラウンドで長時間実行コマンドを開始(許可されたEDAツールのみ) |
| 進捗確認 — ステータス、経過時間、解析されたフェーズ/使用率/タイミング |
| 追跡中の全ビルド(実行中および完了)をリスト表示 |
| 実行中のバックグラウンドビルドを強制終了 |
| 古いビルドログを期間や合計サイズで削除 |
サーバー / レジストリ
ツール | 説明 |
| インストールされているOSS CAD Suiteツールをパスとバージョン付きで報告 |
| サーバーを再起動せずにコアディレクトリを再スキャン |
IPコアレジストリ
コアは cores/<name>/ に配置されます。core.json マニフェストと1つ以上のHDLファイルで構成されます。サーバーは起動時に自動的に検出し、インポート後にリロードします。
フォーマットを示すために2つのリファレンスコア (uart_tx, fifo) が含まれています。このレジストリはここで成長させることを目的としていません — GitHubによって強化されています。
実行時のコア取得
# 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 ファイル) が見つかると自動的に使用し、より詳細なパラメータやポート情報を提供します。許可されたライセンスを持つリポジトリのみが受け入れられます。
コアの貢献
このリポジトリにコアを追加するプルリクエストは送らないでください。 代わりに:
fpgaトピックとMITライセンスを付けて、HDLリポジトリをGitHubで公開する必要に応じて、より詳細なメタデータのために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 での一般的なデバイス/パッケージ値:
ターゲット | device | package |
ice40 |
|
|
ecp5 |
|
|
nexus |
| (デバイス文字列に埋め込み) |
gowin |
| (デバイス文字列に埋め込み) |
LiteX
LiteX は、多くのFPGAボードをターゲットにできるPython SoCフレームワークです。fpgaZeroMCPは3つの専用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"])ローカルコアリポジトリ
独自のローカルHDLディレクトリをレジストリに指定するには2つの方法があります:
環境変数:
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.0FPGAZERO_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レート制限を緩和 |
| 追加のコア検索ディレクトリ(OSのパス区切り文字で区切る) |
|
|
| 一時ワークスペースのルートディレクトリを上書き |
|
|
スタンドアロン / スクリプト
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