0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ZYNQ的开发流程

工程师邓生 来源:CSDN 作者:姚家湾 2022-09-15 09:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

买了一块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开发复杂的多。大至的流程包括:

34995cce-348e-11ed-ba43-dac502259ad0.pngimg

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

34ce4f7e-348e-11ed-ba43-dac502259ad0.png

点击Next。

352676a4-348e-11ed-ba43-dac502259ad0.png

选择zc702 平台,点击Next。

填入Application Project Nam。例如LinuxApp4

356d707c-348e-11ed-ba43-dac502259ad0.png

Z7020 系列ZYNQ 是双核cortex-A9 .

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

按Next

35978204-348e-11ed-ba43-dac502259ad0.pngimg

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

xilinx-zynqmp-common-v2021.2

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

按Next

35d1fb6e-348e-11ed-ba43-dac502259ad0.png

选择Linux Hello World!

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

#include



intmain(){



printf("Helloworld
");



}

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

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

$>mkdirsdcard



$>mount/dev/mmcblk0sdcard



$>cdsdcard



$>./main.elf



Helloworld!



$>

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

//ClientsideimplementationofUDPclient-servermodel



#include



#include



#include



#include



#include



#include



#include



#include







#definePORT8080



#defineMAXLINE1024







//Drivercode



intmain(){



intsockfd;



charbuffer[MAXLINE];



char*hello="Hellofromclient";



structsockaddr_inservaddr;







//Creatingsocketfiledescriptor



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 = recvfrom(sockfd, (char *)buffer, MAXLINE,MSG_WAITALL, (struct sockaddr *) &servaddr,(socklen_t *)&len);



 buffer[n] = '�';



 printf("Server : %s
", buffer);



 



 close(sockfd);



 return 0;



}

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

#include



usingnamespacestd;



classhello{



public:



voidSayHello();



};



voidhello::SayHello()



{



cout<<"Hello world"<

也通过了编译。

结束语

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



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • soc
    soc
    +关注

    关注

    40

    文章

    4619

    浏览量

    230079
  • Zynq
    +关注

    关注

    10

    文章

    632

    浏览量

    49566
  • Ubuntu系统
    +关注

    关注

    0

    文章

    93

    浏览量

    4674

原文标题:zynq /vitis 应用笔记

文章出处:【微信号:ZYNQ,微信公众号:ZYNQ】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FPGA硬件设计之ZYNQ外围DDR介绍

    由于ZYNQ-PS端的BANK502基本就是为DDR设计的,所以原理图设计非常简单:几乎就是PIN TO PIN连接。
    的头像 发表于 03-25 15:30 311次阅读
    FPGA硬件设计之<b class='flag-5'>ZYNQ</b>外围DDR介绍

    基于ZYNQ-MZ702P开发板实现以太网通信

    本章以太网通信实验是基于ZYNQ-MZ702P开发板进行实现,在配置方面,需要读者自主修改不同的地方。文章末尾有本项目原工程压缩包,提供参考。
    的头像 发表于 02-11 11:42 2143次阅读
    基于<b class='flag-5'>ZYNQ</b>-MZ702P<b class='flag-5'>开发</b>板实现以太网通信

    如何在Zynq UltraScale+ MPSoC平台上通过JTAG启动嵌入式Linux镜像

    流程教程)。本文则进一步讲解如何在 Zynq UltraScale+ MPSoC 平台上通过 JTAG 逐步启动 Linux,并提供了完整的过程与关键命令。只要按步骤操作,即使是复杂的 Linux 镜像也能成功通过 JTAG 启动。
    的头像 发表于 01-13 11:45 4962次阅读

    基于Vitis Model Composer完成全流程AI Engine开发

    基于Vitis Model Composer进行AI Engine(AIE)开发,核心优势体现在AIE专属优化、开发流程简化、灵活的适配性、高效验证及量产适配等方面。
    的头像 发表于 12-31 11:20 6300次阅读
    基于Vitis Model Composer完成全<b class='flag-5'>流程</b>AI Engine<b class='flag-5'>开发</b>

    如何在ZYNQ本地部署DeepSeek模型

    一个将最小号 DeepSeek 模型部署到 AMD Zynq UltraScale+ MPSoC 处理系统的项目。
    的头像 发表于 12-19 15:43 7800次阅读
    如何在<b class='flag-5'>ZYNQ</b>本地部署DeepSeek模型

    明晚8点|睿擎文件系统实战:从开发到发布全流程解析

    从文件操作到镜像发布,一次直播掌握完整开发流程!在嵌入式系统开发中,文件系统是数据存储、配置管理和资源访问的核心基础。然而在实际开发中,文件操作效率低下、镜像打包
    的头像 发表于 11-11 11:53 766次阅读
    明晚8点|睿擎文件系统实战:从<b class='flag-5'>开发</b>到发布全<b class='flag-5'>流程</b>解析

    ZYNQ PS与PL数据交互方式

    ZYNQ SoC 的 PS (Processing System) 和 PL (Programmable Logic) 之间的数据交互是系统设计的核心。
    的头像 发表于 10-15 10:33 1316次阅读
    <b class='flag-5'>ZYNQ</b> PS与PL数据交互方式

    AMD Vivado IP integrator的基本功能特性

    我们还将带您了解在 AMD Zynq UltraScale+ MPSoC 开发板与 AMD Versal 自适应 SoC 开发板上使用 IP integrator 时,两种设计流程之间
    的头像 发表于 10-07 13:02 2308次阅读
    AMD Vivado IP integrator的基本功能特性

    RTthread怎么加载zynq的支持包?

    RTthread有xilinx zynq的芯片支持包了么,SDK管理器里面怎么下载ZYNQ的支持包呢?求助
    发表于 09-23 06:05

    单片机开发流程包括什么?

    单片机开发是一个系统性的工程,从需求明确到最终产品落地,需要经历多个相互关联的流程环节,每个环节都对最终产品的性能和质量有着重要影响。 一、需求分析与文档梳理 开发流程的第一步是需求分
    的头像 发表于 07-22 11:21 1223次阅读

    RK3568 EVB开发板 深度休眠与快速醒的工作流程

    RK3568 EVB开发板关于深度休眠和唤醒流程的分析
    的头像 发表于 07-22 09:49 1042次阅读
    RK3568 EVB<b class='flag-5'>开发</b>板 深度休眠与快速醒的工作<b class='flag-5'>流程</b>

    CH367连接zynq问题

    通过四线SPI连接CH367和zynq时,CH367使用CH367StreamSPI函数设置为四线模式,然后设置SDI为MISO,SDX为MOSI,SCS和SCL为片选和时钟
    发表于 07-03 10:10

    正点原子Z15I ZYNQ 开发板资料发布!板载PCIe2.0、SPFx2、MIPI CSI等接口,资料丰富!

    正点原子Z15I ZYNQ 开发板资料发布!板载PCIe2.0、SPFx2、MIPI CSI等接口,资料丰富! 正点原子Z15I ZYNQ开发板,核心板全工业级设计,主控芯片
    发表于 05-30 16:59

    正点原子Z20 ZYNQ 开发板发布!板载FMC LPC、LVDS LCD和WIFI&amp;蓝牙等接口,资料丰富!

    正点原子Z20 ZYNQ 开发板发布!板载FMC LPC、LVDS LCD和WIFI&amp;蓝牙等接口,资料丰富! 正点原子新品Z20 ZYNQ开发板来啦!核心板全工业级设计
    发表于 05-30 16:55

    技术分享 | 如何在2k0300(LoongArch架构)处理器上跑通qt开发流程

    技术分享 | 如何在2k0300开发板(LoongArch架构)处理器上跑通qt开发流程
    的头像 发表于 05-20 11:05 1005次阅读
    技术分享 | 如何在2k0300(LoongArch架构)处理器上跑通qt<b class='flag-5'>开发</b><b class='flag-5'>流程</b>