zynq /vitis 应用笔记(1)

        买了一块ZYNQ 开发板Z7-NANO,开始了ZYNQ开发的苦难之旅。尽管按照厂商提供的开箱检查指南,将image 拷贝到sd卡上插入板上后板子工作起来了。但是如何开发应用软件呢?这一步要比平常的SOC麻烦了许多。

安装软件

        网络上有许多的文章介绍应用软件的开发,但是大多数使用的是旧版本的vivado和SDK 软件。开发板提供的文档和软件也大多是基于旧版软件的,但是官网上已经使用的软件是vivado和vitis了,前者开发硬件,后者开发软件。

   下载软件使用 Xilinx Unified Installer 2021.2。通过它下载vivado和vitis。安装软件需要足够的磁盘空间和耐心。vitis 软件包大约有60个G左右。vitis 中包括了vivado 软件。只需要下载vitis就可以了,不必单独地下载vivado。

   vivado用来开发硬件,vitis 开发软件,相当于原来的SDK。

由于手头没有大硬盘空间的ubuntu Linux 电脑,又不想去做VM。先安装在windows10 的笔记本上了。网络上建议安装在ubuntu 上。

ZYNQ 的开发流程

ZYNQ 的开发要比其它的SOC开发复杂的多。大至的流程包括:        

ZYNQ的开发包括

1 硬件逻辑设计

硬件工程师设计逻辑并将软件开发所需的信息从Vivado导出到 XSA 存档文件。

2  构建软件平台

  平台(platform)

平台是硬件组件 (XSA) 和软件组件(域/BSP、FSBL 等引导组件等)的组合。

  领域(domain)

一个平台上可以建立多个领域。领域是一个板级支持包 (BSP) 或操作系统 (OS),其中包含用于构建应用程序的软件驱动程序集合。例如LinuxDomain。可以创建多个应用程序以在域上运行。领域与平台中的单个处理器或同构处理器集群。比如在一个核上运行Linux,或者在两个核的集群上运行Linux。

建立领域的基础是支持包和操作系统。Zynq 的Linux 称为PetaLinux。PetaLinux 的裁剪需要使用Petalinux  构建工具。

Petalinux是Xilinx公司推出的嵌入式Linux开发套件,包括了Linux Kernel、u-boot、device-tree、rootfs等源码、库,以及Yocto recipes,可以让客户很方便的生成、配置、编译及自定义。Petalinux支持Zynq UltraScale+ MPSoC、Zynq-7000全可编程SoC,以及MicroBlaze,可与Xilinx硬件设计工具Vivado协同工作,大大简化了Linux系统的开发工作。

在vitis 软件中,包含Xilinx开发的多个开发板的硬件xsa。并且能够建立相应的LinuxDomain。

3 应用程序开发

软件开发人员基于平台和领域创建应用程序。

在已有的平台上开发应用程序

网络上有许多ZYNQ 应用程序开发的文档和教程,但是它们大多数使用的2018 年前的vivado 和SDK 的。几乎没有使用vitis 开发。而国内的ZYNQ开发板目前还没有提供支持vitis 平台的软件包。

网络上关于ZYNQ 开发的介绍文章都比较复杂,大多数从vivado 硬件设计开始,再谈petaLinux,再谈到vitis 的使用。

其实没有那么复杂。 最方便地方法就是在vitis 软件中支持xilinx 开发板的platefrom 构建应用程序,这些开发板包括:

zc702   基于Zynq XC7Z020-1CLG484C。

zc706   基于XC7Z045,PCI插卡结构  

zcu102  Zynq® UltraScale+™ MPSoC ,四核 ARM® Cortex®-A53、双核 Cortex-R5F 实时处理器以及一款 Mali™-400 MP2 图像处理单元。

zcu106 基于Zynq UltraScale+MPSoC。

zedBoard  基于Zynq-7000 SoC XC7Z020-CLG484-1。由安富利公司开发的低成本开发板。

开发的过程

vitis –New->Create  Application Project

点击Next。

 选择zc702 平台,点击Next。

 填入Application Project Nam。例如LinuxApp4

Z7020 系列ZYNQ 是双核cortex-A9 .

 领域可以建立在单核上也可以建立在双核上,也可以是一个为linux,一个为freeRTOS 上。非常灵活,在这里我们选择ps7_cortexa9_SMP。双核linux。

按Next

 

 在这一步我以为要填入红框内的内容,下载了 common image,并且生成了Sysroot

xilinx-zynqmp-common-v2021.2

导入到项目中,结果发现编译通不过,缺少-lstdC++,等等问题。后来发现,z702 平台包中已经包含了Sysroot 的SDK内容。不需要填入任何东西就可以编译成功。

按Next

 选择Linux Hello World!

生成了一个简单的hello world c程序

#include <stdio.h>
int main(){
printf("Hello world\n");
}

选择 Project-> Build Project .经过很长的一段时间。终于编译成功了。但是没法形成SD image。

copy 到我的Z7_Nano 开发板的SD Card 上。插入到目标板,运行Linux。输入

$>mkdir  sdcard
$>mount /dev/mmcblk0 sdcard
$>cd sdcard
$>./main.elf
Hello world!
$>

为了测试其它库的调用,编写了一个UDP Client 程序,同样编译成功了

// Client side implementation of UDP client-server model
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define PORT	 8080
#define MAXLINE 1024

// Driver code
int main() {
	int sockfd;
	char buffer[MAXLINE];
	char *hello = "Hello from client";
	struct sockaddr_in	 servaddr;

	// Creating socket file descriptor
	if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
		perror("socket creation failed");
		exit(EXIT_FAILURE);
	}

	memset(&servaddr, 0, sizeof(servaddr));

	// Filling server information
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(PORT);
	servaddr.sin_addr.s_addr = INADDR_ANY;

	int n, len;

	sendto(sockfd, (const char *)hello, strlen(hello),
		MSG_CONFIRM, (const struct sockaddr *) &servaddr,
			sizeof(servaddr));
	printf("Hello message sent.\n");

	n = recvfrom(sockfd, (char *)buffer, MAXLINE,MSG_WAITALL, (struct sockaddr *) &servaddr,(socklen_t *)&len);
	buffer[n] = '\0';
	printf("Server : %s\n", buffer);

	close(sockfd);
	return 0;
}

为了测试C++ 程序,编写了

#include <iostream>
using namespace std;
class hello {
public:
	void SayHello();
};
void hello::SayHello()
{
	cout <<"Hello world"<<endl;
}

int main(){
	hello Hello;
	Hello.SayHello();
}

也通过了编译。

结束语

   ZYNQ 要比普通的SOC 芯片复杂很多,国产开发板的技术支持相对滞后。给初学者带来不小的困难。

  春节将至,给大家拜个早年。

Zynq是一种基于Xilinx FPGA和ARM Cortex处理器的可编程系统芯片。Vitis是一种全新的开发工具套件,用于开发和部署高性能、低功耗和可扩展的应用程序。 VitisZynq开发平台提供了一整套开发工具和库,以简化应用程序的开发过程。Vitis应用教程的目的是帮助用户了解和掌握Vitis工具和相关技术,从而快速开发出高效、稳定的Zynq应用程序。 Vitis应用教程通常包括以下内容: 1. 环境设置:教程会介绍如何正确配置Vitis开发环境,包括安装必要的软件和驱动程序,并配置硬件设备与开发板的连接。 2. 应用程序开发:教程会引导用户使用Vitis开发工具,编写和调试应用程序。用户可以学习如何创建项目、添加源代码文件、设置编译选项、构建和调试应用程序。 3. 并行计算:Vitis支持并行计算,通过使用OpenCL、OpenMP等技术,用户可以利用FPGA的计算能力来加速应用程序的执行。教程会介绍如何使用Vitis进行并行计算的开发。 4. 优化与调试:Vitis提供了丰富的优化和调试工具,帮助用户优化应用程序的性能和功耗。教程会介绍如何使用这些工具来进行代码优化、性能分析和调试。 5. 应用部署:完成应用程序的开发后,教程会讲解如何将应用程序部署到Zynq开发板上运行,以及如何进行调试和性能测试。 通过学习Vitis应用教程,用户可以掌握Vitis开发工具的使用方法,深入了解Zynq开发平台的特性和优势,快速开发出高性能、低功耗的应用程序,并实现在FPGA上的硬件加速。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值