最近入手了 UltraZed-EG PCIe Carrier Card ,這是一款基於 UltraZed-EG 核心板進行延伸的開發板,和 Zybo Board 類似,是一款同時具有 Xilinx FPGA 並且包含了 ARM CPU 的開發平台。
但是不同的是,此開發板主板採用的核心為 Xilinx UltraScale+ MPSoC ,這一款具有 Cortex-A53 以及 Mali-400 的 FPGA 晶片,補足了 Zynq-7000 缺少 GPU 的不足。
為了了解這塊開發板,我做了一些整理,讓我們一樣從硬體以及週邊開始吧~
開發板概觀
首先,這一整塊開發板是 核心板 搭配 擴充板 組合在一起的產品,因此我們應該要先理解核心板的功能,再來看擴充板基於核心板的腳位,做了哪些延伸。
另外,要注意的是,核心板是可以被替換的,在我的文章中我使用的是 UltraZed-EG 。
UltraZed-EG
UltraZed-EG 是包含了 Xilinx FGPA 的核心板(System-On-Module, SOM),中間的核心晶片為 Xilinx UltraScale+ MPSoC 系列的 Zynq UltraScale+ EG (XCZU3EG-SFVA625) ,這一系列不同版本的晶片差異如下:
由於我的核心板是 UltraZed-EG,因此讓我們直接看這一款的方塊圖,好來理解其有哪些功能:
我們可以看到 Zynq UltraScale+ EG 除了具有 ARM Cortex-A53 可以用來跑複雜的作業系統 (比如 Linux), 搭配 Mali-400 GPU 同時也可以跑具有 3D 效果的程式。此外,這顆晶片還具有兩個 ARM Cortex-R5 可以讓你用來處理對反應時間有嚴格要求(Real-Time) 的工作。
那假設我們使用 Linux 或是 Android 的話,要怎樣讓 Cortex-A53 的 Linux/Andriod 與 Cortex-R5 的 RTOS 溝通呢?這個時候就可以使用 Xilinx 這幾年開源的 OpenAMP 框架來達到跨 CPU/OS 的通訊。
除了 ARM 的 CPU 外,因為這顆晶片同時也是 FPGA 晶片,當我們需要實做比如快速的影像處理、資訊偵測的時候,就可以透過採用 FGPA 進行我們的影像處理/分析等功能,再將資訊轉發給 Linux/Android 去做後續的資訊描繪。
簡單的來說,這一款具有 SoC 的 FPGA 可以達成非常多的產品需求 (不考慮成本的話啦^^)
由於核心板 (System-On-Module, SOM) 的任務就是把 SoC 的接腳拉出,讓開發者自行開發延伸板後將其合併就可以變成一個完整的產品,因此核心板本身有的週邊很少,在這邊我們只關注我們感興趣的週邊即可~
關於 UltraZed-EG, 可以透過 UltraZed-EG SOM Hardware User Guide 來更加了解其具有的功能。
SW2
首先,這塊核心板最重要的就是用來設定開機模式的 SW2 這個指撥開關。整塊板子的開機行為都會根據你的不同設定而改變,在後續文章裡面,我大部分都會選用 SD1/MMC33 這種透過 MicroSD 卡來進行開機的模式。
QSPI
核心板上有 2 顆 Micron QPSI MT25QU256ABAIEW7-0SIT NOR Flash, 不過我找不到相關的 datasheet….
我們可以透過 SPI 界面來將資料讀寫進這兩顆 NOR Flash 去。
注意到如果你是要自己外接 SPI Flash 的話,也許最好看看 Micron Memory Support for Xilinx Platforms 的說明,裡面會標注可以用於 Xilinx 平台上的 Flash 的型號。
eMMC
核心板有一顆 Micron MTFC8GAKAJCN-4M IT eMMC 晶片,大小為 8GB,在預設的情況下這個 eMMC 會被當作是 SD0 ,而擴充板的 MicroSD 卡則是會被當作 SD1
UltraZed-EG PCIe Carrier Card
本文使用的擴充板為 UltraZed PCIe Carrier Card, 為 AVNET 公司所出品的延伸板。由於 UltraZed-EG 本身只是將該 SoC 最基本的功能組裝在一起,實際上需要使用比如 USB、PCIe 等週邊的時候,就會需要透過延伸板來增加 I/O 的連接。
要了解這片板子,首先我們需要知道其 I/O 對應以及一些基本的週邊,因此最好是先從 UltraZed PCIe Carrier Card Hardware User Guide 來開始看起。
概觀
我們先從 UltraZed PCIe Carrier Card 的外觀來了解這片板子的大概功能,之後再透過電路等資訊來看要如何使用這片板子。
由於這塊板子的週邊可以區分為給 Cortex-A53 使用的部份 (Processing System, PS) 和給可程式邏輯區 (Programmable Logic, PL) 控制的兩個區塊,在搭配一些其他的週邊,因此我們可以用以下這張圖來看週邊的使用以及分佈。
了解了基本的週邊後,就讓我們來一個一個看吧~
USB 2.0/3.0 (J4)
USB 位於 J4 的位置,為支援 USB 2.0/3.0 Host/Device 以及 OTG 的設備。我們可以透過調整 JP2, JP3 以及 JP5 來設定我們對這塊板子上的 USB 的使用需求。
當設定 USB 為 OTG 的形式時,我們則可以透過修改 JP4 來指定 OTG 的運作模式
1000Mb/s 網路
由於 UltraZed-EG 已經做好了 MAC 和 PHY (DP83867) 的連線,因此 UltraZed PCIe Carrier Card 上的網路相關電路是直接將核心板的接線拉出,直接連線到 L829-1J1t-43G 這個 RJ45 連接器來用。
SATA3 Host
在 UltraZed PCIe Carrier Card 上有一個 SATA3 Host 界面連接到處理器系統(Processing Syste, PS),我們可以在這邊接上外接硬碟擴充儲存空間,該界面傳輸速度最快可以到達 6 Gb/s。
USB 轉 UART (J2)
位於 J2 的 micro USB 接頭,會經過 USB 轉 UART 晶片 CP2105 而變成兩個 UART 設備。
接到 Linux 上,會得到 /dev/ttyUSB0 和 /dev/ttyUSB1 兩個設備,預設都是從 /dev/ttyUSB1 輸出資訊。
這兩個 UART 對應到的 MIO (Multiplexed Input Output) 如下表所述:
從上圖的 MIO 對應表可以發現到,之所以預設從 /dev/ttyUSB1 輸出,是因為這塊板子把 SoC 上的 ps_uart0 接到了 MIO_34 和 MIO_35 上,也因此實際上的 UART 對應表如下:
| MPSoC PS | MIO | Linux |
|---|---|---|
| ps_uart_0 | MIO_32 (TX), MIO_33 (RX) | /dev/ttyUSB1 |
| ps_uart_1 | MIO_35 (TX), MIO_34 (RX) | /dev/ttyUSB0 |
總之如果有透過 UART 輸出訊息,又奇怪怎樣都看不到的話,兩個 UART 都接收看看就對了 ^_^