FPGA小白第一課 學習gpio的操作

2021-10-05 02:31:41 字數 2973 閱讀 3428

平台:

晶元型號:zynq xc7z015

vivado版本:2019.1

學習fpga中gpio首先明白,mio,emio和axi_gpio 核。

mio、emio、axi_gpio核介紹

本文參考鏈結

點亮流水燈,共使用了三種方式:

(1)ps通過mio點亮ps端led

(2)ps通過emio點亮pl端led

(3)ps通過axi點亮pl端led。

1.mio與emio

首先來理清楚mio與emio的關係。mio是ps的i/o引腳,一共有54個,分為bank0與bank1,可以接許多外設比如uart、spi或gpio等,另外可以引腳復用。當我們想通過ps來訪問pl又不想浪費axi匯流排時,就通過emio介面來訪問。在54個i/o中,有一些只能用於mio,大部分可以用於mio與emio,一些介面訊號線只能通過emio訪問。

emio依然屬於ps,只是連線到了pl,再從pl輸出訊號。

2.ps通過mio點亮ps端led

led連線在mio0和mio13上,所以直接在這兩個埠輸出高低電平就可以控制燈閃爍了。

首先建立.bd檔案,新增zynq的ip核,去掉pl的資源(包括ps-pl configuration——general——enable clock resets中的fclk_reset0_n以及axi none secure enablement——gp master axi inte***ce中的gp0以及clock configuration——pl fabric clocks中的fclk_clk0)。

在外設i/o中,開啟uart1,對應mio48、49口,打不開啟都無所謂,開啟除錯用。此時在mio中已經看到uart1已經分配了管腳,然後在gpio裡,開啟mio。

進入sdk,建立工程。首先引標頭檔案xgpiops.h

對mio0和mio13,初始化引腳。

s32 xgpiops_cfginitialize(xgpiops *instanceptr, xgpiops_config *configptr,

u32 effectiveaddr);

這個函式初始化gpio,第乙個引數需要乙個xgpiops的結構體指標,直接在函式開頭例項化就好了,結構體的組成在.**件。第二個引數是乙個xgpiops_config型別結構體指標,這個結構體的內容:

typedef struct xgpiops_config;

包括gpio分配的id和基位址。第三個引數就是基位址。

如何獲得這些資訊,首先id的獲得,開啟xparameter.h標頭檔案,裡面定義了分配的各種資源的id。

首先例項化乙個xgpiops_config型別的指標。使用xgpiops_lookupconfig函式,它能夠在配置資訊中找到對應id的配置資訊:

所以就很明確了:

xgpio_config = xgpiops_lookupconfig(xpar_ps7_gpio_0_device_id);//找分配的mio配置資訊(基位址)

status = xgpiops_cfginitialize(&xgpio, xgpio_config,xgpio_config->baseaddr);//初始化

if(status!=xst_success)//初始化成功

return xst_failure;

然後就是定義gpio口的屬性,包括輸入輸出和埠使能:

xgpiops_setdirectionpin(&xgpio, led1, 1);//output

xgpiops_setdirectionpin(&xgpio, led2, 1);//

xgpiops_setoutputenablepin(&xgpio, led1, 1);//enable

xgpiops_setoutputenablepin(&xgpio, led2, 1);

再後面就在while(1)中迴圈點燈,用xgpiops_writepin函式輸出高低電平。

這是純ps點流水燈。

2.ps通過emio點亮pl端led

通過emio點pl端led,在配置zynq ip核時,基本步驟差不多,包括去到pl資源等,唯一不同的是,在gpio裡,勾上emio並且分配寬度是4(因為我的小板子pl端有四個led)。

生成了新的系統:

接下來,分配管腳!!因為這裡gpio_0在pl端。看看pdf:

把剛分配的頻寬4的emio(gpio_0)繫結到這四個管腳上。

然後輸出bitstream檔案,匯入到sdk中時,要加上這個位元流檔案。進入sdk

初始化程式還是一樣,標頭檔案也是xgpiops.h,這還是ps操作。

xgpio_config = xgpiops_lookupconfig(xpar_ps7_gpio_0_device_id);

status = xgpiops_cfginitialize(&xgpio, xgpio_config,

xgpio_config->baseaddr);

if(status!=xst_success)

return xst_failure;

後面就是設定引腳工作模式:

這裡的引腳號從54開始,因為從54後才是emio引腳:

0—53是mio,53—…是emio。

reset entire system和program fpga打上勾,並且這個位元流檔案要絕對位址!!

3.ps通過axi點亮pl端led

這個就是pl與ps協同點燈了。

首先配置zynq ip核,pl部分保留,因為用到了axi,另外mio gpio都去掉。其餘配置都一樣。新增axi gpio ip核,並且設定寬度為4,最後run connection automation,加入其它必要元件,調整連線:

之後再繫結gpio_led管腳到四個led上,綜合並生成bitstream檔案,匯入到sdk。

引用標頭檔案:xgpio.h

然後還是對引腳進行初始化和設定工作模式:

4.總結

1.對mio或emio gpio進行操作,都屬於ps,引用xgpiops.**件,對axi_gpio引用xgpio.h

機器學習第一課

過擬合就是,通過訓練集進行訓練的時候,模型學習了太多的背景雜訊,讓模型的複雜度高於了真實模型 比如看到齒距型的葉子,就覺得不是葉子 欠擬合是指,模型在訓練集上進行學習的時候,效果就不是很好,沒有充分學習到其中的資訊量,複雜度低於真實模型,得到的模型泛化能力差 比如看到綠色,就覺得是葉子 模型評估指標...

python學習第一課

1.單行注釋 2.或 多行注釋運算子的型別運算子的優先順序運算子tips 參考變數型別 算術運算子 print 1 1 2,加 print 2 1 1,減 print 3 4 12,乘 print 3 4 0.75,除 print 3 4 0,整除 地板除 print 3 4 3,取餘 print ...

學習Appium第一課

腦子不用確實是會生鏽的,三年沒有去學習。我差點忘了自己曾經是計算機專業畢業的,配置個chromedrive花了半天,細思極恐。說說自己入的坑吧。簡單到不能簡單的步驟。2 將該路徑新增到系統環境變數path下 認識到這個問題後重新安裝了32位瀏覽器,沒有重啟 ps 可能出現下圖兩種問題,這是chrom...