通过MCU对FPGA对程序进行升级是一种比较方便的方法,程序可以放在U盘或者SD卡之类的地方,随时更新程序。框图如下:MCU首先读取预先存在SD卡或U盘的数据,然后发送给FPGA(需要符合FPGA的时序要求),FPGA的配置方式设置为被动,就可以完成FPGA的在线升级。
目前常用的FPGA主要分为ALTERA和XILINX两家的,分别对两家的进行说明。
ALTERA的配置常用的一般有AS/PS/JTAG三种方式,JTAG是大家常用的方式,程序下载到FPGA内部的RAM,主要用于调试。掉电程序丢失。AS模式是将pof文件下载到外部的FLASH中,达到上电FPGA去主动加载的作用,掉电程序不丢失。PS模式是被动的串行加载模式,在这种模式下FPGA被动的等待配置,然后接受配置文件,完成配置,就是每次上电的时候由外部器件完成FPGA的配置。要进行在线升级,我们需要的就是这种模式,MCU通过SPI接口或是IO接口连接至FPGA ,注意要满足FPGA的时序要求。上电MCU读取存储卡中的信息,然后按照要求发送给FPGA就完成了在线升级。这样就不用每次都通过PC端进行程序下载。
XILINX的配置常用的有Master Serial、MasterSPI、Master BPI、Master SelectMAP、JTAG、Slave SelectMAP、Slave Serial几种模式。Master Serial是FPGA为主,读取外部处理器的数据进行配置。Master SelectMAP与Master Serial原理一样,区别是Master Serial为串行,Master SelectMAP为并行。MasterSPI和Master BPI都是FPGA为主,上电主动去加载外部FLASH的数据,区别是前者为串行FLASH,后者为并行FLASH。JTAG是大家常用的方式,程序下载到FPGA内部的RAM,主要用于调试。掉电程序丢失。Slave SelectMAP和Slave Serial是FPGA被动等待配置,前者是并行,后者是串行,我们进行在线升级FPGA就需要配置为这两种模式。方法与上述ALTERA的一样。
平时我们不使用在线升级的时候一般都是配置为AS或MasterSPI模式,通过JTAG固化程序。然后再上电FPGA就可以自行加载程序了。有人可能会想,JTAG在线配置是否和配置芯片加载相冲突呢?不会的,JTAG在线配置的优先级是最高的,无论此时FPGA中在运行什么逻辑,只要JTAG下载启动,则FPGA便停下当前的工作,开始运行JTAG下载的新的配置数据。