一、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图像。