Vivado - TCL 命令(DPU脚本、v++命令、impl策略)
目录
1. 简介
2. TCL 示例
2.1 DPU TCL 脚本
2.1.1 源码-精简
2.1.2 依赖关系
2.1.3 查 v++ 步骤列表
2.1.4 生成 DPU.XO
2.2 CPU 示例
2.2.1 源码-框架
2.2.2 示例设计详解
2.3 创建运行脚本
2.3.1 Generate scripts
2.3.2 runme.sh 文件
2.3.3 design_1_wrapper.tcl
2.3.4 write_project_tcl
3. v++ 命令
3.1 impl 策略
3.2 interactive
3.3 reuse_impl
3.4 reuse_bit
3.5 xclbinutil
4. 总结
1. 简介
本文旨在介绍在使用 Xilinx FPGA 进行加速应用开发时,三个关键方面的相关技术和命令:DPU 脚本、v++ 命令以及实现(impl)策略。
DPU脚本: 通过平台文件 XSA 创建 DPU 的主要 TCL 代码。
v++ 命令涵盖了以下主要功能:
- 编译: 将内核代码编译成硬件描述语言(HDL)或中间表示形式(IR)。
- 链接: 将编译后的内核与平台硬件资源连接起来,生成硬件比特流。
- 打包: 将比特流、内核元数据和其他必要的文件打包成一个可部署的软件包。
impl 策略: 实现策略指的是在Vivado工具中,针对设计进行布局布线(Place & Route)和时序优化的策略。
2. TCL 示例
2.1 DPU TCL 脚本
2.1.1 源码-精简
DIR_PRJ = $(shell pwd)/${BOARD}
DIR_TRD = $(shell pwd)/DPUCZDX8Gall : check_env dpu.xclbincheck_env :@echo "BOARD: ${BOARD}"@echo "VITIS_PLATFORM: ${DIR_PRJ}/platform.xsa"bash check_env.sh${DIR_PRJ}/kernel_xml/dpu/kernel.xml:@mkdir -p $(@D)cp -rf ${DIR_TRD}/prj/Vitis/kernel_xml/dpu/kernel.xml $@# 创建脚本目录,并逐个拷贝脚本
${DIR_PRJ}/scripts:@mkdir -p $@
${DIR_PRJ}/scripts/gen_dpu_xo.tcl: $(DIR_PRJ)/scriptscp -f ${DIR_TRD}/prj/Vitis/scripts/gen_dpu_xo.tcl $@
${DIR_PRJ}/scripts/bip_proc.tcl : $(DIR_PRJ)/scriptscp -f ${DIR_TRD}/prj/Vitis/scripts/bip_proc.tcl $@
${DIR_PRJ}/scripts/package_dpu_kernel.tcl: $(DIR_PRJ)/scriptscp -f ${DIR_TRD}/prj/Vitis/scripts/package_dpu_kernel.tcl $@sed -i 's/set path_to_hdl "..\/..\/dpu_ip"/set path_to_hdl "..\/DPUCZDX8G\/dpu_ip"/' $@DPU_HDLSRCS= \${DIR_PRJ}/kernel_xml/dpu/kernel.xml \${DIR_PRJ}/scripts/package_dpu_kernel.tcl \${DIR_PRJ}/scripts/gen_dpu_xo.tcl \${DIR_PRJ}/scripts/bip_proc.tcl \${DIR_PRJ}/dpu_conf.vh \${DIR_TRD}/dpu_ip/Vitis/dpu/hdl/DPUCZDX8G.v \${DIR_TRD}/dpu_ip/Vitis/dpu/inc/arch_def.vh \${DIR_TRD}/dpu_ip/Vitis/dpu/xdc/*.xdc \${DIR_TRD}/dpu_ip/DPUCZDX8G_*/hdl/DPUCZDX8G_*_dpu.sv \${DIR_TRD}/dpu_ip/DPUCZDX8G_*/inc/function.vh \${DIR_TRD}/dpu_ip/DPUCZDX8G_*/inc/arch_para.vh# 生成dpu.xo文件
binary_container_1/dpu.xo: ${DPU_HDLSRCS}@mkdir -p ${DIR_PRJ}/binary_container_1-@rm -f ${DIR_PRJ}/$@cd ${DIR_PRJ} ;\$(XILINX_VIVADO)/bin/vivado -mode batch -source scripts/gen_dpu_xo.tcl -notrace -tclargs $@ DPUCZDX8G hw ${BOARD}# 生成dpu.xclbin文件
dpu.xclbin: binary_container_1/dpu.xo ${DIR_PRJ}/platform.xsacd ${DIR_PRJ} ;\v++ -l \-t hw \--platform ${DIR_PRJ}/platform.xsa \--save-temps \--config ${DIR_PRJ}/prj_config \--temp_dir binary_container_1 \--log_dir binary_container_1/logs \--package.no_image \--remote_ip_cache binary_container_1/ip_cache \-o ${DIR_PRJ}/binary_container_1/$@ $< \--xp param:compiler.userPostSysLinkOverlayTcl=${DIR_TRD}/prj/Vitis/syslink/strip_interconnects.tclcp -f ${DIR_PRJ}/binary_container_1/link/vivado/vpl/prj/prj.gen/sources_1/bd/*/hw_handoff/*.hwh ${DIR_PRJ}/dpu.hwhcp -f ${DIR_PRJ}/binary_container_1/link/vivado/vpl/prj/prj.runs/impl_1/*.bit ${DIR_PRJ}/dpu.bitcp -f ${DIR_PRJ}/binary_container_1/$@ ${DIR_PRJ}/dpu.xclbin.PHONY: all check_env
v++: 这是 Vitis 编译器的可执行文件。
- -l: 启用链接器。
- -t hw: 指定目标平台为硬件 (hardware)。
- --platform /kv260_v1/platform.xsa: 指定使用的硬件平台。
- --save-temps: 保存编译过程中的中间文件,用于调试和分析。
- --config /kv260_v1/prj_config: 指定项目配置文件。
- --xp param:compiler.userPostSysLinkOverlayTcl=/boards/DPUCZDX8G/prj/Vitis/syslink/strip_interconnects.tcl: 在系统链接 (SysLink) 阶段之后执行一个自定义的 Tcl 脚本 strip_interconnects.tcl,该脚本可能用于优化或修改生成的硬件连接。
- --temp_dir binary_container_1: 指定临时文件的存放目录。
- --log_dir binary_container_1/logs: 指定日志文件的存放目录。
- --package.no_image: 不生成可引导的镜像文件。
- --remote_ip_cache binary_container_1/ip_cache: 指定远程 IP 核缓存的路径。
- -o /kv260_v1/binary_container_1/dpu.xclbin: 指定输出文件的路径和名称,即生成的硬件二进制文件 dpu.xclbin。
- binary_container_1/dpu.xo: 指定输入文件的路径和名称,即经过编译和优化后的设计文件。
2.1.2 依赖关系
当执行 make all(也即 make BOARD=kv260_som)时,make 将首先检查 dpu.xclbin 的依赖项
- binary_container_1/dpu.xo
- ${DIR_PRJ}/platform.xsa(由用户指定)
为了构建 dpu.xo 这个目标,make 将检查 DPU_HDLSRCS 中所有列出的文件:
DPU_HDLSRCS= \${DIR_PRJ}/kernel_xml/dpu/kernel.xml \${DIR_PRJ}/scripts/package_dpu_kernel.tcl \${DIR_PRJ}/scripts/gen_dpu_xo.tcl \${DIR_PRJ}/scripts/bip_proc.tcl \${DIR_PRJ}/dpu_conf.vh \${DIR_TRD}/dpu_ip/Vitis/dpu/hdl/DPUCZDX8G.v \${DIR_TRD}/dpu_ip/Vitis/dpu/inc/arch_def.vh \${DIR_TRD}/dpu_ip/Vitis/dpu/xdc/*.xdc \${DIR_TRD}/dpu_ip/DPUCZDX8G_*/hdl/DPUCZDX8G_*_dpu.sv \${DIR_TRD}/dpu_ip/DPUCZDX8G_*/inc/function.vh \${DIR_TRD}/dpu_ip/DPUCZDX8G_*/inc/arch_para.vh
此时,以下文件将被复制:
${DIR_PRJ}/kernel_xml/dpu/kernel.xml:@mkdir -p $(@D)cp -rf ${DIR_TRD}/prj/Vitis/kernel_xml/dpu/kernel.xml $@${DIR_PRJ}/scripts:@mkdir -p $@
${DIR_PRJ}/scripts/gen_dpu_xo.tcl: $(DIR_PRJ)/scriptscp -f ${DIR_TRD}/prj/Vitis/scripts/gen_dpu_xo.tcl $@
${DIR_PRJ}/scripts/bip_proc.tcl : $(DIR_PRJ)/scriptscp -f ${DIR_TRD}/prj/Vitis/scripts/bip_proc.tcl $@
${DIR_PRJ}/scripts/package_dpu_kernel.tcl: $(DIR_PRJ)/scriptscp -f ${DIR_TRD}/prj/Vitis/scripts/package_dpu_kernel.tcl $@sed -i 's/set path_to_hdl "..\/..\/dpu_ip"/set path_to_hdl "..\/DPUCZDX8G\/dpu_ip"/' $@
2.1.3 查 v++ 步骤列表
1)通过以下命令即可找到硬件构建的链接进程的步骤列表:
v++ --list_steps --target hw --link
2)默认步骤:
- system_link
- vpl
- vpl.create_project
- vpl.create_bd
- vpl.update_bd
- vpl.generate_target
- vpl.config_hw_runs
- vpl.synth
- vpl.impl
- vpl.impl.opt_design
- vpl.impl.place_design
- vpl.impl.route_design
- vpl.impl.write_bitstream
- rtdgen
- xclbinutil
- xclbinutilinfo
- generate_sc_driver
3)可选步骤:
- vpl.impl.power_opt_design
- vpl.impl.post_place_power_opt_design
- vpl.impl.phys_opt_design
- vpl.impl.post_route_phys_opt_design
2.1.4 生成 DPU.XO
执行 make XO 来单独运行构建 binary_container_1/dpu.xo,在 Makefile 中添加如下行:
XO: binary_container_1/dpu.xo
2.2 CPU 示例
《Vivado Design Suite User Guide: Using Tcl Scripting (UG894)》
2.2.1 源码-框架
使用项目流程进行编译,以下脚本展示了一个项目流程,该流程综合设计并执行完整的实现,包括比特流生成。它基于Vivado 安装目录中提供的 CPU 示例设计。
#
# 步骤#1:定义输出目录区域。
#
set outputDir ./Tutorial_Created_Data/cpu_project
file mkdir $outputDir
create_project project_cpu_project ./Tutorial_Created_Data/cpu_project \-part xc7k70tfbg676-2 -force#
# 步骤#2:设置设计源文件和约束文件
#
add_files -fileset sim_1 ./Sources/hdl/cpu_tb.v
add_files [ glob ./Sources/hdl/bftLib/*.vhdl ]
add_files ./Sources/hdl/bft.vhdl
add_files [ glob ./Sources/hdl/*.v ]
add_files [ glob ./Sources/hdl/mgt/*.v ]
add_files [ glob ./Sources/hdl/or1200/*.v ]
add_files [ glob ./Sources/hdl/usbf/*.v ]
add_files [ glob ./Sources/hdl/wb_conmax/*.v ]
add_files -fileset constrs_1 ./Sources/top_full.xdc
set_property library bftLib [ get_files [ glob ./Sources/hdl/bftLib/*.vhdl ]]#
# 在 project_cpu.srcs/sources_1/ 导入目录中物理导入文件
import_files -force -norecurse
#
# 在 project_cpu.srcs/constrs_1/ 导入目录中物理导入 bft_full.xdc
import_files -fileset constrs_1 -force -norecurse ./Sources/top_full.xdc# 更新文件集 'sources_1' 的编译顺序
set_property top top [current_fileset]
update_compile_order -fileset sources_1
update_compile_order -fileset sim_1#
# 步骤#3:运行综合和默认的利用率报告。
#
launch_runs synth_1
wait_on_run synth_1#
# 步骤#4:运行逻辑优化、布局、物理逻辑优化、布线和比特流生成。生成设计检查点、利用率和时序报告,以及自定义报告。
#
set_property STEPS.PHYS_OPT_DESIGN.IS_ENABLED true [get_runs impl_1]
set_property STEPS.OPT_DESIGN.TCL.PRE [pwd]/pre_opt_design.tcl [get_runs impl_1]
set_property STEPS.OPT_DESIGN.TCL.POST [pwd]/post_opt_design.tcl [get_runs impl_1]
set_property STEPS.PLACE_DESIGN.TCL.POST [pwd]/post_place_design.tcl [get_runs impl_1]
set_property STEPS.PHYS_OPT_DESIGN.TCL.POST [pwd]/post_phys_opt_design.tcl [get_runs impl_1]
set_property STEPS.ROUTE_DESIGN.TCL.POST [pwd]/post_route_design.tcl [get_runs impl_1]launch_runs impl_1 -to_step write_bitstream
wait_on_run impl_1puts "Implementation done!"
2.2.2 示例设计详解
1)项目是通过 create_project 命令创建的。指定了项目目录和目标设备。如果项目目录尚不存在,则会自动创建。在此示例中,用于保存各种报告的输出目录与项目目录相同。
2)项目中使用的所有文件都需要明确声明并添加到项目中。这通过 add_files 命令完成。当文件被添加到项目中时,它会被添加到一个特定的文件集。文件集是一个将文件按用途分组的容器。在这个示例脚本中,大多数文件被添加到默认文件集(sources_1)中。只有 Verilog 测试平台 cpu_tb.v 被添加到默认仿真文件集 sim_1 中。
这些文件还通过 import_files 命令复制到项目目录中。这样,项目指向的是本地复制的源文件,而不再跟踪原始源文件。
3)通过在后台启动综合运行(launch_run synth_1),设计被综合。Vivado IDE 自动生成所有必要的脚本,以便在一个单独的 Vivado 会话中运行综合。由于综合是在不同的进程中运行,因此在继续当前脚本之前,需要等待其完成。这通过使用 wait_on_run 命令来实现。
一旦综合运行完成,可以使用 open_run synth_1 命令将结果加载到内存中。一个不带约束的检查点被保存在项目目录中,即综合运行的地方。在这个示例中,它可以在以下位置找到:
./Tutorial_Created_Data/cpu_project/project_cpu.runs/synth_1/top.dcp
注意:synth_1 和 impl_1 是综合和实现运行的默认名称。可以使用 create_run 命令创建其他运行。
4)实现是通过使用 launch_run 命令完成的。从预布局优化到写入比特流的完整布局布线流程可以通过一个命令来执行。在这个示例脚本中,实现一直进行到比特流生成(launch_run impl_1 -to_step write_bitstream)。
可选步骤 phys_opt_design 在脚本中通过属性 STEPS.PHYS_OPT_DESIGN.IS_ENABLED 启用。与允许根据用户定义的条件动态调用实现命令的非项目流程不同,项目流程的运行必须在启动之前静态配置。这就是为什么在这个示例中,物理逻辑优化步骤在放置后不检查时序松弛值的情况下启用的原因,这与使用非项目流程进行编译的示例不同。
通过使用运行 Tcl 钩子属性 STEPS.<STEPNAME>.TCL.PRE 和 STEPS.<STEPNAME>.TCL.POST,在每个实现步骤之前或之后生成各种报告。这些属性允许用户在使用运行基础设施时指定 Tcl 脚本在流程中的执行位置。有关更多信息,请参见定义 Tcl 钩子脚本。
由于实现运行是在一个单独的 Vivado 会话中执行的,所有的 Tcl 变量和过程都需要在该会话中初始化,以便脚本使用。这可以通过几种方式完成:
- 方法1:在 Vivado_init.tcl 中定义 Tcl 变量和过程(请参见初始化 Tcl 脚本)。这将对您所有的 Vivado 项目和会话生效。
- 方法2:将包含变量和过程的 Tcl 脚本添加到运行所使用的约束集中。当在内存中打开设计时,它将始终作为您约束的一部分被加载。
- 方法3:将 STEPS.OPT_DESIGN.TCL.PRE 设置为包含变量和过程的 Tcl 脚本。只有在 OPT_DESIGN 步骤启用时(默认情况下为启用),该脚本才会被加载。
2.3 创建运行脚本
2.3.1 Generate scripts
如果想导出并创建运行目录和运行脚本,但不希望立即启动运行脚本,可以选择 “Generate scripts only” 选项。该脚本可以稍后在 Vivado IDE 工具之外运行。
执行该步骤将会得到的文件:
design_1_wrapper.tcl
gen_run.xml
htr.txt
ISEWrap.js
ISEWrap.sh
project.wdf
rundef.js
runme.bat
runme.sh
2.3.2 runme.sh 文件
1)设置环境变量:
- 检查 PATH 环境变量,PATH 告诉系统在哪里查找可执行程序。
- 定义了必要的 Vivado 和 ISE 目录的路径,确保可以访问 Vivado 工具。
- LD_LIBRARY_PATH,该变量指向 Vivado 所需的库。
2)设置工作目录:
- 定义了一个变量 HD_PWD,它指向项目中的特定运行目录 (true_preset.runs/impl_1)。
3)日志记录和脚本编写:
- runme.log 文件,捕获脚本的输出。
- 变量 ISEStep 存储名为 ISEWrap.sh 的脚本的路径。
- EAStep 的函数。此函数接受参数并使用 ISEWrap.sh 执行它们,将输出记录到 runme.log 并捕获任何错误。
4)运行 Vivado:
- 创建 .init_design.begin.rst 文件。
- 使用以下几个参数调用 EAStep 函数:
- vivado:这是主要的 Vivado 可执行文件。
- -log design_1_wrapper.vdi:这指定了 Vivado 本身的日志文件。
- -applog:启用应用程序级日志记录。
- -m64:这表示 64 位模式。
- -product Vivado:指定产品为 Vivado。
- -messageDb vivado.pb:定义消息数据库文件。
- -mode batch:启用批处理模式,用于从脚本运行 Vivado 命令。
- -source design_1_wrapper.tcl:Vivado 要执行的实际设计命令。
- -notrace:在执行期间禁用跟踪信息。
2.3.3 design_1_wrapper.tcl
该脚本主要用于执行 Vivado 设计流程中的实现阶段,具体步骤如下:
1)初始化
- 定义一些函数,例如 create_report 用于生成报告,start_step 和 end_step 用于创建和删除步骤标记文件。
- 连接到 Vivado 调度器(dispatch)(如果可用),用于日志记录。
2. 开始实现
- 创建消息数据库文件(init_design.pb)用于存储消息。
- 设置一些项目属性,例如设计模式、最大作业数等。
- 创建一个 内存中的项目,并指定目标器件、约束文件等信息。
- 添加设计源文件(.dcp 格式)和约束文件(.xdc 格式)到项目中。
- 设置顶层模块(design_1_wrapper)和目标器件。
- 读取约束文件。
- 调用 link_design 函数链接设计并指定顶层模块和目标器件。
- 执行一系列的实现步骤,包括优化(opt_design)、布局(place_design)、物理优化(phys_opt_design)、布线(route_design)、写比特流(write_bitstream)。
- 每个步骤都会调用相应的 Vivado Tcl 命令,例如 opt_design 和 route_design。
- 在每个步骤中,都会进行一些辅助操作,例如生成报告、创建检查点文件等。
3. 结束实现
- 关闭消息数据库文件。
- 根据执行结果 ($rc) 进行后续处理:
- 成功 ($rc 为 0) 则执行清理操作,例如删除步骤标记文件。
- 失败 ($rc 非 0) 则标记步骤失败并退出脚本。
4. 日志记录
- 脚本使用了 Vivado 的 OPTRACE 功能进行日志记录。
- 它记录了每个步骤的开始和结束,以及一些中间操作。
- 生成的日志文件可以帮助用户了解设计实现过程中的细节和问题。
2.3.4 write_project_tcl
write_project_tcl my_project.tcl
这将生成一个名为 my_project.tcl 的脚本,其中包含了创建工程、添加源文件和运行综合的所有步骤。
你可以通过在 Vivado Tcl Console 中执行该脚本来重新创建相同的工程和运行相同的操作:
source my_project.tcl
3. v++ 命令
3.1 impl 策略
《Vivado Design Suite User Guide: Implementation, UG904》
| Category | Purpose |
|-------------|----------------------------------------|
| Performance | Improve design performance |
| Area | Reduce LUT count |
| Power | Add full power optimization |
| Flow | Modify flow steps |
| Congestion | Reduce congestion and related problems |
1)Vivado Implementation Defaults
- 在平衡运行时间的同时尝试实现时序收敛。
2)Performance_Explore
- 使用多种算法进行优化、布局和布线,以获得潜在的更好结果。
3)Performance_ExplorePostRoutePhysOpt
- 类似于Performance_Explore,但在布线后添加 phys_opt_design 以进行进一步改进。
4)Performance_LBlockPlacement
- 忽略放置块 RAM 和 DSP 的时序约束,使用线长代替。
5)Performance_LBlockPlacementFanoutOpt
- 忽略放置块 RAM 和 DSP 的时序约束,使用线长代替,并对高扇出驱动器进行激进复制。
6)Performance_EarlyBlockPlaceent
- 在全局布局的早期阶段完成块 RAM 和 DSP 的放置。
7)Performance_NetDelay_high
- 为了补偿乐观的延迟估计,增加额外的延迟成本到长距离和高扇出连接(高设置,最悲观)。
8)Performance_NetDelay_low
- 为了补偿乐观的延迟估计,增加额外的延迟成本到长距离和高扇出连接(低设置,较不悲观)。
9)Performance_Retiming
- 将 retiming 与 phys_opt_design 中的额外布局优化和更高的路由器延迟成本结合起来。
10)Performance_ExtraTimingOpt
- 运行额外的时序驱动优化以潜在地改善总体时序裕度。
11)Performance_RefinePlacement
- 增加放置器在后布局优化阶段的努力,并在路由器中禁用时序放松。
12)Performance_SpreadSLL
- 一种用于 SSI 设备的布局变体,倾向于水平扩展 SLR 交叉。
13)Performance_BalanceSLL
- 一种用于 SSI 设备的布局变体,具有更频繁的 SLR 边界交叉。
14)Congestion_SpreadLogic_high
- 在整个设备中扩展逻辑以避免创建拥挤区域(高设置是最高程度的扩展)。
15)Congestion_SpreadLogic_medium
- 在整个设备中扩展逻辑以避免创建拥挤区域(中等设置是中等程度的扩展)。
16)Congestion_SpreadLogic_low
- 在整个设备中扩展逻辑以避免创建拥挤区域(低设置是最低程度的扩展)。
17)Congestion_SpreadLogic_Explore
- 类似于 Congestion_SpreadLogic_high,但使用 Explore 指令进行路由。
18)Congestion_SSI_SpreadLogic_high
- 在整个设备中扩展逻辑以避免创建拥挤区域,适用于 SSI 设备(高设置是最高程度的扩展)。
19)Congestion_SSI_SpreadLogic_low
- 在整个设备中扩展逻辑以避免创建拥挤区域,适用于 SSI 设备(低设置是最低程度的扩展)。
20)Area_Explore
- 使用多种优化算法以减少 LUT 的数量。
21)Area_ExploreSequential
- 类似于 Area_Explore,但增加了跨顺序单元的优化。
22)Area_ExploreWithRemap
- 类似于 Area_Explore,但增加了重新映射优化以压缩逻辑级别。
23)Power_DefaultOpt
- 增加功耗优化(power_opt_design)以减少功耗。
24)Power_ExploreArea
- 将顺序面积优化与功耗优化(power_opt_design)结合以减少功耗。
25)Flow_RunPhysOpt
- 类似于 impl run 默认值,但启用了物理优化步骤(phys_opt_design)。
26)Flow_RunPostRoutePhysOpt
- 类似于 Flow_RunPhysOpt,但启用了后路由物理优化步骤,并使用 -directive Explore 选项。
27)Flow_RuntimeOptimized
- 每个实现步骤在设计性能和更好运行时间之间进行权衡。物理优化(phys_opt_design)被禁用。
28)Flow_Quick
- 最快的运行时间,所有时序驱动行为被禁用。适用于利用率估计。
3.2 interactive
v++ --interactive [ synth | impl ]
v++ 会设置必要的环境并启动 Vivado IDE,以便进行综合或实现。
通过 v++ 交互式启动 Vivado IDE,链接过程会在 vpl 步骤停止,这等同于在 v++ 命令中使用 --to_step vpl 选项。当使用完 Vivado IDE 并保存了设计检查点(DCP)后,可以使用 -from_step 重新运行链接命令,从 vpl 过程继续执行。
在通过 --from_step 或 --to_step 使用可选步骤之前,必须先启用它。例如,要启用 vpl.impl.phys_opt_design 步骤,请使用 --config 选项传递一个包含以下内容的 ini 文件:
[vivado]
prop=run.impl_1.steps.phys_opt_design.is_enabled=1
3.3 reuse_impl
3.4 reuse_bit
《ug1393, ver 2022.2 之后》
使用 Vivado 工具生成的比特流文件来创建 project.xclbin:
v++ --link project.xo--platform <PLATFORM_NAME>--reuse_bit ./_x/link/vivado/project.bit-o'project.xclbin'
注释:用于 --reuse_bit 的 project.bit 是部分 BIT 文件,而非完整 BIT 文件。
3.5 xclbinutil
xclbinutil--target hw--force--key-value SYS:dfx_enable:false--key-value SYS:PlatformVBNV:dd_kv260_kv260_pfm_preset_1_0--add-section BITSTREAM:RAW: /kv260_v1/binary_container_1/link/int/system.bit--add-section :JSON: /kv260_v1/binary_container_1/link/int/dpu.rtd--add-section CLOCK_FREQ_TOPOLOGY:JSON: /kv260_v1/binary_container_1/link/int/dpu_xml.rtd--add-section BUILD_METADATA:JSON: /kv260_v1/binary_container_1/link/int/dpu_build.rtd--add-section EMBEDDED_METADATA:RAW: /kv260_v1/binary_container_1/link/int/dpu.xml--add-section SYSTEM_METADATA:RAW: /kv260_v1/binary_container_1/link/int/systemDiagramModelSlrBaseAddress.json--output /kv260_v1/binary_container_1/dpu.xclbin
4. 总结
本文主要分享三方面内容:
- DPU 脚本
- v++ 命令
- impl 策略