FPGA远程更新设计的需求分析
扫描二维码
随时随地手机看文章
FPGA可重配置带来了很高的灵活性,所以基于FPGA的设计/产品往往也会有后期更新/升级的需求。同时,需要更新/升级的FPGA板卡由于物理条件的限制,可能无法现场升级。比如:
1.FPGA板卡部署在异地机房中,无法随时进入机房进行升级(异地来回成本及机房不允许随便出入的限制)。
2.FPGA板卡部署在相对复杂的环境中,例如无线通信设备安放在通信塔台上,或者客户手中的设备无法由供应商一一回收升级。
3.FPGA升级对系统影响较大,不方便随时升级。比如PCIE设备受到系统总线的监测,随便的更新可能导致机器重启,在一些要求严格的环境中是不能允许的。
所以就有了对FPGA进行远程更新的需求,需要满足下面几个限制条件:
1.可以在满足一定条件下(类如可用网络进行远程访问),进行远程的升级(不一定需要全自动化,但全自动化更方便);
2.更新过程中不能对系统带来影响,以防止系统错误地实施保护措施(例如服务器重启);
远程更新,整体分为两部分:1)数据传输;2)更新镜像;
数据传输部分可以选择的方案非常多,比如可以通过网络将数据传递过去。通常会借用以有的通信接口来实现。如果FPGA板卡是部署在计算机中,那么先将数据通过网络传递给计算机,然后再由计算机转发给FPGA进行镜像更新,也是可以的。这其中数据传输主要由上位机来实现。所以对数据传输部分,并没有严格的要求。通常FPGA远程更新的设计重点,在如何更新镜像。
更新镜像这一概念,会有两个完全不一样的概念,需要先说清楚。
1.更新FPGA的配置
这种方案对应Xilinx的bit文件下载和Intel(Altera)的sof文件下载,更新的是FPGA的配置,立即生效。这种方案存在的问题是配置过程中,FPGA的原有配置会被清除掉。此时系统可能做出不正确的反应。例如使用FPGA实现的PCIE设备可能会由于重配置导致PCIE功能失效,部分服务器检测到PCIE设备异常会触发重启,带来影响。
2.更新存储FPGA配置镜像的Flash
这个方法更新的目标是存储FPGA配置的存储器(通常是Flash)。
更新Flash过程中,通过一些措施使FPGA原有设计继续工作不受影响,完成后并不立即生效,FPGA依然是旧镜像;更新Flash之后,在合适的时间触发FPGA的重新配置,配置过程中更新的镜像数据会送往FPGA进行加载;整个过程是相对可控的,所以对系统的影响较小。
所以,可以看到,远程更新方案的需求,总结为以下三点:
1.利用以有的数据通道传输数据
2.将更新数据写入存储FPGA配置信息的存储器中
3.更新Flash的过程中,不要影响FPGA的正常功能
其中第一点,由于可选方案非常多,需要根据系统的需求来决定,所以本文不做深入讨论。下面重点探讨后两点。
FPGA有多种配置/加载方式。粗略可以分为主动和被动两种。主动加载是指由FPGA控制配置流程,被动加载是指FPGA仅仅被动接收配置数据。
最常见的被动配置模式就是JTAG下载bit文件。此模式下,主动发起操作的设备是计算机,数据通路是JTAG,FPGA会被动接收数据,根据需要的操作来进行更新FPGA配置。而上位机如何获取配置数据就非常灵活了,可能是本地运行EDA工具生成的,也可以是网络/USB存储设备获取的。
主动配置就是FPGA在配置过程中处于主导地位,主动发起对Flash的读写,获取配置信息进行配置。
下面利用间EDA工具自带的烧录Flash的操作为例,分析一下具体的烧录过程。
在Vivado中可以使用bin文件和mcs文件烧录Flash,在Quartus中可以用jic文件更新Flash。通常情况下,完整的过程是:
1.上位机主动发起配置,FPGA被动接收数据进行重配置,此时的配置模式是上文提到的基于JTAG的被动配置。此操作的结果是将FPGA配置为一个Flash的读写器。
2.配置完成后,上位机开始发送/接收Flash的数据,数据通道为JTAG。FPGA通过JTAG接收到数据之后,根据需求发起对Flash的读写操作,将需要更新的数据写入Flash,完成更新。此过程是更新Flash的过程,烧录过程中Flash只收到FPGA的控制。
3.Flash更新完毕后,在合适的时候让FPGA进行重新配置(例如重新上下电),FPGA会开始主动配置过程,从Flash中读取配置数据完成加载。
这种烧写Flash的过程通常称为间接编程(间接烧录)。Xilinx可以在工具的Help文件中找到详细的描述。