基于FPGA的存储解决方案——闪存
扫描二维码
随时随地手机看文章
闪存存储器是嵌入系统中经常使用的非易失性存储器。在基于FPGA的嵌入系统中,由于FPGA没有包括闪存,所以闪存始终是外置设备。由于闪存存储器能够在断电后保持数据内容,它经常用于存储微处理器启动代码及其它需要在无电情况下继续保持的数据。闪存存储器既适用于并行接口又适用于串行接口。并行闪存设备与串行闪存设备的基本存储技术是相同的。
不像SRAM,闪存不能通过简单的写入操作进行更新。对闪存设备的每一次写入操作都需要一个写指令,包含一组固定的读写操作序列。闪存在写入前需要先进行擦除。所有的闪存设备都被划分为一定数量的可擦模块,或扇区,二者的差异是可擦区域的大小,依据闪存厂商和设备大小而定。
优点
闪存存储器的主要的优点是非易失性。现代嵌入系统广泛使用闪存来存储启动代码和设置值,以及较大的数据模块如音频或视频流等。很多嵌入系统使用闪存作为硬盘驱动的低能耗、高稳定性的替代品。
相对与其它非易失性存储器,闪存由于下面四种原因更加常用:
健壮性
可擦性
可重复擦写
成本低
闪存存储器可以与共享其它闪存设备共享总线,甚至与其它种类的外部存储器,如外部SRAM或SDRAM。
缺点
闪存的主要缺点是它的写入速度。由于你只能通过专用的命令写入闪存设备,每次闪存写入都需要多个总线转换操作。更进一步说,一旦送出写入命令,实际的写入时间可能达到几微秒。依据时钟速度,实际写入时间可达几百个时钟周期。由于扇区擦除受到约束,如果你需要改变闪存中的一个字数据,你必须完成下面步骤:
1. 复制整个扇区的内容到暂时的缓冲区
2. 擦除整个扇区
3. 改变在缓冲区中的单个字数据
4. 缓冲区内容写回到闪存
这个流程导致闪存存储器设备的写入速度较慢。由于其糟糕的写入速度,闪存通常只用于存储必须断电后保持的数据。
最佳应用场合
闪存存储器适用于储存任何你希望在断电后保持的数据。常见的闪存应用与存储下面项目:
微处理器的启动代码
微处理器在系统开始时复制到RAM中的应用程序代码
恒定的系统设置,例如:网卡MAC地址、校准数据、用户信息
FPGA参数图像
多媒体(音频、视频)
不适于应用场合
由于闪存存储器是写入速度较慢,不应使用闪存存储不需要断电后保持的数据。如果可以使用易失性存储器时可以选用SRAM。使用闪存存储器的系统通常也会同时使用SRAM。
一个很不适于闪存的应用场合是在微处理器的应用程序代码的直接执行。如果这些代码的可写部分被部署在闪存中,这些软件根本不会工作,因为闪存不使用专用的写入命令便不能够写入。将应用程序代码储存在闪存中的系统通常会在执行之前先将这些应用程序复制到SRAM中。
闪存的种类
闪存设备有多种,最常用的种类如下:
CFI闪存 – 这是最常用的闪存存储器种类。它使用并行接口。CFI代表常见闪存接口,这是所有CFI闪存设备都固有的一种标准。SOPC Builder和Nios II processor都有对CFI闪存的内置支持。
串行闪存 – 这种闪存使用串行接口以节省Pin脚和板上空间。由于很多串行闪存设备都有自己专用的接口协议,最好是先通读串行闪存设备的数据表然后进行选择。Altera ECOS配置设备便是一种串行闪存。
NAND闪存 – NAND闪存是最近才兴起的一种新型的闪存存储器。NAND闪存可以达到很高的数据容量,单个设备可高达数GB。相对于CFI闪存,NAND闪存的接口稍有变复杂。它需要一个专用的控制器或是智能的低级驱动软件。你可以在Altera FPGA中使用NAND闪存,但是Altera不会提供任何内置的支持。