原創(chuàng)聲明:
本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。
適用于板卡型號(hào):
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”。
可能有些人就會(huì)問,怎么又在講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芯片中一般都會(huì)有GPIO,本實(shí)驗(yàn)使用一個(gè)AXI GPIO的IP核,讓PS端通過AXI總線控制PL端的LED燈,實(shí)驗(yàn)雖然簡(jiǎn)單,不過可以讓我們了解PL和PS是如何結(jié)合的。
1. 原理介紹
一個(gè)AXI GPIO模塊有兩個(gè)GPIO,分別是GPIO和GPIO2,也就是channel1和channel2,為雙向IO。

FPGA工程師工作內(nèi)容
以下為FPGA工程師負(fù)責(zé)內(nèi)容。
2. Vivado工程建立
1)打開“ps_hello”另存為一個(gè)名為“ps_axi_gpio”Vivado工程,表示PS通過AXI總線控制gpio

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

2)雙擊xx.bd打開block design

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

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

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

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

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

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

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

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

9)修改GPIO端口的名稱

10)名稱修改為leds

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

12)使用自動(dòng)連接

13)再把端口名稱改為keys

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

15)連接ip2intc_irpt到pl_ps_irq

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

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

3. XDC文件約束PL管腳
1)創(chuàng)建一個(gè)新的xdc約束文件

2)文件名稱為led

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文件

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

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

軟件工程師工作內(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)”一章

2)面對(duì)一個(gè)不熟悉AXI GPIO,我們?nèi)绾慰刂颇兀课覀兛梢試L試一下Vitis自帶的例程
3)雙擊“system.mss”,找到“axi_gpio_0”,這里可以點(diǎn)擊“Documentation”來看相關(guān)文檔,這里就不演示,點(diǎn)擊“Import Examples”

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

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

里面用到很多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。

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

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

4.3 寄存器方式實(shí)現(xiàn)
如果覺得Xilinx提供的API函數(shù)比較繁瑣,效率低,也可以采取操作寄存器的方式實(shí)現(xiàn)LED的控制。
比如下面我們新建了axi_led的工程,修改helloworld.c如下。


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

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

這樣直接操作寄存器的方式效率會(huì)比調(diào)用Xilinx API函數(shù)高,而且更直觀,對(duì)于理解程序如何運(yùn)行有很大幫助。但是對(duì)于大工程來講,這種方式使用起來就比較復(fù)雜,主要依據(jù)個(gè)人需求選擇。
4.4 AXI GPIO之PL端按鍵中斷
前面的定時(shí)器中斷實(shí)驗(yàn)的中斷屬于PS內(nèi)部的中斷,本實(shí)驗(yàn)中斷來自PL,PS最大可以接收16個(gè)來自PL的中斷信號(hào),都是上升沿或高電平觸發(fā)。
1)和前面的教程一樣,在不熟悉Vitis程序編寫的情況下,我們盡量使用Vitis自帶例程來修改,選擇“xgpio_intr_tapp_example”

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


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

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

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

5. 實(shí)驗(yàn)總結(jié)
通過實(shí)驗(yàn)我們了解到PS可以通過AXI總線控制PL,但幾乎沒有體現(xiàn)出ZYNQ的優(yōu)勢(shì),因?yàn)閷?duì)于控制LED燈,無論是ARM還是FPGA,都可以輕松完成,但是如果把LED換成串口呢,控制100路串口通信,8路以太網(wǎng)等應(yīng)用,我想還沒有哪個(gè)SOC能完成這種功能,只有ZYNQ可以,這就是ZYNQ和普通SOC的不同之處。
PL端可以給PS發(fā)送中斷信號(hào),這提高了PL和PS數(shù)據(jù)交互的效率,在需要大數(shù)量、低延時(shí)的應(yīng)用中需要用到中斷處理。
到本章結(jié)束已經(jīng)把ZYNQ的PS端MIO、EMIO,PL端GPIO如何使用講完了,包括輸入和輸出以及中斷處理,這些都是最基礎(chǔ)的操作,大家還是要多多思考,理解清楚。
6. 知識(shí)點(diǎn)分享
1)在設(shè)計(jì)好后,可以看到Address Editor中,已經(jīng)為AXI外設(shè)分配好了地址空間,其中偏移地址和空間大小是可以修改的。

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

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


此功能需要電腦聯(lián)網(wǎng),DocNav會(huì)從網(wǎng)站加載文檔。可以點(diǎn)擊下載按鈕下載到本地。
還有一種方法是在Xilinx官網(wǎng)根據(jù)模塊的名稱搜索資料下載(頁(yè)面可能會(huì)有所變化)

-
FPGA
+關(guān)注
關(guān)注
1641文章
21911瀏覽量
611680 -
Xilinx
+關(guān)注
關(guān)注
73文章
2179瀏覽量
123866 -
GPIO
+關(guān)注
關(guān)注
16文章
1237瀏覽量
53263 -
Zynq
+關(guān)注
關(guān)注
10文章
614瀏覽量
47878 -
MPSoC
+關(guān)注
關(guān)注
0文章
199瀏覽量
24552
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Xilinx Ultrascale系列FPGA的時(shí)鐘資源與架構(gòu)解析

Aigtek高光回顧!第二十屆全國(guó)電介質(zhì)物理、材料與應(yīng)用學(xué)術(shù)會(huì)議!

ZYNQ基礎(chǔ)---AXI DMA使用

Zynq UltraScale+ MPSoC數(shù)據(jù)手冊(cè)
《DNESP32S3使用指南-IDF版_V1.6》第二十九章 DS18B20實(shí)驗(yàn)
AMD/Xilinx Zynq? UltraScale+ ? MPSoC ZCU102 評(píng)估套件

上海貝嶺榮獲第二十六屆上市公司金信披獎(jiǎng)
在米爾電子MPSOC實(shí)現(xiàn)12G SDI視頻采集H.265壓縮SGMII萬兆以太網(wǎng)推流
12G-SDI高清視頻開發(fā)案例,讓4K視頻采集更便捷!基于Xilinx MPSoC高性能平臺(tái)
《DNK210使用指南 -CanMV版 V1.0》第二十九章 音頻錄制實(shí)驗(yàn)
在米爾電子MPSOC實(shí)現(xiàn)12G SDI視頻采集H.265壓縮SGMII萬兆以太網(wǎng)推流
使用TPS65086x PMIC為Xilinx Zynq UltraScale MPSoC供電

評(píng)論