【工程师分享】升级Vivado工程脚本

作者:付汉杰,hankf@xilinx.com,文章转载自: 赛灵思中文社区论坛

介绍

Vivado可以导出脚本,保存创建工程的相关命令和配置,并可以在需要的时候使用脚本重建Vivado工程。脚本通常只有KB级别大小,远远小于工程打包文件的大小,因此便于备份和版本管理。

脚本里指定了Vivado的版本、器件的型号,IP的版本。如果导出脚本时的相关版本,和恢复工程时的相关版本不一样,会导致创建工程失败。可以通过手工检查和修改相关版本信息,升级Vivado工程脚本,使新的Vivado也能恢复出对应的工程。

目前我电脑中只有Vivado 2020.2。但是得到了一份Vivado 2020.1为开发板vck190 es的创建的工程脚本。下面以把前述脚本升级到Vivado 2020.2为例,讨论如何升级Vivado工程脚本。

升级Vivado工程脚本 准备Vivado

首先启动Vivado 2020.2,在TCL console窗口进入工程脚本所在的目录,使用命令“source”执行对应的脚本。
注意,Vivado遵循Unix/Linux习惯,使用“/”作为目录分隔符。对于目录“C:\Users\hankf\Downloads\3-VitisEmbdPfm-Versal-lab.tar\ref_files_v202\step1_vivado”,要改成“C:/Users/hankf/Downloads/3-VitisEmbdPfm-Versal-lab.tar/ref_files_v202/step1_vivado”。否则,Vivado会报告错误“couldn't change working directory”。

修改版本

Vivado工程脚本里含有版本信息,对应的TCL代码是“set scripts_vivado_version 2020.1”。如果使用Vivado 2020.2,需要将其中的2020.1改为2020.2。

set scripts_vivado_version 2020.2

修改器件和单板

Vivado工程脚本里也指定了器件和单板信息。vck190 es使用的是ES器件,Vivado 2020.2没有使能ES器件和包含vck190 es单板的信息。如果执行上述,会报告错误“ERROR: [Coretcl 2-106] Specified part could not be found.”。

原始的器件和单板信息:

create_project project_1 myproj -part xcvc1902-vsva2197-2MP-e-S-es1
   set_property BOARD_PART xilinx.com:vck190_es:part0:1.0 [current_project]

Vivado 2020.2默认支持器件vc1902、包含量产单板vck190的单板信息。因此需要把Vivado工程脚本里的器件和单板改为支持的型号。

修改后的器件和单板信息:

create_project project_1 myproj -part xcvc1902-vsva2197-2MP-e-S
   set_property BOARD_PART xilinx.com:vck190:part0:2.0 [current_project]

如果不知道对应的器件和单板,可以使用get_parts命令和get_boards命令,查找Vivado支持的器件和单板。

查找器件

使用get_parts命令,列出Vivado支持的器件。Vivado支持的器件型号太多,导致它只显示一部分。最好使用通配符,只显示我们感兴趣的器件型号。使用命令“get_parts vc1902”,只会显示出vc1902的相关型号,包括所有封装。如果指定更多的信息,会得到更少也更准确的器件。

get_parts *vc1902*
xcvc1902-viva1596-1LHP-i-L xcvc1902-viva1596-1LHP-i-S xcvc1902-viva1596-1LP-e-S xcvc1902-viva1596-1LP-i-L xcvc1902-viva1596-1LP-i-S xcvc1902-viva1596-1MP-e-S xcvc1902-viva1596-1MP-i-L xcvc1902-viva1596-1MP-i-S xcvc1902-viva1596-2HP-i-S xcvc1902-viva1596-2LP-e-L xcvc1902-viva1596-2LP-e-S xcvc1902-viva1596-2MP-e-L xcvc1902-viva1596-2MP-e-S xcvc1902-viva1596-2MP-i-L xcvc1902-viva1596-2MP-i-S xcvc1902-viva1596-3HP-e-S xcvc1902-vsva2197-1LHP-i-L xcvc1902-vsva2197-1LHP-i-S xcvc1902-vsva2197-1LP-e-S xcvc1902-vsva2197-1LP-i-L xcvc1902-vsva2197-1LP-i-S xcvc1902-vsva2197-1MP-e-S xcvc1902-vsva2197-1MP-i-L xcvc1902-vsva2197-1MP-i-S xcvc1902-vsva2197-2HP-i-S xcvc1902-vsva2197-2LP-e-L xcvc1902-vsva2197-2LP-e-S xcvc1902-vsva2197-2MP-e-L xcvc1902-vsva2197-2MP-e-S xcvc1902-vsva2197-2MP-i-L xcvc1902-vsva2197-2MP-i-S xcvc1902-vsva2197-3HP-e-S xcvc1902-vsvd1760-1LHP-i-L xcvc1902-vsvd1760-1LHP-i-S xcvc1902-vsvd1760-1LP-e-S xcvc1902-vsvd1760-1LP-i-L xcvc1902-vsvd1760-1LP-i-S xcvc1902-vsvd1760-1MP-e-S xcvc1902-vsvd1760-1MP-i-L xcvc1902-vsvd1760-1MP-i-S xcvc1902-vsvd1760-2HP-i-S xcvc1902-vsvd1760-2LP-e-L xcvc1902-vsvd1760-2LP-e-S xcvc1902-vsvd1760-2MP-e-L xcvc1902-vsvd1760-2MP-e-S xcvc1902-vsvd1760-2MP-i-L xcvc1902-vsvd1760-2MP-i-S xcvc1902-vsvd1760-3HP-e-S

get_parts *xcvc1902-vsva2197-2MP*
xcvc1902-vsva2197-2MP-e-L xcvc1902-vsva2197-2MP-e-S xcvc1902-vsva2197-2MP-i-L xcvc1902-vsva2197-2MP-i-S

查找单板

使用get_boards命令,列出Vivado支持的单板。Vivado支持的单板型号也很多。最好使用通配符,只显示我们感兴趣的单板型号。使用命令“get_boards vck”,只会显示出vck190。

get_boards *vck*
get_boards: Time (s): cpu = 00:00:04 ; elapsed = 00:00:06 . Memory (MB): peak = 1118.992 ; gain = 0.000
xilinx.com:vck190:2.0

升级IP

Vivado版本变化时,IP也可能变化。执行前述脚本创建工程,会得到下列错误。

WARNING: [IP_Flow 19-2162] IP 'design_1_ai_engine_0_0' is locked:
* IP definition 'AI Engine (1.0)' for IP 'design_1_ai_engine_0_0' (customized with software release 2020.2) has a newer major version in the IP Catalog.
ERROR: [BD 41-542] Parameter cannot be set on a locked block. The block 'ai_engine_0' is locked, because: * IP definition 'AI Engine (1.0)' for IP 'design_1_ai_engine_0_0' (customized with software release 2020.2) has a newer major version in the IP Catalog. 

可以使用get_ipdefs命令,得到详细的IP信息。执行命令“get_ipdefs engine”,检查Vivado 2020.2里的ai_engine信息,发现新的版本是2.0。

get_ipdefs *engine*
xilinx.com:ip:ai_engine:2.0

在Vivado 2020.1的工程脚本里,还是使用的ai_engine 1.0。

set bCheckIPs 1
if { $bCheckIPs == 1 } {
   set list_check_ips "\ 
xilinx.com:ip:ai_engine:1.0\
xilinx.com:ip:axi_intc:4.1\
xilinx.com:ip:smartconnect:1.0\
xilinx.com:ip:clk_wizard:1.0\
xilinx.com:ip:axi_noc:1.0\
xilinx.com:ip:proc_sys_reset:5.0\
xilinx.com:ip:versal_cips:2.1\
"

  set ai_engine_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:ai_engine:1.0 ai_engine_0 ]

把使用的ai_engine的版本,从1.0改为2.0。

set bCheckIPs 1
if { $bCheckIPs == 1 } {
   set list_check_ips "\ 
xilinx.com:ip:ai_engine:2.0\
xilinx.com:ip:axi_intc:4.1\
xilinx.com:ip:smartconnect:1.0\
xilinx.com:ip:clk_wizard:1.0\
xilinx.com:ip:axi_noc:1.0\
xilinx.com:ip:proc_sys_reset:5.0\
xilinx.com:ip:versal_cips:2.1\
"

  set ai_engine_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:ai_engine:2.0 ai_engine_0 ]

关闭Vivado工程,再删除对应目录,重新执行“source system_step1.tcl”,可以成功创建工程。

注意事项

如果IP变化比较大,比如接口有变化,仅仅升级IP版本,也不能创建出正确的工程。这时请根据IP的文档,重新定制IP,和连接IP相关的接口。

定制工程名称

Vivado脚本里的命令create_project也指定了工程名称,默认是“project_1”。如果想使用其它工程名,把“project_1”改为你需要的工程名。
Vivado脚本会在当前目录下,创建一个子目录。Vivado脚本里的命令create_project也指定了子目录名,默认是“myproj”。如果想使用其它目录名,把“myproj”改为你需要的目录名。

if { $list_projs eq "" } {
   create_project project_1 myproj -part xcvc1902-vsva2197-2MP-e-S
   set_property BOARD_PART xilinx.com:vck190:part0:2.0 [current_project]
}

最新文章