0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ZYNQ設(shè)計(jì)的基本流程

FPGA之家 ? 來(lái)源:FPGA之家 ? 2023-09-22 09:26 ? 次閱讀

ZYNQ內(nèi)部包含PS和PL兩部分,PS中包含以下4個(gè)主要功能模塊:

Application processor unit (APU)

Memory interfaces

I/O peripherals (IOP)

Interconnect

ZYNQ內(nèi)部的總體框架如所示,PS中包含2個(gè)ARM Cortex-9的內(nèi)核,一些基本的外設(shè)擴(kuò)展口以及Memory接口。PS和PL的相互通信通過(guò)兩個(gè)通路完成,分別是GP(General Purpose)Ports和HP(High Performance)Ports。

GP Ports包含2個(gè)Master接口和2個(gè)Slave接口,符合標(biāo)準(zhǔn)的AXI協(xié)議數(shù)據(jù)位寬是32bit。HP Ports包含4個(gè)接口,全部是PL作為Master;有兩個(gè)專用的連接到DDR Controller的接口和一個(gè)連接到OCM的接口。HP與GP相比,最大的特點(diǎn)在于有額外的FIFO作為Buffer,可以提高傳輸效率和數(shù)據(jù)吞吐量。

所以從功能角度,GP Ports主要用于寄存器的讀寫(xiě)以及小數(shù)據(jù)量的傳輸;HP Ports用于大量數(shù)據(jù)的傳輸,主要是Memory數(shù)據(jù)的讀寫(xiě)。

54880ed8-58df-11ee-939d-92fbcf53809c.jpg

ZYNQ中最常用的設(shè)計(jì)思路是將主程序放在PS中完成,在PL中設(shè)計(jì)相應(yīng)的邏輯功能作為PS的外設(shè)使用,將邏輯設(shè)計(jì)封裝成IP,且每個(gè)IP都包含一個(gè)標(biāo)準(zhǔn)的AXI-Lite接口。PS對(duì)于邏輯設(shè)計(jì)的控制是通過(guò)控制邏輯設(shè)計(jì)的功能寄存器,進(jìn)而控制邏輯設(shè)計(jì)進(jìn)行相應(yīng)的操作,同時(shí)將工作情況通過(guò)狀態(tài)寄存器返回給PS端。如果邏輯設(shè)計(jì)與PS端需要進(jìn)行大量數(shù)據(jù)的交互,則會(huì)在邏輯設(shè)計(jì)中增加AXI-Full接口,與PS的HP Port相連。

綜上,ZYNQ設(shè)計(jì)的基本流程包含以下步驟:

Vivado中搭建ZYNQ平臺(tái),完成基本外設(shè)控制。

創(chuàng)建邏輯設(shè)計(jì),并封裝成IP。

ZYNQ設(shè)計(jì)中調(diào)用封裝的IP。

對(duì)設(shè)計(jì)的IP進(jìn)行仿真。

ZYBO開(kāi)發(fā)板簡(jiǎn)介

ZYBO是Digilent開(kāi)發(fā)的以XC7Z010-1CLG400C為核心處理器的開(kāi)發(fā)板,其主要功能包括有:

1片32bit位寬,512MB容量的 DDR3

1個(gè) HDMI port

1個(gè)VGA source port

1個(gè)(1Gbit/100Mbit/10Mbit) Ethernet PHY 與RJ45接口

1個(gè)MicroSD slot

1個(gè)OTG USB 2.0 PHY

1個(gè)外部 EEPROM

1個(gè)耳機(jī)輸出接口和1個(gè)麥克風(fēng)輸入接口

1片128Mb QSPI Flash作為加載Flash

1個(gè)JTAG接口和1個(gè)USB-Converter下載接口

GPIO: 6 pushbuttons, 4 slide switches, 5 LEDs

6個(gè) Pmod ports

其板上器件分布情況如圖 2和圖 3所示。

549f9da0-58df-11ee-939d-92fbcf53809c.jpg

圖2

54a9f4d0-58df-11ee-939d-92fbcf53809c.jpg

圖3

Vivado中進(jìn)行ZYNQ硬件部分設(shè)計(jì)

Step1: Viavdo中選擇XC7Z010-1CLG400器件,建立工程。

Step2: 建立Block Design。

54ba15e0-58df-11ee-939d-92fbcf53809c.jpg

圖 4

Step3: 加入ZYNQ7 Processing System和其他所需要的外設(shè)IP。

點(diǎn)擊“Add IP”,加入ZYNQ7 Processing System和AXI GPIO,雙擊IP可以對(duì)其進(jìn)行配置。該實(shí)驗(yàn)中ZYNQ7配置使能UART,引腳為MIO48和49,其ZYBO相關(guān)電路圖如圖 5所示。(注:如果需要在Step11中選擇Hello World工程,則需要使能UART)。AXI GPIO的位寬設(shè)置為4,其余為默認(rèn)配置。

54d2f484-58df-11ee-939d-92fbcf53809c.png

圖 5

54ecfa14-58df-11ee-939d-92fbcf53809c.jpg

圖 6

注意:這里有個(gè)地方非常容易出錯(cuò)。在Vivado建立工程選擇器件的過(guò)程中沒(méi)有選擇ZYBO開(kāi)發(fā)板的配置,而是直接選擇的XC7Z010-1CLG400C器件的配置。系統(tǒng)默認(rèn)的ZYNQ7 Processing System配置中Input Clock Frequency是33.3333MHz,而ZYBO板上為50MHz。此處必須修改過(guò)來(lái),否則后面的系統(tǒng)時(shí)鐘會(huì)完全錯(cuò)亂,導(dǎo)致軟件工程無(wú)法運(yùn)行。

5502f058-58df-11ee-939d-92fbcf53809c.jpg

圖 7

Step4: 點(diǎn)擊“Run Block Automation”,其作用是完成ZYNQ7 Processing System專用引腳的連接,包括FIXED_IO和DDR引腳的連接。

5512bc68-58df-11ee-939d-92fbcf53809c.png

圖 8

Step5: 點(diǎn)擊“Run Connection Automation”,其作用是自動(dòng)完成ZYNQ與外設(shè)的連接,連接是按照工具對(duì)于用戶所設(shè)計(jì)系統(tǒng)的理解,如果需要進(jìn)行修改,可以手動(dòng)更改Block中的連線。該操作工具會(huì)默認(rèn)增加:

AXI interconnect

Processor System Reset

自動(dòng)完成了外設(shè)IP的AXI-Lite端口與ZYNQ7 Processing System的連接,默認(rèn)接法是ZYNQ的FCLK_CLK0作為外設(shè)AXI時(shí)鐘,Processor System Reset產(chǎn)生外設(shè)復(fù)位信號(hào)連接到所有外設(shè)的復(fù)位端口。

將AXI GPIO的引腳引出。

可以使用“Regenerate Layout”,重新布局Block Design。

551af1ee-58df-11ee-939d-92fbcf53809c.jpg

圖 9

Step6: 在“Address Editor”中查看、修改外設(shè)在總線上的地址。

5532f62c-58df-11ee-939d-92fbcf53809c.png

圖 10

Step7: 首先在Block design界面右擊彈出的菜單中點(diǎn)擊Validate Design,以驗(yàn)證Block Design的設(shè)計(jì)和連接是否有錯(cuò)誤。至此Block Design完成了,但是還需要根據(jù)Block Design的配置生成相應(yīng)的源代碼。右擊.bd設(shè)計(jì),并選擇“Create HDL Wrapper”。隨后即生成了相應(yīng)的HDL代碼。

553f331a-58df-11ee-939d-92fbcf53809c.png

圖 11

Step8: 對(duì)于PL端的外接引腳,需要設(shè)置相應(yīng)的Constraints。

55507508-58df-11ee-939d-92fbcf53809c.png圖 12

Step9: 與普通FPGA設(shè)計(jì)一樣,完成Synthesis、Implementation和Generate Bitstream。

Step10: 將Step9中完成的硬件設(shè)計(jì)導(dǎo)入到SDK開(kāi)發(fā)平臺(tái)下。

55636c1c-58df-11ee-939d-92fbcf53809c.jpg

圖 13

Step11: 從這一步開(kāi)始,開(kāi)發(fā)平臺(tái)轉(zhuǎn)移到SDK平臺(tái)。此時(shí)硬件平臺(tái)已經(jīng)確定,接下來(lái)是軟件的開(kāi)發(fā)。首先在SDK中建立軟件工程。

55756caa-58df-11ee-939d-92fbcf53809c.jpg

圖 14

55936318-58df-11ee-939d-92fbcf53809c.png

圖 15

Step12: 在新建工程中完成C代碼的設(shè)計(jì)。

#include #include #include "xparameters.h" #include "sleep.h" #include "platform.h" int main() { XGpio output; int Status; /* * Initialize the GPIO driver so that it's ready to use, * specify the device ID that is generated in xparameters.h */ Status = XGpio_Initialize(&output, XPAR_GPIO_0_DEVICE_ID); if (Status != XST_SUCCESS) { return XST_FAILURE; } /* Set the direction for all signals to be outputs */ XGpio_SetDataDirection(&output, 1, 0x0); init_platform(); while(1){ usleep(200000); //delay XGpio_DiscreteWrite(&output, 1, 0x0); usleep(200000); //delay XGpio_DiscreteWrite(&output, 1, 0xF); }; cleanup_platform(); return 0; }

Step13: 首先點(diǎn)擊“Program FPGA”,將硬件平臺(tái)下載到ZYNQ中。

55a37c80-58df-11ee-939d-92fbcf53809c.jpg

圖 16

Step14: 運(yùn)行軟件工程進(jìn)行調(diào)試。

55c1532c-58df-11ee-939d-92fbcf53809c.jpg

圖 17

在ZYBO板上也能看到LED燈閃爍,至此完成了ZYNQ的一個(gè)基本設(shè)計(jì)的所有開(kāi)發(fā)流程。

DK中進(jìn)行ZYNQ軟件部分設(shè)計(jì)

首先對(duì)“Vivado中進(jìn)行ZYNQ硬件部分設(shè)計(jì)”中讓LED閃爍的C代碼做詳細(xì)的注釋。

int main()

{

/*定義外設(shè)對(duì)于的類型指針,用于綁定外設(shè),便于后面程序調(diào)用時(shí)選擇

*外設(shè)

*/

XGpio output;

int Status;

/* XGpio_Initialize()函數(shù)是xgpio.c中的函數(shù),在BSP Documentation可以

*查到該函數(shù)的描述。

* int XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId)

* InstancePtr為GPIO類型的指針

* DeviceId是在板級(jí)配置中已經(jīng)定義好的外設(shè)的ID,該定義包含在BSP的xparameters.h中

*即在xparameters.h已經(jīng)為該硬件設(shè)計(jì)中的每一種類型的多個(gè)外設(shè)設(shè)置了唯一的ID

*例如設(shè)計(jì)中如果有2個(gè)GPIO外設(shè),則ID分別為0和1.

*該語(yǔ)句完成之后將ID對(duì)應(yīng)的外設(shè)對(duì)象與該指針進(jìn)行了綁定,后面可以通過(guò)調(diào)用該指針指

*定到該外設(shè)

*/

Status = XGpio_Initialize(&output, XPAR_GPIO_0_DEVICE_ID);

if (Status != XST_SUCCESS){

return XST_FAILURE;

}

/* void XGpio_SetDataDirection (XGpio * InstancePtr,

*unsigned Channel,u32 DirectionMask )

* InstancePtr:外設(shè)指針,用于指定到對(duì)應(yīng)的外設(shè)設(shè)備,已經(jīng)與外設(shè)綁定

* Channel:每個(gè)AXI_GPIO中可以有兩個(gè)32bit的GPIO端口,該參數(shù)用來(lái)

*選擇是該外設(shè)中的哪一個(gè)端口

* DirectionMask:選擇GPIO的方向,0為output,1為input

*該函數(shù)的作用是設(shè)置GPIO的方向,如前所述,可以通過(guò)output指定到

*該GPIO外設(shè),

*/

XGpio_SetDataDirection(&output, 1, 0x0);

//初始化ARM內(nèi)核

init_platform();

while(1){

usleep(200000);//delay

XGpio_DiscreteWrite(&output, 1, 0x0);

usleep(200000);//delay

XGpio_DiscreteWrite(&output, 1, 0xF);

};

cleanup_platform();

return 0;

}

以上調(diào)用的這些函數(shù),其定義及使用方法全部可以在BSP(Board Support Package)板級(jí)支持包中找到。當(dāng)在Vivado平臺(tái)中設(shè)計(jì)完成硬件,將其導(dǎo)入到SDK平臺(tái)時(shí),工具會(huì)根據(jù)硬件設(shè)計(jì)中使用到的外設(shè),自動(dòng)生成相應(yīng)的板級(jí)支持包。在SDK的“Project Explorer”界面中可以查看,并且可以在其中打開(kāi)相應(yīng)的BSP說(shuō)明文檔,如圖 18所示。

55d480e6-58df-11ee-939d-92fbcf53809c.jpg

圖18

但是雖然BSP中提供了所有相關(guān)的API函數(shù),但是對(duì)于初學(xué)者來(lái)說(shuō),想搭建一個(gè)可以實(shí)現(xiàn)基本功能的平臺(tái)還是有些困難。于是另一個(gè)方法是利用SDK生成新的Application時(shí)提供的Peripheral Test模板。

55f032be-58df-11ee-939d-92fbcf53809c.png

圖19

該模板生成的代碼中,在主函數(shù)中找到相應(yīng)外設(shè)的測(cè)試函數(shù),例如本例中GPIO的測(cè)試函數(shù)“GpioOutputExample()”,再通過(guò)追述該函數(shù)的具體實(shí)現(xiàn),可以一定程度上作為最基本的范例代碼。

560e1e50-58df-11ee-939d-92fbcf53809c.jpg

圖20

如果再進(jìn)一步深入到ARM編程的本質(zhì),其實(shí)與硬件的所有控制和通信都是依靠讀寫(xiě)底層的寄存器來(lái)完成的。例如如果查看一下“XGpio_SetDataDirection()”函數(shù)的底層實(shí)現(xiàn),可以發(fā)現(xiàn)逐級(jí)調(diào)用的分別是“XGpio_WriteReg()”函數(shù)和“XGpio_Out32()”函數(shù),而“XGpio_Out32()”調(diào)用的是“Xil_Out32()”。其實(shí)“Xil_Out32()”和“Xil_In32()”這兩個(gè)函數(shù)分別是寫(xiě)讀底層硬件寄存器的兩個(gè)函數(shù),所有的上層與底層的寄存器級(jí)別的通信,也就是絕大多數(shù)的外設(shè)控制,都是依靠這兩個(gè)函數(shù)完成的。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9027

    瀏覽量

    366476
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1360

    瀏覽量

    40185
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8447

    瀏覽量

    150720
  • Zynq
    +關(guān)注

    關(guān)注

    9

    文章

    607

    瀏覽量

    47101

原文標(biāo)題:【干貨分享】ZYNQ開(kāi)發(fā)基本流程

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux移植和Xilinx的Petalinux的快速移植開(kāi)發(fā)案例

    作者:殷建飛 本文是昨天發(fā)的文章《龍芯杯CPU設(shè)計(jì)競(jìng)賽與ZYNQ設(shè)計(jì)流程介紹》接續(xù)部分。重點(diǎn)介紹傳統(tǒng)方式的Linux移植和Xilinx的Petalinux的快速移植開(kāi)發(fā)兩種。 部分硬件設(shè)計(jì)中需要
    的頭像 發(fā)表于 11-27 10:36 ?7674次閱讀
    Linux移植和Xilinx的Petalinux的快速移植開(kāi)發(fā)案例

    Zynq在非JTAG模式下的啟動(dòng)配置流程

    其實(shí)是剛接觸 Zynq 軟硬件設(shè)計(jì)時(shí)需要了解的最基本開(kāi)發(fā)流程,也是PL和PS設(shè)計(jì)結(jié)合的完美體現(xiàn)。  但是,上述開(kāi)發(fā)的過(guò)程都有一個(gè)基本的前提,就是 Zynq 開(kāi)發(fā)板是通過(guò) JTAG 直接與電腦相連,然后
    發(fā)表于 01-08 16:33

    ZYNQ芯片開(kāi)發(fā)流程的簡(jiǎn)介

    PS和PL互聯(lián)技術(shù)ZYNQ芯片開(kāi)發(fā)流程的簡(jiǎn)介
    發(fā)表于 01-26 07:12

    Zynq在非JTAG模式下的啟動(dòng)配置流程

    本文主要與大家分享了Zynq在非JTAG模式下的啟動(dòng)配置流程,旨在讓大家對(duì)Zynq的三階段啟動(dòng)模式有一個(gè)具體的認(rèn)識(shí),希望大家多多交流。
    發(fā)表于 03-17 07:36

    基于Zynq的嵌入式開(kāi)發(fā)流程

    基于Zynq的嵌入式開(kāi)發(fā)流程Xilinx Zynq SoC 是集成了FPGA和硬核處理器的特殊SoC,它與一般FPGA的最大不同就是自帶了一個(gè)ARM Cortex-A系列硬核,根據(jù)型號(hào)不同從A9到
    發(fā)表于 08-23 08:15

    ZYNQ嵌入式系統(tǒng)的開(kāi)發(fā)流程

    部分的始發(fā)點(diǎn)。通過(guò)本次實(shí)驗(yàn)我們將了解 ZYNQ 嵌入式系統(tǒng)的開(kāi)發(fā)流程,熟悉 ZYNQ 嵌入式最小系統(tǒng)的搭建。本章包括以下幾個(gè)部分:1.1 簡(jiǎn)介1.2 實(shí)驗(yàn)任務(wù)1.3 硬件設(shè)計(jì)1.4 軟件...
    發(fā)表于 10-27 07:50

    ZYNQ學(xué)習(xí) —— 啟動(dòng)流程分析及各環(huán)節(jié)文件生成流程(ZedBo

    網(wǎng)絡(luò)資料收集,關(guān)于啟動(dòng)流程的一些注意點(diǎn),關(guān)于開(kāi)發(fā)板ZYNQ系列的包括MIZ702
    發(fā)表于 05-11 17:30 ?3次下載

    linux下開(kāi)發(fā)基于zynq的嵌入式操作系統(tǒng)流程

    本文檔內(nèi)容介紹了linux下開(kāi)發(fā)基于zynq的嵌入式操作系統(tǒng)流程,供參考
    發(fā)表于 03-15 16:48 ?17次下載

    Zynq開(kāi)發(fā)流程的捷徑SDSoC

    讓我們先來(lái)看看一個(gè)典型的Zynq SoC開(kāi)發(fā)流程(如圖1):開(kāi)發(fā)者首先需要對(duì)軟硬件進(jìn)行分區(qū),即確定系統(tǒng)哪些部分放入PL(可編程邏輯)中進(jìn)行硬件加速,哪些部分在PS(處理器系統(tǒng))中用軟件實(shí)現(xiàn);接下來(lái)
    發(fā)表于 07-02 08:17 ?1965次閱讀

    Zynq UltraScale+ MPSoC的ZCU102開(kāi)發(fā)套件的開(kāi)發(fā)流程

    使用Zynq UltraScale + MPSoC的ZCU102開(kāi)發(fā)套件,該視頻展示了使用SDSoC開(kāi)發(fā)環(huán)境的開(kāi)發(fā)流程。
    的頭像 發(fā)表于 11-27 06:29 ?4810次閱讀

    典型的ZYNQ開(kāi)發(fā)流程

    Zynq UltraScale+ MPSoC系列是Xilinx第二代Zynq平臺(tái)。其亮點(diǎn)在于FPGA里包含了完整的ARM處理子系統(tǒng)(PS),包含了四核Cortex-A53處理器或雙核
    的頭像 發(fā)表于 02-08 14:39 ?7232次閱讀
    典型的<b class='flag-5'>ZYNQ</b>開(kāi)發(fā)<b class='flag-5'>流程</b>

    ZYNQ的啟動(dòng)流程

    ZYNQ7000 SOC 芯片可以從 FLASH 啟動(dòng),也可以從 SD 卡里啟動(dòng), 本節(jié)介紹程序 FLASH 啟動(dòng)的方法。Zynq7000 SOC 芯片上電后,最先運(yùn)行的是ARM端系統(tǒng)(PS
    的頭像 發(fā)表于 05-07 09:41 ?6229次閱讀

    ZYNQ 的啟動(dòng)流程介紹

    普通的 FPGA 一般是可以從 flash 啟動(dòng),或者被動(dòng)加載,但是ZYNQ不行,ZYNQ必須PS端參與
    的頭像 發(fā)表于 07-22 10:10 ?7124次閱讀

    ZYNQ7020的PS端的基本開(kāi)發(fā)流程

    這篇文章記錄ZYNQ7020的PS端的基本開(kāi)發(fā)流程,關(guān)于PL端的開(kāi)發(fā)流程,參考之前文章,這里放個(gè)超鏈接。
    的頭像 發(fā)表于 07-24 18:12 ?7393次閱讀

    Xilinx Zynq小試FPGA開(kāi)發(fā)流程

    Xilinx Zynq系列是帶有ARM Cortex-A系列CPU核的FPGA,前幾年流落到二手市場(chǎng)上的“礦板”就以Zynq 7010為核心,可以說(shuō)是最廉價(jià)的Zynq實(shí)驗(yàn)平臺(tái)了。
    的頭像 發(fā)表于 03-14 16:13 ?2068次閱讀