為了學(xué)習(xí) RISC-V 以及體驗(yàn)看看 Xilinx 的開發(fā)平臺(tái),最近我入手了 Zybo Board ,這是一塊具有 FPGA 同時(shí)又包含了 ARM Cortex-A9 雙核心的開發(fā)板。
在我們開始這一切之前,我們需要稍微了解一下這片開發(fā)板以及他的外圍等信息。
要了解 Zybo Board 的外圍,首先要看的就是開發(fā)商 DIGILENT 所提供的 ZYBO FPGA Board Reference Manual。讓我們來看看一些比較重要的地方吧!
基本硬件認(rèn)識(shí)
拿到手的 Zybo Board 會(huì)像下面這個(gè)樣子,我們有這些基本的輸入/輸出模塊,以及未標(biāo)示的部份(Pmod),可以做延伸的功能
?
讓我們來看看這些外圍模塊吧
電源輸入(5V)
Zybo Board 允許三種不同類型的電源輸入模式,分別是 USB、外接電源(J15)、外接電池。我們可以從Reference Manual 得到電源模塊的大致信息。
?
控制電源輸入的位置在 JP7 的排針座上,我們可以透過切換跳線(Jumper)來選擇我們需要的電源輸入,在外圍使用不多的情況下,我會(huì)直接使用 USB (5V) 來作為電流的輸入。
要注意到的是,Zybo Board 僅吃 5V 電源,因此不論你是用外接電源(J15)或是外接電池,你最好都先確認(rèn)你的電壓是否為 5V (或是低于) ,否則你的開發(fā)板可能因此燒壞。
插上電源后,透過電源開關(guān) (Power Switch, SW4) 的切換即可完成給電/斷電的動(dòng)作。
Zynq SOC
Zybo Board 核心是 Xilinx Zynq-7000 系列的 Z-7010 ARM/FPGA SoC 處理器,這是一種混和了 FPGA 以及 ARM Cortex-A9 處理器的 FPGA 核心。以往的 FPGA 開發(fā)板需要用到 CPU 的時(shí)候只能夠刻錄用 HDL 語言撰寫的軟核心到開發(fā)板上,這種混搭 FPGA/ARM 的開發(fā)板則是讓你可以針對(duì)通用需求使用 ARM CPU 進(jìn)行程序的開發(fā),特殊需求則透過 FPGA 進(jìn)行處理/加速來運(yùn)作,是一種蠻有趣的架構(gòu)。
我們可以把 Zynq SoC 分為兩個(gè)區(qū)塊, 處理系統(tǒng) (Processing System, PS) 以及 可程序邏輯區(qū)塊(Programmable Logic, PL),像這樣處理系統(tǒng)(Processing Syste, PS) 也就是有 ARM Cortex-A9 處理器的部份,可程序邏輯區(qū)塊(Programmable Logic, PL) 則是 FPGA 所包含的部份。
?
在上面的區(qū)塊圖中,我們要另外注意到 MIO (Multiplexed I/O) 以及 EMIO (Extended multiplexed I/O),在 Zynq 7000 系列 SoC 中,我們共有 54 個(gè) MIO 可用,而這些 MIO 所連接的地址是無法在 可程序邏輯區(qū)塊 (Programmable Logic, PL) 中看到。
在 Zybo Board 我們有這幾個(gè)地方是連接到 MIO (Multiplexed I/O) 上的
?
系統(tǒng)啟動(dòng)流程
由于 Zynq 7000 系列內(nèi)建了 ARM CPU,也因此和傳統(tǒng)的 FPGA 開發(fā)板相比,系統(tǒng)啟動(dòng)流程也會(huì)不同,整體開機(jī)流程可以分為三個(gè)階段:
o 階段 0
當(dāng) Zybo board 電源啟動(dòng)后,CPU0 會(huì)執(zhí)行內(nèi)部已經(jīng)預(yù)刻錄的程序 BootROM,這個(gè)程序會(huì)根據(jù) JP5 所設(shè)定的信息來更新狀態(tài)緩存器(mode register),接著 BootROM 會(huì)透過狀態(tài)贊存器(mode register)的信息從 MicroSD、NOR Flash、JTAG 等位置抓取 Zynq Boot Image,并將包在 Zynq Boot Image 里面的 第一級(jí)啟動(dòng)開機(jī)程序 (First Stage Bootloader, FSBL) 復(fù)制到內(nèi)部 256KB 的內(nèi)存 (On-Chip Memory, OCM) 去,最后執(zhí)行 FSBL,進(jìn)入下一個(gè)階段。
如果 BootROM 是因?yàn)榘聪铝?RESET 按鈕等狀況而被執(zhí)行,Zybo board 會(huì)選用之前已經(jīng)存放在狀態(tài)緩存器(mode register)的開機(jī)狀態(tài),而不是當(dāng)下的 JP5 狀態(tài)。
o 階段 1
在這階段中, 第一級(jí)啟動(dòng)開機(jī)程序 (First Stage Bootloader, FSBL) 初始化了 DDR 內(nèi)存、GPIO 等外圍設(shè)定,接下來會(huì)加載存放在 Boot Image 內(nèi)的比特流 (bitstream),用他來對(duì)可程序邏輯區(qū)塊 (Programmable Logic, PL) 進(jìn)行設(shè)定。
當(dāng)可程序邏輯區(qū)塊(Programmable Logic, PL)設(shè)定完成后,F(xiàn)SBL 會(huì)去加載程序(ex: u-boot)并執(zhí)行它。
o 階段 2
最后的接段即是執(zhí)行 FSBL 所加載的程序,這些程序可以從簡單的 "Hello World",到像 u-boot 這樣的第二階段開機(jī)程序,用來加載 Linux 或是其他的操作系統(tǒng)。
更改開機(jī)模式
我們可以透過切換 JP5 的跳線(Jumper)來決定我們要透過哪種方式去加載第一級(jí)啟動(dòng)開機(jī)程序 (First Stage Bootloader, FSBL)
?
MicroSD 啟動(dòng)
當(dāng)使用者將 MicroSD 插入到 J4 的 SD 卡槽,并設(shè)定好 JP5 的跳線的話,我們可以透過 MicroSD 來進(jìn)行開機(jī)的動(dòng)作。
若你希望透過 MicroSD 進(jìn)行開機(jī),你需要先設(shè)定好你的 SD 卡:
1. 透過計(jì)算機(jī)格式化 MicroSD 卡成 FAT32 文件格式
2. 復(fù)制從 Xilinx SDK 制作出來的 Zynq Boot Image 到 MicroSD 卡上
3. 將 Zynq Boot Image 命名為 BOOT.bin
4. 將 MicroSD 卡從計(jì)算機(jī)移除,并插入到 Zybo Board 的 J4 SD 卡槽上
5. 接上電源,并設(shè)定好 JP7 (Power Source Select)
6. 將 JP5 的跳線 (Jumper) 調(diào)整到 MicroSD 模式 (板上標(biāo)示為 SD 的那個(gè))
7. 啟動(dòng)電源。接下來 Zybo Board 就會(huì)從 MicroSD 卡啟動(dòng)。
QSPI 啟動(dòng)
在 Zybo board 上有一顆 128-Mbit Quad-SPI (QSPI) 的 NOR Flash,我們可以透過 Xilinx ISE 和 Vivado 等工具去將 Zynq Boot Image 下載到 QSPI Flash 上。
當(dāng)下載完成后,照這樣的步驟即可透過 QSPI 啟動(dòng):
1. 接上電源,并設(shè)定好 JP7 (Power Source Select)
2. 將 JP5 的跳線 (Jumper) 調(diào)整到 QSPI 模式 (板上標(biāo)示為 QSPI 的那個(gè))
3. 啟動(dòng)電源。接下來 Zybo Board 就會(huì)從 QSPI 卡啟動(dòng)。
JTAG 啟動(dòng)
當(dāng)你將 JP5 設(shè)定為 JTAG 啟動(dòng)模式,Zynq 內(nèi)的 Cortex-A9 處理器會(huì)等到計(jì)算機(jī)端的 Xilinx 工具加載了要執(zhí)行的程序之后,再執(zhí)行預(yù)執(zhí)行的程序,或是啟用一步一步(step-by-step)的執(zhí)行模式來方便我們除錯(cuò)。
除此之外,我們也可以透過 iMPACT 或是 Vivado Hardware Server 透過 JTAG 來設(shè)定可程序邏輯區(qū)塊 (Programmable Logic, PL)。
Zybo Board 默認(rèn)是開機(jī)啟動(dòng) Cascaded JTAG 模式,在這種模式下 處理器系統(tǒng) (Processing System, PS) 和 可程序邏輯區(qū)塊 (Programmable Logic, PL) 可以透過同一個(gè) JTAG 去進(jìn)行控制。如果你將 JP6 短路,則可以讓 JTAG 僅看得到 可程序邏輯區(qū)塊 (Programmable Logic, PL),在這種狀況下,使用者可以透過 EMIO (Extended multiplexed I/O) 將 PJTAG 拉出,讓外部的設(shè)備可以和 處理器系統(tǒng) (Processing System, PS) 進(jìn)行溝通。
SPI Flash
Zybo Board 內(nèi)建了 4-bit SPI (QSPI) NOR Flash,硬件型號(hào)為 Spansion S25FL128S。
假設(shè) JP5 設(shè)定為 NOR Flash 開機(jī),則我們可以透過這顆 NOR Flash 來初始化處理器系統(tǒng)(Processing System, PS)以及可程序邏輯區(qū)塊(Programmable Logic, PL)。除此之外,當(dāng)開機(jī)完成后,我們可以使用 Spansion 文件系統(tǒng)(Spansion Flash File System, FFS) 來對(duì)檔案進(jìn)行讀寫的處理。
?
從電路圖我們可以看到 SPI Flash 是直接連到 Zynq 處理器上的 Quad-I/O SPI interface。
DDR 內(nèi)存
Zybo Board 使用的是 Micron MT41J128M16JT-125 或是 MT41K128M16JT-125 這兩種 DDR3 內(nèi)存組件,在 Zybo Board 上我們共有 512MB 的內(nèi)存空間可以使用。
根據(jù) Zynq-7000 All Programmable SoC Technical Reference Manual,DDR3 內(nèi)存是直接連接到處理器系統(tǒng) (Processing System, PS)。
USB UART 接口
Zybo Board 并未將 UART 串行端口拉出,取而代之的它采用了 FTDI FT2232HQ 這款 USB 轉(zhuǎn) UART 的 IC 讓你的計(jì)算機(jī)可以和 Zybo Board 進(jìn)行溝通。
?
如果你是 Linux 使用者,在安裝完 Vivado 后,你會(huì)需要手動(dòng)安裝 udev 設(shè)定好讓 Linux 可以偵測(cè)到這個(gè) USB 轉(zhuǎn) UART 設(shè)備(共兩組,/dev/ttyUSB0, /dev/ttyUSB1),假設(shè)你的 vivado 安裝在 /opt/Xilinx/Vivado/2016.1的話,我們可以透過以下程序來安裝 udev 設(shè)定。
?
MicroSD 插槽
在 Zybo Board 的背面,我們可以看到 Micro SD 插槽(J4),根據(jù) Zynq-7000 All Programmable SoC Technical Reference Manual ,Zynq 的 SDIO 控制器僅支持 1-bit 或是 4-bit 傳輸模式 (Host Modes),不支持 SPI 模式。
?
而 Micro SD 使用到的 MIO (Multiplexed I/O) 信息如下:
?
USB OTG
Zybo Board 提供了一組 USB OTG 支持,在這個(gè)界面中使用了 Microchip 的 USB3320 這顆 IC 來作為端口物理層 (Port Physical Layer, PHY),要注意到的是,你不可以 同時(shí) 將 USB 主機(jī) (HOST) 以及 USB 設(shè)備 (Device) 接到 USB OTG 端口上。
(也就是不要同時(shí)接上設(shè)備到 J9 以及 J10)
?
而在 USB OTG 的功能上,我們則是用掉了 MIO 28 ~ 39 的位置。
另外,由于 USB 2.0 的規(guī)格是 USB 主機(jī)最多可以提供 500mA 的電流,當(dāng)你設(shè)定為 USB 主機(jī)的模式時(shí),在 J11的電源端 必須 改用外接電源或是電池輸入,避免電流不夠的情況發(fā)生。
Ethernet PHY
Zybo Board 使用 Realtek RTL8211E-VL PHY 來實(shí)現(xiàn) 10/100/1000 網(wǎng)絡(luò)傳輸?shù)墓δ堋>唧w使用到的 MIO 以及 EMIO 接腳信息如下:
?
我們可以透過在 RJ45 附近的 LED 來觀察流量 (LD7) 以及聯(lián)機(jī)狀態(tài) (LD6) 的信息
?
網(wǎng)卡的 MAC 地址則是存放在 Micrichip 24AA02E48 這顆 EEPROM 上面,Zynq 處理器透過 EMIO 上的 I?C 接口來和 EEPROM 進(jìn)行溝通。
?
HDMI Source/Sink
Zybo Board 的 HDMI 接口并未透過外部 IC 去驅(qū)動(dòng),因此我們必須透過可程序邏輯(Programmable Logic, PL) 去實(shí)現(xiàn)影片編碼 (Encoding)與譯碼(Decoding)的功能。
?
由于 Zybo Board 的 HDMI 接口支持 HDMI 來源裝置(HDMI Source) 以及 HDMI 目標(biāo)裝置 (HDMI Sink) 的功能,我們也須注意訊號(hào)的方向變化。
?
根據(jù) ZYBO FPGA Board Reference Manual 可知 Zyboard Board 的 HDMI 至少支持到 720p (1280x720) 的分辨率。
VGA
Zybo Board 的 VGA 輸出也是沒有透過外部 IC 將數(shù)字訊號(hào)轉(zhuǎn)換為模擬訊號(hào),取而代之的,它采用了 R–2R resistor ladder 這種分壓的方式將數(shù)字訊號(hào)變成了 VGA 用的模擬訊號(hào)。
?
頻率源 (Clock Sources)
ZYBO board 提供了 50MHZ 的頻率到 Zynq 處理器的 PS_CLK 接腳,基本連接信息如下:
?
要注意到的一點(diǎn)是,由于 Ethernet PHY 會(huì)接收 50HMZ 頻率輸入,并輸出 125HMZ 到 Zyna 處理器上,當(dāng) Ethernet PHY 重置(reset)的時(shí)候,CLK125 的輸出會(huì)被取消。
基本輸入/輸出 (I/O)
Zybo board 板上有一些預(yù)先定義好的 IO, 比如指撥開關(guān) (Switch)、LED 燈、無段按鈕等。
?
聲音 (Audio)
Zybo Board 上有三組聲音相關(guān)的 IO,分別是耳機(jī)孔輸出(Headphone Out)、麥克風(fēng)輸入(Microphone In)、音源轉(zhuǎn)錄功能(Line In),這些 IO 會(huì)連接到 Ananlog Device 的 SSM2603 音頻譯碼器上。
?
SSM2603 則是透過 I?C 接口來將數(shù)據(jù)傳送給 Zynq 處理器去。
?
Pmod 接腳
在 Zybo Board 的周遭,共有 6 個(gè) 2x6 母排座,用來將多余的 GPIO 拉出。每個(gè) Pmod 提供了兩個(gè) 3.3 VCC 電源、兩個(gè) GND 訊號(hào)以及 8 個(gè) IO 可以用。在 Pmod 上的 VCC 以及 GND 最多可以提供到 1A 的電流(但要記得外接電源)。
不同的 Pmod 用途則可能不同,詳情請(qǐng)參見下表:
?
延伸閱讀
[1]?ZYBO FPGA Board Reference Manual
[2]?The Principles of FPGAs | FPGAs content from Electronic Design
[3]?Zynq-7000 All Programmable SoC Technical Reference Manual
[4]?Xilinx - Zynq Architecture
評(píng)論
查看更多