Xilinx FPGA的上电配置过程-7系列和zynq对比

一、7系列FPGA的启动模式

以nexys开发板为例,其他系列的fpga上电过程基本相同。

Xilinx FPGA的上电配置过程-7系列和zynq对比

分为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启动

Xilinx FPGA的上电配置过程-7系列和zynq对比

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