vitis自定义IP编译报错解决方法

vitis这个bug直到2021.1还是没有解决,不知道新版本会不会解决。哎。。

现将临时解决方案记录如下:

当遇到自定义IP时,vitis在编译时会报下面这种错误。完全不知道原因。

"Compiling my_ip..."
arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument
arm-xilinx-eabi-gcc.exe: fatal error: no input files
compilation terminated.

首先在libsrc中找到自定义ip的文件夹。注意,在所有报错的目录里都要找到。一般包括

1. psu_cortexa53_0(cpu名字)/libsrc

2. zynqmp_fsbl/xxxxx/psu_cortexa53_0(cpu名字)/libsrc

3. zynqmp_pmufw/xxxxx/psu_cortexa53_0(cpu名字)/libsrc

找到其中的Makefile替换为

COMPILER=
ARCHIVER=
CP=cp
COMPILER_FLAGS=
EXTRA_COMPILER_FLAGS=
LIB=libxil.a
RELEASEDIR=../../../lib
INCLUDEDIR=../../../include
INCLUDES=-I./. -I${INCLUDEDIR}
INCLUDEFILES=$(wildcard *.h)
LIBSOURCES=$(wildcard *.c *.cpp)
OUTS =*.o
OBJECTS = $(addsuffix .o, $(basename $(wildcard *.c *.cpp)))
ASSEMBLY_OBJECTS = $(addsuffix .o, $(basename $(wildcard *.S)))
libs:
	echo "Compiling myip"
	$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
	$(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OBJECTS} ${ASSEMBLY_OBJECTS}
	make clean
include:
	${CP} $(INCLUDEFILES) $(INCLUDEDIR)
clean:
	rm -rf ${OBJECTS} ${ASSEMBLY_OBJECTS}

按照上述方式,platform编译可以通过,但是在编译app时,依然会报下面的错误:

Error intializing SD boot data : Software platform XML error, sdx:qemuArguments value "zu_base/qemu/pmu_args.txt" path does not exist E:/proj/JSIT-JCS-2022/fpga/zcu15_rbmp/zu_sdk/zu_base/export/zu_base/sw/zu_base/qemu/pmu_args.txt, platform path E:/proj/JSIT-JCS-2022/fpga/zcu15_rbmp/zu_sdk/zu_base/export/zu_base, sdx:configuration zu_base, sdx:image standard

不要慌,仔细看这个报错。提示是缺少pmu_args.txt,那么按照他的路径提示,在该路径下建立这个文件即可。然后还会有个报错,提示缺少qemu_args.txt,同样的方法,在报错路径下建立该文本文件。

然后就OK了!!

### Vitis 创建自定义 XO 文件的完整流程 在嵌入式开发领域,Vitis 是 Xilinx 提供的一个强大的集成开发环境 (IDE),用于加速软件和硬件协同设计。以下是关于如何通过 Vitis 创建自定义 XO 文件的详细说明。 #### 1. 准备工作 为了创建自定义 XO 文件,首先需要确保已正确安装 Vivado 和 Vitis 工具链[^1]。完成工具链安装后,需验证系统路径配置是否正确支持后续操作。 #### 2. 定义平台项目 启动 Vitis 并加载目标硬件平台。此过程可以通过导入预构建的硬件描述文件 (.xsa) 或者手动指定 FPGA 架构来实现。具体步骤如下: - 打开 Vitis IDE。 - 使用 `File -> New -> Platform Project` 菜单新建一个平台工程。 - 导入现有的 `.xsa` 文件作为基础硬件架构[^3]。 #### 3. 编写内核源码 编写要封装成 XO 的硬件模块代码。通常情况下,这些模块会以 RTL(寄存器传输级)形式存在或者基于高层次综合 (HLS) 自动生成。对于 HLS 流程,可以利用 Vivado HLS 来生成优化后的 IP 核心并导出其接口定义。 ```cpp // 示例:简单的加法器函数 #include "ap_int.h" void adder(ap_uint<32> a, ap_uint<32> b, ap_uint<32>& c){ c = a + b; } ``` 上述代码片段展示了一个基本的加法运算逻辑单元[^2]。 #### 4. 封装为可重用组件 将已完成的功能模块打包成为独立的库单元以便于移植到其他项目中去。执行以下命令序列完成转换: ```bash # 初始化一个新的xo对象 v++ --compile -t sw_emu -c -k kernel_name -I./include ./src/adder.cpp -oadder.xo ``` 这里 `-k` 参数指定了最终输出的核心名称;而输入源程序则由用户自行提供。 #### 5. 验证与测试 最后一步是对生成出来的 XO 文件进行全面功能性和性能方面的评估。这可能涉及到模拟运行以及实际部署至真实设备上观察表现情况。 --- ### 注意事项 在整个过程中遇到任何编译错误时,请参照官方文档或访问技术支持论坛寻找解决方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值