UltraZed-EG PCIe Carrier Card 開發紀錄: 硬體認識

最近入手了 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 都接收看看就對了 ^_^

MicroSD 卡座 (J1)

位於 J1 的 MicroSD 卡座提供了讓我們透過 SD 卡開機的用途,而附近的 JP1 短路的情況則是打開了 SD 卡的 write proteced 的功能。

注意到:當要透過 SD 卡開機的時候,別忘記修改主板上 SW2 的 DIP Switch

User LED D1

位於 D1 的 LED 是直接接到處理器系統 (Processing System, PS) 的 MIO26 上,這是這塊板子唯一一個使用者可以透過處理器系統(Processing System, PS)去控制的 LED。

User LED D12 ~ D19

和 LED D1 不同,D12 ~ D19 的 LED 是位於可程式邏輯區(Programming Logic, PL)上,因此我們需要透過 AXI_GPIO 模組讓 Cortex-A53 能夠對其進行控制。

User Switch SW1 ~ SW5

除了 LED 外,這塊擴充板內建了 4 個無段按鈕 SW1 ~ SW4 以及一個 DIP Switch SW5 提供使用者輸入訊號使用,這幾個輸入源皆是接在可程式邏輯區 (Programming Logic, PL) 的位置,一般來說我們會透過 AXI_GPIO 模組讓 ARM Cortex-A53 可以使用這些輸入源。

SOM Reset Input (SW6)

SW6 是用來重置 UltraZed-EG 用的無段按鈕,和電腦上使用的 Restart 按鈕功用一樣,都是在不完全斷電的情況下對 CPU 進行重置的動做。

PS PMOD (JP5)

位於 JP5 位置的 PMOD 腳位是直接連接到 ZynqMP 的 MIO (Multiplexed Input Output) 腳位上的,因此這個 PMOD 是交由處理器系統 (Processing System, PS) 來進行控制。

由於 MIO (Multiplexed Input Output) 具有可切換的功能,因此這幾隻 MIO 可以根據用途變成 SPI、I2C、UART 等不同的接腳,詳細資訊請參考 ug1085 - Zynq UntraScale+ Device Technical Reference Manual 的 Chapter 28 對於 Multiplexed I/O 的說明。

PL PMOD (JA, JB)

如果想要更有彈性一點的 I/O 的話,我們則可以透過 PMOD JA 和 JB 來對我們的輸入/出進行控制。

PMOD JA 和 JB 是連接在可程式邏輯區 (Programming Logic, PL) 上的,也意味著我們可以透過 Verilog 等硬體描述語言自訂我們自己的模組,然後在透過遮些 PMOD 的腳位進行輸出 (ex: 撰寫 UART 模組並將 TX/RX 從 PMOD 導出)

注意到這邊 I/O 的電壓準位為 3.3V ,如果要連接更低/高電壓的設備的話則需要做些保護才行。

FMC Header JX1, 2 CON1A-E

這塊板子上有一個 FMC (FPGA Mezzanine Card) 界面,這是一種高速 I/O 界面,我們可以使用不同具有 FMC 界面的擴充板繼續擴充這塊板子的功能。

(有點類似 Altera DE2-115 上的 High Speed Mezzannie Card, HSMC 接口)

由於我並未有任何 FMC 界面的擴充板,因此這邊就不對其做多餘的介紹,只需要知道這個界面可以把一些 UltraZed-EG 並未用於這塊擴充板的腳位拉出,因此我們可以再接上別的擴充板繼續擴充。

Clock Generator (U5)

位於 U5 的 IC 為 IDT 5P49V5935B521LTGI ,是一個時脈產生器。該晶片透過 I2C 界面連接到處理器系統 (Processing System, PS),其中 I2C 位址為 0xD4

在這塊板子上,此晶片主要用途是產生 LVDS (Low-voltage differential signaling) 界面所需要的時脈,由於我沒有 LVDS 面板可以用,因此這邊也就只好先略過。

如果需要調整輸出的時脈,則可以透過 JP6, JP7 和 JP8 進行調整,具體請見 UltraZed PCIe Carrier Card Hardware User Guide.pdf

EEPROM (U6)

位於 U6 的 IC 則是 Microchip 24AA025E48T-I/OTCT-ND ,這是一顆具有 2kbit (256 bytes) 大小的 EEPROM,一樣是透過 I2C 界面和處理器系統(Processing System, PS) 連接,其 I2C 位址為 0xA2

這顆 EEPROM 預設的設定是用來存取網路需要使用到的 MAC Address, 但是由於空間足夠,因此我們也可以將一些設定放置到這個 EEPROM 去。

JTAG Debug Interfaces

這塊板子具有兩個 JTAG 界面,一個是透過 USB,另外一個則是傳統的 JTAG 接腳 (14p 牛頭母座)

我們可以透過 JP12 來選擇當前的 JTAG 燒錄模式,看是要對 SOM (UltraZed-EG 核心板) 使用,還是對 SOM 以及 FMC 界面使用。

預設為 JP12 的腳位 2-3 短路,這種情況下 JTAG 只會針對 SOM 進行運作。

Display Port (P2)

UltraZed PCIe Carrier Card 雖然沒有 HDMI 或是 VGA 可以輸出畫面,作為替代的則是加入了 DisplayPort 來作為圖形顯示的輸出,我們可以將其接到支援 DisplayPort 輸入的螢幕上來進行畫面的顯示,或是購買 DP 轉 VGA 的線材來透過 VGA 將影像輸出。

注意到如果使用 DP 轉 HDMI 的線材可能會因為 AR# 67462 的關係,無法透過 HDMI 將畫面順利顯示出來,因此建議還是購買 DP 轉 VGA 的線材比較好。

(我在這塊板子測試 DP 轉 HDMI 沒有畫面顯示 Orz…)

PCIe Edge Connector (P1)

位於 P1 的 PCIe 接腳就是這塊板子為何會冠以 PCIe 之名的理由。這個 PCIe 界面連接到了處理器系統 (Processing System, PS) 上的 GTR transceiver,這是一個可以支援速度高達 6.0Gb/s 的高速傳輸界面,並可以支援 PCIe, SATA, USB 3.0, SGMII 和 DisplayPort 等訊號傳輸。

在這邊我們使用到的是 GTR[0] ,並將其定義成 PCIe Gen2 的界面, 因此速度會調整成 5.0Gb/s。

LVDS Touch Panel Interface (P3)

如果你有購買 AVNET 公司的 10-inch Touch Display Kit 的話,則可以將其接到 P3 這個位置上。

(不過我沒有,所以這邊一樣不多做涉獵)