在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ZYNQ設計的基本流程

FPGA之家 ? 來源:FPGA之家 ? 2023-09-22 09:26 ? 次閱讀

ZYNQ內部包含PS和PL兩部分,PS中包含以下4個主要功能模塊:

Application processor unit (APU)

Memory interfaces

I/O peripherals (IOP)

Interconnect

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

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

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

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

ZYNQ中最常用的設計思路是將主程序放在PS中完成,在PL中設計相應的邏輯功能作為PS的外設使用,將邏輯設計封裝成IP,且每個IP都包含一個標準的AXI-Lite接口。PS對于邏輯設計的控制是通過控制邏輯設計的功能寄存器,進而控制邏輯設計進行相應的操作,同時將工作情況通過狀態寄存器返回給PS端。如果邏輯設計與PS端需要進行大量數據的交互,則會在邏輯設計中增加AXI-Full接口,與PS的HP Port相連。

綜上,ZYNQ設計的基本流程包含以下步驟:

Vivado中搭建ZYNQ平臺,完成基本外設控制。

創建邏輯設計,并封裝成IP。

ZYNQ設計中調用封裝的IP。

對設計的IP進行仿真

ZYBO開發板簡介

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

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

1個 HDMI port

1個VGA source port

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

1個MicroSD slot

1個OTG USB 2.0 PHY

1個外部 EEPROM

1個耳機輸出接口和1個麥克風輸入接口

1片128Mb QSPI Flash作為加載Flash

1個JTAG接口和1個USB-Converter下載接口

GPIO: 6 pushbuttons, 4 slide switches, 5 LEDs

6個 Pmod ports

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

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

圖2

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

圖3

Vivado中進行ZYNQ硬件部分設計

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

Step2: 建立Block Design。

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

圖 4

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

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

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

圖 5

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

圖 6

注意:這里有個地方非常容易出錯。在Vivado建立工程選擇器件的過程中沒有選擇ZYBO開發板的配置,而是直接選擇的XC7Z010-1CLG400C器件的配置。系統默認的ZYNQ7 Processing System配置中Input Clock Frequency是33.3333MHz,而ZYBO板上為50MHz。此處必須修改過來,否則后面的系統時鐘會完全錯亂,導致軟件工程無法運行。

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

圖 7

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

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

圖 8

Step5: 點擊“Run Connection Automation”,其作用是自動完成ZYNQ與外設的連接,連接是按照工具對于用戶所設計系統的理解,如果需要進行修改,可以手動更改Block中的連線。該操作工具會默認增加:

AXI interconnect

Processor System Reset

自動完成了外設IP的AXI-Lite端口與ZYNQ7 Processing System的連接,默認接法是ZYNQ的FCLK_CLK0作為外設AXI時鐘,Processor System Reset產生外設復位信號連接到所有外設的復位端口。

將AXI GPIO的引腳引出。

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

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

圖 9

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

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

圖 10

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

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

圖 11

Step8: 對于PL端的外接引腳,需要設置相應的Constraints。

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

Step9: 與普通FPGA設計一樣,完成Synthesis、Implementation和Generate Bitstream。

Step10: 將Step9中完成的硬件設計導入到SDK開發平臺下。

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

圖 13

Step11: 從這一步開始,開發平臺轉移到SDK平臺。此時硬件平臺已經確定,接下來是軟件的開發。首先在SDK中建立軟件工程。

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

圖 14

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

圖 15

Step12: 在新建工程中完成C代碼的設計。

#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: 首先點擊“Program FPGA”,將硬件平臺下載到ZYNQ中。

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

圖 16

Step14: 運行軟件工程進行調試。

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

圖 17

在ZYBO板上也能看到LED燈閃爍,至此完成了ZYNQ的一個基本設計的所有開發流程。

DK中進行ZYNQ軟件部分設計

首先對“Vivado中進行ZYNQ硬件部分設計”中讓LED閃爍的C代碼做詳細的注釋。

int main()

{

/*定義外設對于的類型指針,用于綁定外設,便于后面程序調用時選擇

*外設

*/

XGpio output;

int Status;

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

*查到該函數的描述。

* int XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId)

* InstancePtr為GPIO類型的指針

* DeviceId是在板級配置中已經定義好的外設的ID,該定義包含在BSP的xparameters.h中

*即在xparameters.h已經為該硬件設計中的每一種類型的多個外設設置了唯一的ID

*例如設計中如果有2個GPIO外設,則ID分別為0和1.

*該語句完成之后將ID對應的外設對象與該指針進行了綁定,后面可以通過調用該指針指

*定到該外設

*/

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:外設指針,用于指定到對應的外設設備,已經與外設綁定

* Channel:每個AXI_GPIO中可以有兩個32bit的GPIO端口,該參數用來

*選擇是該外設中的哪一個端口

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

*該函數的作用是設置GPIO的方向,如前所述,可以通過output指定到

*該GPIO外設,

*/

XGpio_SetDataDirection(&output, 1, 0x0);

//初始化ARM內核

init_platform();

while(1){

usleep(200000);//delay

XGpio_DiscreteWrite(&output, 1, 0x0);

usleep(200000);//delay

XGpio_DiscreteWrite(&output, 1, 0xF);

};

cleanup_platform();

return 0;

}

以上調用的這些函數,其定義及使用方法全部可以在BSP(Board Support Package)板級支持包中找到。當在Vivado平臺中設計完成硬件,將其導入到SDK平臺時,工具會根據硬件設計中使用到的外設,自動生成相應的板級支持包。在SDK的“Project Explorer”界面中可以查看,并且可以在其中打開相應的BSP說明文檔,如圖 18所示。

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

圖18

但是雖然BSP中提供了所有相關的API函數,但是對于初學者來說,想搭建一個可以實現基本功能的平臺還是有些困難。于是另一個方法是利用SDK生成新的Application時提供的Peripheral Test模板。

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

圖19

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

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

圖20

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9180

    瀏覽量

    369455
  • 內核
    +關注

    關注

    3

    文章

    1384

    瀏覽量

    40442
  • 接口
    +關注

    關注

    33

    文章

    8718

    瀏覽量

    152026
  • Zynq
    +關注

    關注

    10

    文章

    610

    瀏覽量

    47322

原文標題:【干貨分享】ZYNQ開發基本流程

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux移植和Xilinx的Petalinux的快速移植開發案例

    作者:殷建飛 本文是昨天發的文章《龍芯杯CPU設計競賽與ZYNQ設計流程介紹》接續部分。重點介紹傳統方式的Linux移植和Xilinx的Petalinux的快速移植開發兩種。 部分硬件設計中需要
    的頭像 發表于 11-27 10:36 ?8350次閱讀
    Linux移植和Xilinx的Petalinux的快速移植開發案例

    Zynq在非JTAG模式下的啟動配置流程

    其實是剛接觸 Zynq 軟硬件設計時需要了解的最基本開發流程,也是PL和PS設計結合的完美體現。  但是,上述開發的過程都有一個基本的前提,就是 Zynq 開發板是通過 JTAG 直接與電腦相連,然后
    發表于 01-08 16:33

    ZYNQ芯片開發流程的簡介

    PS和PL互聯技術ZYNQ芯片開發流程的簡介
    發表于 01-26 07:12

    Zynq在非JTAG模式下的啟動配置流程

    本文主要與大家分享了Zynq在非JTAG模式下的啟動配置流程,旨在讓大家對Zynq的三階段啟動模式有一個具體的認識,希望大家多多交流。
    發表于 03-17 07:36

    基于Zynq的嵌入式開發流程

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

    ZYNQ嵌入式系統的開發流程

    部分的始發點。通過本次實驗我們將了解 ZYNQ 嵌入式系統的開發流程,熟悉 ZYNQ 嵌入式最小系統的搭建。本章包括以下幾個部分:1.1 簡介1.2 實驗任務1.3 硬件設計1.4 軟件...
    發表于 10-27 07:50

    ZYNQ學習 —— 啟動流程分析及各環節文件生成流程(ZedBo

    網絡資料收集,關于啟動流程的一些注意點,關于開發板ZYNQ系列的包括MIZ702
    發表于 05-11 17:30 ?3次下載

    linux下開發基于zynq的嵌入式操作系統流程

    本文檔內容介紹了linux下開發基于zynq的嵌入式操作系統流程,供參考
    發表于 03-15 16:48 ?17次下載

    Zynq開發流程的捷徑SDSoC

    讓我們先來看看一個典型的Zynq SoC開發流程(如圖1):開發者首先需要對軟硬件進行分區,即確定系統哪些部分放入PL(可編程邏輯)中進行硬件加速,哪些部分在PS(處理器系統)中用軟件實現;接下來
    發表于 07-02 08:17 ?2017次閱讀

    Zynq UltraScale+ MPSoC的ZCU102開發套件的開發流程

    使用Zynq UltraScale + MPSoC的ZCU102開發套件,該視頻展示了使用SDSoC開發環境的開發流程
    的頭像 發表于 11-27 06:29 ?4944次閱讀

    典型的ZYNQ開發流程

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

    ZYNQ的啟動流程

    ZYNQ7000 SOC 芯片可以從 FLASH 啟動,也可以從 SD 卡里啟動, 本節介紹程序 FLASH 啟動的方法。Zynq7000 SOC 芯片上電后,最先運行的是ARM端系統(PS
    的頭像 發表于 05-07 09:41 ?6750次閱讀

    ZYNQ 的啟動流程介紹

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

    ZYNQ7020的PS端的基本開發流程

    這篇文章記錄ZYNQ7020的PS端的基本開發流程,關于PL端的開發流程,參考之前文章,這里放個超鏈接。
    的頭像 發表于 07-24 18:12 ?8409次閱讀

    Xilinx Zynq小試FPGA開發流程

    Xilinx Zynq系列是帶有ARM Cortex-A系列CPU核的FPGA,前幾年流落到二手市場上的“礦板”就以Zynq 7010為核心,可以說是最廉價的Zynq實驗平臺了。
    的頭像 發表于 03-14 16:13 ?2326次閱讀
    主站蜘蛛池模板: 性xxxx黑人与亚洲 | 国产香蕉视频在线播放 | 国模娜娜扒开嫩木耳 | 欧美男人天堂网 | 韩国r天堂 | 欧美一级免费片 | 五月天婷婷丁香中文在线观看 | 免费一级网站 | 国产深夜福利在线观看网站 | 在线播放国产不卡免费视频 | 天堂资源在线种子资源 | 免费抓胸吻胸激烈视频网站 | 又黄又湿又爽吸乳视频 | 亚洲一区二区三区麻豆 | 中国色老头 | 天堂网www在线资源 天堂网www在线资源链接 | 九色视频网站 | 日本污污视频 | 久热中文字幕在线精品免费 | 黄色大片毛片 | 亚洲人成综合网站在线 | 巨臀中文字幕一区二区翘臀 | 手机看片福利国产 | 国产三级在线免费观看 | 黄床大片 | 五月天综合婷婷 | 色.com| 毛片在线不卡 | 国产乱子伦一区二区三区 | 免费在线色视频 | 日韩毛片在线影视 | 日日夜夜操天天干 | 高清视频在线播放 | 欧美一区亚洲二区 | 91日韩精品天海翼在线观看 | 一个色中文字幕 | 一级特黄特色的免费大片视频 | 狠狠色噜噜狠狠狠狠999米奇 | 91福利国产在线观看网站 | 色se01短视频永久免费 | 免费看男女下面日出水视频 |