EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA远程更新重启系统1 O5 d# h) E/ K( A3 ~
2 Q! {6 [0 i: N* n1)因为FPGA具有开发周期短,可更新等优点,现在有越来越多的通讯系统采用FPGA作为实际产品方案。已经有大量的FPGA应用到通讯系统中,为了降低系统维护的人力成本,需要能够实现FPGA远程版本更新。本文将以Xilinx Virtex6为例描述如何实现远程FPGA版本更新/重启。
9 q( u. v4 }$ e" E1 y$ E
6 g( X; a% ~* e% u# K+ B2)FPGA加载主要分为2大类,一类是主动模式(master)另一类是从模式(slave)。在主动模式时FPGA会外挂存储器存储FPGA bit映像,FPGA会主动提供时钟访问外部存储器。在从模式时,FPGA作为从设备被挂在控制器CPU上由处理器控制对FPGA编程。上述两种模式中,因为从模式FPGA由外部CPU控制编程,可以通过远程更新CPU文件就可以实现对FPGA的版本更新,非常方便。但是当CPU外挂的FPGA较多时会使系统加载时间过长,降低系统启动速度。这里将利用FPGA多重启(multi-boot)功能实现在主动模式下版本更新。
3 W" N' e6 d+ G; T5 i9 H
/ w* u; c1 s1 @% P. x3)远程更新流程: t( i5 ?: B0 @3 S7 N( B+ U* H
# H+ E: ]4 |: z* f7 e
当系统需要升级时,中心控制系统需要将新的FPGA比特映像文件直接发布到远程子系统,由远程子系统将比特文件更新到非易失存储器。然后由FPGA内部控制逻辑重新启动。比特映像文件更新后,下次上电启动将从新的比特映像文件。 # ]" P" D+ V! i# x9 Z5 f
% W, J( I& ?4 |8 \& \, `% v% c1 f9 x
图1. FPGA远程更新系统
& `$ Z* B! V" b+ R6 b( k ' T( ]& b% H4 t% s) p" @: X
多重启动FPGA介绍
7 e! L2 h: L& f& x0 @* v1 |+ h
( q; o k$ }1 l6 b9 r1 ta)多重启动介绍
0 l9 q w# D* K) E L3 x' t* A: ^9 z/ w* A R: c) U* ]# g. x
VIRTEX6可以支持2套配置文件,第一个版本为安全版本存放在起始位置(spi起始地址为0),第二个版本为最终启动版本。当FPGA启动时,加载控制器会从地址0开始读取加载指令。当读到WBSTAR和IPROG指令时,控制器就跳转到WBSTAR指定的地址读取新的加载指令。在第二个配置文件中不再发IPROG指令,控制其将顺序执行以直到配置文件结束。配置顺序如图2. ) W0 [9 _( P5 l
![]()
. w6 V' r8 K; |% a; Y `- n9 K$ P图2 对配置文件加载过程 ! |) I/ P' j3 ]+ G/ L
b)多重启动模块
; Y6 L/ j8 K! T7 L1 L X) X6 n1 `4 X5 }# X7 p0 g2 @7 e
i)配置存储器访问接口
2 s3 _1 R& \& D; m y, l' _" v0 W8 Y4 P: x
在FPGA配置过程中,FPGA通过指定的配置管脚访问外部非易失存储器,当配置结束后,部分管脚被释放可以用作普通逻辑管脚,但部分FPGA配置管脚是配置专用,在用户应用中是不可见的,需要例化专用模块STARTUP_VIRTEX6才能允许用户逻辑访问这些专用管脚。 $ B7 |0 P. u6 D4 \% W2 p
* F7 D) ^2 X; y# q! Z
图3 VIRTEX6访问外部存储器逻辑框图 ![]()
ii)FPGA重启模块ICAP
: e, G1 s" N8 c# I! L4 U# ?: P
( S) j' s0 S6 `1 r4 PICAP_VIRTEX6为用户逻辑提供FPGA加载功能,它的功能与普通上点加载用的SELECTMAP加载功能相同。接口信号见表表2:ICAP_VIRTEX6接口信号
& G8 o' ~" w; W. g0 F: q& [
2 E; T' B7 J+ Q" W![]()
4 L; {& W6 F/ W" i% C$ a
( R. P; k3 k8 X" }) }通过ICAP_VIRTEX6,用户逻辑可以发指令让FPGA从指定的位置重新加载配置文件。加载指令的发送顺序为,
) c8 K2 N! R5 w0 ?, {3 f! M2 V$ b; b+ V2 }: h
1.发同步字# @; X' ~- j ]1 U/ t/ c) ~
" I% @+ P! A# a
2.将要加载文件的起始地址写道WBSTAR寄存器(WARM Boot Start Address Register)( x( z. ^+ B7 o$ o, k
& v, v. y6 c, R+ l* A; H0 D" L
3.发送IPROG指令
- S9 b7 Y3 M# a1 C( ?! M4 j" e1 R# T8 R' d. Q* P) U4 A
4.FPGA从WBSTAR寄存器指定地址开始读取配置数据。
( j/ W3 z, x! U7 A3 N( T) X. `
6 s) a/ f. K% w9 D0 g下面是一个控制ICAP从地址80000重加载例子
& x7 Y5 E+ h0 c5 ~# m% r. I
0 z4 K) d( K2 k" H+ a" ^![]()
" I) p% O, n% f; y
7 b: J# E a$ l- e4)远程更新的可靠性
! g, b0 h; N) n8 j/ k3 E9 |: s( M8 Y0 r
' j" y, ?% b9 a6 U/ Z在远程更新过程中有多种原因可以造成远端的配置文件出错。比如数据传输错误,所以在跟新完成之后需要回读校验。为了减少传输负载可以采用CRC校验。但是如果在版本更新过程中出现掉电或系统重启,由于非易失存储器中的配置影像文件已经被破坏,远程终端将无法启动。为了避免这种情况的发生,远程终端需要有2套配置文件,当一套配置文件出错时,系统可以回退到备份配置文件启动。这样就可以保证当系统出错时,远程终端仍可以启动,接受控制中心发出的版本更新指令重新进行更新。
$ W# W3 N7 r! Y/ D, d& t
2 T+ S4 F$ ?% [内部发重启过程和状态
3 a$ J) j3 K; ~0 B% Q8 [7 o7 l9 C- ~" e N& p5 h1 ~
第1步:第一次FPGA被正确配置,状态如下
, d7 r" E% ?6 `+ l- b5 S$ t; A& P: b" e; v4 O e
![]()
3 }# Y% c# J8 v" ]: }
! v9 j7 J: E* Y) V在FALLBACK时,配置文件中的IPROG命令不再起作用。 ![]()
$ N0 H" r" ]. n
' c- Z- y5 w, R- p* x }/ s |