作者:付汉杰,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] }