一、7系列FPGA的啓動模式
以nexys開發板爲例,其他系列的fpga上電過程基本相同。
分爲4種模式:
JTAG下載
FPGA作爲從設備,接受外部設備(如PC、上位機等)的JTAG寫入bit流,完成內部ram的配置。
這種模式的典型場景就是使用PC通過vivado進行燒寫bit,燒寫完畢即完成了FPGA內ram的配置,掉電丟失,需要重新燒寫。
SPI閃存設備啓動
FPGA作爲主設備,上電後主動通過QSPI對板上flash芯片讀取bin,完成內部ram的配置。
這樣自動完成了上電過程,對用戶是無感的,所以達到了掉電不丟失的效果。
這種模式的典型場景是使用PC通過vivado進行燒寫bin,需要在燒寫時選的flash芯片型號,燒寫較慢,掉電不丟失。
micro SD卡啓動
FPGA作爲主設備,上電後主動通過SDIO對板上SD卡的發起讀取bit,完成內部ram的配置。
這種方式,掉電不丟失。
U盤啓動
FPGA作爲主設備,上電後主動通過USB對U盤發起讀取bit,完成內部ram的配置。
這種方式,掉電不丟失。
二、zynq系列FPGA的啓動模式
zynq有兩種啓動模式:
JTAG啓動
FPGA作爲從設備,接受外部設備(如PC、上位機等)的JTAG寫入bit流,完成內部ram的配置。
與7系列FPGA的燒寫過程一致,掉電丟失。
arm核發起的bootrom啓動
Zynq會先啓動arm核,通過內部的rom執行啓動模式判斷,然後選擇從SPI FLASH、SD和JTAG這幾個設備中啓動。
過程如下:
傳統的SRAM型FPGA都是通過JTAG接口、外置非易失性存儲器(PROM、FLASH)或者外部處理器一次性將程序下載到FPGA中配置。而Zynq芯片則不同,其內部集成了處理器硬核和可編程邏輯,所以它的配置啓動是分階段的。
- Stage 0:bootROM過程,Zynq芯片PS部分有片上ROM和RAM,在芯片上電或者復位後,其中一個處理器會執行片上ROM的代碼進行初始化,判斷啓動設備(boot device),將啓動設備上的FSBL(first boot loader)代碼拷貝到片上RAM內。
- Stage 1:啓動設備包括SPI FLASH、SD和JTAG,FSBL代碼是用戶自己定製的,拷貝到片上RAM後執行。包括初始化PS部分配置、配置PL部分邏輯、加載和執行SSBL(second boot loader)或應用程序。
- Stage 2:上一階段後硬件已經配置完成。這一階段是可選的,完成Linux系統啓動過程(U-BOOT)
通過Zynq芯片的啓動過程可以看到上電或者復位後片內處理器首先啓動,然後根據MODE引腳判斷啓動方式,Zedboard的啓動可以通過Quad-SPI FLASH、SD卡或者JTAG接口,如下表:
管腳 |
MIO6 |
MIO5 | MIO4 | MIO3 | MIO2 |
跳線 | JP11 | JP10 | JP9 | JP8 | JP7 |
JTAG Mode | |||||
Cascade JTAG | 0 | ||||
Independent JTAG | 1 | ||||
Boot Device | |||||
JTAG | 0 | 0 | 0 | ||
Quad-SPI | 1 | 0 | 0 | ||
SD card | 1 | 1 | 0 | ||
PLL Mode |
|||||
PLL used | 0 | ||||
PLL bypass | 1 |
JTAG啓動
- 上電後,片上ROM程序執行,初始化後判斷從SPI FLASH啓動。
- 等待JTAG加載比特流(bitstream)到片上RAM執行
QSPI啓動
- 上電後,片上ROM程序執行,初始化後判斷從SPI FLASH啓動。
- 從SPI FLASH拷貝FSBL到片上RAM執行
- FSBL執行,處理器從SPI FLASH讀取比特流(bitstream)配置Zynq的PL部分
- PL配置完成後執行,點亮LED
SD卡啓動
- 上電後,片上ROM程序執行,初始化後判斷從SD卡啓動。
- 從SD卡拷貝FSBL到片上RAM執行,FSBL配置FPGA,藍色LED(LD12)變亮說明配置完成。
- 從SD讀取SSBL,開始Uboot過程(啓動Linux),啓動過程中VGA輸出了一個Demo演示圖像。
- 串口監視程序會顯示Linux啓動過程(需要上電前打開putty窗口),啓動完成後,板上OLED會顯示一個Digilent demo圖像。