RM新时代网站-首页

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

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

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

【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十九章PL端AXI GPIO的使用

FPGA技術(shù)專欄 ? 來源:芯驛電子科技 ? 作者:芯驛電子科技 ? 2021-02-01 10:06 ? 次閱讀

原創(chuàng)聲明:

本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。

適用于板卡型號:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

實(shí)驗(yàn)Vivado工程目錄為“ps_axi_gpio /vivado”。

實(shí)驗(yàn)vitis工程目錄為“ps_axi_gpio /vitis”。

可能有些人就會問,怎么又在講GPIO,LED燈,覺得太繁瑣,但是GPIO是ZYNQ的基本操作,本教程力求把各種方法分享給大家,PS端的MIO,EMIO,PL端的axi gpio,包括輸入輸出兩個(gè)方向,以及PS與PL的基本操作,所以還是希望大家耐心學(xué)習(xí)。

前面講過如何用的是PS端的EMIO點(diǎn)亮PL端LED燈,但是并沒有與PL端產(chǎn)生交互。本章介紹另外一種控制方法,在ZYNQ當(dāng)中可以使用AXI GPIO,通過AXI總線控制PL端的LED燈。同時(shí)也介紹了PL端按鍵的使用。

使用zynq最大的疑問就是如何把PS和PL結(jié)合起來使用,在其他的SOC芯片中一般都會有GPIO,本實(shí)驗(yàn)使用一個(gè)AXI GPIO的IP核,讓PS端通過AXI總線控制PL端的LED燈,實(shí)驗(yàn)雖然簡單,不過可以讓我們了解PL和PS是如何結(jié)合的。

1. 原理介紹

一個(gè)AXI GPIO模塊有兩個(gè)GPIO,分別是GPIO和GPIO2,也就是channel1和channel2,為雙向IO。

o4YBAGAKMzKAY6pDAACmFyv6F58317.jpgAXI GPIO結(jié)構(gòu)

FPGA工程師工作內(nèi)容

以下為FPGA工程師負(fù)責(zé)內(nèi)容。

2. Vivado工程建立

1)打開“ps_hello”另存為一個(gè)名為“ps_axi_gpio”Vivado工程,表示PS通過AXI總線控制gpio

pIYBAGAKMzOAGeCGAAA59aDj8iY856.jpg

“Create project subdirectory”勾選后會在目錄下創(chuàng)建子目錄,勾選“Include run results”會包含編譯后的結(jié)果

o4YBAGAKMzOAOXfTAAA8FI_NQ9c110.jpg

2)雙擊xx.bd打開block design

pIYBAGAKMzSAfyqRAACcpUntlPc415.jpg

添加AXI GPIO

3) 添加一個(gè)AXI GPIO的IP 核

pIYBAGAKMzSAQGKGAACdVkRTz8g117.jpg

4)雙擊剛才添加的“axi_gpio_0”配置參數(shù)

pIYBAGAKMzWAaKLaAABInvRCIFA965.jpg

5)選擇“All Outputs”,因?yàn)檫@里控制LED,只要輸出就可以了,“GPIO Width”填1,控制1顆LED,點(diǎn)擊OK。如果想使用channel2,需要把”Enable Dual Channel”打開,也就使能了GPIO2。

o4YBAGAKMzWAJlJ_AACA_2-QQxQ387.jpg

6)點(diǎn)擊“Run Connection Automation”,可以完成部分自動連線

pIYBAGAKMzaAJsGRAABPqHHFHJ0030.jpg

7)選擇要自動連接的端口,這里全選,點(diǎn)擊OK

o4YBAGAKMzeABI1QAABSVmWmSWA453.jpg

8)點(diǎn)擊“Optimize Routing”,可以優(yōu)化布局,同時(shí)可以看到多了兩個(gè)模塊,一個(gè)是Processor System Reset模塊,為同步復(fù)位模塊,提供同一時(shí)鐘域的復(fù)位信號。AXI Interconnect模塊為AXI總線互聯(lián)模塊,用于AXI模塊的交叉互聯(lián)。

pIYBAGAKMzeAY6DoAABbSSSffDA584.jpg

在這個(gè)應(yīng)用中,我們可以看到用到了ZYNQ的HPM0_LPD口,此接口用于訪問PL端數(shù)據(jù),大部分應(yīng)用中是為了配置PL端模塊的寄存器。

o4YBAGAKMziAZM--AABQUi9JHns252.jpg

復(fù)位信號由ZYNQ的復(fù)位輸出提供,最好是每個(gè)時(shí)鐘域都加一個(gè)復(fù)位模塊,可以根據(jù)模塊下面的名稱搜索添加。

pIYBAGAKMziAGZlyAABOYBnbw-w751.jpg

9)修改GPIO端口的名稱

o4YBAGAKMzmAKvYPAACPr-eO3Vc697.jpg

10)名稱修改為leds

pIYBAGAKMzqAAJJvAACNtJrXWOo194.jpg

11)再添加一個(gè)AXI GPIO,連接PL端按鍵,配置GPIO參數(shù),都為輸入,寬度為1,使能中斷

o4YBAGAKMzuAVULcAAB_vG_zTWE596.jpg

12)使用自動連接

pIYBAGAKMzuARiKZAABT03zt0qs818.jpg

13)再把端口名稱改為keys

o4YBAGAKMzyAf4bZAACbeOzydCM968.jpg

14)由于是PL端過來的中斷,在這里需要配置ZYNQ處理器的中斷,設(shè)置IRQ0[0-7]為1

pIYBAGAKMz2ACrd3AABtCiLEb1Y810.jpg

15)連接ip2intc_irpt到pl_ps_irq

o4YBAGAKMz2ANcVFAABiV68BooM572.jpg

16)保存設(shè)計(jì),點(diǎn)擊xx.bd,右鍵Generate Output Products

pIYBAGAKMz6APLO7AABXhXKoK1Y716.jpg

17)在生成的Verilog文件中,可以看到有個(gè)“l(fā)eds_tri_o”和”keys_tri_i”的端口,要為他們分配管腳,在綁定引腳時(shí),以這個(gè)文件里的引腳名稱為準(zhǔn)。

o4YBAGAKMz6AJadHAAClZPOBlyU065.jpg

3. XDC文件約束PL管腳

1)創(chuàng)建一個(gè)新的xdc約束文件

pIYBAGAKMz-ASDKcAABpvMGo0_c795.jpg

2)文件名稱為led

o4YBAGAKMz-AV41rAABzXm6E7ow848.jpg

3)led.xdc添加一下內(nèi)容,端口名稱一定要和頂層文件端口一致

##################CompressBitstream############################set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design]set_propertyIOSTANDARDLVCMOS33[get_ports{leds_tri_o[0]}]set_propertyPACKAGE_PINAE12[get_ports{leds_tri_o[0]}]set_propertyIOSTANDARDLVCMOS33[get_ports{keys_tri_i[0]}]set_propertyPACKAGE_PINAF12[get_ports{keys_tri_i[0]}]

4)生成bit文件

pIYBAGAKMz-APW9RAAAKb9wKyjA709.jpg

5)導(dǎo)出硬件FileExportExport Hardware

o4YBAGAKM0CAYq31AACDny6BInc626.jpg

6)因?yàn)橐玫絇L,所以選擇“Include bitstream”,點(diǎn)擊“OK”

pIYBAGAKM0GAfb5bAAA-hieL5ac498.jpg

軟件工程師工作內(nèi)容

以下為軟件工程師負(fù)責(zé)內(nèi)容。

4. Vitis程序編寫

4.1 AXI GPIO點(diǎn)亮PL端LED燈

1)創(chuàng)建一個(gè)platform,創(chuàng)建過程參考“PS端RTC中斷實(shí)驗(yàn)”一章

o4YBAGAKM0GASiB4AAAiaLMuMXQ266.jpg

2)面對一個(gè)不熟悉AXI GPIO,我們?nèi)绾慰刂颇??我們可以嘗試一下Vitis自帶的例程

3)雙擊“system.mss”,找到“axi_gpio_0”,這里可以點(diǎn)擊“Documentation”來看相關(guān)文檔,這里就不演示,點(diǎn)擊“Import Examples”

o4YBAGAKM0GACiQIAACgMps8tic756.jpg

4)在彈出的對話框中有多個(gè)例程,從名稱中可以猜個(gè)大概,這里選第一個(gè)“xgpio_example”

pIYBAGAKM0KAGYIfAABMUDOZmfI824.jpg

5)可以看到例程比較簡單,短短幾行代碼,完成了AXI GPIO的操作

o4YBAGAKM0KAUIScAACcXBjD06M572.jpg

里面用到很多GPIO相關(guān)的API函數(shù),通過文檔可以了解詳細(xì),也可以選中該函數(shù),按“F3”查看具體定義。如果有了這些信息你還不能理解如何使用AXI GPIO,說明你需要補(bǔ)充C語言基礎(chǔ)。

其實(shí)這些函數(shù)都是在操作GPIO的寄存器,AXI GPIO的寄存器也不多,主要是兩個(gè)channel的數(shù)據(jù)寄存器GPIO_DATA和GPIO2_DATA,兩個(gè)channel的方向控制GPIO_TRI和GPIO2_TRI,以及全局中斷使能寄存器GIER,IP的中斷使能IP IER和中斷狀態(tài)寄存器ISR,具體的功能可以看AXI GPIO的文檔pg144。

pIYBAGAKM0OAahdsAAB2VzDb7Xo566.jpg

比如進(jìn)入到設(shè)置GPIO方向的函數(shù)中,就可以看到是在向GPIO的GPIO_TRI寄存器寫數(shù)據(jù),從而控制方向。

o4YBAGAKM0OAJjzuAAAbLV_eD0s369.jpg

其他的函數(shù)也可以按此法自行研究。

4.2 下載調(diào)試

首先編譯APP工程,編譯方法前面的例程已經(jīng)介紹過了。雖然Vitis可以提供一些例程,但有一部分例程是需要自己修改的,這個(gè)簡單的LED例程就不修改了,嘗試運(yùn)行一下,發(fā)現(xiàn)不能達(dá)到預(yù)期效果,甚至提示一些錯(cuò)誤。下載后可以看到開發(fā)板LED1快速閃爍。

pIYBAGAKM0SAdW1xAAC_csBgRVY911.jpg

4.3 寄存器方式實(shí)現(xiàn)

如果覺得Xilinx提供的API函數(shù)比較繁瑣,效率低,也可以采取操作寄存器的方式實(shí)現(xiàn)LED的控制。

比如下面我們新建了axi_led的工程,修改helloworld.c如下。

pIYBAGAKM0WAB3F9AABDfR8nAdw689.jpgpIYBAGAKM0WALDWrAAA15AgtgqI249.jpg

其中定義的基地址GPIO_BASEADDR可以在xx.xsa中里找到

o4YBAGAKM0WAQ4A1AABi_Jzlb2c941.jpg

由于我們只啟用了channel1,因此定義了下面的寄存器地址

pIYBAGAKM0aALJ51AAAXiX8MhsU330.jpg

這樣直接操作寄存器的方式效率會比調(diào)用Xilinx API函數(shù)高,而且更直觀,對于理解程序如何運(yùn)行有很大幫助。但是對于大工程來講,這種方式使用起來就比較復(fù)雜,主要依據(jù)個(gè)人需求選擇。

4.4 AXI GPIO之PL端按鍵中斷

前面的定時(shí)器中斷實(shí)驗(yàn)的中斷屬于PS內(nèi)部的中斷,本實(shí)驗(yàn)中斷來自PL,PS最大可以接收16個(gè)來自PL的中斷信號,都是上升沿或高電平觸發(fā)。

1)和前面的教程一樣,在不熟悉Vitis程序編寫的情況下,我們盡量使用Vitis自帶例程來修改,選擇“xgpio_intr_tapp_example”

o4YBAGAKM0aAFQlpAAB3XOk_30w049.jpg

2)需要修改部分代碼,按鍵的axi gpio模塊叫做axi_gpio_1,在xparameters.h中找到它的device id

pIYBAGAKM0eAUIDAAABWIRtSooI638.jpgo4YBAGAKM0iATRxhAAAmYl7qMTA304.jpg

3)然后可以修改GPIO和中斷號的宏定義如下

pIYBAGAKM0iAWNLOAAAl0B0P3jA244.jpg

4)修改測試延時(shí)時(shí)間,讓我們有足夠的時(shí)間去按按鍵

o4YBAGAKM0iAVlPVAAB2JSy1cfo247.jpg

4.5 下載調(diào)試

保存文件,編譯工程,打開串口終端,下載程序。如果一直不按按鍵,串口顯示“No button pressed.”,如果按下“KEY1”按鍵顯示“Successfully ran Gpio Interrupt Tapp Example”。

pIYBAGAKM0mAa4BbAAB8ElSAtVI039.jpg

5. 實(shí)驗(yàn)總結(jié)

通過實(shí)驗(yàn)我們了解到PS可以通過AXI總線控制PL,但幾乎沒有體現(xiàn)出ZYNQ的優(yōu)勢,因?yàn)閷τ诳刂芁ED燈,無論是ARM還是FPGA,都可以輕松完成,但是如果把LED換成串口呢,控制100路串口通信,8路以太網(wǎng)等應(yīng)用,我想還沒有哪個(gè)SOC能完成這種功能,只有ZYNQ可以,這就是ZYNQ和普通SOC的不同之處。

PL端可以給PS發(fā)送中斷信號,這提高了PL和PS數(shù)據(jù)交互的效率,在需要大數(shù)量、低延時(shí)的應(yīng)用中需要用到中斷處理。

到本章結(jié)束已經(jīng)把ZYNQ的PS端MIO、EMIO,PL端GPIO如何使用講完了,包括輸入和輸出以及中斷處理,這些都是最基礎(chǔ)的操作,大家還是要多多思考,理解清楚。

6. 知識點(diǎn)分享

1)在設(shè)計(jì)好后,可以看到Address Editor中,已經(jīng)為AXI外設(shè)分配好了地址空間,其中偏移地址和空間大小是可以修改的。

o4YBAGAKM0qAaIH9AABQWEJpwqI771.jpg

但是修改偏移地址是有限制的,詳情參考UG1085文檔System Address一章, AXI外設(shè)連接到了M_AXI_HPM0_LPD口,在8000_0000到9FFF_FFFF地址空間內(nèi)修改。

pIYBAGAKM0uActWwAAC6Ru0YDSg577.jpg

2)在使用一個(gè)模塊時(shí),需要配套的文檔輔助開發(fā),但是這些文檔該如何去找呢,例如XILINX的IP,打開模塊的配置,在左上角點(diǎn)擊Documentation,再點(diǎn)擊Product Guide,如果在安裝Vivado的時(shí)候安裝了DocNav,就會跳轉(zhuǎn)過去打開文檔。

o4YBAGAKM0yAR41PAACHr0PmB2c539.jpgo4YBAGAKM02AfQ-TAACelNpSYck497.jpg

此功能需要電腦聯(lián)網(wǎng),DocNav會從網(wǎng)站加載文檔。可以點(diǎn)擊下載按鈕下載到本地。

還有一種方法是在Xilinx官網(wǎng)根據(jù)模塊的名稱搜索資料下載(頁面可能會有所變化)

pIYBAGAKM06APpN3AABgU45cy-w830.jpg

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

    關(guān)注

    1629

    文章

    21729

    瀏覽量

    602986
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2167

    瀏覽量

    121303
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52051
  • Zynq
    +關(guān)注

    關(guān)注

    10

    文章

    609

    瀏覽量

    47175
  • MPSoC
    +關(guān)注

    關(guān)注

    0

    文章

    198

    瀏覽量

    24271
收藏 人收藏

    評論

    相關(guān)推薦

    AMD/Xilinx Zynq? UltraScale+ ? MPSoC ZCU102 評估套件

    AMD/Xilinx Zynq? UltraScale+ ? MPSoC ZCU102 評估套件可快速啟動汽車、工業(yè)、視頻和通信應(yīng)用設(shè)計(jì)。AMD/Xilinx MPSoC ZCU102
    的頭像 發(fā)表于 11-20 15:32 ?311次閱讀
    AMD/Xilinx <b class='flag-5'>Zynq</b>? <b class='flag-5'>UltraScale+</b> ? <b class='flag-5'>MPSoC</b> ZCU102 評估套件

    在米爾電子MPSOC實(shí)現(xiàn)12G SDI視頻采集H.265壓縮SGMII萬兆以太網(wǎng)推流

    4K UHD音視頻廣播領(lǐng)域的優(yōu)勢 1.高性能與低功耗的結(jié)合:Zynq UltraScale+ MPSoC采用了16nm FinFET工藝,集成了多核處理器和可編程邏輯,能夠在提高性能的同時(shí)降低功耗,這對
    發(fā)表于 11-01 16:56

    《DNK210使用指南 -CanMV版 V1.0》第二十九章 音頻錄制實(shí)驗(yàn)

    第二十九章 音頻錄制實(shí)驗(yàn) 本章將介紹CanMV下的音頻錄制通過CanMV提供的模塊便能快速地實(shí)現(xiàn)音頻錄制。通過本章的學(xué)習(xí),讀者將學(xué)習(xí)到CanMV下控制I2S獲取音頻數(shù)和audio模塊的使用。本章分為
    發(fā)表于 10-26 14:16

    在米爾電子MPSOC實(shí)現(xiàn)12G SDI視頻采集H.265壓縮SGMII萬兆以太網(wǎng)推流

    在本設(shè)計(jì)中,我們使用Zynq UltraScale+ MPSoC平臺(具體型號為MYIR XCZU4EV),通過FPGA實(shí)現(xiàn)對SDI視頻的H265壓縮,并通過SGMII接口推送到萬兆
    發(fā)表于 10-14 17:42

    使用TPS65086x PMIC為Xilinx Zynq UltraScale MPSoC供電

    電子發(fā)燒友網(wǎng)站提供《使用TPS65086x PMIC為Xilinx Zynq UltraScale MPSoC供電.pdf》資料免費(fèi)下載
    發(fā)表于 09-21 11:11 ?0次下載
    使用TPS65086x PMIC為Xilinx <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale</b> <b class='flag-5'>MPSoC</b>供電

    ALINX FPGA+GPU異架構(gòu)視頻圖像處理開發(fā)平臺介紹

    Alinx 最新發(fā)布的新品 Z19-M 是一款創(chuàng)新的 FPGA+GPU 異構(gòu)架構(gòu)視頻圖像處理開發(fā)平臺,它結(jié)合了 AMD Zynq UltraScale+ MPSoC
    的頭像 發(fā)表于 08-29 14:43 ?1146次閱讀

    一個(gè)更適合工程師和研究僧的FPGA提升課程

    Suite 1 設(shè)計(jì) FPGA; 嵌入式設(shè)計(jì)課程 02 ● 設(shè)計(jì) Zynq UltraScale+ RFSoC; ● 面向軟件開發(fā)者的Zynq
    發(fā)表于 06-05 10:09

    AMD推出全新Spartan UltraScale+ FPGA系列

    AMD 已經(jīng)擁有 Zynq UltraScale+ 和 Artix UltraScale+ 系列,而 Spartan UltraScale+ FPG
    發(fā)表于 03-18 10:40 ?376次閱讀
    AMD推出全新Spartan <b class='flag-5'>UltraScale+</b> <b class='flag-5'>FPGA</b>系列

    AMD 擴(kuò)展市場領(lǐng)先的 FPGA 產(chǎn)品組合,推出專為成本敏感型邊緣應(yīng)用打造的AMD Spartan UltraScale+ 系列

    UltraScale+ 器件能為邊緣各種 I/O 密集型應(yīng)用提供成本效益與高能效性能,在基于 28 納米及以下制程技術(shù)的 FPGA 領(lǐng)域帶來業(yè)界極高的 I/O 邏
    發(fā)表于 03-07 15:17 ?498次閱讀

    FPGAPL固化流程

    電子發(fā)燒友網(wǎng)站提供《FPGAPL固化流程.pdf》資料免費(fèi)下載
    發(fā)表于 03-07 14:48 ?8次下載

    AMD推出Spartan UltraScale+ FPGA系列產(chǎn)品

    AMD公司,全球知名的芯片巨頭,近日宣布推出全新的AMD Spartan UltraScale+ FPGA系列產(chǎn)品組合。這一新系列作為AMD成本優(yōu)化型FPGA、自適應(yīng)SoC產(chǎn)品家族的最新成員,特別針對成本敏感型邊緣應(yīng)用進(jìn)行了優(yōu)化
    的頭像 發(fā)表于 03-07 10:15 ?687次閱讀

    AMD 擴(kuò)展市場領(lǐng)先的 FPGA 產(chǎn)品組合,推出專為成本敏感型邊緣應(yīng)用打造的AMD Spartan UltraScale+ 系列

    UltraScale+ 器件能為邊緣各種 I/O 密集型應(yīng)用提供成本效益與高能效性能,在基于 28 納米及以下制程技術(shù)的 FPGA 領(lǐng)域帶來業(yè)界極高的 I/O 邏
    發(fā)表于 03-06 11:17 ?369次閱讀

    AMD推出全新Spartan UltraScale+ FPGA系列

    AMD日前正式推出了全新的Spartan UltraScale+ FPGA系列,該系列作為AMD廣泛的成本優(yōu)化型FPGA和自適應(yīng)SoC產(chǎn)品組合的最新成員,專為邊緣各種I/O密集型應(yīng)用
    的頭像 發(fā)表于 03-06 11:09 ?821次閱讀

    FPGA上為FPGA設(shè)計(jì)PCB的步驟詳解

    FPGA(Zynq? UltraScale+? MPSoC) 上的 Ubuntu 22.04 桌面映像上安裝了各種 EE 設(shè)計(jì)應(yīng)用程序(包括 KiCad),并用它設(shè)計(jì) PCB。
    的頭像 發(fā)表于 02-26 09:04 ?1982次閱讀
    在<b class='flag-5'>FPGA</b>上為<b class='flag-5'>FPGA</b>設(shè)計(jì)PCB的步驟詳解

    采用UltraScale/UltraScale+芯片的DFX設(shè)計(jì)注意事項(xiàng)

    采用UltraScale/UltraScale+芯片進(jìn)行DFX設(shè)計(jì)時(shí),建議從以下角度對設(shè)計(jì)進(jìn)行檢查。
    的頭像 發(fā)表于 01-18 09:27 ?902次閱讀
    采用<b class='flag-5'>UltraScale</b>/<b class='flag-5'>UltraScale+</b>芯片的DFX設(shè)計(jì)注意事項(xiàng)
    RM新时代网站-首页