
Silica
io.github.simaanc由 GitHub 账号 simaanc 发布v0.5.0更新于 Oct 26, 2026
RTL and FPGA tools: lint, simulate, formal, synthesize, place and route, program a board.
概览
让编码代理以结构化方式使用 RTL/FPGA EDA 工具链的 MCP 服务器:检查、仿真、形式验证、综合、布局布线并烧录开发板。
- 可以做什么
- 检查与编辑 RTL:运行 Verible、Verilator、svlint 或 SpyGlass 检查,格式化 SystemVerilog,列出工程文件,读取、搜索和写入 RTL 与约束文件
- 仿真与调试:运行 Verilator、Icarus、GHDL、VCS、Questa、Xcelium 或 cocotb,读取 VCD/FST 波形与覆盖率,打开波形查看器
- 形式验证:SymbiYosys 的 prove/bmc/cover、eqy 等价性检查、JasperGold 或 VC Formal,并返回反例轨迹
- 综合与实现:使用 Yosys、Vivado、Quartus 或 DC Shell 综合,再用 nextpnr 布局布线,返回各时钟时序与比特流
- 上板验证:用 openFPGALoader 烧录开发板,并通过 expect 匹配抓取 UART 输出
- 环境检查:doctor 工具报告已安装的 EDA 工具及缺失工具的安装方式,另提供分步排查提示
- 适用场景
- 适合代理在真实硬件仓库中自行闭环工作:跑仿真、按文件和行号读取失败信息、修改 RTL 后重跑,或把设计从 RTL 一路做到烧录进 FPGA 开发板。若本机没有安装任何 EDA 工具,或只需要通用代码编辑,则意义不大。
- 运行要求
- 以 stdio 本地运行,通过 uvx 启动 PyPI 包 silica-eda,因此需要先安装 uv;首次启动会下载软件包,除使用离线参数外需要网络。EDA 工具需用户自行安装(OSS CAD Suite、Verible、svlint、openXC7,或 PATH 中的商业工具)。可选扩展:串口抓取需要 pyserial,cocotb 测试台需要 cocotb。未声明认证或环境变量。
安装
在 SourceWeft 中
- 打开 控制台中的 Silica,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
AI-native EDA environment · MCP server for hardware design and verification
What it does
Silica is an MCP server that gives coding agents structured access to an EDA toolchain. The agent lints, simulates, proves, synthesizes, places and routes, programs a board and reads its UART through MCP tools, and gets parsed results back (errors with file and line, timing per clock, utilization, inferred memories, counterexample traces) instead of raw logs.
That closes the loop without copy-paste: run the simulation, read the failure, fix the RTL, re-run. The server also tells the agent the order to work in and the pitfalls to avoid, and a doctor tool reports which EDA tools are installed and how to install the rest.
Silica drives tools you install yourself: open-source tools (mostly from OSS CAD Suite), and commercial ones (VCS, Questa, Xcelium, Vivado, …) when they're on PATH. How well each is tested is listed under Supported tools.
What works today
The full flow has been run end to end on a Digilent Arty A7-100T (Xilinx Artix-7) with a PicoRV32 RISC-V SoC whose firmware prints a banner, echoes UART input and drives LEDs from a timer:
- RTL and lint: Verilator, Verible and svlint, with Verilator elaborating the whole multi-file design.
- Simulation: Icarus and Verilator running the real firmware from
$readmemh, with waveform (read_waveform) and line coverage (read_coverage). - Formal: SymbiYosys prove, cover and bounded checks on the UART and FIFO, a deliberately false assertion reported as FAIL with its counterexample, and eqy equivalence.
- Synthesis: Yosys
synth_xilinx, with utilization and the firmware ROM reported as block RAM with init data. - Place and route: openXC7's nextpnr-xilinx (100 MHz target, routed at 153 MHz), and the
.bitassembled withfpga-as. - Programming:
program_device(openFPGALoader) into SRAM, with the FPGA's DONE status checked. - Serial check:
capture_serialconfirming the banner and the echo over the board's UART.
These runs were manual, on one machine (OSS CAD Suite 2026-10-14, openXC7 toolchain-nix 1.0.0, Verible v0.0-4296, svlint 0.9.5). CI covers the open-source tools in a weekly integration job; see Supported tools.
Known limitations
- Vivado is synthesis only: there's no implementation or bitstream step.
- VCS, Questa and Xcelium adapters are tested only with mocked tool calls, never against a real install; the same goes for Quartus, DC Shell, JasperGold, VC Formal, SpyGlass and Verdi. If one misbehaves, please open an issue with the tool version and output.
- iCE40 and ECP5 bitstreams are packed with icepack/ecppack and checked against the real tools, but
program_devicehas only been tested on these boards with mocked openFPGALoader calls: no iCE40 or ECP5 board has been available.get_project_structuredoesn't list iCE40.pcffiles. - cocotb needs a Python whose glibc is compatible with the simulator it loads into. With OSS CAD Suite's simulators and a newer system Python (glibc newer than the suite's),
run_cocotbfails at import. - Formal: an
UNKNOWNprove withinduction_failuresis inconclusive (k-induction didn't close), not a bug. Deep bounded checks can be slow; 120 steps on the example UART took 16 minutes. - Offline: clients configured with
uvx silica-eda@latest(including the Claude Code plugin) can't start the server without network; see Offline under the install instructions for the--offlineworkaround. - Serial:
capture_serialneeds the port named explicitly and read/write access to it. A boot banner is usually missed by a capture started after programming. - Windows: the serial existence and permission pre-checks are POSIX-only, and the pty-based serial tests skip there.
Quick start
-
Install uv. silica itself needs no separate install: your agent starts it with
uvx silica-eda@latest, and uv'suvxdownloads silica-eda from PyPI on first use and runs it. To check, runuvx silica-eda@latest --version. -
Add silica to your agent. Run the setup wizard,
uvx silica-eda@latest setup, which writes each client's config for you (see Setup wizard), or follow Install in your agent. -
Install the EDA tools you need: OSS CAD Suite for most open-source tools, Verible and svlint for linting, openXC7 for Xilinx place and route. Then ask the agent to run
doctor. -
Try the UART example in
examples/uart/:Run the UART TX simulation in examples/uart/ and tell me if it passes.
Then break it and let the agent find the bug:
In examples/uart/uart_tx.sv, change the DATA state's shift to
shift_reg <= {shift_reg[6:0], 1'b0};. Run the simulation, find the bug and fix it.The testbench then prints
[FAIL]lines such asbit[2] is 0, expected 1, and the agent should trace them to the shift direction.
Install in your agent
Every client below starts the server with uvx silica-eda@latest, so there is no separate install step for silica: uvx downloads it into a cached environment on first use and picks up new releases when the client next starts the server. Install uv first; that's what provides uvx. If you'd rather install silica yourself, uv tool install silica-eda or pip install silica-eda puts a silica command on your PATH, and the client's command becomes silica with the argument serve. uvx silica-eda needs a silica-eda release newer than 0.3.1; on 0.3.1 use uvx --from silica-eda@latest silica instead.
silica drives EDA tools you install separately (Verilator, Yosys, SymbiYosys, nextpnr, …); see Installing the EDA tools. Once connected, ask the agent to run the doctor tool: it lists what's installed and how to install what's missing.
Claude Code (plugin, with a workflow skill)
In Claude Code:
On Claude Code 2.1.275 or later this also works in one step: /plugin install silica-eda --marketplace simaanc/silica-eda.
Updates: the plugin's server always runs uvx silica-eda@latest. To also receive plugin updates (new skills, config changes) automatically, turn on auto-update for the marketplace, which is off by default: /plugin → Marketplaces → silica-eda → Enable auto-update. Admins can set "autoUpdate": true on the marketplace's extraKnownMarketplaces entry in managed settings. Without auto-update, run /plugin marketplace update silica-eda.
Without the plugin, add just the server:
Claude Desktop
Open Settings → Developer → Edit Config and add the server to claude_desktop_config.json, then quit and restart Claude Desktop:
If the server doesn't start, Claude Desktop may not see your shell's PATH: put the full path from which uvx in command.
Codex CLI
or in ~/.codex/config.toml:
Cursor
Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
One-click install: open this link in your browser (GitHub doesn't make cursor:// links clickable):
VS Code (GitHub Copilot)
or in .vscode/mcp.json (workspace) or your user-profile mcp.json:
Gemini CLI
or in ~/.gemini/settings.json (user) or .gemini/settings.json (project):
Setup wizard
uvx silica-eda@latest setup (or silica setup from a pip install) asks which clients and EDA tools you use, saves the tool choices to ~/.silica/config.toml, and adds a silica server that runs uvx silica-eda@latest to each client's config. It shows each change and asks before writing it; other servers and settings in the file are kept. uvx is written as a full path when it's on PATH, because desktop apps may not see your shell's PATH.
Where a client's documentation gives no config path for your platform (Zed on macOS and Windows, OpenCode on Windows), or the existing file can't be read as plain JSON (for example a Zed settings.json with comments), the wizard leaves the file alone and prints the block to add by hand.
Optional extras. capture_serial needs pyserial and run_cocotb needs cocotb. With uvx, add them to the arguments: "args": ["--with", "pyserial", "silica-eda@latest"] (or --with cocotb). With pip, install silica-eda[serial] or silica-eda[cocotb].
Offline. @latest makes uvx ask PyPI for the newest release every time the client starts the server, so without network the server doesn't start (error: Request failed after 3 retries), even when silica is already cached. To work offline, put --offline before the package, "args": ["--offline", "silica-eda@latest"] (the plugin's command can't be edited: disable the plugin with /plugin and add the server with claude mcp add --scope user silica -- uvx --offline silica-eda@latest). uvx then runs the newest release already in its cache, which needs at least one earlier online start. Remove --offline again to get updates.
Pin a version or roll back. Replace silica-eda@latest with an exact version, silica-eda@<version> (for example uvx [email protected] once that release exists), and the client keeps running that release until you change it. To roll back after a bad release, pin the previous version the same way. The Claude Code plugin always runs @latest; to pin there, add the server with claude mcp add and a pinned version instead of installing the plugin. Releases are listed on PyPI and in the changelog.
MCP tools
Prompts with step-by-step triage scripts: debug_simulation_failure, debug_formal_failure, write_testbench, generate_assertions, close_timing, cdc_review.
Supported tools
"Real tool in CI" means the weekly integration workflow runs it from OSS CAD Suite, except Verible and svlint, which the CI workflow installs and tests on every PR. The openXC7 workflow builds openXC7 from toolchain-nix and runs the Xilinx flow when its code changes and weekly. "Tested on hardware" means the manual Arty A7-100T run described under What works today. "Mocked only" means unit tests with captured or representative output, never a real install.
Checking a design on hardware
program_device and capture_serial close the loop on a real board: program it, then read what the design prints. capture_serial needs pyserial, from the serial extra:
A typical check after run_place_route has produced a bitstream, here checking that the firmware on an Arty A7-100T echoes what it receives:
Name the port explicitly; silica never scans for serial devices. On boards with an FTDI JTAG+UART bridge (Digilent Arty, Basys, Nexys) the UART is the second interface, if01. The design starts running as soon as programming finishes, so a banner printed at boot is usually gone before a capture opened afterwards: send something the firmware answers (as above), or press the board's reset button during the capture. If the port is missing or your user can't open it, the result carries an error and a fix such as:
Xilinx 7-series flow
With openXC7 set up, an Artix-7 design goes from RTL to a programmed board in three calls:
device is the full part with speed grade. For the Arty A7-100T the openFPGALoader board is arty_a7_100t (arty is the 35T).
Configuration
Controlling tool selection
By default every detected tool is available and auto picks the best one (open-source first). To control this per category, edit ~/.silica/config.toml:
priority reorders what auto tries. enabled is an enforced allowlist: tools not on it can't be used even when the model asks for one explicitly — the request is rejected with an error naming the tool and what's enabled, so the model can retry with an allowed one. Useful when a machine has commercial tools installed that shouldn't be run (license pools, air-gapped flows). Leave enabled empty or unset for no restriction.
Categories: simulation, synthesis, place_route, formal, lint, format, waveform, program.
Guardrails
Built for pointing an autonomous agent at a real repo:
- File access is confined to the project directory —
read_rtl,write_rtl,format_rtl,get_constraints,search_rtlandget_project_structurereject absolute or..paths that escape the project root (SILICA_PROJECT_ROOT, theproject.rootconfig key, or the directory the server was started in). Relative paths are resolved against that root. - Writes are diff-first —
write_rtldefaults to a dry run that returns a unified diff; nothing touches disk until explicitly confirmed. - A hung tool never kills the server — every tool call has a timeout and returns a structured error instead of crashing the session.
CLI
Versioning and compatibility
silica follows Semantic Versioning, applied to what MCP clients and agents depend on: tool names, their parameters, and the fields in their results. The same rules hold for 0.x releases.
- Within a major version no tool is renamed or removed, no parameter is removed or made required, and no result field is removed or renamed. Minor releases may add tools, optional parameters and result fields.
- Deprecations are announced in CHANGELOG.md and in the affected tool's description at least one minor release before the change ships in the next major version.
- Every user-visible change is listed in the changelog when it merges, under "Unreleased", and moves under the version heading at release.
Development
See CONTRIBUTING.md for conventions, docs/architecture.md for the code layout, and RELEASING.md for releases.
License
silica is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only). You can use, modify and redistribute it, including commercially. If you distribute a modified version, or run one as a service that others interact with over a network, you must make your changes' source available under the same license.
来源:README.md,提交 3ae4ae5
工具
0版本历史
1- v0.5.0最新Oct 20, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分