run_tcl
Executes any Vivado Tcl command for project setup, constraints, IP, block design, simulation, and reporting. Supports multi-line scripts.
Instructions
执行任意 Vivado Tcl 命令。支持所有 Vivado Tcl API。
这是最通用的工具,可以执行任何 Vivado Tcl 命令,包括:
项目:
create_project,open_project,add_files,set_property top约束:
create_clock,set_property PACKAGE_PINIP:
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 sigget_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 > 1filter 对 escaped id 总线对象无效且不报错(其 size 属性可能 =1,静默漏数据)。筛总线别依赖 size,改用regexp NAME匹配\[.*:.*\]总线命名约定。清空波形只认
remove_wave [get_waves *],-all/*/-of_objects都 不工作(XSim 2019.1 bug)xsim -tclbatch文件必须显式quit,EOF 不自动退出,会卡死 CIif-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 RADIXvalue 大小写敏感(大多数 Vivado property 是大小写 不敏感的,这条是反直觉的例外):set_property RADIX dec $w ;# ✓ RADIX=dec set_property RADIX DEC $w ;# ✗ 静默退回 RADIX=default,不报错add_wave -radix和set_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输出不可捕获, 设完只能人眼确认渲染(MCPset_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](MCPset_wave_zoom改 zoom_setting 用此)。
Args: command: Tcl 命令文本(支持多行)。 session_id: 目标会话 ID,默认 "default"。 timeout: 命令执行超时秒数,默认 120。注意超时语义:超时只是 MCP 停止 等待并返回错误,命令在 Vivado 里仍在继续跑(不会被取消),后续 命令会排队等它跑完。长任务(综合/实现/比特流)请改用 run_synthesis / run_implementation / generate_bitstream (Python 轮询不阻塞),或按预期耗时调大本值。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| timeout | No | ||
| session_id | No | default |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |