Skip to main content
Glama

fpgaZeroMCP

CI License: MIT Python MCP

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 code en línea, diccionario files de varios archivos o ruta project_dir en el disco

  • Soporte de listas de archivos: files.f/sources.f con directivas +incdir+, +define+ y -f anidadas

  • Preajustes 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/.cst en el directorio de tu proyecto

  • Programación de bitstream: grabación vía iceprog (iCE40) o openFPGALoader (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+

OSS CAD Suite

Incluye iverilog, Yosys, nextpnr, Verilator, Verible, GHDL en una sola descarga

LiteX + litex-boards

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

lint_hdl

Verificación de sintaxis/errores vía iverilog (V/SV) o GHDL (VHDL) — archivo único

lint_project

Linting de varios archivos juntos para resolver referencias entre módulos

get_diagnostics

Diagnósticos estructurados por línea — Verilator → fallback a verible (V/SV), GHDL (VHDL)

format_hdl

Auto-formateo vía verible-verilog-format (V/SV) o vsg (VHDL)

Flujo de diseño

Herramienta

Descripción

simulate

Compila y ejecuta bancos de pruebas — iverilog (V/SV) o GHDL (VHDL). Devuelve veredicto + resumen VCD

synthesize

Síntesis de Yosys con estadísticas de recursos. Acepta code, files o project_dir. Verilog, SV, VHDL

place_and_route

Yosys + nextpnr en un solo paso. Preajustes de placa, detección automática de restricciones, salida de bitstream

program_fpga

Graba un bitstream vía iceprog o openFPGALoader

list_boards

Enumera preajustes de placa integrados (objetivo/dispositivo/paquete/reloj)

Registro de núcleos IP

Herramienta

Descripción

list_ip_cores

Explora el registro local, filtra por categoría

get_ip_core

Obtiene el manifiesto y el código fuente HDL de un núcleo

generate_ip

Obtiene un fragmento de instanciación parametrizado + archivos fuente

search_github_cores

Busca en GitHub repositorios de IP FPGA con licencia MIT

import_github_core

Descarga un repositorio de GitHub al registro local

import_fusesoc_core

Importa un archivo .core de FuseSoC CAPI2 local

LiteX

Herramienta

Descripción

litex_build

Ejecuta un objetivo de placa LiteX con --build

litex_soc

Genera un SoC LiteX sin construir gateware

litex_flow

Ejecuta un objetivo de placa LiteX con argumentos totalmente personalizados

Gestión de compilaciones

Herramienta

Descripción

start_build

Inicia un comando de larga duración en segundo plano (solo herramientas EDA permitidas)

build_status

Verifica el progreso — estado, tiempo transcurrido, fase analizada/utilización/temporización

list_builds

Lista todas las compilaciones rastreadas (en ejecución y finalizadas)

cancel_build

Cancela una compilación en segundo plano en ejecución

cleanup_build_logs

Elimina registros de compilación antiguos por antigüedad y tamaño total

Servidor / registro

Herramienta

Descripción

check_tools

Informa qué herramientas de OSS CAD Suite están instaladas, con rutas y versiones

reload_registry

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:

  1. Publica tu repositorio HDL en GitHub con el tema fpga y una licencia MIT

  2. Opcionalmente, agrega un archivo .core de FuseSoC CAPI2 para obtener metadatos más ricos

  3. Cualquiera 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

ice40

Lattice iCE40

sí — nextpnr-ice40

ecp5

Lattice ECP5

sí — nextpnr-ecp5

nexus

Lattice Nexus (CrossLink-NX, CertusPro-NX)

sí — nextpnr-nexus

gowin

Gowin

sí — nextpnr-gowin

xilinx

Xilinx / AMD

Solo síntesis

intel

Intel / Altera

Solo síntesis

generic

Independiente de la tecnología

Solo netlist

Valores comunes de dispositivo/paquete para place_and_route:

Objetivo

dispositivo

paquete

ice40

hx1k hx8k up5k lp1k

tq144 qn84 sg48 cm81

ecp5

25k 45k 85k

CABGA256 CABGA381

nexus

LIFCL-40-9BG400C

(incrustado en la cadena del dispositivo)

gowin

GW1N-UV4LQ144C6/I5

(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-cores

Windows (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.0

Anula 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/ -v

Algunas 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

GITHUB_TOKEN

Token de acceso personal de GitHub — aumenta los límites de tasa de la API

USERCORES_PATH

Directorios de búsqueda de núcleos adicionales (delimitados por separador de ruta del SO)

FPGAZERO_ALLOWED_LICENSES

IDs SPDX separados por comas para import_github_core (por defecto: MIT,BSD-2-Clause,BSD-3-Clause,Apache-2.0,ISC,GPL-2.0,GPL-3.0,LGPL-2.1,LGPL-3.0)

FPGAZERO_TMPDIR

Anula el directorio raíz del espacio de trabajo temporal

FPGAZERO_ALLOWED_DIRS

Lista separada por separador de ruta del SO de directorios adicionales que project_dir puede leer (además de cwd y $HOME)


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 demo

Esquema 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.

Install Server
A
security – no known vulnerabilities
A
license - permissive license
-
quality - not tested

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