為了學習 RISC-V 以及體驗看看 Xilinx 的開發(fā)平臺,最近我入手了 Zybo Board ,這是一塊具有 FPGA 同時又包含了 ARM Cortex-A9 雙核心的開發(fā)板。
在我們開始這一切之前,我們需要稍微了解一下這片開發(fā)板以及他的外圍等信息。
要了解 Zybo Board 的外圍,首先要看的就是開發(fā)商 DIGILENT 所提供的 ZYBO FPGA Board Reference Manual。讓我們來看看一些比較重要的地方吧!
基本硬件認識
拿到手的 Zybo Board 會像下面這個樣子,我們有這些基本的輸入/輸出模塊,以及未標示的部份(Pmod),可以做延伸的功能
?
讓我們來看看這些外圍模塊吧
電源輸入(5V)
Zybo Board 允許三種不同類型的電源輸入模式,分別是 USB、外接電源(J15)、外接電池。我們可以從Reference Manual 得到電源模塊的大致信息。
?
控制電源輸入的位置在 JP7 的排針座上,我們可以透過切換跳線(Jumper)來選擇我們需要的電源輸入,在外圍使用不多的情況下,我會直接使用 USB (5V) 來作為電流的輸入。
要注意到的是,Zybo Board 僅吃 5V 電源,因此不論你是用外接電源(J15)或是外接電池,你最好都先確認你的電壓是否為 5V (或是低于) ,否則你的開發(fā)板可能因此燒壞。
插上電源后,透過電源開關(guān) (Power Switch, SW4) 的切換即可完成給電/斷電的動作。
Zynq SOC
Zybo Board 核心是 Xilinx Zynq-7000 系列的 Z-7010 ARM/FPGA SoC 處理器,這是一種混和了 FPGA 以及 ARM Cortex-A9 處理器的 FPGA 核心。以往的 FPGA 開發(fā)板需要用到 CPU 的時候只能夠刻錄用 HDL 語言撰寫的軟核心到開發(fā)板上,這種混搭 FPGA/ARM 的開發(fā)板則是讓你可以針對通用需求使用 ARM CPU 進行程序的開發(fā),特殊需求則透過 FPGA 進行處理/加速來運作,是一種蠻有趣的架構(gòu)。
我們可以把 Zynq SoC 分為兩個區(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 個 MIO 可用,而這些 MIO 所連接的地址是無法在 可程序邏輯區(qū)塊 (Programmable Logic, PL) 中看到。
在 Zybo Board 我們有這幾個地方是連接到 MIO (Multiplexed I/O) 上的
?
系統(tǒng)啟動流程
由于 Zynq 7000 系列內(nèi)建了 ARM CPU,也因此和傳統(tǒng)的 FPGA 開發(fā)板相比,系統(tǒng)啟動流程也會不同,整體開機流程可以分為三個階段:
o 階段 0
當 Zybo board 電源啟動后,CPU0 會執(zhí)行內(nèi)部已經(jīng)預(yù)刻錄的程序 BootROM,這個程序會根據(jù) JP5 所設(shè)定的信息來更新狀態(tài)緩存器(mode register),接著 BootROM 會透過狀態(tài)贊存器(mode register)的信息從 MicroSD、NOR Flash、JTAG 等位置抓取 Zynq Boot Image,并將包在 Zynq Boot Image 里面的 第一級啟動開機程序 (First Stage Bootloader, FSBL) 復(fù)制到內(nèi)部 256KB 的內(nèi)存 (On-Chip Memory, OCM) 去,最后執(zhí)行 FSBL,進入下一個階段。
如果 BootROM 是因為按下了 RESET 按鈕等狀況而被執(zhí)行,Zybo board 會選用之前已經(jīng)存放在狀態(tài)緩存器(mode register)的開機狀態(tài),而不是當下的 JP5 狀態(tài)。
o 階段 1
在這階段中, 第一級啟動開機程序 (First Stage Bootloader, FSBL) 初始化了 DDR 內(nèi)存、GPIO 等外圍設(shè)定,接下來會加載存放在 Boot Image 內(nèi)的比特流 (bitstream),用他來對可程序邏輯區(qū)塊 (Programmable Logic, PL) 進行設(shè)定。
當可程序邏輯區(qū)塊(Programmable Logic, PL)設(shè)定完成后,F(xiàn)SBL 會去加載程序(ex: u-boot)并執(zhí)行它。
o 階段 2
最后的接段即是執(zhí)行 FSBL 所加載的程序,這些程序可以從簡單的 "Hello World",到像 u-boot 這樣的第二階段開機程序,用來加載 Linux 或是其他的操作系統(tǒng)。
更改開機模式
我們可以透過切換 JP5 的跳線(Jumper)來決定我們要透過哪種方式去加載第一級啟動開機程序 (First Stage Bootloader, FSBL)
?
評論