Skip to main content
Glama

fpgaZeroMCP

CI License: MIT Python MCP

AI 어시스턴트에게 완전한 FPGA 툴체인(린트, 시뮬레이션, 합성, 배치 및 배선, 비트스트림 프로그래밍)과 GitHub 기반의 실시간 IP 코어 레지스트리를 제공하는 오픈 소스 Model Context Protocol 서버입니다.

AI에게 코어를 검색하고 가져오거나, HDL을 린트하고, 디스크에 있는 다중 파일 VHDL 또는 Verilog 프로젝트를 합성하고, 시뮬레이션을 실행한 다음, 비트스트림을 보드에 플래싱하도록 요청하세요. 이 모든 작업을 채팅 창을 떠나지 않고 수행할 수 있습니다.

기능

  • 다중 언어: Verilog, SystemVerilog, VHDL (ghdl-yosys-plugin 사용)

  • 세 가지 입력 모드: 인라인 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 전용 명령 허용 목록을 통한 장시간 합성/PnR 실행

  • 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+

OSS CAD Suite

iverilog, Yosys, nextpnr, Verilator, Verible, GHDL을 한 번에 다운로드

LiteX + litex-boards

선택 사항 — 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 설정(설정 → MCP 서버)에 추가:

{
  "fpgaZeroMCP": {
    "command": "python",
    "args": ["/path/to/fpgaZeroMCP/server.py"],
    "env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
  }
}

예시 프롬프트

  • "I2C 마스터 코어를 찾아서 가져와줘."

  • "~/projects/my_fpga에 있는 VHDL 파일을 합성하고 LUT 개수를 알려줘."

  • "iCEBreaker 보드용으로 내 프로젝트를 PnR하고 플래싱해줘."

  • "더 나은 타이밍을 위해 시드 42로 배치 및 배선을 실행해줘."

  • "이 Verilog를 린트하고 오류를 수정해줘."

  • "이 FIFO를 시뮬레이션하고 테스트벤치가 통과했는지 알려줘."

  • "이 SystemVerilog 파일 형식을 지정해줘."

  • "어떤 OSS CAD Suite 도구가 설치되어 있어?"


도구

HDL 품질

도구

설명

lint_hdl

iverilog(V/SV) 또는 GHDL(VHDL)을 통한 구문/오류 검사 — 단일 파일

lint_project

교차 모듈 참조가 해결되도록 여러 파일을 함께 린트

get_diagnostics

구조화된 라인별 진단 — Verilator → verible 폴백(V/SV), GHDL(VHDL)

format_hdl

verible-verilog-format(V/SV) 또는 vsg(VHDL)를 통한 자동 형식 지정

설계 흐름

도구

설명

simulate

테스트벤치 컴파일 및 실행 — iverilog(V/SV) 또는 GHDL(VHDL). 결과 + VCD 요약 반환

synthesize

리소스 통계가 포함된 Yosys 합성. code, files 또는 project_dir 허용. Verilog, SV, VHDL

place_and_route

Yosys + nextpnr을 한 단계로 실행. 보드 프리셋, 제약 조건 자동 감지, 비트스트림 출력

program_fpga

iceprog 또는 openFPGALoader를 통해 비트스트림 플래싱

list_boards

내장 보드 프리셋(대상/장치/패키지/클럭) 열거

IP 코어 레지스트리

도구

설명

list_ip_cores

로컬 레지스트리 탐색, 카테고리별 필터링

get_ip_core

코어에 대한 매니페스트 및 HDL 소스 가져오기

generate_ip

매개변수화된 인스턴스화 스니펫 + 소스 파일 가져오기

search_github_cores

MIT 라이선스 FPGA IP 저장소에 대해 GitHub 검색

import_github_core

GitHub 저장소를 로컬 레지스트리로 다운로드

import_fusesoc_core

로컬 FuseSoC CAPI2 .core 파일 가져오기

LiteX

도구

설명

litex_build

--build와 함께 LiteX 보드 대상 실행

litex_soc

게이트웨어를 빌드하지 않고 LiteX SoC 생성

litex_flow

완전히 사용자 정의된 인수를 사용하여 LiteX 보드 대상 실행

빌드 관리

도구

설명

start_build

백그라운드에서 장시간 실행되는 명령 시작(허용된 EDA 도구만)

build_status

진행 상황 확인 — 상태, 경과 시간, 파싱된 단계/사용률/타이밍

list_builds

추적 중인 모든 빌드(실행 중 및 완료됨) 나열

cancel_build

실행 중인 백그라운드 빌드 종료

cleanup_build_logs

나이 및 총 크기에 따라 오래된 빌드 로그 삭제

서버 / 레지스트리

도구

설명

check_tools

경로 및 버전과 함께 설치된 OSS CAD Suite 도구 보고

reload_registry

서버를 다시 시작하지 않고 코어 디렉토리 다시 스캔


IP 코어 레지스트리

코어는 cores/<name>/에 위치하며, core.json 매니페스트와 하나 이상의 HDL 파일로 구성됩니다. 서버는 시작 시 자동으로 이를 검색하고 가져오기 후 다시 로드합니다.

형식을 보여주기 위해 두 개의 참조 코어(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 파일)를 자동으로 사용하여 더 풍부한 매개변수 및 포트 정보를 제공합니다. 허용된 라이선스가 있는 저장소만 허용됩니다.

코어 기여하기

이 저장소에 코어를 추가하는 PR을 열지 마세요. 대신:

  1. fpga 토픽과 MIT 라이선스로 GitHub에 HDL 저장소를 게시하세요.

  2. 선택적으로 더 풍부한 메타데이터를 위해 FuseSoC CAPI2 .core 파일을 추가하세요.

  3. 누구나 import_github_core("you/your-core")를 통해 직접 가져올 수 있습니다.

이렇게 하면 서버가 가볍게 유지되고 커뮤니티가 GitHub에서 유기적으로 성장할 수 있습니다.


합성 대상

대상

공급업체 / 제품군

전체 OSS P&R

ice40

Lattice iCE40

예 — nextpnr-ice40

ecp5

Lattice ECP5

예 — nextpnr-ecp5

nexus

Lattice Nexus (CrossLink-NX, CertusPro-NX)

예 — nextpnr-nexus

gowin

Gowin

예 — nextpnr-gowin

xilinx

Xilinx / AMD

합성 전용

intel

Intel / Altera

합성 전용

generic

기술 독립적

넷리스트 전용

place_and_route에 대한 일반적인 장치/패키지 값:

대상

장치

패키지

ice40

hx1k hx8k up5k lp1k

tq144 qn84 sg48 cm81

ecp5

25k 45k 85k

CABGA256 CABGA381

nexus

LIFCL-40-9BG400C

(장치 문자열에 포함됨)

gowin

GW1N-UV4LQ144C6/I5

(장치 문자열에 포함됨)


LiteX

LiteX는 많은 FPGA 보드를 대상으로 할 수 있는 Python SoC 프레임워크입니다. fpgaZeroMCP는 세 가지 전용 LiteX 도구를 노출하며 synthesizeplace_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 디렉토리에 지정할 수 있습니다:

환경 변수:

Linux/macOS (콜론으로 구분):

export USERCORES_PATH=/home/you/my-cores:/home/you/work-cores

Windows (세미콜론으로 구분, 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_TOKEN

GitHub 개인 액세스 토큰 — API 속도 제한을 높임

USERCORES_PATH

추가 코어 검색 디렉토리 (OS 경로 구분 기호로 구분)

FPGAZERO_ALLOWED_LICENSES

import_github_core에 대한 쉼표로 구분된 SPDX ID (기본값: 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

임시 작업 공간 루트 디렉토리 재정의

FPGAZERO_ALLOWED_DIRS

project_dir이 읽을 수 있는 추가 디렉토리의 OS 경로 구분 기호로 구분된 목록 (cwd 및 $HOME 외에)


독립 실행형 / 스크립팅

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 demo

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"]
}

작성자

Leonardo Capossio (bard0) — hello@bard0.com

라이선스

MIT — 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