EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA远程更新重启系统
p4 N: E% M3 F t: u! F3 A0 O
9 n* e/ Y- }0 t1 D+ W3 F# Z7 D8 P. @1)因为FPGA具有开发周期短,可更新等优点,现在有越来越多的通讯系统采用FPGA作为实际产品方案。已经有大量的FPGA应用到通讯系统中,为了降低系统维护的人力成本,需要能够实现FPGA远程版本更新。本文将以Xilinx Virtex6为例描述如何实现远程FPGA版本更新/重启。
1 f( R; i% @) n+ Y1 ^! Q l
* c7 W: u1 L& W( y6 O/ s. b2 Q M2)FPGA加载主要分为2大类,一类是主动模式(master)另一类是从模式(slave)。在主动模式时FPGA会外挂存储器存储FPGA bit映像,FPGA会主动提供时钟访问外部存储器。在从模式时,FPGA作为从设备被挂在控制器CPU上由处理器控制对FPGA编程。上述两种模式中,因为从模式FPGA由外部CPU控制编程,可以通过远程更新CPU文件就可以实现对FPGA的版本更新,非常方便。但是当CPU外挂的FPGA较多时会使系统加载时间过长,降低系统启动速度。这里将利用FPGA多重启(multi-boot)功能实现在主动模式下版本更新。
+ W7 C. S# Z7 M9 U8 [
$ J* @9 f% I1 x8 i0 X3)远程更新流程" d+ k0 u4 G8 g( |3 [& a6 W
0 Y _6 A! D2 o9 n! `# g; J! w当系统需要升级时,中心控制系统需要将新的FPGA比特映像文件直接发布到远程子系统,由远程子系统将比特文件更新到非易失存储器。然后由FPGA内部控制逻辑重新启动。比特映像文件更新后,下次上电启动将从新的比特映像文件。 , n$ U0 M9 b4 m$ Z
![]()
, D+ q& A! O! W图1. FPGA远程更新系统
! f+ I1 U3 x5 M: L/ Z# O
. r' h3 R/ |' k# ?8 K3 A J' A多重启动FPGA介绍% t1 _: }# F, C, q
4 |/ T. y6 w: d+ A, {2 O
a)多重启动介绍
* T( \1 [. R+ k0 d! f# v' ^2 v$ A/ V& t
VIRTEX6可以支持2套配置文件,第一个版本为安全版本存放在起始位置(spi起始地址为0),第二个版本为最终启动版本。当FPGA启动时,加载控制器会从地址0开始读取加载指令。当读到WBSTAR和IPROG指令时,控制器就跳转到WBSTAR指定的地址读取新的加载指令。在第二个配置文件中不再发IPROG指令,控制其将顺序执行以直到配置文件结束。配置顺序如图2.
' N9 s/ ~2 I' }( [* [2 b y![]()
/ e) ?3 c: q: W7 t. S F图2 对配置文件加载过程
2 Z8 E6 {+ x/ z/ ^ [b)多重启动模块
* g+ j2 J; M. S) g" n* v% N9 r1 v
i)配置存储器访问接口
$ X, G8 b0 v" H/ ^* \) t% ?& z) _! d7 [' v( r+ F0 _& f
在FPGA配置过程中,FPGA通过指定的配置管脚访问外部非易失存储器,当配置结束后,部分管脚被释放可以用作普通逻辑管脚,但部分FPGA配置管脚是配置专用,在用户应用中是不可见的,需要例化专用模块STARTUP_VIRTEX6才能允许用户逻辑访问这些专用管脚。
- a4 z9 f4 W! M. ?8 u
![]()
! C% z" Y3 K6 Y图3 VIRTEX6访问外部存储器逻辑框图 ![]()
ii)FPGA重启模块ICAP7 [/ U* w; R. C8 j
4 C) E9 m. G, C& {ICAP_VIRTEX6为用户逻辑提供FPGA加载功能,它的功能与普通上点加载用的SELECTMAP加载功能相同。接口信号见表表2:ICAP_VIRTEX6接口信号
: _7 ~/ x) S( Z
+ R8 y8 b: @& d6 z* G3 I![]()
+ v6 L& `2 c$ h B e
, Z. M p! n4 q通过ICAP_VIRTEX6,用户逻辑可以发指令让FPGA从指定的位置重新加载配置文件。加载指令的发送顺序为,
$ C3 K/ b4 p: ^7 V; `: u4 q$ n
7 X) `) h, C! I' Z. r; x1.发同步字
2 @ I# j2 c& A3 a2 ?7 K1 g5 Y$ h( N+ l, |5 ?3 G
2.将要加载文件的起始地址写道WBSTAR寄存器(WARM Boot Start Address Register)+ `: G3 ^! F* B% a
& F; t+ d; s$ u; q
3.发送IPROG指令4 c- x9 `" |) w) W/ f* e" v
, k- d4 l6 [' P+ q' O* N6 C7 ?
4.FPGA从WBSTAR寄存器指定地址开始读取配置数据。
) `( r2 S# Y C [0 ?! O, P% d) M* q4 R/ ~
下面是一个控制ICAP从地址80000重加载例子
! E7 Y* T3 K; R1 G% N
; L1 S: i8 {% Z ~![]()
, f1 z# q! v2 x e- A( t. S
4 L2 S1 h, y9 H# ~8 r6 q! h& B4)远程更新的可靠性. f- C- q# B2 [- i& h9 e
g9 I9 h. q- F$ {2 @4 Y4 {在远程更新过程中有多种原因可以造成远端的配置文件出错。比如数据传输错误,所以在跟新完成之后需要回读校验。为了减少传输负载可以采用CRC校验。但是如果在版本更新过程中出现掉电或系统重启,由于非易失存储器中的配置影像文件已经被破坏,远程终端将无法启动。为了避免这种情况的发生,远程终端需要有2套配置文件,当一套配置文件出错时,系统可以回退到备份配置文件启动。这样就可以保证当系统出错时,远程终端仍可以启动,接受控制中心发出的版本更新指令重新进行更新。0 L* r8 x @3 ^
' f: q9 f2 ~5 u# p! F$ z
内部发重启过程和状态
$ d' q$ [9 l k2 q# Z
% y0 ~3 ~, w( A& Z第1步:第一次FPGA被正确配置,状态如下
, t; f- S$ ^& P, q* o: @. V/ i3 J: ]( r! j# ^% t
![]()
& v* L8 E; y, R( {* k* w- F n
! U$ d0 L; j7 _
在FALLBACK时,配置文件中的IPROG命令不再起作用。 ![]() 8 r( J7 j: q' s# I! Y. R5 u. B3 e
9 T: s6 |. i/ U. q% F( T |