FPGA 配置两种模式:主动配置和被动配置方式,采用主动配置下,我们就需要一片 FLASH 来存储 FPGA 固件,那么我们在升级固件写 FLASH 的过程中如何避免因意外情况发生导致升级失败而使 FPGA 变砖呢?下面就由笔者带领大家来挖山掘石、一探究竟。
本文主要针对 Xilinx 的 Spartan-6 和 7-series FPGA。在设计 FPGA 的远程升级功能时,我们要实现以下两个指标:
1、FPGA 具有升级功能,即在正常工作状态下,FPGA 可以将新的固件数据烧写到 FLASH 里面并在下次重启的时候能够正常加载;
2、如果升级过程中出现意外情况,FLASH 里面原有的固件被破坏,那么 FPGA 能够从备份固件区启动配置,即 FLASH 里要有另外一份没有问题的固件备份,且 FPGA 可以自动跳转到这个固件区读取固件。
好了,功能需求明确,下面就该潜下心来进行框架流程设计、时序设计、代码编写以及仿真验证了。一番辛苦劳作之后,IP 设计好了,这个时候心里暗暗自喜:应该没问题,只待硬件测试啦。三下五除二,找了台机器测试了一遍,发现能够正常升级,这个时候心里那个是乐开了花啊,一次搞定,哈哈。
接下来就要进行激动人心的防砖测试了,于是你就邀请了周围的同事来一起见证奇迹,于是测试开始,于是在升级运行的过程中你自信的断了电,然后你对着周围的同事说:下面就是见证奇迹的时刻,于是你接通了电源,此时你笑的是那么春光灿烂。突然,你耳边传来一句轻轻的、温柔的耳语