玩轉Zynq連載31——[ex53] 基于Zynq PS的EMIO控制 更多資料共享 騰訊微云鏈接:https://share.weiyun.com/5s6bA0s 百度網(wǎng)盤(pán)鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取碼:ld9c ![]() 參考文檔《玩轉Zynq-基礎篇:Zynq PS的GPIO外設.pdf》。 關(guān)于EMIO和MIO,這里多啰嗦兩句。簡(jiǎn)單的理解,MIO是PS系統原生的,和PL沒(méi)啥關(guān)系;但是EMIO是PS借PL的引腳用,所以它們就有千絲萬(wàn)縷的關(guān)系,PL的工程里面勢必要做點(diǎn)什么。MIO在PS系統里面分配好對應的信號功能后,在PL的代碼里面就不需要寫(xiě)任何的邏輯,甚至引腳分配都不需要(生成的PS系統會(huì )自動(dòng)分配)。但是EMIO就要在PS的系統中引出,然后在PL頂層源碼中申明端口類(lèi)型,做引腳分配(因為EMIO用的就是PL的引腳)。 關(guān)于MIO和EMIO的關(guān)系,更形象直接的可以示意如圖所示。MIO和EMIO都是PS的一部分,但是MIO可以直接連接到Zynq芯片的引腳上,和PL無(wú)關(guān);而EMIO需要通過(guò)PL的IO才能連接到Zynq芯片的引腳上。EMIO的存在,其實(shí)是給用戶(hù)更大的PS的GPIO擴展的靈活性,這也是FPGA+ARM獨有的架構。因此,EMIO怎么用,很有必要好好玩玩。
![]() 打開(kāi)ZYNQ7 Processing System的配置頁(yè)面Peripheral I/O Pins,勾選GPIO EMIO選項,查看Periperals最右側的EMIO列,對應的EMIO顯示按鈕變綠了,則表示該EMIO功能開(kāi)啟,EMIO引腳將會(huì )引出到PS系統。
![]() 完成配置后,回到ZYNQ7系統框圖中,可以看到多了一個(gè)名為GPIO_0的接口。
![]() 展開(kāi)GPIO_0接口,實(shí)際上有3組64bit的信號,分別代表input(GPIO_I)、output(GPIO_O)和inout(GPIO_T)。在實(shí)際使用中,根據我們的引腳方向,連接對應位的引腳即可。例如,GPIO_I[0]、GPIO_O[0]和GPIO_T[0]實(shí)際上對應的都是一個(gè)EMIO,如果我只用這個(gè)EMIO連接一個(gè)作為output的LED,那么我在PL上只要引出GPIO_O[0]并作引腳分配就可以了。
![]() 選中GPIO_0,右鍵單擊,彈出菜單中點(diǎn)擊Create Interface Port...,引出一個(gè)port用于PL工程的頂層連接。
![]() 可以命名為GPIO_EMIO。
![]() 完成GPIO_EMIO引出后如圖所示。
![]() 在Sources --> IP Sources中選擇Block Designs -->zstar_zynq_ps,單擊右鍵,彈出菜單中選中Generate Output Products...。
![]() 接著(zhù)我們可以再次操作,單擊右鍵菜單的Create HDL Wrapper...選項。
![]() 打開(kāi)后,看到PS系統的例化部分如圖所示,可以復制到我們的新建的頂層源碼中,在頂層源碼中重新設置接口映射。
![]() 在實(shí)例zstar_ex52中,我們直接使用PS系統生成的zstar_zynq_ps_wrapper.v模塊做頂層模塊,但是這樣的方式其實(shí)對于含有PL代碼的工程來(lái)說(shuō)靈活性不夠好。我們更建議大家把這個(gè)zstar_zynq_ps_wrapper.v模塊里面例化的PS系統例化到我們自己為PL工程專(zhuān)門(mén)新建的頂層源碼中,在這個(gè)頂層源碼中,我們也可以例化其它的PL邏輯模塊。 廢話(huà)說(shuō)了,先新建一個(gè)zstar.v的Verilog模塊,然后做如下編輯。
![]() 若要將新建的zstar.v模塊作為PL工程的頂層模塊,需要先選中zstar.v模塊,右鍵單擊選中菜單項Set as Top。
![]() 同時(shí)需要打開(kāi)Sources --> Constraints - constrs_1下的約束文件zstar.xdc,增加led[2:0]的引腳約束。
![]() 參考文檔《玩轉Zynq-工具篇:導出PS硬件配置和新建SDK工程.pdf》。 SDK中,新建Empty的模板工程,名稱(chēng)為GPIO_EMIO_project。 展開(kāi)新建的工程GPIO_EMIO_project,選中文件夾src,單擊右鍵,彈出菜單中選擇New --> Source File。 新建一個(gè)名為main.c的Default C source template源文件。 輸入EMIO控制的bit2-0引腳的程序,程序中實(shí)現EMIO0、EMIO1和EMIO2循環(huán)拉高,逐次點(diǎn)亮3個(gè)LED中的1個(gè)。
![]() 在Zstar板子上,設置跳線(xiàn)帽P3為JTAG模式,即PIN2-3短接。 連接好串口線(xiàn)(USB線(xiàn)連接PC的USB端口和Zstar板的UART接口)和Xilinx下載線(xiàn)(下載器連接PC的USB端口和Zstar板的JTAG插座)。使用5V電源給板子供電。 接著(zhù)參考《玩轉Zynq-工具篇:SDK在線(xiàn)運行裸跑程序.pdf》將zstar.bit文件和GPIO_EMIO_project.elf文件燒錄到Zynq中運行起來(lái)。 程序運行起來(lái)后,我們就可以看到Zstar板上PL側的3個(gè)LED指示燈D3、D2和D1逐個(gè)閃爍起來(lái)。 ![]() 騰訊微云鏈接:https://share.weiyun.com/5s6bA0s 百度網(wǎng)盤(pán)鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取碼:ld9c |