?
本文將探討如何以 Zynq UltraScale 器件上的 IP 核為目標(biāo),使用 Python 來創(chuàng)建一些強(qiáng)大的應(yīng)用和實(shí)用工具。此處提供了一個(gè)程序包,供您用于讀取設(shè)備樹和訪問 IP 核。此外還提供一個(gè)實(shí)用工具,用于讀取物理寄存器和開關(guān) LED。
Python 是現(xiàn)如今最常用的編程語言之一。原因在于這種語言高產(chǎn)、易于部署且直觀。并且正因其熱門,產(chǎn)生了大量共享程序包可供其他用戶使用。本教程將為您展示如何在 ZCU104 開發(fā)板上輕松使用 Python 來啟動(dòng)并運(yùn)行程序。用戶在構(gòu)建文件系統(tǒng)時(shí),所有必需的程序包都應(yīng)已準(zhǔn)備就緒。此處并未詳細(xì)列出所有程序包,因?yàn)橛脩舾私庾约旱膽?yīng)用需要哪些程序包。
由于最終設(shè)計(jì)目標(biāo)是嵌入式軟件系統(tǒng),因此更為實(shí)用的用例之一是接入嵌入式軟件系統(tǒng)的存儲(chǔ)器/外設(shè)。這里我們使用 mmap 程序包來打開 /dev/mem 并獲取訪問權(quán)。隨后,我們可以在其中創(chuàng)建自己的程序包,以供在各種應(yīng)用或?qū)嵱霉ぞ咧惺褂谩N覀冞€可以使用 subprocess 等程序包來訪問文件系統(tǒng)。我曾經(jīng)使用此方法來讀取設(shè)備樹,查看有哪些 IP 已啟用以及這些 IP 的配置方式。在此提供了一個(gè)用于通過 Python 控制嵌入式系統(tǒng)的定制程序包,供用戶作為參考。
硬件設(shè)計(jì):
本演示中使用的塊設(shè)計(jì) (BD) 如下所示。在此使用的是 ZCU104 開發(fā)板,但此處流程應(yīng)該是普遍適用的。

請(qǐng)參閱下方鏈接獲取有關(guān) Vivado 2020.1 中的嵌入式流程的更多信息。
https://docs.xilinx.com/v/u/2020.1-English/ug898-vivado-embedded-design
為 PetaLinux 工程添加 Python 支持

https://github.com/Xilinx/device-tree-xlnx/tree/master/device_tree/data/kernel_dtsi/2020.1/BOARD
在 Python 中使用 /dev/mem:
創(chuàng)建 Linux 鏡像后,可以嘗試對(duì)硬件設(shè)計(jì)中的外設(shè)進(jìn)行讀寫。我們可以使用 /dev/mem,以物理方式接入存儲(chǔ)器/寄存器。我們將使用 Python 中包含的 mmap 程序包:

其中,addr 即為我們要接入的存儲(chǔ)器或寄存器。
創(chuàng)建程序包:
用戶可以自行創(chuàng)建程序包,以便將自己的函數(shù)添加到其它應(yīng)用中(請(qǐng)閱讀原文參閱附件)。
我已經(jīng)創(chuàng)建了 1 個(gè)此類程序包,它支持用戶執(zhí)行以下操作:
-讀取寄存器/存儲(chǔ)器
-寫入寄存器/存儲(chǔ)器
-執(zhí)行系統(tǒng)命令,如 cat、ls 等
-讀取 mdio
-獲取物理地址
-mii 轉(zhuǎn)儲(chǔ)
-讀取設(shè)備樹節(jié)點(diǎn)
-獲取設(shè)備樹屬性
使用該程序包來執(zhí)行讀寫:

使用該程序包來運(yùn)行簡(jiǎn)單的 LED 開關(guān)應(yīng)用:
以下示例可用于開關(guān) AXI GPIO LED:

此程序包將永久循環(huán),用戶可使用 Ctrl+ Z 將其停止。
使用該程序包來讀取 MDIO:
此處我們將使用實(shí)用工具通過 MDIO 來讀取 PHY:

#GEM 地址、物理地址、偏移

使用該程序包來檢測(cè)有效的物理 (PHY) 地址:
我們可以在此處搜索有效的 PHY 地址:

使用該程序包來執(zhí)行 MII 轉(zhuǎn)儲(chǔ):
在該程序包中包含 mii_dump 實(shí)用工具,它將搜索設(shè)備樹中的任何已啟用的 GEM IP、自動(dòng)檢測(cè)有效的 PHY 地址并轉(zhuǎn)儲(chǔ) PHY 寄存器:

讀取設(shè)備樹節(jié)點(diǎn):
在此已經(jīng)創(chuàng)建了一個(gè)實(shí)用工具,用于讀取內(nèi)核中的設(shè)備樹節(jié)點(diǎn)。創(chuàng)建普遍適用任何設(shè)計(jì)的腳本時(shí),此工具很有用,因?yàn)橛脩艨梢愿鶕?jù)硬件來創(chuàng)建/使用應(yīng)用。
例如,我們可以返回設(shè)備樹中的所有 IP:

我們還可以篩選此搜索,查找設(shè)備樹中已啟用的所有 GEM:

用戶還可以僅搜索狀態(tài)設(shè)置為“okay”的所有器件節(jié)點(diǎn):

電子發(fā)燒友App













評(píng)論