Vivado - 带有delete_run命令的Tcl循环导致程序异常终止(EXCEPTION_ ACCESS_ VIOLATION)

描述

我有一个脚本,我运行以创建项目,运行综合和实现运行。该脚本包含以下循环以清理现有运行:

 foreach run_name $ previous_runs { 
delete_run -quiet $ {run_name}
文件删除-force $ {run_name}
}

源文件时,脚本失败并报告以下内容:

异常程序终止(EXCEPTION_ACCESS_VIOLATION) 

我该如何解决这个问题?

在此用例中,Tcl脚本正在删除上一次运行,从而导致空指针导致工具崩溃。

第二次迭代:

 delete_run 
foreach run_name $ previous_runs {
delete_run -quiet $ {run_name}
文件删除-force $ {run_name}
}

在脚本中, previous_runs包含对象synth_1impl_1 。所以,第一个delete_run删除synth_1其中有删除impl_1的副作用。在第二次迭代中, run_name是一个导致崩溃的错误指针。

可以通过以下方式实现所需的行为:

设置previous_syn_runs [get_runs -filter {IS_SYNTHESIS == 1}] foreach syn_run_name $ previous_syn_runs { 
#检查运行是否仍然存在并且未作为副产品删除
#of删除另一个运行。
if {[lsearch [get_runs] $ {syn_run_name}]!= -1} {
delete_run -quiet $ {syn_run_name}
文件删除-force $ {syn_run_name}
}
}

您还可以执行reset_run ,它将清理运行目录,但运行名称将保留在GUI中。

注意:在Vivado Design Suite 2013.4中, delete_run命令已更改为delete_runs 。在Vivado 2013.4及更高版本的工具版本中,删除所有运行的推荐方法是运行detele_runs $ all_runs

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 13:41:01 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它