首页 > 其他分享 >Xilinx Vitis 2020工程源目录修改

Xilinx Vitis 2020工程源目录修改

时间:2024-07-09 14:56:49浏览次数:21  
标签:app work 源目录 update platform 2020 file Xilinx path

目录

1 背景

  Xilinx Vitis可以做standalone程序开发,不过其工程中使用的路径为绝对路径。工程更换位置后编译将会显示错误。例如:源目录为D:/work,复制到同事电脑上放到C:/work(同事电脑只有一个C盘)。利用Vitis打开工程编译会有一堆错误,提示文件找不到。

2 分析

通过分析Vitis工程中有三个工程文件于路径相关:

  • xxx_system.sprj 其格式是一个xml文件,其中字段:
    • platform 存放.xpfm文件
  • xxx.prj 其格式是一个xml文件,其中字段:
    • platform 存放.xpfm文件
    • location 存放xxx.prj文件路径
  • platform.spr 平台文件,其格式是json文件,其中字段:
    • platHandOff 存放xsa文件路径
    • qemuArgs 存放qemu_args.txt文件全路径,是Vitis配置文件,与Vitis安装位置有关。
    • qemuData 存放qemu Data文件路径,与Vitis安装位置有关。

修改说明:

  • 将以上文件路径根据新路径(C:/work)替换旧路径(D:/work)即可。
  • 如果Vitis安装路径不同,需要更新qemuArgs和qemuData字段对应路径。

3 解决

可以通过手动修改以上文件是可以解决问题,不过手动修改容易出错误。更好的方式是写一脚本来做文件路径替换,这个脚本需要处理xml和json文件。Python语言内置xml和json库,是理想语言选择。
Python脚本如下:

import os
import json
import xml.etree.ElementTree as ET

def get_project_files(path):
    sprjfile = ""
    prjfile = ""
    sprfile = ""
    for root, _, files in os.walk(path):
        for file in files:
            _, ext = os.path.splitext(file)
            if ext == ".sprj":
                sprjfile = os.path.join(root, file)
            if ext == ".prj":
                prjfile = os.path.join(root, file)
            if ext == ".spr":
                sprfile = os.path.join(root, file)
    return (sprjfile, prjfile, sprfile)

def get_file(path, filename):
    fullfilename = ""
    for root, _, files in os.walk(path):
        for file in files:
            if file == filename:
                fullfilename = os.path.join(root, file)
                break
    return fullfilename

def update_file(filename, value1, newvalue1, value2 = None, newvalue2 = None):
    file = open(filename, "r", encoding="ascii")
    fileData = file.read()
    file.close()
    fileData = fileData.replace(value1, newvalue1)
    print(value1, " => ", newvalue1)
    if value2 != None and newvalue2 != None:
        fileData = fileData.replace(value2, newvalue2)
        print(value2, " => ", newvalue2)
    file = open(filename, "w", encoding="ascii")
    file.write(fileData)
    file.close()

def update_sprj(sprjfile, path):
    tree = ET.parse(sprjfile)
    attrib = tree.getroot().attrib
    platform = attrib.get("platform", "")
    filename = get_file(path, os.path.basename(platform))
    filename = filename.replace("\\", "/")
    update_file(sprjfile, platform, filename)

def update_prj(prjfile, path):
    tree = ET.parse(prjfile)
    attrib = tree.getroot().attrib
    platform = attrib.get("platform", "")
    location = attrib.get("location", "")
    platform_filename = get_file(path, os.path.basename(platform))
    location_dirname = os.path.dirname(prjfile)
    platform_filename = platform_filename.replace("\\", "/")
    location_dirname = location_dirname.replace("\\", "/")
    update_file(prjfile, platform, platform_filename, location, location_dirname)

def update_spr(sprfile, path, xilinx_qemu_path):
    file = open(sprfile, "r", encoding='utf-8')
    spr_data = json.load(file)
    file.close()
    platHandOff = spr_data.get("platHandOff", "")
    systems = spr_data.get("systems", {})
   
    platHandOff_filename = get_file(path + "\\board", os.path.basename(platHandOff))
    platHandOff_filename = platHandOff_filename.replace("\\", "/")
    update_file(sprfile, platHandOff, platHandOff_filename)
    if len(systems) == 1:
        domains = systems[0].get("domains", [])
        if len(domains) >= 2:
                qemuArgs = domains[1].get("qemuArgs", "")
                qemuData = domains[1].get("qemuData", "")
                update_file(sprfile, qemuData, xilinx_qemu_path)

path = 'E:\\g\\work'
xilinx_qemu_path='D:/Xilinx/Vitis/2020.1/data/emulation/platforms/zynq/qemu/'
sprjfile, prjfile, sprfile = get_project_files(path)

print("update file: ", sprjfile) # xml file
update_sprj(sprjfile, path)
print()

print("update file: ", prjfile) # xml file
update_prj(prjfile, path)
print()

print("update file: ", sprfile) # xml json
update_spr(sprfile, path, xilinx_qemu_path)

说明:

  • 脚本需要两个参数:
    • 工程所在路径的上一路径
    • Xilinx的qemu路径
  • get_project_files 函数根据工程路径查找三个工程文件。
  • update_sprj 更新sprj文件
  • update_prj 更新prj文件
  • update_spr 更新platform.spr文件

4 使用

4.1 修改路径

E:/g/work路径如下:

.
├── board
└── workspace
    ├── app_platform
    ├── app
    └── app_system

说明:

  • board 文件夹存放xsa文件
  • workspace 为工程路径:
    • app_platform 为平台路径
    • app_system 为系统路径
    • app 为应用路径

运行Python脚本

python3 patch.py
update file:  E:\g\work\workspace\app_system\app_system.sprj
X:/work/workspace/app_platform/export/app_platform/app_platform.xpfm  =>  E:/g/work/workspace/app_platform/export/app_platform/app_platform.xpfm

update file:  E:\g\work\workspace\app\app.prj
X:/work/workspace/app_platform/export/app_platform/app_platform.xpfm  =>  E:/g/work/workspace/app_platform/export/app_platform/app_platform.xpfm
X:/work/workspace/app  =>  E:/g/work/workspace/app

update file:  E:\g\work\workspace\app_platform\platform.spr
X:/work/board/app_platform_v1.0.xsa  =>  E:/g/work/board/app_platform_v1.0.xsa
C:/Xilinx/Vitis/2020.1/data/emulation/platforms/zynq/qemu/  =>  D:/Xilinx/Vitis/2020.1/data/emulation/platforms/zynq/qemu/

4.2 编译工程

4.2.1 清理工程

在这里插入图片描述

在上图中选择Clean菜单项,清理工程
在这里插入图片描述

如上图所示全部清理

buildplatform.bat 50156 app_platform clean 
XSDB Server Channel: tcfchan#10
Cleaning the zynq_fsbl application.
rm -rf  sd.o  nand.o  image_mover.o  md5.o  fsbl_hooks.o  main.o  nor.o  qspi.o  rsa.o  ps7_init.o  pcap.o  fsbl_handoff.o zynq
_fsbl_bsp/ps7_cortexa9_0/lib/libxil.a executable.elf *.o

Cleaning the zynq_fsbl application, bsp
make -C ps7_cortexa9_0/libsrc/bram_v4_4/src -s clean 

make -C ps7_cortexa9_0/libsrc/coresightps_dcc_v1_7/src -s clean 

make -C ps7_cortexa9_0/libsrc/cpu_cortexa9_v2_9/src -s clean 

make -C ps7_cortexa9_0/libsrc/ddrps_v1_1/src -s clean 

rm -f ps7_cortexa9_0/lib/libxil.a

Cleaning the BSP for domain  - domain_ps7_cortexa9_0
make -C ps7_cortexa9_0/libsrc/bram_v4_4/src -s clean 

make -C ps7_cortexa9_0/libsrc/uartps_v3_9/src -s clean 

make -C ps7_cortexa9_0/libsrc/xadcps_v2_4/src -s clean 

make -C ps7_cortexa9_0/libsrc/xilffs_v4_3/src -s clean 

rm -f ps7_cortexa9_0/lib/libxil.a


16:22:11 Build Finished (took 2s.891ms)

4.2.2 编译工程

在这里插入图片描述
在上图选择Build All菜单项编译工程

Generating bif file for the system project
generate_system_bif.bat 50156 E:/g/work/workspace/app_platform/export/app_platform/app_platform.xpfm domain_ps7_cortexa9_0 E:/g/work/workspace/app_system/Debug/system.bif
sdcard_gen --xpfm E:/g/work/workspace/app_platform/export/app_platform/app_platform.xpfm --sys_config app_platform --bif E:/g/work/workspace/app_system/Debug/system.bif --bitstream E:/g/work/workspace/app/_ide/bitstream/app_loadboardNI_v1.0.bit --elf E:/g/work/workspace/app/Debug/app.elf,ps7_cortexa9_0
creating BOOT.BIN using E:/g/work/workspace/app/_ide/bitstream/app_loadboardNI_v1.0.bit 
Running D:/Xilinx/Vitis/2020.1/bin/bootgen  -image E:/g/work/workspace/app_system/Debug/sd_card_temp/boot.bif -w -o i BOOT.BIN

16:25:54 Build Finished (took 5s.226ms)

编译成功!

标签:app,work,源目录,update,platform,2020,file,Xilinx,path
From: https://blog.csdn.net/flysnow010/article/details/140295917

相关文章

  • 阅读笔记《GB/T 22240-2020信息安全技术 网络安全等级保护定级指南》
    等级保护对象:网络安全等级保护工作直接作用的对象。主要包括信息系统、通信设施和数据资源等。定级流程:确定定级对象、初步确定等级、专家评审、主管部门核准、备案审核作为定级对象的信息系统应具有如下基本特征:(1)具有确定的主要安全责任主体;(2)承载相对独立的业务系统;(3)包含相互......
  • 2006-2020上市公司研发投入金额数据集
    2006-2020上市公司研发投入金额数据集https://download.csdn.net/download/a519573917/89501035目录上市公司研发投入与企业绩效的关系研究一、引言二、文献综述三、研究设计四、实证结果与分析(一)描述性统计分析(二)相关性分析(三)回归分析程序代码运行结果(四)稳健性......
  • XILINX set_property BITSTREAM.CONFIG.CONFIGRATE
    起因在一个新的XILINXXCKU040FPGA设计中,SPI支持X8模式,此时BIT生成约束如下:#thehardwaresupportspix8,willbootfasterfromflash#set_propertyBITSTREAM.CONFIG.SPI_BUSWIDTH8[current_design]#set_propertyCONFIG_MODESPIx8[current_design]set_property......
  • 2020C++等级考试二级真题题解
     202012数组指定部分逆序重放c++ #include<iostream>usingnamespacestd;intmain(){  inta[110];  intn,k;  cin>>n>>k;  for(inti=0;i<n;i++){    cin>>a[i];  }  for(inti=0;i<k/2;i++){......
  • buildroot-2020.05生成不了bluez相应工具的解决方法
    使用buildroot-2020.05编译生成bluez时,无法生成bluetoothctl、hciconfig等工具,发现其默认使用的bluez版本为5.54,而我们验证改为5.52版本时才能生成这些工具,故做了如下修改:1.bluez5_utils a.修改package/bluez5_utils/bluez5_utils.mk文件,将   BLUEZ5_UTILS_VERSION=......
  • Xilinxddr3 mig ip核:基于AXI接口的ddr3读写控制
    本文完全参考野火的DDR3读写控制设计,原文十分详细,需要的可以去看看。一、AXI4接口详解AXI接口由5个独立的通道构成,分别是读地址、读数据、写地址、写数据、写响应。如下是读传输过程示意图,使用读地址与读数据通道。主机首先在读地址通道给出读地址和控制信号,然后......
  • Xilinxddr3 mig ip核:基于native接口的ddr3读写控制
    一、MIGIP核读写时序如下图是7系列的MIGIP核结构框图。左侧是用户接口,即用户(FPGA)同MIG交互的接口,用户就必须掌握这些接口才可以使用该IP核。将用户侧的信号分类如下图。其中的输入输出是相对于MIGIP核的,即对用户侧来说是相反的。写命令操作时序如下,其中,......
  • 全国各城市排水及污水处理数据,shp/excel格式,2020-2022年
    基本信息.数据名称: 全国各城市排水及污水处理数据数据格式: Shp+excel数据几何类型: 面数据坐标系:  WGS84数据时间:2020-2022年数据来源:网络公开数据数据可视化.......
  • CSP历年复赛题-P7072 [CSP-J2020] 直播获奖
    原题链接:https://www.luogu.com.cn/problem/P7072题意解读:每增加一个人的分数,计算一次当前获奖的人数,输出当前的分数线。解题思路:最多人数为N=100000,分数最高为M=6001、O(N*N*logN)做法每增加一个人,对已出现的分数进行排序N*logN,计算获奖人数k,取排名第k的人的分数,大概可......
  • CSP历年复赛题-P7071 [CSP-J2020] 优秀的拆分
    原题链接:https://www.luogu.com.cn/problem/P7071题意解读:提取n的二进制位所有的1表示的整数,如果最低位是1则输出-1。解题思路:如果n的二进制最低为是1(n是奇数),则肯定不是优秀拆分,输出-1否则,从低位到高位遍历n的每一个二进制位,看第i位是1,倒序输出2^i。100分代码:#include<bits......