关于 Silica
Silica 是面向硬件设计与验证的 MCP 服务,让编码 Agent 通过结构化工具操作 EDA 工具链。它返回解析后的错误、时序、利用率和反例等结果,并提供工作顺序提示与工具检测。
主要功能
- 01执行 RTL 检查与仿真
- 02运行形式化验证并查看反例
- 03综合、布局布线与 FPGA 编程
- 04读取波形、覆盖率和串口输出
- 05解析结果并检测 EDA 工具
适用场景
- 01定位 RTL 仿真失败并迭代修复
- 02验证 FIFO 或 UART 的形式化属性
- 03综合设计并为 FPGA 生成位流
- 04检查时序、资源利用率及串口输出
MCP 相关
Silica 通过 MCP 向编码 Agent 暴露 EDA 工具,用于检查、仿真、验证、综合、布局布线和设备编程。工具返回结构化结果,而非仅提供原始日志。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
18收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| top | any | 否 | |
| file | string | 是 | |
| trace | boolean | 否 | |
| timeout | integer | 否 | |
| coverage | boolean | 否 | |
| simulator | string | 否 | |
| testbench | string | 是 | |
| extra_sources | any | 否 |
详细介绍
功能简介
Silica 是一个 MCP 服务,可让编码 Agent 以结构化方式访问 EDA 工具链。Agent 通过 MCP 工具执行 lint、仿真、形式化验证、综合、布局布线、板卡编程,并读取 UART 数据;服务会返回解析后的结果(包括含文件和行号的错误、各时钟的时序、资源利用率、推断出的存储器、反例轨迹),而不是原始日志。
这样就能无需复制粘贴,完成闭环:运行仿真、读取故障、修复 RTL、重新运行。服务还会告知 Agent 工作顺序和需要避免的陷阱;doctor 工具则会报告已安装的 EDA 工具以及如何安装其余工具。
Silica 会驱动由你自行安装的工具:开源工具(主要来自 OSS CAD Suite),以及已加入 PATH 的商业工具(VCS、Questa、Xcelium、Vivado,等等)。各工具的测试情况请参阅支持的工具。
当前可用功能
已在一块 Digilent Arty A7-100T(Xilinx Artix-7)上端到端运行完整流程,使用的 PicoRV32 RISC-V SoC 固件会打印横幅、回显 UART 输入,并通过计时器驱动 LED:
- RTL 和 lint:使用 Verilator、Verible 和 svlint,其中 Verilator 会展开整个多文件设计。
- 仿真:Icarus 和 Verilator 通过
$readmemh运行实际固件,并支持波形(read_waveform)和行覆盖率(read_coverage)。 - 形式化验证:使用 SymbiYosys 对 UART 和 FIFO 执行证明、覆盖和有界检查;将一个故意设置为错误的断言报告为 FAIL,并提供其反例;还执行 eqy 等价性检查。
- 综合:使用 Yosys
synth_xilinx,并报告资源利用率,以及作为带初始化数据的块 RAM 推断出的固件 ROM。 - 布局布线:使用 openXC7 的 nextpnr-xilinx(目标频率为 100 MHz,布线频率达到 153 MHz),并通过
fpga-as组装.bit文件。 - 编程:使用
program_device(openFPGALoader)将程序写入 SRAM,并检查 FPGA 的 DONE 状态。 - 串口检查:使用
capture_serial确认横幅已打印,并通过板卡 UART 完成回显。
这些运行均在一台机器上手动完成(OSS CAD Suite 2026-10-14、openXC7 toolchain-nix 1.0.0、Verible v0.0-4296、svlint 0.9.5)。CI 会在每周集成任务中覆盖这些开源工具;详见支持的工具。
已知限制
- Vivado 仅支持综合:不包含实现或比特流生成步骤。
- VCS、Questa 和 Xcelium 适配器仅通过模拟工具调用进行测试,从未在真实安装环境中测试;Quartus、DC Shell、JasperGold、VC Formal、SpyGlass 和 Verdi 也一样。如果其中某个工具运行异常,请附上工具版本和输出并提交问题。
- iCE40 和 ECP5 比特流使用 icepack/ecppack 打包,并通过真实工具检查,但
program_device仅在这些开发板上通过模拟 openFPGALoader 调用进行测试:目前没有可用的 iCE40 或 ECP5 开发板。get_project_structure不会列出 iCE40 的.pcf文件。 - cocotb 需要使用 glibc 与其加载的仿真器兼容的 Python。如果使用 OSS CAD Suite 的仿真器搭配较新的系统 Python(其 glibc 版本比套件中的更新),
run_cocotb会在导入时失败。 - 形式验证:带有
induction_failures的UNKNOWN证明结果表示结论不确定(k 归纳未能收敛),并非 bug。深度较大的有界检查可能很慢;示例 UART 的 120 步检查耗时 16 分钟。 - 离线:配置为使用
uvx silica-eda@latest的客户端(包括 Claude Code 插件)无法在没有网络连接时启动服务;请参阅安装说明中的离线部分,了解--offline变通方法。 - 串口:
capture_serial需要明确指定端口,并且需要对该端口具有读写权限。在编程完成后才开始采集,通常会错过启动横幅。 - Windows:串口存在性和权限的预检查仅支持 POSIX 系统,基于 pty 的串口测试会在 Windows 上跳过。
快速开始
-
安装 uv。 silica 本身无需单独安装:你的 Agent 会使用
uvx silica-eda@latest启动它;uv 的uvx会在首次使用时从 PyPI 下载 silica-eda 并运行。运行uvx silica-eda@latest --version即可检查。 -
将 silica 添加到你的 Agent。 运行设置向导
uvx silica-eda@latest setup,它会为你写入各客户端的配置(请参阅设置向导);也可以按照在 Agent 中安装中的说明操作。 -
安装所需的 EDA 工具:OSS CAD Suite 适用于大多数开源工具,Verible 和 svlint 用于代码检查,openXC7 用于 Xilinx 布局布线。然后让 Agent 运行
doctor。 -
试试 UART 示例
examples/uart/:运行 examples/uart/ 中的 UART TX 仿真,并告诉我是否通过。
然后修改代码,让 Agent 找出 bug:
在 examples/uart/uart_tx.sv 中,将 DATA 状态中的移位操作改为
shift_reg <= {shift_reg[6:0], 1'b0};。运行仿真,找出 bug 并修复它。随后,测试平台会打印诸如
bit[2] is 0, expected 1的[FAIL]行,Agent 应能据此追查到移位方向。
在 Agent 中安装
以下每个客户端都会通过 uvx silica-eda@latest 启动服务,因此无需单独安装 silica:首次使用时,uvx 会将其下载到缓存环境中;之后客户端下次启动服务时会获取新版本。请先安装 uv,它会提供 uvx。如果你更愿意自行安装 silica,uv tool install silica-eda 或 pip install silica-eda 会将 silica 命令添加到 PATH 中,此时客户端的命令改为 silica,参数为 serve。uvx silica-eda 需要高于 0.3.1 的 silica-eda 版本;若使用 0.3.1,请改用 uvx --from silica-eda@latest silica。
silica 会驱动你单独安装的 EDA 工具(Verilator、Yosys、SymbiYosys、nextpnr 等);请参阅安装 EDA 工具。连接后,让 Agent 运行 doctor 工具:它会列出已安装的工具,以及如何安装缺少的工具。
Claude Code(插件,包含工作流技能)
在 Claude Code 中:
/plugin marketplace add simaanc/silica-eda
/plugin install silica-eda@silica-eda
在 Claude Code 2.1.275 或更高版本中,也可以一步完成:/plugin install silica-eda --marketplace simaanc/silica-eda。
更新:插件的服务始终通过 uvx silica-eda@latest 运行。如要自动获取插件更新(新技能、配置变更),请为 marketplace 开启自动更新;该功能默认关闭:/plugin → Marketplaces → silica-eda → Enable auto-update。管理员可以在托管设置中 marketplace 的 extraKnownMarketplaces 条目上设置 "autoUpdate": true。若不开启自动更新,请运行 /plugin marketplace update silica-eda。
不使用插件时,只添加服务:
claude mcp add --transport stdio --scope user silica -- uvx silica-eda@latest
Claude Desktop
打开 Settings → Developer → Edit Config,将服务添加到 claude_desktop_config.json,然后退出并重启 Claude Desktop:
{
"mcpServers": {
"silica": {
"command": "uvx",
"args": ["silica-eda@latest"]
}
}
}
如果服务未能启动,Claude Desktop 可能无法读取 shell 的 PATH:将 which uvx 返回的完整路径填入 command。
Codex CLI
codex mcp add silica -- uvx silica-eda@latest
或添加到 ~/.codex/config.toml:
[mcp_servers.silica]
command = "uvx"
args = ["silica-eda@latest"]
# The first launch downloads silica; Codex's default start timeout is 10 s.
startup_timeout_sec = 60
Cursor
添加到 ~/.cursor/mcp.json(所有项目)或 .cursor/mcp.json(单个项目):
{
"mcpServers": {
"silica": {
"type": "stdio",
"command": "uvx",
"args": ["silica-eda@latest"]
}
}
}
一键安装:在浏览器中打开此链接(GitHub 不会将 cursor:// 链接设为可点击):
cursor://anysphere.cursor-deeplink/mcp/install?name=silica&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyJzaWxpY2EtZWRhQGxhdGVzdCJdfQ==
VS Code(GitHub Copilot)
code --add-mcp '{"name":"silica","type":"stdio","command":"uvx","args":["silica-eda@latest"]}'
或添加到 .vscode/mcp.json(工作区)或用户配置文件中的 mcp.json:
{
"servers": {
"silica": {
"type": "stdio",
"command": "uvx",
"args": ["silica-eda@latest"]
}
}
}
Gemini CLI
gemini mcp add -s user silica uvx silica-eda@latest
或添加到 ~/.gemini/settings.json(用户级)或 .gemini/settings.json(项目级):
{
"mcpServers": {
"silica": {
"command": "uvx",
"args": ["silica-eda@latest"]
}
}
}
uvx silica-eda@latest setup(或通过 pip 安装后运行 silica setup)会询问你使用哪些客户端和 EDA 工具,将工具选择保存到 ~/.silica/config.toml,并在每个客户端的配置中添加一个运行 uvx silica-eda@latest 的 silica 服务。向导会显示每项更改,并在写入前征求你的同意;文件中的其他服务和设置会予以保留。如果 uvx 位于 PATH 中,向导会使用其完整路径,因为桌面应用可能无法读取 shell 的 PATH。
| 客户端 | 向导执行的操作 |
|---|---|
| Claude Code | 运行 claude mcp add --transport stdio --scope user silica -- uvx silica-eda@latest |
| Claude Desktop | 在 claude_desktop_config.json 中配置 mcpServers(macOS、Windows、Linux) |
| Codex CLI | 运行 codex mcp add silica -- uvx silica-eda@latest |
| VS Code (Copilot) | 运行 code --add-mcp '{"name":"silica","type":"stdio","command":"uvx","args":["silica-eda@latest"]}',将其添加到你的用户配置文件 |
| Cursor | 在 ~/.cursor/mcp.json 中配置 mcpServers,并设置 "type": "stdio" |
| Gemini CLI | 在 ~/.gemini/settings.json 中配置 mcpServers |
| Windsurf | 在 ~/.codeium/windsurf/mcp_config.json 中配置 mcpServers |
| OpenCode | 在 ~/.config/opencode/opencode.json 中配置 mcp,格式为 {"type": "local", "command": ["uvx", "silica-eda@latest"]}(macOS、Linux) |
| Zed | 在 ~/.config/zed/settings.json 中配置 context_servers(Linux) |
如果客户端文档未提供适用于你平台的配置路径(Zed 在 macOS 和 Windows 上、OpenCode 在 Windows 上),或者现有文件无法作为普通 JSON 读取(例如含注释的 Zed settings.json),向导会保持文件不变,并打印需要手动添加的配置块。
可选依赖。 capture_serial 需要 pyserial,run_cocotb 需要 cocotb。使用 uvx 时,将它们添加到参数中:"args": ["--with", "pyserial", "silica-eda@latest"](或 --with cocotb)。使用 pip 时,安装 silica-eda[serial] 或 silica-eda[cocotb]。
离线使用。 @latest 会让 uvx 在每次客户端启动服务时向 PyPI 查询最新版本,因此没有网络时服务无法启动(error: Request failed after 3 retries),即使 silica 已在缓存中也一样。要离线使用,请在软件包前添加 --offline:"args": ["--offline", "silica-eda@latest"](无法编辑插件的命令:使用 /plugin 禁用插件,并通过 claude mcp add --scope user silica -- uvx --offline silica-eda@latest 添加服务)。uvx 随后会运行缓存中已有的最新版本;这需要此前至少在线启动过一次。恢复更新时,请移除 --offline。
固定版本或回滚。 将 silica-eda@latest 替换为确切版本 silica-eda@<version>(例如该版本发布后使用 uvx [email protected]),客户端便会一直运行该版本,直到你进行更改。若某个版本有问题,可用同样的方式固定到之前的版本以回滚。Claude Code 插件始终运行 @latest;要在其中固定版本,请改用 claude mcp add 添加指定版本的服务,而不要安装插件。版本发布记录见 PyPI 和变更日志。
MCP 工具
| 工具 | 描述 |
|---|---|
doctor | 报告 silica 的版本、是否有更新版本、已安装的 EDA 工具(及其版本),以及如何安装缺失的工具。 |
lint | Verible、Verilator、svlint 或 SpyGlass。Verilator 会一起展开 file 和 extra_files。错误和警告会附带文件、行号和规则。 |
format_rtl | 使用 verible-verilog-format 格式化 SystemVerilog。先显示差异(dry_run),遇到语法错误时拒绝处理文件。 |
run_simulation | Verilator、Icarus、GHDL、VCS、Questa 或 Xcelium。在 DUT 的目录中运行;返回错误,包括 $fatal/$error 消息、可选的 VCD(trace,测试平台调用 $dumpfile/$dumpvars)以及 Verilator 覆盖率。 |
run_cocotb | 运行 cocotb(Python)测试平台;逐项报告测试通过或失败。需要 cocotb extra。 |
read_waveform | 在指定时间窗口内读取 VCD/FST 波形中的信号跳变,无需查看器。 |
launch_waveform | 为用户在 Surfer、GTKWave 或 Verdi 中打开波形。 |
read_coverage | 按文件汇总 Verilator 的 coverage.dat,并列出未覆盖的行。 |
run_formal | SymbiYosys prove/bmc/cover、eqy 等价性检查、JasperGold、VC Formal。failures 是可达的反例(附带轨迹);UNKNOWN prove 则会列出 induction_failures。 |
synthesize | Yosys、Vivado、Quartus 或 DC Shell。提供利用率、附带文件和行号的错误、面向 FPGA 目标的 JSON 网表,以及(Yosys)每个推断出的存储器及其映射和是否包含初始化数据。 |
run_place_route | 支持 ice40、ECP5、Nexus、MachXO2 和 Xilinx 7-series 的 nextpnr(arch="xilinx",openXC7)。返回可加载的比特流:Xilinx(通过 fpga-as 生成 .bit)、iCE40(通过 icepack 生成 .bin)和 ECP5(通过 ecppack 生成 .bit)。提供各时钟的布线时序和利用率。 |
program_device | openFPGALoader。默认使用 SRAM,可按需使用 SPI 闪存;只有 FPGA 断言 DONE 时,Xilinx 加载才算成功。接收 .bit/.bin。 |
capture_serial | 在指定时间内读取 UART,可选择发送文本并匹配 expect 正则表达式。只打开指定的端口。需要 serial extra。 |
get_project_structure | 列出项目的 RTL 和约束文件。 |
read_rtl / search_rtl | 读取带行号的文件 / grep 项目的 RTL。 |
write_rtl | 修改文件,先显示差异(默认 dry_run=True)。 |
get_constraints | 读取约束文件(.xdc、.sdc、.lpf)。 |
包含分步排查脚本的提示词:debug_simulation_failure、debug_formal_failure、write_testbench、generate_assertions、close_timing、cdc_review。
支持的工具
| 工具 | 使用方 | 验证情况 |
|---|---|---|
| Verilator | lint、run_simulation、read_coverage | CI 中使用真实工具;用于 Arty A7 工作流 |
| Icarus Verilog | run_simulation、run_cocotb | CI 中使用真实工具;用于 Arty A7 工作流 |
| GHDL | run_simulation(VHDL) | CI 中使用真实工具 |
| cocotb | run_cocotb | CI 中使用真实工具 |
| Verible、svlint | lint、format_rtl | CI 中每个 PR 都使用真实工具(Verible v0.0-4296、svlint 0.9.5) |
| Yosys | synthesize | CI 中使用真实工具(generic、ice40、xilinx);用于 Arty A7 工作流 |
| SymbiYosys、eqy | run_formal | CI 中使用真实工具 |
| nextpnr-ice40 + icepack | run_place_route(arch="ice40") | CI 中使用真实工具(布局布线、封装);仅模拟编程 |
| nextpnr-ecp5 + ecppack | run_place_route(arch="ecp5") | CI 中使用真实工具(布局布线、封装);仅模拟编程 |
| nextpnr-nexus、-machxo2 | run_place_route | 仅模拟 |
| openXC7 nextpnr-xilinx + fpga-as | run_place_route(arch="xilinx") | 在硬件上测试(Arty A7-100T);CI 中对 xc7a35t 进行综合、布局布线和 .bit 组装 |
| openFPGALoader | program_device | 在硬件上测试(Arty A7-100T);仅模拟 iCE40 和 ECP5 |
| pyserial | capture_serial | 在硬件上测试;CI 中进行基于 pty 的测试 |
| Surfer、GTKWave、Verdi | launch_waveform | 未测试(启动后不等待结果) |
| VCS、Questa、Xcelium | run_simulation | 仅模拟 |
| Vivado | synthesize | 仅模拟;仅综合 |
| Quartus、DC Shell | synthesize | 仅模拟 |
| JasperGold、VC Formal | run_formal | 仅模拟 |
| SpyGlass | lint | 仅模拟 |
“CI 中使用真实工具”表示每周集成工作流会从 OSS CAD Suite 运行该工具,但 Verible 和 svlint 除外:CI 工作流会在每个 PR 中安装并测试它们。openXC7 工作流会从 toolchain-nix 构建 openXC7,并在其代码变更时以及每周运行 Xilinx 工作流。“在硬件上测试”表示手动运行 Arty A7-100T,详见当前可用功能。“仅模拟”表示使用捕获的或具有代表性的输出进行单元测试,不会实际安装工具。
在硬件上检查设计
program_device 和 capture_serial 可在真实开发板上完成闭环:对其编程,然后读取设计输出的内容。capture_serial 需要 pyserial,可通过 serial extra 安装:
pip install "silica-eda[serial]"
run_place_route 生成比特流后,通常会进行如下检查;这里检查 Arty A7-100T 上的固件是否会回显其收到的内容:
program_device(bitstream="build/soc.bit", board="arty_a7_100t")
-> {"success": true, ...}
capture_serial(port="/dev/serial/by-id/usb-Digilent_Digilent_USB_Device_<serial>-if01-port0",
baud=115200, duration=6, send="hello silica\r", send_delay=0.5,
expect="hello silica")
-> {"matched": true, "match": "hello silica", "elapsed_s": 0.53,
"lines": [{"t": 0.526, "text": "hello silica"}], ...}
请明确指定端口;silica 不会扫描串行设备。对于带有 FTDI JTAG+UART 桥接器的开发板(Digilent Arty、Basys、Nexys),UART 是第二个接口 if01。编程完成后,设计会立即开始运行,因此启动时打印的横幅通常会在之后开始捕获前消失:发送固件会回应的内容(如上所示),或在捕获期间按下开发板的复位按钮。如果端口不存在,或当前用户无法打开端口,结果会包含 error 和类似如下的 fix:
sudo setfacl -m u:you:rw /dev/ttyUSB1 (temporary: lasts until the device is unplugged);
permanent: sudo usermod -aG uucp you, then log out and back in
Xilinx 7 系列工作流
完成 openXC7 设置后,只需调用三次,即可将 Artix-7 设计从 RTL 部署到开发板:
synthesize(top_module="soc_top", files=["rtl/soc_top.sv", ...], target="xilinx", tool="yosys")
-> {"netlist": "/tmp/silica_synth_.../netlist.json", "memories": [...], ...}
run_place_route(netlist="<netlist>", arch="xilinx", device="xc7a100tcsg324-1",
constraint="arty.xdc", freq=100, output="build/soc.bit")
-> {"output": "build/soc.bit", "timing_summary": {"clocks": [{"max_freq_mhz": 153.4, "pass": true}]}, ...}
program_device(bitstream="build/soc.bit", board="arty_a7_100t")
-> {"success": true, ...}
device 是包含速度等级的完整器件型号。对于 Arty A7-100T,openFPGALoader 的开发板名称为 arty_a7_100t(arty 对应 35T)。
配置
控制工具选择
默认情况下,所有检测到的工具都可用,auto 会选择最合适的工具(优先开源工具)。如需按类别控制,请编辑 ~/.silica/config.toml:
[tools.simulation]
priority = ["verilator", "iverilog"] # ordering for auto-selection
enabled = ["verilator", "iverilog"] # allowlist — everything else is blocked
priority 会调整 auto 的尝试顺序。enabled 是强制执行的允许列表:列表中未列出的工具都无法使用,即使模型明确要求使用该工具——请求会被拒绝,并返回错误,说明工具名称和已启用的工具,以便模型改用允许的工具重试。适用于机器上安装了不应运行的商业工具的情况(例如许可证池、隔离网络工作流)。将 enabled 留空或不设置则不作限制。
类别:simulation、synthesis、place_route、formal、lint、format、waveform、program。
安全防护
专为让自主 Agent 操作真实代码仓库而设计:
- 文件访问限制在项目目录内——
read_rtl、write_rtl、format_rtl、get_constraints、search_rtl和get_project_structure会拒绝逃出项目根目录的绝对路径或..路径(项目根目录由SILICA_PROJECT_ROOT、project.root配置项或服务启动时所在的目录指定)。相对路径会基于该根目录解析。 - 写入操作优先显示差异——
write_rtl默认执行试运行并返回统一差异;只有明确确认后才会写入磁盘。 - 工具卡住不会导致服务崩溃——每次工具调用都有超时限制,超时后会返回结构化错误,而不会导致会话崩溃。
命令行
| 命令 | 说明 |
|---|---|
silica serve | 启动 MCP 服务(stdio)。未指定子命令时的默认命令。silica-eda 是同一命令。 |
silica setup | 交互式向导,用于写入 MCP 客户端配置,以通过 uvx silica-eda@latest 启动服务;参见设置向导。 |
silica config | 显示配置和检测到的工具。 |
silica --version、silica --help | 显示版本或命令列表。 |
版本管理与兼容性
silica 遵循语义化版本,适用对象是 MCP 客户端和 Agent 所依赖的内容:工具名称、参数及其结果中的字段。相同规则也适用于 0.x 版本。
- 在同一主版本内,不会重命名或移除工具,不会移除参数或将其改为必填项,也不会移除或重命名结果字段。次要版本可以新增工具、可选参数和结果字段。
- 弃用事项会在CHANGELOG.md 以及受影响工具的说明中公布,并至少提前一个次要版本告知,然后才会在下一个主版本中实施变更。
- 每项用户可见的变更都会在合并时记入变更日志的“Unreleased”部分,并在发布时移至对应的版本标题下。
开发
git clone https://github.com/simaanc/silica-eda
cd silica-eda
uv sync # editable install + dev deps
uv run ruff check silica/ tests/ scripts/
uv run pytest tests/ -q # integration tests skip tools that aren't installed
uv run silica serve # run the server from the checkout
有关规范,请参阅 CONTRIBUTING.md;有关代码布局,请参阅 docs/architecture.md;有关发布流程,请参阅 RELEASING.md。
许可证
silica 采用 GNU Affero 通用公共许可证 v3.0(AGPL-3.0-only)授权。你可以使用、修改和再分发,包括用于商业用途。如果你分发修改后的版本,或将其作为服务运行并允许他人通过网络与之交互,则必须以相同许可证公开你所作修改的源代码。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。