平台:
晶元型號: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...