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_1和impl_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 。