Vivado - TCL 命令(DPU脚本、v++命令、impl策略)

目录

1. 简介

2. TCL 示例

2.1 DPU TCL 脚本

2.1.1 源码-精简

2.1.2 文件依赖关系

2.1.3 生成 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 v++ 的输出目录

3.2 v++ 执行步骤

3.3 impl 策略

3.4 interactive

3.5 reuse_impl

3.6 reuse_bit

3.7 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)/DPUCZDX8G

all : check_env dpu.xclbin

check_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)/scripts
	cp -f ${DIR_TRD}/prj/Vitis/scripts/gen_dpu_xo.tcl $@
${DIR_PRJ}/scripts/bip_proc.tcl : $(DIR_PRJ)/scripts
	cp -f ${DIR_TRD}/prj/Vitis/scripts/bip_proc.tcl $@
${DIR_PRJ}/scripts/package_dpu_kernel.tcl: $(DIR_PRJ)/scripts
	cp -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.xsa
	cd ${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.tcl

	cp -f ${DIR_PRJ}/binary_container_1/link/vivado/vpl/prj/prj.gen/sources_1/bd/*/hw_handoff/*.hwh  ${DIR_PRJ}/dpu.hwh
	cp -f ${DIR_PRJ}/binary_container_1/link/vivado/vpl/prj/prj.runs/impl_1/*.bit                    ${DIR_PRJ}/dpu.bit
	cp -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  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值