前言
批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。
SDK和Vitis的关系: Vitis是Xilinx SDK的继任者,从Vivado 2019.2开始启用。sdk是vivado的附属,而vitis地位和vivado相同,一个负责软件,一个负责硬件。
hdf文件: Hardware Description File,Vivado 2019.1及更早版本导出的硬件描述文件,给xilinx sdk使用。
xsa文件: Xilinx Shell Archive,Vivado 2019.2及后续版本导出的硬件文件,.xsa=.bit+hdf.
更多详细的可以打开SDK和Vitis的渊源
文件结构
作者以之前做过的项目为例。
Vitis # vitis文件夹
├── auto_create_vitis/ # 自动化运行的文件
│ ├── build_vitis.bat # 批处理文件
│ ├── build_vitis.tcl # vitis工程tcl脚本化文件
│ └── src/ # 源文件
│ ├── DP_out/ # Application project(需要的创建的应用工程)
│ │ └── *.c # c代码源文件
│ ├── DVI_to_DP # Application project(需要的创建的应用工程)
│ │ └── *.c
│ ├── HDMI_loop # Application project(需要的创建的应用工程)
│ │ └── *.c
│ ├── HDMI_to_DP # Application project(需要的创建的应用工程)
│ │ └── *.c
│ └── SDI_loop # Application project(需要的创建的应用工程)
│ └── *.c
│
└── design_1_wrapper.xsa # vivado导出的硬件信息文件
批处理文件的编写
call D:\Xilinx\Vitis\2020.1\bin\xsct.bat build_vitis.tcl
pause
其实就一句话,意思是利用你安装的vitis根目录下的xsct.bat文件来运行TCL脚本文件
(路径记得换成自己的vitis安装路径)
ZYNQ的VItis工程tcl脚本化
ARM芯片的Cortex-A53-64位
set tclPath [pwd]
cd $tclPath
cd ..
set projpath [pwd]
puts "Current workspace is $projpath"
setws $projpath
getws
set xsaName design_1_wrapper
set app0Name DP_out
set app1Name DVI_to_DP
set app2Name HDMI_loop
set app3Name HDMI_to_DP
set app4Name SDI_loop
#Create a new platform
platform create -name $xsaName -hw $projpath/$xsaName.xsa -proc psu_cortexa53_0 -os standalone -arch 64-bit -out $projpath
importprojects $projpath/$xsaName
platform active $xsaName
repo -add-platforms $xsaName
domain active
#Create a new application
app create -name $app0Name -platform $xsaName -domain standalone_domain -template "Empty Application"
importsources -name $app0Name -path $tclPath/src/$app0Name
app create -name $app1Name -platform $xsaName -domain standalone_domain -template "Empty Application"
importsources -name $app1Name -path $tclPath/src/$app1Name
app create -name $app2Name -platform $xsaName -domain standalone_domain -template "Empty Application"
importsources -name $app2Name -path $tclPath/src/$app2Name
app create -name $app3Name -platform $xsaName -domain standalone_domain -template "Empty Application"
importsources -name $app3Name -path $tclPath/src/$app3Name
app create -name $app4Name -platform $xsaName -domain standalone_domain -template "Empty Application"
importsources -name $app4Name -path $tclPath/src/$app4Name
#bsp setting
bsp setdriver -ip psu_dp -driver dppsu -ver 1.2
bsp regenerate
bsp setlib -name lwip211 -ver 1.2
bsp config lwip_dhcp true
bsp regenerate
#Build platform project
platform generate
#Build application project
append app0Name "_system"
sysproj build -name $app0Name
append app1Name "_system"
sysproj build -name $app1Name
append app2Name "_system"
sysproj build -name $app2Name
append app3Name "_system"
sysproj build -name $app3Name
append app4Name "_system"
sysproj build -name $app4Name
bsp设置就相当于在vitisi工程GUI界面的这里
编辑好tcl脚本后保存。就可以双击之前的.bat批处理文件开始运行了。
运行好之后会弹出按任意键退出的界面
在打开文件夹时文件夹中就会多出很多文件
这个时候就可以打开Vitis软件选择到这个目录
关闭首页进来,就会发现工程已经创建成功了,并且可以直接下板。
ARM芯片的Cortex-A9-32位
set tclPath [pwd]
cd $tclPath
cd ..
set projpath [pwd]
puts "Current workspace is $projpath"
setws $projpath
getws
set xsaName design_1_wrapper
set appName hello
#Create a new platform
platform create -name $xsaName -hw $projpath/$xsaName.xsa -proc ps7_cortexa9_0 -os standalone -arch 32-bit -out $projpath
importprojects $projpath/$xsaName
platform active $xsaName
repo -add-platforms $xsaName
domain active
#Create a new application
app create -name $appName -platform $xsaName -domain standalone_domain -template "Empty Application"
importsources -name $appName -path $tclPath/src/$appName
#Build platform project
platform generate
#Build application project
append appName "_system"
sysproj build -name $appName
Cortex-A9芯片作者给的例子是一个基础的hello工程。注意以下的变化
MicroBlaze软核的VItis工程tcl脚本化
set tclPath [pwd]
cd $tclPath
cd ..
set projpath [pwd]
puts "Current workspace is $projpath"
setws $projpath
getws
set xsaName exdes_wrapper
set app0Name fmc1159_hdmi
# Create a new platform
platform create -name $xsaName -hw $projpath/$xsaName.xsa -proc mb_ss_0_mblaze -os standalone -arch 32-bit -out $projpath
importprojects $projpath/$xsaName
platform active $xsaName
repo -add-platforms $xsaName
domain active
# Create a new application
app create -name $app0Name -platform $xsaName -domain standalone_domain -template "Empty Application"
importsources -name $app0Name -path $tclPath/src/$app0Name
# Build platform project
platform generate
# Build application project
append app0Name "_system"
sysproj build -name $app0Name
MicroBlaze软核作者给的例子是一个FMC子板跑HDMI回环工程。注意以下的变化
ZYNQ的SDK工程tcl脚本化
#Example test.tcl
#!/usr/bin/tclsh
set_workspace workspace
create_project -type hw -name hw -hwspec <path the HDF file>.hdf
cd workspace/hw
open_hw_design system.hdf
set bsp [create_sw_design bsp -proc ps7_cortexa9_0 -os standalone]
add_library xilffs
generate_bsp -sw $bsp -dir ../bsp -compile
cd ../..
create_project -type app -name fsbl -hwproject hw -proc ps7_cortexa9_0 -os standalone -lang C -app {Zynq FSBL} -bsp $bsp
build -type bsp -name $bsp
build -type app -name fsbl
clean -type all
build -type all
参考来源:https://support.xilinx.com/s/article/63384?language=en_US
总结
脚本化用好了能省去很多不必要的报错,能让工作更高效。