Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
VIVADO_PATHNoPath to the Vivado executable (e.g., D:/Xilinx/Vivado/2024.1/bin/vivado.bat). If not set, the system PATH will be used.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_critical_warningsA

提取并分类 CRITICAL WARNING / ERROR / 非标错误,统一失败诊断入口。

解析指定 run 的 runme.log,按 warning ID 聚合分类,返回中文诊断报告。 包含已知 warning 的分类标签和修复建议。

三种诊断模式根据 run_name 自动选择:

  1. synth_* / impl_* 等综合实现 run:走原流程(runme.log 解析 ERROR/CRITICAL WARNING)。额外:errors=0 且 cw=0 但 STATUS 含 ERROR 时, 自动 tail runme.log 最后 N 行扫非标错误关键词(TclStackFree / segfault / FATAL 等不带 ERROR: 前缀的内部异常),解决"messageDb 显示干净但 run 实际 崩了"的盲区。

  2. sim_* simulation fileset:改去 tail <proj>.sim/<sim_fs>/*/xsim/*.log (Vivado launch_simulation 的真错误位置,不在 runme.log),扫非标 关键词,自动暴露 xvlog 未找到等子进程错误。

  3. 任何 run:无论结果如何,都会静默把本次 CW 列表写快照(存到项目目录 .vmcp/ 下, 或 fallback 到 ~/.claude/vivado-mcp/)。启用 compare_with_last=True 时, 读上次快照与本次对比,报告消除/新增/仍存在的条目。(sim 模式不写快照)

Args: run_name: run / fileset 名称(如 synth_1 / impl_1 / sim_1), 默认 impl_1sim_* 走 simulation 日志诊断路径。 compare_with_last: True 时追加一段与上次快照的差分报告(仅对综合/实现有效)。 tail_n: 非标错误扫描时每个日志 tail 的末尾行数,默认 50,范围 1~500。 仿真模式适用于每个 xsim 子日志。 session_id: 目标会话 ID。

verify_io_placement_toolA

验证 IO 引脚分配:比对 XDC 约束与实际布局。

自动读取项目 XDC 文件中的 PACKAGE_PIN 约束(支持 -dict 和传统两种语法), 与 report_io 的实际分配结果对比,发现 GT 引脚交叉等严重错误。

GT 端口不匹配标记为 CRITICAL,GPIO 端口标记为 WARNING。

Args: session_id: 目标会话 ID。

xdc_lintA

对 XDC 约束文件做静态检查(pure Python,不依赖 Vivado 综合)。

综合前就能捕到这些常见错误,省掉 30+ 秒的跑综合等待:

  • PIN_CONFLICT:同一物理引脚被多个 port 占用

  • MISSING_IOSTANDARD:有 PACKAGE_PIN 却没配 IOSTANDARD(NSTD-1 / BIVC-1 隐患)

  • DUPLICATE_PORT:同 port 被多次约束不同引脚(后者覆盖)

  • CLOCK_NO_PERIOD:create_clock 缺 -period

  • PIN_CONFLICT_CROSS_FILE:多个 XDC 文件间的引脚冲突

Args: xdc_paths: 要检查的 XDC 文件路径列表。若不传,则从当前 session 的项目里 自动抓取所有 constrs_1 下的 XDC 文件。 session_id: 目标会话 ID(仅在不传 xdc_paths 时使用)。

xdc_auto_fixA

自动修复 XDC 文件中能安全自修的问题(MISSING_IOSTANDARD / CLOCK_NO_PERIOD)。

默认 dry_run=True 只预览补丁,确认无误后调用 dry_run=False 实际写回。 写回前会为每个被修改文件生成同名 .bak 备份;注意 .bak 只保留最近一次 修改前的版本(再次写回会覆盖上一次的 .bak,与 sed -i.bak 同语义)。

只修这两类问题(其他需要人工判断):

  • MISSING_IOSTANDARD —— 在 PACKAGE_PIN 行之后插入 IOSTANDARD 语句

  • CLOCK_NO_PERIOD —— 仅当 board 已知时补 -period;未知板跳过

绝对不碰:

  • PIN_CONFLICT / DUPLICATE_PORT / PIN_CONFLICT_CROSS_FILE(冲突问题必须人改)

Args: xdc_paths: XDC 文件路径列表。不传则从当前 session 的项目里抓。 board: 板卡名,影响默认 IOSTANDARD 和时钟周期。支持: basys3 / nexys-a7 / arty-a7 / zybo / kc705。留空用 LVCMOS33 兜底。 dry_run: True(默认)只输出补丁预览不改文件;False 实际写回。 session_id: 目标会话 ID(仅在不传 xdc_paths 时使用)。

verilog_compile_checkA

用 iverilog / verilator 做 Verilog 语法 + 连接性检查(比 Vivado 综合快 50 倍)。

典型用途:写完或改完 RTL 想在几秒内确认"能不能过综合",不用等 30-60s Vivado。 需要机器上装 iverilog 或 verilator: Windows: scoop install iverilog / choco install verilator Linux: apt install iverilog / apt install verilator macOS: brew install icarus-verilog / brew install verilator

检查模式:

  • iverilog -t null:只做 parse + elaboration,不产物

  • verilator --lint-only -Wall:静态检查,风格警告也给(更严格)

未装任何工具时返回 SKIP 并附安装指引,不报错。

Args: files: Verilog / SystemVerilog 文件路径列表(.v / .sv)。 .vhd/.vhdl 不支持,返回 SKIP 并附替代方案指引(check_syntax)。 tool: "auto"(默认,优先 iverilog) / "iverilog" / "verilator"。 timeout: 子进程超时秒数,默认 30。

run_synthesisA

启动综合;默认等待完成,也可异步提交后查询状态。

不调用 Tcl wait_on_run(会阻塞 Vivado event loop,GUI 模式冻住界面); wait=True 时 Python 每 2 秒查一次状态并上报进度;wait=False 时立即 返回 job_id,随后用 get_run_progress 查询。

Args: run_name: 综合 run 名称,默认 "synth_1"。 jobs: 并行任务数,默认 4。 timeout_minutes: 超时分钟数,默认 30。 session_id: 目标会话 ID。 wait: True 等待完成并诊断;False 启动后立即返回 job_id。

run_implementationA

启动实现(布局布线);默认等待完成,也可异步提交。

不调用 Tcl wait_on_run(会阻塞 Vivado event loop,GUI 模式冻住界面); wait=True 时 Python 每 2 秒查一次 STATUS/PROGRESS;wait=False 时立即 返回 job_id,随后用 get_run_progress 查询。

Args: run_name: 实现 run 名称,默认 "impl_1"。 jobs: 并行任务数,默认 4。 timeout_minutes: 超时分钟数,默认 60。 session_id: 目标会话 ID。 wait: True 等待完成并诊断;False 启动后立即返回 job_id。

generate_bitstreamA

生成比特流文件。在实现完成后执行。

默认启用前置安全检查:检测 CRITICAL WARNING 后阻止生成, 需确认无风险后使用 force=True 跳过检查。

Args: impl_run: 实现 run 名称,默认 "impl_1"。 jobs: 并行任务数,默认 4。 timeout_minutes: 超时分钟数,默认 30。 force: 跳过 CRITICAL WARNING 安全检查,默认 False。 session_id: 目标会话 ID。

program_deviceA

编程 FPGA 设备。封装 open_hw_manager → connect → program 多步操作。

只烧 .bit 进 FPGA(掉电即丢)。要掉电自启动须烧 SPI flash,见下面配方。

烧 flash 配方(2019.1,run_tcl 逐步执行):

  1. 查 flash 型号: get_cfgmem_parts -of [lindex [get_hw_devices] 0] (或按板上 flash 用 -filter 选,如 mt25ql128-spi-x1_x2_x4)

  2. 生成 .mcs: write_cfgmem -format mcs -size 16 -interface SPIx4 -loadbit {up 0x0 <top>.bit} -force out.mcs

  3. 建 cfgmem 对象: create_hw_cfgmem -hw_device [current_hw_device] [lindex [get_cfgmem_parts <part>] 0]

  4. 设属性四件套: set_property PROGRAM.FILES {out.mcs} [current_hw_cfgmem]

    • PROGRAM.ERASE 1 / PROGRAM.CFG_PROGRAM 1 / PROGRAM.VERIFY 1

  5. 烧写: program_hw_cfgmem

  6. 烧后 boot_hw_device [current_hw_device] 或断电重启从 flash 加载。 (Zynq 用 .bin: write_cfgmem -format bin -interface SMAPx32 ...)

Args: bitstream_path: 比特流文件路径(.bit 文件)。 target: 目标设备过滤器,默认 "*"(第一个可用设备)。 hw_server_url: 硬件服务器地址,默认 "localhost:3121"。 session_id: 目标会话 ID。

parse_xprA

离线解析 Vivado 工程文件(.xpr),无需启动 Vivado。

秒级摸底陌生工程 / CI 门禁:不启 Vivado(避开 120s GUI 冷启 + 中文路径 TclStackFree 崩),纯 Python 读 .xpr 拿 part / 顶层 / 源文件(按 fileset 分组, 含 .v/.mem/.xci IP)/ XDC 约束 / synth+impl runs 及 Strategy。 对照 get_project_info(需先 start_session + open_project),本工具完全离线。

Args: file_path: .xpr 工程文件的绝对路径。

parse_bit_headerA

离线解析 .bit 比特流文件头部,无需启动 Vivado。

只读文件头(不读 payload):提取设计名 / 目标 part(原始 + 规整)/ 构建日期时间 / 文件 SHA256。用于烧录前防错板(part 比对)、交付/返修对账(确认孤立 .bit 是不是 声称的那版)。Vivado 无任何 Tcl 命令读离线 .bit。 注意:.bit 里 part 去 'xc' 前缀 + 去速度等级(如 7k325tffg900);规整字段补回 'xc' 但速度等级无法还原,与 .xpr 的 part 比对时只能比到 package 级。

Args: file_path: .bit 文件的绝对路径。

parse_ltxA

离线解析 ILA 调试探针文件(.ltx),无需连板 / 启动 Vivado。

连板 ILA 抓波前先离线拿清单:每个 hw_ila 挂哪些 probe、probe 名、位宽、映射的 net。辅助在写 set_property TRIGGER_COMPARE_VALUE eq<位宽>'h.. [get_hw_probes ] 之前确认正确的 probe 名和宽度。get_hw_probes 需板子在手 + 活 hw session,本工具完全离线。Vivado 2019.1 的 .ltx 是 JSON 格式。

Args: file_path: .ltx 文件的绝对路径。

compare_xciA

对比两个 XCI 文件的 IP 配置差异。

无需 Vivado 会话,直接读取 XML 文件对比参数。 适用于版本对比、不同板卡间配置迁移验证、调试 IP 参数差异。

Args: file_a: 第一个 XCI 文件路径(如基准/正常配置)。 file_b: 第二个 XCI 文件路径(如待检查/异常配置)。 show_all: 是否显示所有参数(默认仅显示差异)。

inspect_ip_paramsA

查询 IP 实例的所有配置参数(含 GUI 中隐藏的参数)。

通过 Vivado Tcl API 获取指定 IP 的所有 CONFIG.* 属性及其当前值。 支持按关键词过滤(如 "gt"、"loc"、"lane"),不区分大小写。

Args: ip_name: IP 实例名称(如 "xdma_0")。 filter_keyword: 可选过滤关键词(如 "gt"、"loc"、"lane"),不区分大小写。 session_id: 目标会话 ID。

get_io_reportA

获取结构化 IO 引脚报告(JSON)。

执行 report_io 并解析为结构化数据,包含:

  • 每个端口的引脚、站点、方向、IO 标准、Bank

  • GT / GPIO 类型自动判定

  • 汇总统计(总数、GT 数、GPIO 数、未分配数)

Args: session_id: 目标会话 ID。

get_timing_reportA

获取结构化时序报告。

执行 report_timing_summary 并解析为结构化摘要 + 关键路径详情。 返回人类可读的中文时序分析报告,包含 PASS/FAIL 状态判定。

Args: session_id: 目标会话 ID。

check_bitstream_readinessA

烧板前一键检查:综合判断工程是否可以安全生成比特流。

这个工具是"发车前的最后一瞥":在你打算 generate_bitstream 或 program_device 之前,一次性给出 PASS/BLOCK/WARN 的综合结论,避免烧板后才发现问题。

检查维度:

  • impl_1 run 是否已到达 route_design Complete(没布线 = 无法生成比特流)

  • route 后的 CRITICAL WARNING 数量(> 0 通常意味着潜在功能风险)

  • 时序是否收敛(WNS/WHS 是否 met)

返回结论:

  • READY:可以安全烧板

  • BLOCK:存在阻塞性问题(route 未完成 / 时序违例 / 大量 CW)

  • WARN:可以生成但有风险(少量 CW 或估算时序偏低)

Args: impl_run: 实现 run 名称,默认 "impl_1"。 session_id: 目标会话 ID。

get_utilization_reportA

获取资源占用摘要(LUT/FF/BRAM/DSP/IO)。

执行 report_utilization -return_string 并从多个表格里抽取核心资源行, 高亮超过 90% 占用的 [CRITICAL] 项和 70-90% 的 [WARN] 项。

典型用途:

  • 综合后检查"LUT 够不够 / BRAM 够不够"

  • 时序收敛困难时先看资源是否超限(> 90% 会导致拥塞)

  • detail=True 进一步看 BRAM 由 RAMB36 还是 RAMB18 组成(优化位宽/级联时用)

Args: detail: True 时末尾附加 Block RAM 明细段(RAMB36/FIFO* / RAMB36E1 only / RAMB18 的 used/available)。默认 False,输出与原有格式一致。 session_id: 目标会话 ID。

get_project_infoA

获取当前 Vivado 项目的综合信息(项目名 / part / 顶层 / 文件列表 / IP / run 状态)。

一次查询完成"摸底":AI 接手陌生项目时的起点。包含:

  • 项目名称、目录、Part 型号、顶层模块

  • 所有源文件(按类型分组)

  • XDC 约束文件列表

  • IP 实例列表(含 VLNV)

  • synth_1 / impl_1 的当前状态

Args: session_id: 目标会话 ID。

get_run_progressA

查看 run 的运行进度(适合长任务等待时看"走到哪一步")。

综合或实现常跑 10-30 分钟,这个工具让你不用开 GUI 就能看到:

  • 当前状态(running / complete / error)与 PROGRESS 百分比

  • runme.log 里最近若干条 Phase 行(Phase 1 → Phase 2.1 → Phase 3 ...)

  • 日志尾部 N 行(含最新 WARNING / CRITICAL WARNING 原文)

  • 日志最后更新时间(判断 Vivado 是否还在活跃)

Args: run_name: run 名称(如 "synth_1" / "impl_1"),默认 "impl_1"。 tail_lines: 日志尾部要读多少行,默认 30。 session_id: 目标会话 ID。

get_next_suggestionA

根据当前项目状态推断下一步应该做什么。

适合新手、刚打开老项目、或者不知道从哪下手的场景。规则:

  • 没项目 → 建议 open_project / create_project

  • 有项目没源文件 → 建议 add_files

  • 没顶层 → 建议 set_property TOP

  • 没 XDC → 建议添加约束

  • 有 testbench 且没跑过行为仿真 → 先 launch_simulation

  • 可综合 → xdc_lint + run_synthesis

  • 综合完成 → run_implementation

  • 布线完成 → check_bitstream_readiness + generate_bitstream

  • 比特流就绪 → program_device

  • 任何阶段失败 → 引导到 get_critical_warnings

Args: session_id: 目标会话 ID。

get_ip_statusA

检查项目中所有 IP 的版本状态(哪个需要升级、哪个已锁定)。

老项目打开后 Vivado 常提示"N 个 IP 需要升级"。这个工具一次性列出:

  • 需要升级的 IP(Vivado 更新了更好的版本)

  • 已锁定的 IP(IS_LOCKED 属性为 TRUE,改动需先解锁)

  • 已最新的 IP

附带升级建议(单个升级 / 全部升级 / 升级后验证)。

Args: session_id: 目标会话 ID。

get_pre_commit_summaryA

生成一段可以贴进 git commit body 的工程摘要(时序/资源/CW)。

典型用途:做完 RTL 改动、跑完 impl 之后,想把关键数字写进 commit body, 避免 "改了 UART 模块" 这种无信息量的 commit。本工具一次性采样:

  • 项目 + part + 顶层

  • 时序摘要(WNS / WHS / 失败端点数)

  • 资源占用(LUT / FF / BRAM / DSP / IOB 百分比)

  • CW / ERROR 计数(若有 impl_run)

  • 综合生成 READY/WARN/FAIL 门禁标签

输出为 markdown 片段,直接粘贴到 commit 描述。

Args: impl_run: 用来查 runme.log 计数的 run(默认 impl_1)。 session_id: 目标会话 ID。

start_sessionA

启动一个新的 Vivado 会话。

三种模式:

  • "gui" (默认) — MCP 自动 spawn vivado -mode gui,你能看到 Vivado 图标 并实时观察 Tcl Console / Block Design / 波形等 GUI 内容。首次使用会自动 通过 -source 注入 TCP server,或先运行一次 vivado-mcp install 持久化。

  • "tcl"vivado -mode tcl 无头子进程(无 GUI,适合 CI / 批处理)。

  • "attach" — 连接到用户已手动打开的 Vivado GUI(需先运行 vivado-mcp install 让 init.tcl 自动开启 TCP server)。

每个 session_id 对应一个独立的会话句柄;同 session_id 再次调用会复用现有会话 (会话模式自动复用)。多开独立 GUI 实例见下方 port 说明。

Args: session_id: 会话标识符,默认 "default"。 mode: "gui" / "tcl" / "attach",默认 "gui"。 port: TCP 端口语义(B 方案): - gui 默认 9999:先 probe 9999,命中现有 vmcp server 则直接复用/ attach(单 GUI 自动复用,也避免抢端口产生孤儿);无则 spawn 并绑 9999。 - 多开独立实例:传 port=0 自动分配一个空闲端口启动全新实例(零手动 配端口、跳过 probe),或给不同端口的显式值。注意:不传 port 时即便换 session_id 也会 probe/attach 到 9999 的同一个 GUI(不会自动多开),要独立 实例就传 port=0 或显式不同端口。 - attach 模式:要连接的现有 GUI 的显式端口(默认 9999)。 vivado_path: 可选,自定义 Vivado 可执行文件路径。留空则自动检测。 timeout: 启动超时秒数,GUI 模式建议 120+。默认 120。

stop_sessionC

关闭指定的 Vivado 会话。

Args: session_id: 要关闭的会话标识符。

list_sessionsA

列出所有活跃的 Vivado 会话及其状态。

run_tclA

执行任意 Vivado Tcl 命令。支持所有 Vivado Tcl API。

这是最通用的工具,可以执行任何 Vivado Tcl 命令,包括:

  • 项目: create_project, open_project, add_files, set_property top

  • 约束: create_clock, set_property PACKAGE_PIN

  • IP: create_ip, generate_target, set_property CONFIG.*

  • Block Design: create_bd_design, create_bd_cell, connect_bd_intf_net

  • 查询: get_ports, get_cells, get_property STATUS [get_runs]

  • 报告: report_utilization -return_string, report_timing_summary -return_string

  • 仿真: launch_simulation, run 100ns, add_wave

  • 以及任何其他 Vivado Tcl 命令

支持多行脚本(用换行符分隔)。

路径含特殊字符时请用 safe_tcl 而非 run_tcl,避免 Tcl 解析错误。

XSim 仿真常见坑摘要(0.3.17 实战沉淀,下面即完整清单):

  • add_wave_group 必须配 -into $g,否则信号全跑到顶层,group 是空的:

    set g [add_wave_group sig_grp]
    add_wave -into $g /tb/clk     ;# ✓ 进 group
    add_wave /tb/rst              ;# ✗ 跑到顶层
  • add_wave / get_objects 拒 escaped id,必须先 current_scope 切到目标 scope 再用 short name:

    # ✗ add_wave {\u_dut/sig}
    current_scope /tb/u_dut       ;# ✓ 切上下文
    add_wave sig
  • get_scopes 不支持多 path 参数,一次只能查一个 scope,多个要 foreach 逐个:

    # ✗ get_scopes /tb/u_dut /tb/u_ctrl
    foreach __p {/tb/u_dut /tb/u_ctrl} { puts "$__p: [get_scopes $__p]" }
  • size > 1 filter 对 escaped id 总线对象无效且不报错(其 size 属性可能 =1,静默漏数据)。筛总线别依赖 size,改用 regexp NAME 匹配 \[.*:.*\] 总线命名约定。

  • 清空波形只认 remove_wave [get_waves *],-all / * / -of_objects 都 不工作(XSim 2019.1 bug)

  • xsim -tclbatch 文件必须显式 quit,EOF 不自动退出,会卡死 CI

  • if-generate 命名块不是 scope —— 内部 reg 无 add_wave 寻址路径

  • [N] / [X] 在 Tcl 字符串里会触发命令替换,用 {} 包字面路径:

    # ✗ add_wave /tb/gen_ch[0].u/sig    invalid command "0"
    add_wave {/tb/gen_ch[0].u/sig}
  • marker 复位 = 磁盘 wcfg 干净时重载。marker 存在 .wcfg 的 <wave_markers><marker time="..fs"/></wave_markers>,清掉/复位用一行:

    close_wave_config -force          ;# 丢内存里的脏 marker
    open_wave_config C:/path/wave.wcfg ;# 从干净磁盘文件重载

set_property / radix 写脚本陷阱(0.3.20 实战沉淀,无 err 静默踩):

  • -filter "name =~ {...[$var]...}" 会污染后续 set_property 静默失败[$var] 触发 Tcl 命令替换,虽然 get_scopes 内部 fallback 仍返回正确对象, 但污染后续 wave property 路径,set_property RADIX dec $w 静默不生效。 改用 foreach + regexp 自己过滤,绕开 filter 字符串里的 [$var]

  • set_property RADIX value 大小写敏感(大多数 Vivado property 是大小写 不敏感的,这条是反直觉的例外):

    set_property RADIX dec $w   ;# ✓ RADIX=dec
    set_property RADIX DEC $w   ;# ✗ 静默退回 RADIX=default,不报错
  • add_wave -radixset_property RADIX 接受的 value 集合不一致:

    add_wave -radix : default | dec | bin | oct | hex | unsigned | ascii | smag
    set_property RADIX: dec | hex(其他实测未通过;大写一律不接受)

    signed decimal 在 XSim 叫 dec,不是 signed(从 ModelSim/QuestaSim 带过来的命名习惯会踩)。

  • Analog 波形可纯 Tcl 渲染(早期文档误判"无 Tcl 接口"的真根因)。 WaveformStyle 不在 list_property $w / set_property 全集里,要用专用命令 set_wave_prop。当年踩坑是因为值写成了裸 ANALOG——Vivado 收下不报错但 渲染器不认,只改属性值不渲染(静默接受陷阱)。正确值必须带 STYLE_ 前缀, 且信号寻址有两个静默坑(实测 2019.1):

    # ★ get_waves 按"显示名"(如 y0[15:0])/glob 匹配,传全路径 /tb/y0 返回空!
    #   且 set_wave_prop 对空对象 rc=0 静默接受 → 信号没 add 会伪装成功,务必先判空。
    set w [get_waves -quiet y0*]   ;# 用显示名/glob;或遍历 get_waves * 按 DESIGN_OBJECT 全路径过滤
    if {[llength $w]} {
      set_wave_prop WaveformStyle STYLE_ANALOG $w  ;# ★ 裸 ANALOG 静默吞值不渲染
      set_wave_prop AnalogMin -2048 $w             ;# 贴数据范围:太宽压平,太窄削顶
      set_wave_prop AnalogMax  2047 $w
      set_wave_prop AnalogInterpolation LINEAR $w
      set_property HEIGHT 80 $w                     ;# 存为 CellHeight
    }
    • 无法 Tcl 读回:get_wave_prop 不存在、report_wave_props 输出不可捕获, 设完只能人眼确认渲染(MCP set_wave_analog 工具已封装寻址 + STYLE_ 前缀)。

    • 重载冲掉 analog:先定好 zoom 再实时上 analog,别先改 analog 再 open_wave_config。

    • wcfg 磁盘路径属性是 FILE_PATH(不是 FILE_NAME,后者报 [Common 17-54]): get_property FILE_PATH [current_wave_config](MCP set_wave_zoom 改 zoom_setting 用此)。

Args: command: Tcl 命令文本(支持多行)。 session_id: 目标会话 ID,默认 "default"。 timeout: 命令执行超时秒数,默认 120。注意超时语义:超时只是 MCP 停止 等待并返回错误,命令在 Vivado 里仍在继续跑(不会被取消),后续 命令会排队等它跑完。长任务(综合/实现/比特流)请改用 run_synthesis / run_implementation / generate_bitstream (Python 轮询不阻塞),或按预期耗时调大本值。

safe_tclA

执行带参数的 Tcl 命令模板,自动用 Tcl list 规则转义参数。

适用场景:命令中含文件路径、端口名、字符串值等可能有特殊字符的输入。 Tcl 的 $[]{}、反斜杠、空格都会被正确转义,防注入且防解析错。

用法示例:

  • safe_tcl("create_project {0} {1} -part {2}", args=["my_proj", "C:/path with space", "xc7a35tcpg236-1"])

  • safe_tcl("read_verilog {0}", args=["C:/files/top with $dollar.v"])

  • safe_tcl("set_property PACKAGE_PIN {0} [get_ports {1}]", args=["W5", "clk"])

template 用 Python format 的 {0} / {1} 占位符,args 中每个元素会被 tcl_quote() 包装成 "..." 并转义所有特殊字符。

Args: template: Tcl 命令模板,用 {0}/{1}/... 表示参数位置。 args: 参数值列表,将被自动转义。 session_id: 目标会话 ID,默认 "default"。 timeout: 命令执行超时秒数,默认 120。

set_wave_zoomA

设置波形时间缩放窗口(改 wcfg XML 后 close -force + open 重载)。

本地价值(§1.3 条件3 跨命令协议):Vivado 2019.1 无 Tcl zoom 命令,缩放窗存在 .wcfg 的 里,要改它再让 XSim 重载。重载顺序极易踩—— close 漏 -force 报 [Wavedata 42-26];同名 wcfg 已 open 时直接 open 报 42-52, 故必须先 close 再 open。本工具封装这条多步协议。

⚠ wcfg 未保存(current_wave_config 的 FILE_PATH 为空)时返回明确错误,要求先 save_wave_config——不自动存盘(避免擅自改用户磁盘文件)。 ⚠ close_wave_config -force 会丢弃所有未存盘的 live wave prop(含手设的 radix/ analog),故先 set_wave_zoom 再 set_wave_analog。

Args: start_ns: 缩放起始时间(ns),须 < end_ns。 end_ns: 缩放结束时间(ns)。 wcfg: 显式 wcfg 磁盘路径;缺省自动解析 current_wave_config。 session_id: 目标会话 ID。

set_wave_analogA

把信号设为模拟(Analog)波形显示(纯 Tcl 配方,实测 Vivado 2019.1 可渲染)。

本地价值(§1.3 条件2 本地知识库,三个实测静默坑):

  1. WaveformStyle 必须传 STYLE_ANALOG(带 STYLE_ 前缀);裸传 ANALOG 时 Vivado 收下 不报错但渲染器不认,只显示数字格。推翻早期"Analog 无 Tcl 接口只能 GUI 右键"的误判。

  2. get_waves 只匹配显示名(y0[15:0])/glob,直接传全路径 /tb/y0 返回空;工具自动按 DESIGN_OBJECT(全路径)/FULL_NAME/显示名解析,不命中才报 add_wave。

  3. set_wave_prop 对空对象 rc=0 静默接受(信号没 add 会伪装成功),工具先判空再 set。 wave 属性无 get 接口(get_wave_prop 不存在),无法 Tcl 读回校验,渲染请人眼确认。

⚠ 顺序硬约束:必须在 set_wave_zoom 之后调——zoom 重载(close+open wcfg)会冲掉 先设的 analog prop。 ⚠ AnalogMin/Max 必须成对显式传(贴数据范围:太宽压平、太窄削顶)。从仿真数据 自动算幅需 live 采样、数据源未定,本版本不做 auto。

Args: signals: 信号列表(短名或全路径,须已 add_wave 进波形)。 min: AnalogMin(必传,与 max 成对)。 max: AnalogMax(必传,与 min 成对)。 interp: 插值方式,白名单 LINEAR / HOLD。 height: 行高像素(存盘后在 wcfg 里叫 CellHeight)。 session_id: 目标会话 ID。

Prompts

Interactive templates invoked by user choice

NameDescription
fpga_workflow标准 FPGA 开发流程:从工程建立到可审计的 bitstream。
debug_timing时序违例调试:从新鲜摘要到受控的根因修复。
debug_gt_mappingGT 高速收发器引脚与 lane 映射诊断。
debug_ip_configVivado IP 配置差异、版本与 output products 调试。
debug_pciePCIe 从物理层到协议观测的分层调试。
simulation_bringupRTL 仿真从编译、展开到有限运行和判定的工作流。
cdc_audit跨时钟域结构、约束和 waiver 的证据化审计。
ila_hardware_debugILA 探针规划、重新实现、bit/ltx 配对和板上采集工作流。

Resources

Contextual data attached and managed by the client

NameDescription
resource_sessions所有 Vivado 会话的状态信息(JSON)。

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/mapleleavessssssss-wq/vivado-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server