|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
s6 V$ Y0 |( b" y' s
, R1 E9 y- t: S! ~! Z5 }
' W: ~5 U* E2 f从消费电子设备到工业控制设备,越来越多的系统都在使用FPGA。这些应用通常需要设备在断电时存储一些数据,比如校准信息、用户设置、辨认标签等。如果设备使用了微处理器,则还需要存储微处理器的代码。
( C. q! ?0 y' z; L
0 K5 p$ `1 V C0 V4 E8 n* D
9 G' C7 ?, |- k+ F对于那些对成本、器件数量以及电路板尺寸不敏感的系统,可采用标准的闪存来存储这些数据。但在许多情况下,成本、器件数量和电路板尺寸等方面的限制导致系统不得不采用双用器件。无论采用单片非易失存储器,还是采用引导用的SRAM器件,FPGA总是具有与它们相联系的非易失存储器。一个显然的问题是,这些非易失存储器是否能在系统关闭时存储数据。
2 T e4 P' N" \# b9 {( l& V$ g: w8 r' I2 o
在选择采用哪种方法之前,应考虑应用的要求。这些问题包括: 是否需要进行读/写操作,或者是否接受只读操作;存储的数据有多大;写周期的数量。最后,必须复查与读和写操作相关的特性、时序等。
4 k7 h: }3 ^( S1 `. @7 l0 O' v
, Z- A# d3 j: S" `1 b q1 [/ E6 Y5 e+ c$ _1.初始化块RAM
, u7 u; k* x+ ?, j
0 }# o% I1 _& Q6 b/ F# L8 c! u$ [大多数FPGA允许其内置的块RAM在引导器件时被初始化。这是一个很好的方法,它提供了较大容量的ROM,可用于存储查找表或程序代码。ROM支持高速随机读取操作,能很容易地对FPGA配置进行再次编程。如果设计需要小容量的ROM,这个方法也不可忽视。+ |) ^' X6 ^& [# p- P( p
d8 A! k7 O" Q$ ^- z! n- ~
2. SPI重使用
: Z" c" e! [- S b0 w4 D" |
3 i* K1 W+ |* V+ L T现在所有的SRAM FPGA都允许用SPI存储器来进行配置。因为SPI存储器的附加位很便宜,不会占用电路板的面积,使用SPI存储器的附加空间来存储数据是合理的。在FPGA用其进行配置之后(尽管是各式各样的,设计者使用这个方法前要进行确认),构建SPI接口只需少量逻辑。使用SPI存储器时,要小心避免写到FPGA配置空间中。通过接口逻辑的设计可将其封锁,或者使用在许多SPI Flash存储器中可找到的扇区锁定方法 。1 [0 ~- G2 C8 z: h) d# I a
& I8 ^7 G/ Z& P8 P在许多应用中SPI器件允许随机读。用FPGA的存储器块,通过高速缓冲存储当前区技术可实现较高的性能。由于写操作首先要求擦除这个区域,高速缓冲存储方法具有更大的灵活性。利用SPI存储器,擦除/编程周期在正常情况下超过100K。这个规范包括正常的运作期间要若干个上电和断电周期。然而,如果存储器写的次数超过这个数值,则可再次使用存储器高速缓冲方法,防止系统到达SPI的极限。
9 L5 }( `) ]9 j, |( c
/ y1 Z: }2 A3 Y" i4 W" z3.非易失FPGA TAG存储器* j/ S6 `: Y! j0 w1 T( t+ L7 N) R
- n# i! T; f2 r/ Z+ \
现在许多非易失FPGA集成了小的TAG存储器。例如,LatticeXP2提供 0.6~3.4kb的存储器用于此目的。这通常是存储设备设置和校准数据所要求的存储器容量。如图1(b)所示,可以通过JTAG接口或片内逻辑访问LatticeXP2 TAG存储器。在LatticeXP2 FPGA中,对这个存储器的读和写是定序的,支持的写周期超过1K。为简化存储器接口,并使存储器写周期次数最小,可再次利用高速缓冲存储数据技术的优点。TAG存储器与FPGA配置是分开的,因此在这些操作期间,不会写到FPGA的配置中。对集成小的、串行EEPROM而言,片上TAG存储器非常理想。. {# S1 t0 n5 L8 G
3 A. Q2 h& M0 C3 V: k# Q
. L( |, O: g# i. G" {3 v8 {
; F5 r% n4 M3 j: G2 q j6 Y, U9 B图1:(a) 用LatticeECP2 FPGA再次使用SPI配置;(b) LatticeXP2 TAG存储器。
4 @: `* ~- V7 u, [" x点击查看大图
' q* _. M1 l- S; e t- r3 J
9 {; _" ^ i! { D" f6 Y: s0 j9 y
3 h6 P8 Q, }: w4.闪存影子块RAM6 S* n& c) O% T/ A7 z0 p# f
8 F" L& J9 x7 h0 t O" j3 VLatticeXP2还提供使用闪存初始化位的功能。配置时,闪存初始化位初始化器件中的每个块RAM。这些存储器可以读和写,就像SRAM一样。当FPGA内必须存储配置数据时,则切换适当的信号使当前的RAM值转入闪存(图2)。这个方法能够对与非易失闪存组合在一起的RAM进行高速读和写 。在LatticeXP2器件中,这个操作支持数千个擦除和写周期。如同TAG存储器,与块RAM在一起的闪存在逻辑上是分开的,这样就能确保FPGA逻辑配置不会意外地被改写。
$ ^6 ]' P( r$ R% v) r
+ u9 F: K+ [6 t4 c4 C9 p
7 e1 X7 J1 I7 D% d. J) F ' C2 ^& W* B! f) N T8 d/ D
图2 :LatticeXP2闪存影子SRAM操作示意图。 7 A6 W; A; w+ k
以上四种方法,每一种方法有其应用优势。如果设计工程师希望采用中等容量的ROM来存储代码或者用作查找表,那么初始化块RAM的方法也许最佳。如果需要存储少量的数据,例如校准信息、当前设置信息或者系统辨别信息,那么TAG存储器方案更方便一些。对于需要再次写入的较大容量的存储器,重使用SPI存储器,或者闪存影子块RAM方法是有用的。当然,无论采用哪种方法,都可以降低电路板的面积和成本。4 P# e5 h% ?' f* m( U' B% d
" I* ]8 h& q6 U$ `! J: l- M) _4 S* h, }$ s1 C5 t
/ o, @6 }& `& j: a( a* c( J |
|