fpgaZeroMCP
fpgaZeroMCP
Un servidor de Model Context Protocol de código abierto que proporciona a los asistentes de IA una cadena de herramientas FPGA completa: lint, simular, sintetizar, place-and-route, programar el bitstream y un registro de núcleos IP en vivo respaldado por GitHub.
Pide a tu IA que busque núcleos, los importe, realice linting de HDL, sintetice un proyecto VHDL o Verilog de varios archivos desde el disco, ejecute una simulación y luego grabe el bitstream en tu placa, todo sin salir de tu ventana de chat.
Características
Multilenguaje: Verilog, SystemVerilog y VHDL (vía ghdl-yosys-plugin)
Tres modos de entrada: cadena
codeen línea, diccionariofilesde varios archivos o rutaproject_diren el discoSoporte de listas de archivos:
files.f/sources.fcon directivas+incdir+,+define+y-fanidadasPreajustes de placa: 11 placas integradas (iCEBreaker, ULX3S, TinyFPGA BX, Tang Nano, etc.) — establece automáticamente el objetivo/dispositivo/paquete/reloj
Detección automática de restricciones: encuentra
.pcf/.lpf/.pdc/.csten el directorio de tu proyectoProgramación de bitstream: grabación vía
iceprog(iCE40) oopenFPGALoader(ECP5/Gowin/Nexus)Análisis de veredicto de simulación: detección de patrones PASS/FAIL/UVM con resumen de señales VCD
Compilaciones en segundo plano: síntesis/PnR de larga duración con sondeo de estado y una lista blanca estricta de comandos solo para EDA
Registro de núcleos IP: búsqueda e importación en vivo desde GitHub con metadatos CAPI2 de FuseSoC
Verificación de estado: descubre qué herramientas de OSS CAD Suite están instaladas y accesibles
Tabla de contenidos
Cómo funciona
Your AI assistant <--> fpgaZeroMCP (stdio MCP server) <--> OSS tools
|
cores/ registry on GitHub
(uart_tx, fifo + any imported)El servidor MCP se ejecuta como un subproceso local. Tu IA llama a las herramientas a través de JSON-RPC (stdio). El servidor invoca a Yosys, nextpnr, iverilog, Verilator y otros de OSS CAD Suite, y puede extraer núcleos FPGA de código abierto directamente desde GitHub.
Requisitos previos
Requisito | Notas |
Python 3.11+ | |
Incluye iverilog, Yosys, nextpnr, Verilator, Verible, GHDL en una sola descarga | |
Opcional: solo necesario para herramientas LiteX |
Agrega OSS CAD Suite a tu PATH después de la instalación. Todos los envoltorios de herramientas se degradan correctamente si falta una herramienta.
Acceso a la API de GitHub
Las solicitudes a la API de GitHub no están autenticadas por defecto y están sujetas a límites de tasa. Establece un token de acceso personal para aumentar los límites:
# Linux/macOS
export GITHUB_TOKEN=ghp_...# Windows (PowerShell)
$env:GITHUB_TOKEN = "ghp_..."Instalación
git clone https://github.com/lcapossio/fpgaZeroMCP
cd fpgaZeroMCP
pip install -e .Configuración del cliente MCP
Claude Desktop
Agrega a claude_desktop_config.json:
{
"mcpServers": {
"fpgaZeroMCP": {
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}
}VS Code (GitHub Copilot)
Agrega a .vscode/mcp.json en tu espacio de trabajo:
{
"servers": {
"fpgaZeroMCP": {
"type": "stdio",
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}
}Cursor / Windsurf
Agrega a tu configuración de MCP (Settings → MCP Servers):
{
"fpgaZeroMCP": {
"command": "python",
"args": ["/path/to/fpgaZeroMCP/server.py"],
"env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
}
}Ejemplos de prompts
"Búscame un núcleo maestro I2C e impórtalo."
"Sintetiza los archivos VHDL en ~/projects/my_fpga y dime el recuento de LUT."
"Haz PnR de mi proyecto para la placa iCEBreaker, luego grábalo."
"Ejecuta place-and-route con semilla 42 para intentar mejorar la temporización."
"Haz linting de este Verilog y corrige cualquier error."
"Simula este FIFO y dime si el banco de pruebas pasó."
"Formatea este archivo SystemVerilog."
"¿Qué herramientas de OSS CAD Suite tengo instaladas?"
Herramientas
Calidad de HDL
Herramienta | Descripción |
| Verificación de sintaxis/errores vía iverilog (V/SV) o GHDL (VHDL) — archivo único |
| Linting de varios archivos juntos para resolver referencias entre módulos |
| Diagnósticos estructurados por línea — Verilator → fallback a verible (V/SV), GHDL (VHDL) |
| Auto-formateo vía verible-verilog-format (V/SV) o vsg (VHDL) |
Flujo de diseño
Herramienta | Descripción |
| Compila y ejecuta bancos de pruebas — iverilog (V/SV) o GHDL (VHDL). Devuelve veredicto + resumen VCD |
| Síntesis de Yosys con estadísticas de recursos. Acepta |
| Yosys + nextpnr en un solo paso. Preajustes de placa, detección automática de restricciones, salida de bitstream |
| Graba un bitstream vía |
| Enumera preajustes de placa integrados (objetivo/dispositivo/paquete/reloj) |
Registro de núcleos IP
Herramienta | Descripción |
| Explora el registro local, filtra por categoría |
| Obtiene el manifiesto y el código fuente HDL de un núcleo |
| Obtiene un fragmento de instanciación parametrizado + archivos fuente |
| Busca en GitHub repositorios de IP FPGA con licencia MIT |
| Descarga un repositorio de GitHub al registro local |
| Importa un archivo |
LiteX
Herramienta | Descripción |
| Ejecuta un objetivo de placa LiteX con |
| Genera un SoC LiteX sin construir gateware |
| Ejecuta un objetivo de placa LiteX con argumentos totalmente personalizados |
Gestión de compilaciones
Herramienta | Descripción |
| Inicia un comando de larga duración en segundo plano (solo herramientas EDA permitidas) |
| Verifica el progreso — estado, tiempo transcurrido, fase analizada/utilización/temporización |
| Lista todas las compilaciones rastreadas (en ejecución y finalizadas) |
| Cancela una compilación en segundo plano en ejecución |
| Elimina registros de compilación antiguos por antigüedad y tamaño total |
Servidor / registro
Herramienta | Descripción |
| Informa qué herramientas de OSS CAD Suite están instaladas, con rutas y versiones |
| Vuelve a escanear los directorios de núcleos sin reiniciar el servidor |
Registro de núcleos IP
Los núcleos residen en cores/<name>/ — un manifiesto core.json y uno o más archivos HDL. El servidor los descubre automáticamente al iniciar y los recarga después de cualquier importación.
Se incluyen dos núcleos de referencia (uart_tx, fifo) para demostrar el formato. El registro no está destinado a crecer aquí — está impulsado por GitHub.
Obtención de núcleos en tiempo de ejecución
# 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})El servidor utiliza automáticamente metadatos CAPI2 de FuseSoC (archivos .core) cuando se encuentran en el repositorio, proporcionando información más rica sobre parámetros y puertos. Solo se aceptan repositorios con una licencia permitida.
Contribuir con un núcleo
No abras PRs agregando núcleos a este repositorio. En su lugar:
Publica tu repositorio HDL en GitHub con el tema
fpgay una licencia MITOpcionalmente, agrega un archivo
.corede FuseSoC CAPI2 para obtener metadatos más ricosCualquiera puede entonces hacer
import_github_core("you/your-core")directamente
Esto mantiene el servidor ligero y permite que la comunidad crezca orgánicamente en GitHub.
Objetivos de síntesis
Objetivo | Vendedor / Familia | P&R OSS completo |
| Lattice iCE40 | sí — nextpnr-ice40 |
| Lattice ECP5 | sí — nextpnr-ecp5 |
| Lattice Nexus (CrossLink-NX, CertusPro-NX) | sí — nextpnr-nexus |
| Gowin | sí — nextpnr-gowin |
| Xilinx / AMD | Solo síntesis |
| Intel / Altera | Solo síntesis |
| Independiente de la tecnología | Solo netlist |
Valores comunes de dispositivo/paquete para place_and_route:
Objetivo | dispositivo | paquete |
ice40 |
|
|
ecp5 |
|
|
nexus |
| (incrustado en la cadena del dispositivo) |
gowin |
| (incrustado en la cadena del dispositivo) |
LiteX
LiteX es un framework SoC de Python que puede apuntar a muchas placas FPGA. fpgaZeroMCP expone tres herramientas LiteX dedicadas y también acepta backend="litex" en synthesize y 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"])Repositorios de núcleos locales
Puedes apuntar el registro a tus propios directorios HDL locales de dos maneras:
Variable de entorno:
Linux/macOS (separado por dos puntos):
export USERCORES_PATH=/home/you/my-cores:/home/you/work-coresWindows (separado por punto y coma, PowerShell):
$env:USERCORES_PATH = "C:\Users\you\my-cores;C:\Users\you\work-cores"Archivo de configuración (~/.fpgazero_mcp/config.json):
{
"core_paths": [
"/home/you/my-cores",
"/home/you/work-cores"
]
}Todas las rutas se escanean al inicio junto con el directorio cores/ integrado.
Licencias permitidas
Por defecto, import_github_core acepta repositorios con cualquiera de estas licencias SPDX:
MIT, BSD-2-Clause, BSD-3-Clause, Apache-2.0, ISC, GPL-2.0, GPL-3.0, LGPL-2.1, LGPL-3.0Anula con la variable de entorno FPGAZERO_ALLOWED_LICENSES (IDs SPDX separados por comas):
# 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"Los IDs de licencia siguen la notación SPDX. La verificación se realiza en el momento de la importación; search_github_cores devuelve resultados independientemente de la licencia para que puedas evaluar antes de importar.
Pruebas
pip install -e ".[dev]"
python -m pytest tests/ -vAlgunas pruebas requieren herramientas de OSS CAD Suite en el PATH. Las pruebas que necesitan herramientas faltantes se omiten automáticamente.
Variables de entorno
Variable | Descripción |
| Token de acceso personal de GitHub — aumenta los límites de tasa de la API |
| Directorios de búsqueda de núcleos adicionales (delimitados por separador de ruta del SO) |
| IDs SPDX separados por comas para |
| Anula el directorio raíz del espacio de trabajo temporal |
| Lista separada por separador de ruta del SO de directorios adicionales que |
Autónomo / Scripting
La API de Python se puede utilizar directamente sin un cliente 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 demoEsquema core.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"]
}Autor
Leonardo Capossio (bard0) — hello@bard0.com
Licencia
MIT — ver 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