基于FPGA的在线升级

基于FPGA的在线升级

  • 在线升级的意义
  • 在线升级的策略
  • 整体框架
  • 总结
  • 参考文献
  • 结束语

在线升级的意义

首先什么是FPGA的在线升级?
所谓FPGA的在线升级其实就是不对FPGA进行常规意义下的下载程序,便可以通过一些手段更新FPGA中的程序,一般用到的工具有ICAP原语、flash。那个该问题的解决将面临两个问题:
1、如何将新的FPGA程序下载到flash中;
2、如何让FPGA执行新的程序;
FPGA在线升级的意义?
我们为什么要花费这么大的代价去学习FPGA的在线升级,有一个很重要的原因就是:调试时,我们一般用JATG接口进行烧录、调试,但是等产品上线时,因为JATG接口过于笨重,我们一般是不保留该接口;在没有这个接口的情况下要想下载新的程序,就必须使用在线升级。

在线升级的策略

这里需要掌握的一个知识是,FPGA默认从flash中读取程序是从0地址读取的。我们回忆以下电脑中操作系统的加载,在电脑中首先加载的是一个引导程序,该引导程序指导着对应操作系统的加载,那么对应到FPGA中我们使用同样的办法。首先再FPGA的默认起始点(flash的0地址)下载一个引导程序,然后在引导程序中包含ICAP原语,在一定的条件下,使得FPGA从flash中加载新的FPGA程序。
从上面的分析我们可以打先FPGA在线升级的最关键的问题就是引导程序的书写,这里先给出一般引导程序的设计模块:
基于FPGA的在线升级_第1张图片
这里简单介绍上面几个模块的重要性。
I-start:读秒程序,开机时,在一定的时间段内,FPGA如果没有接收到PC机在线升级的指令,便启动ICAP程序跳转到指定的地方执行程序。
rs232:该模块的主要作用是接受从PC机传来的新的FPAG烧录程序,注意这里一般选择是bin文件,因为bin文件经过串口方便传输。
spi:将rs232接收来的引得FPGA烧录文件写入到指定的flash地址中并且覆盖相应之前的FPGA程序,这里注意写入的位置一定要与ICAP原语跳转的位置相同,否则该引导程序将没有作用。
ICAP:该模块主要起到FPGA从指定的flash地址启动程序的作用,里面包括ICAP原语,是引导程序中最关键的部分。
KEY:这里起到两个作用,一:给定FPGA在线升级的指令;二:等待spi将新的FPGA程序写入到flash中,再启动对用ICAP程序跳转到指定地方执行。
上述的整体过程,我们一般用状态机控制,会发现所有的程序我们之前的文章中都有,这里我不再写程序,只给出相应的策略。

整体框架

基于FPGA的在线升级_第2张图片
flash中的两块程序如上图,其中1是我们这篇文章中主要讲解的引导程序,2是FPGA执行程序的地方。

总结

该策略我并没有验证,但是从理论上是可行的,主要是因为上一篇文章的ICAP原语没有下板验证通过,自己也没有进行更深入的调试,但是该理论方案是彻底可行的。

参考文献

[1] V3学院

结束语

创作不易,认为文章有帮助的同学们可以收藏点赞支持。(工程也都在群中)对文章有什么看法或者需要更近一步交流的同学,可以加入下面的群:
在这里插入图片描述

你可能感兴趣的:(FPGA)