日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > ZYNQ
		


買了一塊ZYNQ 開發(fā)板Z7-NANO,開始了ZYNQ開發(fā)的苦難之旅。盡管按照廠商提供的開箱檢查指南,將image 拷貝到sd卡上插入板上后板子工作起來了。但是如何開發(fā)應(yīng)用軟件呢?這一步要比平常的SOC麻煩了許多。

安裝軟件

網(wǎng)絡(luò)上有許多的文章介紹應(yīng)用軟件的開發(fā),但是大多數(shù)使用的是舊版本的vivado和SDK 軟件。開發(fā)板提供的文檔和軟件也大多是基于舊版軟件的,但是官網(wǎng)上已經(jīng)使用的軟件是vivado和vitis了,前者開發(fā)硬件,后者開發(fā)軟件。

下載軟件使用 Xilinx Unified Installer 2021.2。通過它下載vivado和vitis。安裝軟件需要足夠的磁盤空間和耐心。vitis 軟件包大約有60個(gè)G左右。vitis 中包括了vivado 軟件。只需要下載vitis就可以了,不必單獨(dú)地下載vivado。

vivado用來開發(fā)硬件,vitis 開發(fā)軟件,相當(dāng)于原來的SDK。

由于手頭沒有大硬盤空間的ubuntu Linux 電腦,又不想去做VM。先安裝在windows10 的筆記本上了。網(wǎng)絡(luò)上建議安裝在ubuntu 上。

ZYNQ 的開發(fā)流程

ZYNQ 的開發(fā)要比其它的SOC開發(fā)復(fù)雜的多。大至的流程包括:

img

ZYNQ的開發(fā)包括

1 硬件邏輯設(shè)計(jì)

硬件工程師設(shè)計(jì)邏輯并將軟件開發(fā)所需的信息從Vivado導(dǎo)出到 XSA 存檔文件。

2 構(gòu)建軟件平臺(tái)

平臺(tái)(platform)

平臺(tái)是硬件組件 (XSA) 和軟件組件(域/BSP、FSBL 等引導(dǎo)組件等)的組合。

領(lǐng)域(domain)

一個(gè)平臺(tái)上可以建立多個(gè)領(lǐng)域。領(lǐng)域是一個(gè)板級支持包 (BSP) 或操作系統(tǒng) (OS),其中包含用于構(gòu)建應(yīng)用程序的軟件驅(qū)動(dòng)程序集合。例如LinuxDomain??梢詣?chuàng)建多個(gè)應(yīng)用程序以在域上運(yùn)行。領(lǐng)域與平臺(tái)中的單個(gè)處理器或同構(gòu)處理器集群。比如在一個(gè)核上運(yùn)行Linux,或者在兩個(gè)核的集群上運(yùn)行Linux。

建立領(lǐng)域的基礎(chǔ)是支持包和操作系統(tǒng)。Zynq 的Linux 稱為PetaLinux。PetaLinux 的裁剪需要使用Petalinux 構(gòu)建工具。

Petalinux是Xilinx公司推出的嵌入式Linux開發(fā)套件,包括了Linux Kernel、u-boot、device-tree、rootfs等源碼、庫,以及Yocto recipes,可以讓客戶很方便的生成、配置、編譯及自定義。Petalinux支持Zynq UltraScale+ MPSoC、Zynq-7000全可編程SoC,以及MicroBlaze,可與Xilinx硬件設(shè)計(jì)工具Vivado協(xié)同工作,大大簡化了Linux系統(tǒng)的開發(fā)工作。

在vitis 軟件中,包含Xilinx開發(fā)的多個(gè)開發(fā)板的硬件xsa。并且能夠建立相應(yīng)的LinuxDomain。

3 應(yīng)用程序開發(fā)

軟件開發(fā)人員基于平臺(tái)和領(lǐng)域創(chuàng)建應(yīng)用程序。

在已有的平臺(tái)上開發(fā)應(yīng)用程序

網(wǎng)絡(luò)上有許多ZYNQ 應(yīng)用程序開發(fā)的文檔和教程,但是它們大多數(shù)使用的2018 年前的vivado 和SDK 的。幾乎沒有使用vitis 開發(fā)。而國內(nèi)的ZYNQ開發(fā)板目前還沒有提供支持vitis 平臺(tái)的軟件包。

網(wǎng)絡(luò)上關(guān)于ZYNQ 開發(fā)的介紹文章都比較復(fù)雜,大多數(shù)從vivado 硬件設(shè)計(jì)開始,再談petaLinux,再談到vitis 的使用。

其實(shí)沒有那么復(fù)雜。 最方便地方法就是在vitis 軟件中支持xilinx 開發(fā)板的platefrom 構(gòu)建應(yīng)用程序,這些開發(fā)板包括:

zc702  基于Zynq XC7Z020-1CLG484C。

zc706  基于XC7Z045,PCI插卡結(jié)構(gòu)

zcu102  Zynq? UltraScale+? MPSoC ,四核 ARM? Cortex?-A53、雙核 Cortex-R5F 實(shí)時(shí)處理器以及一款 Mali?-400 MP2 圖像處理單元。

zcu106 基于Zynq UltraScale+MPSoC。

zedBoard  基于Zynq-7000 SoC XC7Z020-CLG484-1。由安富利公司開發(fā)的低成本開發(fā)板。

開發(fā)的過程

vitis –New->Create Application Project

點(diǎn)擊Next。

img

選擇zc702 平臺(tái),點(diǎn)擊Next。

填入Application Project Nam。例如LinuxApp4

Z7020 系列ZYNQ 是雙核cortex-A9 .

領(lǐng)域可以建立在單核上也可以建立在雙核上,也可以是一個(gè)為linux,一個(gè)為freeRTOS 上。非常靈活,在這里我們選擇ps7_cortexa9_SMP。雙核linux。

按Next

img

在這一步我以為要填入紅框內(nèi)的內(nèi)容,下載了 common image,并且生成了Sysroot

xilinx-zynqmp-common-v2021.2

導(dǎo)入到項(xiàng)目中,結(jié)果發(fā)現(xiàn)編譯通不過,缺少-lstdC++,等等問題。后來發(fā)現(xiàn),z702 平臺(tái)包中已經(jīng)包含了Sysroot 的SDK內(nèi)容。不需要填入任何東西就可以編譯成功。

按Next

img

選擇Linux Hello World!

生成了一個(gè)簡單的hello world c程序

#include  int main(){ printf("Hello world\n");



}

選擇 Project-> Build Project .經(jīng)過很長的一段時(shí)間。終于編譯成功了。但是沒法形成SD image。

copy 到我的Z7_Nano 開發(fā)板的SD Card 上。插入到目標(biāo)板,運(yùn)行Linux。輸入

$>mkdir  sdcard



$>mount /dev/mmcblk0 sdcard



$>cd sdcard



$>./main.elf



Hello world!



$>

為了測試其它庫的調(diào)用,編寫了一個(gè)UDP Client 程序,同樣編譯成功了

// Client side implementation of UDP client-server model #include  #include  #include  #include  #include  #include  #include  #include  #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  using namespace std; class hello { public: void SayHello();



}; void hello::SayHello() { cout <<"Hello world"<<endl;



} int main(){



 hello Hello;



 Hello.SayHello();



}

也通過了編譯。

結(jié)束語

ZYNQ 要比普通的SOC 芯片復(fù)雜很多,國產(chǎn)開發(fā)板的技術(shù)支持相對滯后。給初學(xué)者帶來不小的困難。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
關(guān)閉