1232796-20181030091411831-401614078.jpg
       通常情况下,如果条件允许,使用一个MCU作为远程更新的主控设备,会让方案简单不少。而且可以利用软件做更多的操作(例如数据的校验)。通常这么选择的原因是系统中已经存在一个主控的MCU,就同时承担远程更新的任务。
      如果FPGA板卡使用的是主动配置模式,由于Flash的读写只能通过FPGA来实现,同时JTAG直接更新FPGA镜像可能无法满足要求(比如不能每次上下电都需要用JTAG配置一次),那么设计一个主动模式的远程更新方案就很重要的。此时,即便系统中有MCU或者上位机,但是由于Flash只能被FPGA控制,所以MCU/上位机更多的是作为数据通信来发送FPGA配置数据,而更新Flash的步骤依然需要FPGA来实现。
      可以看到,如果将更新控制交给MCU,则FPGA单独工作量下降了不少。配置过程中对FPGA的要求也不多,可以说大部分工作是外部设备(MCU)完成,FPGA工作量不多。所以讨论的重点在于难度更大、FPGA工作量更多的主动更新方案。以此为基础,目前的设计需求已经变为:
1、利用以有的数据通道传输数据给FPGA;
2、通过FPGA将更新数据写入Flash中;
3、更新Flash的过程中,不要影响FPGA的正常功能;
4、利用以有的数据通道传输数据给FPGA;
      由于数据传输的可选方法非常多,而且任何一个方案都是一个非常大的话题,这里就不详细描述了。推荐的做法是做握手控制,将数据逐一写入Flash即可。设计要点在于数据传输和Flash读写的交互握手和跨时钟域。
      通常数据传输的速率高于Flash读写速率,所以使用缓存,一方面存储空间容易溢出,另一方面更新操作的使用频率并不高,为了一个低频度的应用留一个大容量的存储空间并不划算。所以使用交互握手来处理,相对较慢的更新速度对低频度的Flash更新操作影响并不大,但带来的问题就是交互过程中需要考虑跨时钟。
1、通过FPGA将更新数据写入Flash中;
2、更新Flash的过程中,不要影响FPGA的正常功能;
     这两点需求都是要求FPGA实现的,具体方案就是FPGA收到数据后开始对Flash的读写操作,将数据正确写入到Flash中去。
     通过完整的分析,应该对远程更新需要做的事情有个大略的了解。出去数据通路会随着系统的不同而变化,FPGA端的读写控制是必然的需求。