fpgaZeroMCP
fpgaZeroMCP
Ein Open-Source Model Context Protocol-Server, der KI-Assistenten eine vollständige FPGA-Toolchain an die Hand gibt — Linting, Simulation, Synthese, Place-and-Route, Programmierung des Bitstreams sowie eine Live-IP-Core-Registry, die auf GitHub basiert.
Bitten Sie Ihre KI, nach Cores zu suchen, diese einzubinden, HDL zu linten, ein VHDL- oder Verilog-Projekt mit mehreren Dateien von der Festplatte zu synthetisieren, eine Simulation auszuführen und dann den Bitstream auf Ihr Board zu flashen — alles, ohne Ihr Chat-Fenster zu verlassen.
Funktionen
Mehrsprachig: Verilog, SystemVerilog und VHDL (via ghdl-yosys-plugin)
Drei Eingabemodi: Inline
code-String,files-Dictionary mit mehreren Dateien oderproject_dir-Pfad auf der FestplatteUnterstützung von Dateilisten:
files.f/sources.fmit+incdir+,+define+und verschachtelten-f-DirektivenBoard-Presets: 11 integrierte Boards (iCEBreaker, ULX3S, TinyFPGA BX, Tang Nano, etc.) — setzt Ziel/Gerät/Gehäuse/Takt automatisch
Automatische Erkennung von Constraints: Findet
.pcf/.lpf/.pdc/.cstin Ihrem ProjektverzeichnisBitstream-Programmierung: Flashen via
iceprog(iCE40) oderopenFPGALoader(ECP5/Gowin/Nexus)Analyse von Simulationsergebnissen: PASS/FAIL/UVM-Mustererkennung mit VCD-Signalzusammenfassung
Hintergrund-Builds: Lang laufende Synthese/PnR mit Statusabfrage und einer strikten Positivliste für EDA-Befehle
IP-Core-Registry: Live-Suche und Import von GitHub mit FuseSoC CAPI2-Metadaten
Systemprüfung: Ermittlung, welche OSS CAD Suite-Tools installiert und erreichbar sind
Inhaltsverzeichnis
Funktionsweise
Your AI assistant <--> fpgaZeroMCP (stdio MCP server) <--> OSS tools
|
cores/ registry on GitHub
(uart_tx, fifo + any imported)Der MCP-Server läuft als lokaler Subprozess. Ihre KI ruft Tools über JSON-RPC (stdio) auf. Der Server greift auf Yosys, nextpnr, iverilog, Verilator und andere aus der OSS CAD Suite zu — und kann Open-Source-FPGA-Cores direkt von GitHub beziehen.
Voraussetzungen
Anforderung | Hinweise |
Python 3.11+ | |
Bündelt iverilog, Yosys, nextpnr, Verilator, Verible, GHDL in einem Download | |
Optional — nur für LiteX-Tools erforderlich |
Fügen Sie die OSS CAD Suite nach der Installation zu Ihrem PATH hinzu. Alle Tool-Wrapper reagieren tolerant, falls ein Tool fehlt.
GitHub API-Zugriff
GitHub API-Anfragen sind standardmäßig nicht authentifiziert und unterliegen Ratenbegrenzungen. Setzen Sie ein persönliches Zugriffstoken, um die Limits zu erhöhen:
# Linux/macOS
export GITHUB_TOKEN=ghp_...# Windows (PowerShell)
$env:GITHUB_TOKEN = "ghp_..."Installation
git clone https://github.com/lcapossio/fpgaZeroMCP
cd fpgaZeroMCP
pip install -e .MCP-Client-Einrichtung
Claude Desktop
Fügen Sie dies zu claude_desktop_config.json hinzu:
{
"mcpServers": {
"fpgaZeroMCP": {
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}
}VS Code (GitHub Copilot)
Fügen Sie dies zu .vscode/mcp.json in Ihrem Arbeitsbereich hinzu:
{
"servers": {
"fpgaZeroMCP": {
"type": "stdio",
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}
}Cursor / Windsurf
Fügen Sie dies zu Ihren MCP-Einstellungen hinzu (Settings → MCP Servers):
{
"fpgaZeroMCP": {
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}Beispiel-Prompts
"Suche mir einen I2C-Master-Core und importiere ihn."
"Synthetisiere die VHDL-Dateien in ~/projects/my_fpga und nenne mir die LUT-Anzahl."
"PnR mein Projekt für das iCEBreaker-Board und flashe es dann."
"Führe Place-and-Route mit Seed 42 aus, um ein besseres Timing zu erreichen."
"Linte dieses Verilog und behebe alle Fehler."
"Simuliere diesen FIFO und sage mir, ob der Testbench bestanden hat."
"Formatiere diese SystemVerilog-Datei."
"Welche OSS CAD Suite-Tools habe ich installiert?"
Tools
HDL-Qualität
Tool | Beschreibung |
| Syntax-/Fehlerprüfung via iverilog (V/SV) oder GHDL (VHDL) — einzelne Datei |
| Linting mehrerer Dateien zusammen, damit Cross-Modul-Referenzen aufgelöst werden |
| Strukturierte zeilenweise Diagnose — Verilator → verible-Fallback (V/SV), GHDL (VHDL) |
| Automatische Formatierung via verible-verilog-format (V/SV) oder vsg (VHDL) |
Design-Flow
Tool | Beschreibung |
| Kompilieren und Ausführen von Testbenches — iverilog (V/SV) oder GHDL (VHDL). Gibt Ergebnis + VCD-Zusammenfassung zurück |
| Yosys-Synthese mit Ressourcen-Statistiken. Akzeptiert |
| Yosys + nextpnr in einem Schritt. Board-Presets, automatische Constraint-Erkennung, Bitstream-Ausgabe |
| Flashen eines Bitstreams via |
| Auflisten integrierter Board-Presets (Ziel/Gerät/Gehäuse/Takt) |
IP-Core-Registry
Tool | Beschreibung |
| Lokale Registry durchsuchen, nach Kategorie filtern |
| Manifest und HDL-Quelle für einen Core abrufen |
| Parametrisiertes Instanziierungs-Snippet + Quelldateien erhalten |
| GitHub nach FPGA-IP-Repos mit MIT-Lizenz durchsuchen |
| GitHub-Repo in die lokale Registry herunterladen |
| Lokale FuseSoC CAPI2 |
LiteX
Tool | Beschreibung |
| LiteX-Board-Ziel mit |
| LiteX-SoC generieren, ohne Gateware zu bauen |
| LiteX-Board-Ziel mit vollständig benutzerdefinierten Argumenten ausführen |
Build-Management
Tool | Beschreibung |
| Lang laufenden Befehl im Hintergrund starten (nur zugelassene EDA-Tools) |
| Fortschritt prüfen — Status, verstrichene Zeit, geparste Phase/Auslastung/Timing |
| Alle verfolgten Builds auflisten (laufend und abgeschlossen) |
| Laufenden Hintergrund-Build abbrechen |
| Alte Build-Logs nach Alter und Gesamtgröße löschen |
Server / Registry
Tool | Beschreibung |
| Berichten, welche OSS CAD Suite-Tools installiert sind, mit Pfaden und Versionen |
| Core-Verzeichnisse neu scannen, ohne den Server neu zu starten |
IP-Core-Registry
Cores befinden sich in cores/<name>/ — ein core.json-Manifest und eine oder mehrere HDL-Dateien. Der Server erkennt sie beim Start automatisch und lädt sie nach jedem Import neu.
Zwei Referenz-Cores sind enthalten (uart_tx, fifo), um das Format zu demonstrieren. Die Registry ist nicht dazu gedacht, hier zu wachsen — sie wird von GitHub angetrieben.
Cores zur Laufzeit abrufen
# 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})Der Server verwendet automatisch FuseSoC CAPI2-Metadaten (.core-Dateien), wenn sie im Repo gefunden werden, was reichhaltigere Parameter- und Portinformationen liefert. Nur Repos mit einer erlaubten Lizenz werden akzeptiert.
Einen Core beisteuern
Eröffnen Sie keine PRs, um Cores zu diesem Repo hinzuzufügen. Stattdessen:
Veröffentlichen Sie Ihr HDL-Repo auf GitHub mit dem Topic
fpgaund einer MIT-LizenzFügen Sie optional eine FuseSoC CAPI2
.core-Datei für reichhaltigere Metadaten hinzuJeder kann dann
import_github_core("you/your-core")direkt ausführen
Dies hält den Server schlank und lässt die Community organisch auf GitHub wachsen.
Synthese-Ziele
Ziel | Hersteller / Familie | Vollständiges OSS P&R |
| Lattice iCE40 | ja — nextpnr-ice40 |
| Lattice ECP5 | ja — nextpnr-ecp5 |
| Lattice Nexus (CrossLink-NX, CertusPro-NX) | ja — nextpnr-nexus |
| Gowin | ja — nextpnr-gowin |
| Xilinx / AMD | Nur Synthese |
| Intel / Altera | Nur Synthese |
| Technologieunabhängig | Nur Netzliste |
Allgemeine Geräte-/Gehäusewerte für place_and_route:
Ziel | Gerät | Gehäuse |
ice40 |
|
|
ecp5 |
|
|
nexus |
| (im Geräte-String eingebettet) |
gowin |
| (im Geräte-String eingebettet) |
LiteX
LiteX ist ein Python-SoC-Framework, das auf viele FPGA-Boards abzielen kann. fpgaZeroMCP stellt drei dedizierte LiteX-Tools bereit und akzeptiert auch backend="litex" in synthesize und place_and_route.
# 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"])Lokale Core-Repositories
Sie können die Registry auf zwei Arten auf Ihre eigenen lokalen HDL-Verzeichnisse verweisen:
Umgebungsvariable:
Linux/macOS (durch Doppelpunkt getrennt):
export USERCORES_PATH=/home/you/my-cores:/home/you/work-coresWindows (durch Semikolon getrennt, PowerShell):
$env:USERCORES_PATH = "C:\Users\you\my-cores;C:\Users\you\work-cores"Konfigurationsdatei (~/.fpgazero_mcp/config.json):
{
"core_paths": [
"/home/you/my-cores",
"/home/you/work-cores"
]
}Alle Pfade werden beim Start neben dem integrierten cores/-Verzeichnis gescannt.
Erlaubte Lizenzen
Standardmäßig akzeptiert import_github_core Repos mit einer dieser SPDX-Lizenzen:
MIT, BSD-2-Clause, BSD-3-Clause, Apache-2.0, ISC, GPL-2.0, GPL-3.0, LGPL-2.1, LGPL-3.0Überschreiben Sie dies mit der Umgebungsvariablen FPGAZERO_ALLOWED_LICENSES (durch Komma getrennte SPDX-IDs):
# 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"Lizenz-IDs folgen der SPDX-Notation. Die Prüfung erfolgt zum Importzeitpunkt; search_github_cores liefert Ergebnisse unabhängig von der Lizenz, damit Sie diese vor dem Import bewerten können.
Testen
pip install -e ".[dev]"
python -m pytest tests/ -vEinige Tests erfordern OSS CAD Suite-Tools im PATH. Tests, die fehlende Tools benötigen, werden automatisch übersprungen.
Umgebungsvariablen
Variable | Beschreibung |
| Persönliches GitHub-Zugriffstoken — erhöht API-Ratenlimits |
| Zusätzliche Core-Suchverzeichnisse (durch OS-Pfadtrennzeichen getrennt) |
| Durch Komma getrennte SPDX-IDs für |
| Überschreiben des temporären Arbeitsbereich-Stammverzeichnisses |
| Durch OS-Pfadtrennzeichen getrennte Liste zusätzlicher Verzeichnisse, aus denen |
Standalone / Skripting
Die Python-API kann direkt ohne MCP-Client verwendet werden:
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-Schema
{
"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"]
}Autor
Leonardo Capossio (bard0) — hello@bard0.com
Lizenz
MIT — siehe 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